diff --git a/NoclipCamera.gd b/NoclipCamera.gd new file mode 100644 index 0000000..2950e3d --- /dev/null +++ b/NoclipCamera.gd @@ -0,0 +1,128 @@ +extends RigidBody3D +var rot_x = 0 +var rot_y = 0 + +@onready var world = $"../World/" + +@export var PLAYER_SPEED = 20 +@export var PLAYER_REACH = 1000 +@export_range(0.00001, 0.01) var LOOK_SENSITIVITY = 0.002 +var move_x = 0 +var move_y = 0 +var move_z = 0 +var camera: Camera3D +var ray_hit_positions = [] +# Declare member variables here. Examples: +# var a = 2 +# var b = "text" + + +# Called when the node enters the scene tree for the first time. +func _ready(): + Input.mouse_mode = Input.MOUSE_MODE_CAPTURED + camera = find_child("PlayerCamera") + pass # Replace with function body. + + +func _input(event): + if Input.is_action_just_pressed("LeftClick"): + raycast_from_center() + + if Input.is_action_just_pressed("RightClick"): + pass + + if event is InputEventKey and event.is_action_released("ShowCursor"): + if Input.mouse_mode == Input.MOUSE_MODE_VISIBLE: + Input.mouse_mode = Input.MOUSE_MODE_CAPTURED + else: + Input.mouse_mode = Input.MOUSE_MODE_VISIBLE + + if event is InputEventMouseMotion and (Input.mouse_mode == Input.MOUSE_MODE_CAPTURED or event.button_mask & 1): + # modify accumulated mouse rotation + rot_x += event.relative.x * LOOK_SENSITIVITY + rot_y += event.relative.y * LOOK_SENSITIVITY + camera.transform.basis = Basis() # reset rotation + rot_x = fmod(rot_x, (PI * 2)) + rot_y = fmod(rot_y, (PI * 2)) + camera.rotate_object_local(Vector3(0, -1, 0), rot_x) # first rotate in Y + camera.rotate_object_local(Vector3(-1, 0, 0), rot_y) # then rotate in X +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(_delta): + #process_noclip() + process_physics_movements() + + #for hit_pos in ray_hit_positions: + #DebugDraw3D.draw_sphere(hit_pos) + + + +func process_physics_movements(): + if Input.is_action_pressed("MoveCamUp"): + move_y = 1 + if Input.is_action_pressed("MoveCamDown"): + pass + if Input.is_action_pressed("MoveCamLeft"): + move_x = -1 + if Input.is_action_pressed("MoveCamRight"): + move_x = 1 + if Input.is_action_pressed("MoveCamForward"): + move_z = 1 + if Input.is_action_pressed("MoveCamBack"): + move_z = -1 + + constant_force.y = move_y * PLAYER_SPEED + constant_force.x = (sin(rot_x) * move_z * PLAYER_SPEED + cos(rot_x) * move_x * PLAYER_SPEED) + constant_force.z = (-cos(rot_x) * move_z * PLAYER_SPEED + sin(rot_x) * move_x * PLAYER_SPEED) + + if constant_force.x != 0 || constant_force.y != 0 || constant_force.z != 0: + physics_material_override.friction = 0 + else: + physics_material_override.friction = 1 + + move_y = 0 + move_x = 0 + move_z = 0 + + +func raycast_from_center(): + var center = get_viewport().size / 2 + var ray_length = PLAYER_REACH + var ray_origin = camera.project_ray_origin(center) + var ray_direction = ray_origin + camera.project_ray_normal(center) * ray_length + var space = get_world_3d().direct_space_state + var ray_query = PhysicsRayQueryParameters3D.new() + ray_query.from = ray_origin + ray_query.to = ray_direction + ray_query.exclude = [self] + var raycast_result = space.intersect_ray(ray_query) + + if len(raycast_result) > 0: + var hit_pos = raycast_result.position - (raycast_result.normal * 0.5) + hit_pos = Vector3i(round(hit_pos.x), round(hit_pos.y), round(hit_pos.z)) + ray_hit_positions.append(hit_pos) + world.SetBlockAtPosition(hit_pos, Block.BlockType.Air) + + + + +func process_noclip(): + if Input.is_action_pressed("MoveCamUp"): + move_y = 1 + if Input.is_action_pressed("MoveCamDown"): + move_y = -1 + if Input.is_action_pressed("MoveCamLeft"): + move_x = -1 + if Input.is_action_pressed("MoveCamRight"): + move_x = 1 + if Input.is_action_pressed("MoveCamForward"): + move_z = 1 + if Input.is_action_pressed("MoveCamBack"): + move_z = -1 + + position.y += move_y * PLAYER_SPEED + position.x += (sin(rot_x) * move_z * PLAYER_SPEED + cos(rot_x) * move_x * PLAYER_SPEED) + position.z += (-cos(rot_x) * move_z * PLAYER_SPEED + sin(rot_x) * move_x * PLAYER_SPEED) + + move_y = 0 + move_x = 0 + move_z = 0 diff --git a/NoclipCamera.gd.uid b/NoclipCamera.gd.uid new file mode 100644 index 0000000..0c81538 --- /dev/null +++ b/NoclipCamera.gd.uid @@ -0,0 +1 @@ +uid://c1jlypyykqvfl diff --git a/Rolling Hills Height Map 1k/Readme_HeightMaps.pdf b/Rolling Hills Height Map 1k/Readme_HeightMaps.pdf new file mode 100644 index 0000000..f186247 Binary files /dev/null and b/Rolling Hills Height Map 1k/Readme_HeightMaps.pdf differ diff --git a/Rolling Hills Height Map 1k/Rolling Hills Bitmap 1025.png b/Rolling Hills Height Map 1k/Rolling Hills Bitmap 1025.png new file mode 100644 index 0000000..b2def88 Binary files /dev/null and b/Rolling Hills Height Map 1k/Rolling Hills Bitmap 1025.png differ diff --git a/Rolling Hills Height Map 1k/Rolling Hills Bitmap 1025.png.import b/Rolling Hills Height Map 1k/Rolling Hills Bitmap 1025.png.import new file mode 100644 index 0000000..08ef708 --- /dev/null +++ b/Rolling Hills Height Map 1k/Rolling Hills Bitmap 1025.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cbnsqrbfbvn7s" +path="res://.godot/imported/Rolling Hills Bitmap 1025.png-fbd24bb58e9880bbd4fcfc6db41b5a31.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Rolling Hills Height Map 1k/Rolling Hills Bitmap 1025.png" +dest_files=["res://.godot/imported/Rolling Hills Bitmap 1025.png-fbd24bb58e9880bbd4fcfc6db41b5a31.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Rolling Hills Height Map 1k/Rolling Hills Height Map Featured Image.png b/Rolling Hills Height Map 1k/Rolling Hills Height Map Featured Image.png new file mode 100644 index 0000000..43a8599 Binary files /dev/null and b/Rolling Hills Height Map 1k/Rolling Hills Height Map Featured Image.png differ diff --git a/Rolling Hills Height Map 1k/Rolling Hills Height Map Featured Image.png.import b/Rolling Hills Height Map 1k/Rolling Hills Height Map Featured Image.png.import new file mode 100644 index 0000000..0c3f29f --- /dev/null +++ b/Rolling Hills Height Map 1k/Rolling Hills Height Map Featured Image.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bxq3kokp7fk30" +path="res://.godot/imported/Rolling Hills Height Map Featured Image.png-b0c08ba299fb8726a84585c137de83f7.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Rolling Hills Height Map 1k/Rolling Hills Height Map Featured Image.png" +dest_files=["res://.godot/imported/Rolling Hills Height Map Featured Image.png-b0c08ba299fb8726a84585c137de83f7.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Rolling Hills Height Map 1k/Rolling Hills Height Map.png b/Rolling Hills Height Map 1k/Rolling Hills Height Map.png new file mode 100644 index 0000000..df4241e Binary files /dev/null and b/Rolling Hills Height Map 1k/Rolling Hills Height Map.png differ diff --git a/Rolling Hills Height Map 1k/Rolling Hills Height Map.png.import b/Rolling Hills Height Map 1k/Rolling Hills Height Map.png.import new file mode 100644 index 0000000..87971eb --- /dev/null +++ b/Rolling Hills Height Map 1k/Rolling Hills Height Map.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cl7vgj5ib21su" +path="res://.godot/imported/Rolling Hills Height Map.png-31e5e653a83de26e8aded4cb3ba3d290.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Rolling Hills Height Map 1k/Rolling Hills Height Map.png" +dest_files=["res://.godot/imported/Rolling Hills Height Map.png-31e5e653a83de26e8aded4cb3ba3d290.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/debug_draw_3d/LICENSE b/addons/debug_draw_3d/LICENSE new file mode 100644 index 0000000..617a15b --- /dev/null +++ b/addons/debug_draw_3d/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 DmitriySalnikov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, andor sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/addons/debug_draw_3d/README.md b/addons/debug_draw_3d/README.md new file mode 100644 index 0000000..3cd3961 --- /dev/null +++ b/addons/debug_draw_3d/README.md @@ -0,0 +1,157 @@ +![icon](/images/icon_3d_128.png) + +# Debug drawing utility for Godot + +This is an add-on for debug drawing in 3D and for some 2D overlays, which is written in `C++` and can be used with `GDScript` or `C#`. + +Based on my previous addon, which was developed [only for C#](https://github.com/DmitriySalnikov/godot_debug_draw_cs), and which was inspired by [Zylann's GDScript addon](https://github.com/Zylann/godot_debug_draw) + +## [Documentation](https://dd3d.dmitriysalnikov.ru/docs/) + +## [Godot 3 version](https://github.com/DmitriySalnikov/godot_debug_draw_3d/tree/godot_3) + +## Support me + +Your support adds motivation to develop my public projects. + +Boosty + +USDT-TRC20 + +USDT-TRC20 TEw934PrsffHsAn5M63SoHYRuZo984EF6v + +## Features + +3D: + +* Arrow +* Billboard opaque square +* Box +* Camera Frustum +* Cylinder +* Gizmo +* Grid +* Line +* Line Path +* Line with Arrow +* Plane +* Points +* Position 3D (3 crossing axes) +* Sphere +* 3D Text + +2D: + +* **[Work in progress]** + +Overlay: + +* Text (with grouping and coloring) + +Precompiled for: + +* Windows +* Linux (built on Ubuntu 22.04) +* macOS (10.15+) +* Android (5.0+) +* iOS +* Web (Firefox is supported by Godot 4.3+) + +This addon supports working with several World3D and different Viewports. +There is also a no depth test mode and other settings that can be changed for each instance. + +This library supports double-precision builds, for more information, [see the documentation](https://dd3d.dmitriysalnikov.ru/docs/?page=md_docs_2DoublePrecision.html). + +## [Interactive Web Demo](https://dd3d.dmitriysalnikov.ru/demo/) + +[![screenshot_web](/images/screenshot_web.png)](https://dd3d.dmitriysalnikov.ru/demo/) + +## Download + +To download, use the [Godot Asset Library](https://godotengine.org/asset-library/asset/1766) or use one of the stable versions from the [GitHub Releases](https://github.com/DmitriySalnikov/godot_debug_draw_3d/releases) page. + +For versions prior to `1.4.5`, just download one of the `source codes` in the assets. For newer versions, download `debug-draw-3d_[version].zip`. + +### Installation + +* Close editor +* Copy `addons/debug_draw_3d` to your `addons` folder, create it if the folder doesn't exist +* Launch editor + +## Examples + +More examples can be found in the `examples_dd3d/` folder. + +Simple test: + +```gdscript +func _process(delta: float) -> void: + var _time = Time.get_ticks_msec() / 1000.0 + var box_pos = Vector3(0, sin(_time * 4), 0) + var line_begin = Vector3(-1, sin(_time * 4), 0) + var line_end = Vector3(1, cos(_time * 4), 0) + + DebugDraw3D.draw_box(box_pos, Quaternion.IDENTITY, Vector3(1, 2, 1), Color(0, 1, 0)) + DebugDraw3D.draw_line(line_begin, line_end, Color(1, 1, 0)) + DebugDraw2D.set_text("Time", _time) + DebugDraw2D.set_text("Frames drawn", Engine.get_frames_drawn()) + DebugDraw2D.set_text("FPS", Engine.get_frames_per_second()) + DebugDraw2D.set_text("delta", delta) +``` + +![screenshot_1](/images/screenshot_1.png) + +An example of using scoped configs: + +```gdscript +@tool +extends Node3D + +func _ready(): + # Set the base scoped_config. + # Each frame will be reset to these scoped values. + DebugDraw3D.scoped_config().set_thickness(0.1).set_center_brightness(0.6) + +func _process(delta): + # Draw using the base scoped config. + DebugDraw3D.draw_box(Vector3.ZERO, Quaternion.IDENTITY, Vector3.ONE * 2, Color.CORNFLOWER_BLUE) + if true: + # Create a scoped config that will exist until exiting this if. + var _s = DebugDraw3D.new_scoped_config().set_thickness(0).set_center_brightness(0.1) + # Draw with a thickness of 0 + DebugDraw3D.draw_box(Vector3.ZERO, Quaternion.IDENTITY, Vector3.ONE, Color.RED) + # If necessary, the values inside this scope can be changed + # even before each call to draw_*. + _s.set_thickness(0.05) + DebugDraw3D.draw_box(Vector3(1,0,1), Quaternion.IDENTITY, Vector3.ONE * 1, Color.BLUE_VIOLET) +``` + +![screenshot_5](/images/screenshot_5.png) + +> [!TIP] +> +> If you want to use a non-standard Viewport for rendering a 3d scene, then do not forget to specify it in the scoped config! + +## API + +This project has a separate [documentation](https://dd3d.dmitriysalnikov.ru/docs/) page. + +Also, a list of all functions is available in the documentation inside the editor (see `DebugDraw3D` and `DebugDraw2D`). + +![screenshot_4](/images/screenshot_4.png) + +## Known issues and limitations + +The text in the keys and values of a text group cannot contain multi-line strings. + +The entire text overlay can only be placed in one corner. + +[Frustum of Camera3D does not take into account the window size from ProjectSettings](https://github.com/godotengine/godot/issues/70362). + +## More screenshots + +`DebugDrawDemoScene.tscn` in editor +![screenshot_2](/images/screenshot_2.png) + +`DebugDrawDemoScene.tscn` in play mode +![screenshot_3](/images/screenshot_3.png) diff --git a/addons/debug_draw_3d/debug_draw_3d.gdextension b/addons/debug_draw_3d/debug_draw_3d.gdextension new file mode 100644 index 0000000..cead527 --- /dev/null +++ b/addons/debug_draw_3d/debug_draw_3d.gdextension @@ -0,0 +1,153 @@ +[configuration] + +entry_symbol = "debug_draw_3d_library_init" +compatibility_minimum = "4.2.2" +reloadable = false + +[dependencies] + +; example.x86_64 = { "relative or absolute path to the dependency" : "the path relative to the exported project", } +; ------------------------------------- +; debug + +macos = { } +windows.x86_64 = { } +linux.x86_64 = { } + +; by default godot is using threads +web.wasm32.nothreads = {} +web.wasm32 = {} + +android.arm32 = { } +android.arm64 = { } +android.x86_32 = { } +android.x86_64 = { } + +ios = {} + +; ------------------------------------- +; release no debug draw + +macos.template_release = { } +windows.template_release.x86_64 = { } +linux.template_release.x86_64 = { } + +web.template_release.wasm32.nothreads = { } +web.template_release.wasm32 = { } + +android.template_release.arm32 = { } +android.template_release.arm64 = { } +android.template_release.x86_32 = { } +android.template_release.x86_64 = { } + +ios.template_release = {} + +; ------------------------------------- +; release forced debug draw + +macos.template_release.forced_dd3d = { } +windows.template_release.x86_64.forced_dd3d = { } +linux.template_release.x86_64.forced_dd3d = { } + +web.template_release.wasm32.nothreads.forced_dd3d = { } +web.template_release.wasm32.forced_dd3d = { } + +ios.template_release.forced_dd3d = {} + +[libraries] + +; ------------------------------------- +; debug + +macos = "libs/libdd3d.macos.editor.universal.framework" +windows.x86_64 = "libs/libdd3d.windows.editor.x86_64.dll" +linux.x86_64 = "libs/libdd3d.linux.editor.x86_64.so" + +web.wasm32.nothreads = "libs/libdd3d.web.template_debug.wasm32.wasm" +web.wasm32 = "libs/libdd3d.web.template_debug.wasm32.threads.wasm" + +android.arm32 = "libs/libdd3d.android.template_debug.arm32.so" +android.arm64 = "libs/libdd3d.android.template_debug.arm64.so" +android.x86_32 = "libs/libdd3d.android.template_debug.x86_32.so" +android.x86_64 = "libs/libdd3d.android.template_debug.x86_64.so" + +ios = "libs/libdd3d.ios.template_debug.universal.dylib" + +; ------------------------------------- +; release no debug draw + +macos.template_release = "libs/libdd3d.macos.template_release.universal.framework" +windows.template_release.x86_64 = "libs/libdd3d.windows.template_release.x86_64.dll" +linux.template_release.x86_64 = "libs/libdd3d.linux.template_release.x86_64.so" + +web.template_release.wasm32.nothreads = "libs/libdd3d.web.template_release.wasm32.wasm" +web.template_release.wasm32 = "libs/libdd3d.web.template_release.wasm32.threads.wasm" + +android.template_release.arm32 = "libs/libdd3d.android.template_release.arm32.so" +android.template_release.arm64 = "libs/libdd3d.android.template_release.arm64.so" +android.template_release.x86_32 = "libs/libdd3d.android.template_release.x86_32.so" +android.template_release.x86_64 = "libs/libdd3d.android.template_release.x86_64.so" + +ios.template_release = "libs/libdd3d.ios.template_release.universal.dylib" + +; ------------------------------------- +; release forced debug draw + +macos.template_release.forced_dd3d = "libs/libdd3d.macos.template_release.universal.enabled.framework" +windows.template_release.x86_64.forced_dd3d = "libs/libdd3d.windows.template_release.x86_64.enabled.dll" +linux.template_release.x86_64.forced_dd3d = "libs/libdd3d.linux.template_release.x86_64.enabled.so" + +web.template_release.wasm32.nothreads.forced_dd3d = "libs/libdd3d.web.template_release.wasm32.enabled.wasm" +web.template_release.wasm32.forced_dd3d = "libs/libdd3d.web.template_release.wasm32.threads.enabled.wasm" + +ios.template_release.forced_dd3d = "libs/libdd3d.ios.template_release.universal.enabled.dylib" + +; ------------------------------------- +; DOUBLE PRECISION +; ------------------------------------- + +; ------------------------------------- +; debug + +macos.double = "libs/libdd3d.macos.editor.universal.double.framework" +windows.x86_64.double = "libs/libdd3d.windows.editor.x86_64.double.dll" +linux.x86_64.double = "libs/libdd3d.linux.editor.x86_64.double.so" + +web.wasm32.nothreads.double = "libs/libdd3d.web.template_debug.wasm32.double.wasm" +web.wasm32.double = "libs/libdd3d.web.template_debug.wasm32.threads.double.wasm" + +android.arm32.double = "libs/libdd3d.android.template_debug.arm32.double.so" +android.arm64.double = "libs/libdd3d.android.template_debug.arm64.double.so" +android.x86_32.double = "libs/libdd3d.android.template_debug.x86_32.double.so" +android.x86_64.double = "libs/libdd3d.android.template_debug.x86_64.double.so" + +ios.double = "libs/libdd3d.ios.template_debug.universal.dylib" + +; ------------------------------------- +; release no debug draw + +macos.template_release.double = "libs/libdd3d.macos.template_release.universal.double.framework" +windows.template_release.x86_64.double = "libs/libdd3d.windows.template_release.x86_64.double.dll" +linux.template_release.x86_64.double = "libs/libdd3d.linux.template_release.x86_64.double.so" + +web.template_release.wasm32.nothreads.double = "libs/libdd3d.web.template_release.wasm32.double.wasm" +web.template_release.wasm32.double = "libs/libdd3d.web.template_release.wasm32.threads.double.wasm" + +android.template_release.arm32.double = "libs/libdd3d.android.template_release.arm32.double.so" +android.template_release.arm64.double = "libs/libdd3d.android.template_release.arm64.double.so" +android.template_release.x86_32.double = "libs/libdd3d.android.template_release.x86_32.double.so" +android.template_release.x86_64.double = "libs/libdd3d.android.template_release.x86_64.double.so" + +ios.template_release.double = "libs/libdd3d.ios.template_release.universal.double.dylib" + +; ------------------------------------- +; release forced debug draw + +macos.template_release.forced_dd3d.double = "libs/libdd3d.macos.template_release.universal.enabled.double.framework" +windows.template_release.x86_64.forced_dd3d.double = "libs/libdd3d.windows.template_release.x86_64.enabled.double.dll" +linux.template_release.x86_64.forced_dd3d.double = "libs/libdd3d.linux.template_release.x86_64.enabled.double.so" + +web.template_release.wasm32.nothreads.forced_dd3d.double = "libs/libdd3d.web.template_release.wasm32.enabled.double.wasm" +web.template_release.wasm32.forced_dd3d.double = "libs/libdd3d.web.template_release.wasm32.threads.enabled.double.wasm" + +ios.template_release.forced_dd3d.double = "libs/libdd3d.ios.template_release.universal.enabled.double.dylib" diff --git a/addons/debug_draw_3d/debug_draw_3d.gdextension.uid b/addons/debug_draw_3d/debug_draw_3d.gdextension.uid new file mode 100644 index 0000000..15da0d3 --- /dev/null +++ b/addons/debug_draw_3d/debug_draw_3d.gdextension.uid @@ -0,0 +1 @@ +uid://svqaxfp5kyrl diff --git a/addons/debug_draw_3d/libs/.gdignore b/addons/debug_draw_3d/libs/.gdignore new file mode 100644 index 0000000..e69de29 diff --git a/addons/debug_draw_3d/libs/libdd3d.android.template_debug.arm32.so b/addons/debug_draw_3d/libs/libdd3d.android.template_debug.arm32.so new file mode 100644 index 0000000..736dbf6 Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.android.template_debug.arm32.so differ diff --git a/addons/debug_draw_3d/libs/libdd3d.android.template_debug.arm64.so b/addons/debug_draw_3d/libs/libdd3d.android.template_debug.arm64.so new file mode 100644 index 0000000..988a651 Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.android.template_debug.arm64.so differ diff --git a/addons/debug_draw_3d/libs/libdd3d.android.template_debug.x86_32.so b/addons/debug_draw_3d/libs/libdd3d.android.template_debug.x86_32.so new file mode 100644 index 0000000..1649efd Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.android.template_debug.x86_32.so differ diff --git a/addons/debug_draw_3d/libs/libdd3d.android.template_debug.x86_64.so b/addons/debug_draw_3d/libs/libdd3d.android.template_debug.x86_64.so new file mode 100644 index 0000000..67f74fe Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.android.template_debug.x86_64.so differ diff --git a/addons/debug_draw_3d/libs/libdd3d.android.template_release.arm32.so b/addons/debug_draw_3d/libs/libdd3d.android.template_release.arm32.so new file mode 100644 index 0000000..63cce77 Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.android.template_release.arm32.so differ diff --git a/addons/debug_draw_3d/libs/libdd3d.android.template_release.arm64.so b/addons/debug_draw_3d/libs/libdd3d.android.template_release.arm64.so new file mode 100644 index 0000000..5f40036 Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.android.template_release.arm64.so differ diff --git a/addons/debug_draw_3d/libs/libdd3d.android.template_release.x86_32.so b/addons/debug_draw_3d/libs/libdd3d.android.template_release.x86_32.so new file mode 100644 index 0000000..6668ae3 Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.android.template_release.x86_32.so differ diff --git a/addons/debug_draw_3d/libs/libdd3d.android.template_release.x86_64.so b/addons/debug_draw_3d/libs/libdd3d.android.template_release.x86_64.so new file mode 100644 index 0000000..9ff227f Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.android.template_release.x86_64.so differ diff --git a/addons/debug_draw_3d/libs/libdd3d.ios.template_debug.universal.dylib b/addons/debug_draw_3d/libs/libdd3d.ios.template_debug.universal.dylib new file mode 100644 index 0000000..0d23bf4 Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.ios.template_debug.universal.dylib differ diff --git a/addons/debug_draw_3d/libs/libdd3d.ios.template_release.universal.dylib b/addons/debug_draw_3d/libs/libdd3d.ios.template_release.universal.dylib new file mode 100644 index 0000000..7784065 Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.ios.template_release.universal.dylib differ diff --git a/addons/debug_draw_3d/libs/libdd3d.ios.template_release.universal.enabled.dylib b/addons/debug_draw_3d/libs/libdd3d.ios.template_release.universal.enabled.dylib new file mode 100644 index 0000000..b634723 Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.ios.template_release.universal.enabled.dylib differ diff --git a/addons/debug_draw_3d/libs/libdd3d.linux.editor.x86_64.so b/addons/debug_draw_3d/libs/libdd3d.linux.editor.x86_64.so new file mode 100644 index 0000000..a58e48c Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.linux.editor.x86_64.so differ diff --git a/addons/debug_draw_3d/libs/libdd3d.linux.template_release.x86_64.enabled.so b/addons/debug_draw_3d/libs/libdd3d.linux.template_release.x86_64.enabled.so new file mode 100644 index 0000000..fdd0816 Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.linux.template_release.x86_64.enabled.so differ diff --git a/addons/debug_draw_3d/libs/libdd3d.linux.template_release.x86_64.so b/addons/debug_draw_3d/libs/libdd3d.linux.template_release.x86_64.so new file mode 100644 index 0000000..708b16c Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.linux.template_release.x86_64.so differ diff --git a/addons/debug_draw_3d/libs/libdd3d.macos.editor.universal.framework/Resources/Info.plist b/addons/debug_draw_3d/libs/libdd3d.macos.editor.universal.framework/Resources/Info.plist new file mode 100644 index 0000000..933a7f8 --- /dev/null +++ b/addons/debug_draw_3d/libs/libdd3d.macos.editor.universal.framework/Resources/Info.plist @@ -0,0 +1,37 @@ + + + + + CFBundleInfoDictionaryVersion + 6.0 + CFBundleDevelopmentRegion + en + CFBundleExecutable + libdd3d.macos.editor.universal.dylib + CFBundleName + Debug Draw 3D + CFBundleDisplayName + Debug Draw 3D + CFBundleIdentifier + ru.dmitriysalnikov.dd3d + NSHumanReadableCopyright + Copyright (c) Dmitriy Salnikov. + CFBundleVersion + 1.5.1 + CFBundleShortVersionString + 1.5.1 + CFBundlePackageType + FMWK + CSResourcesFileMapped + + DTPlatformName + macosx + LSMinimumSystemVersion + 10.14 + CFBundleSupportedPlatforms + + MacOSX + + + + \ No newline at end of file diff --git a/addons/debug_draw_3d/libs/libdd3d.macos.editor.universal.framework/libdd3d.macos.editor.universal.dylib b/addons/debug_draw_3d/libs/libdd3d.macos.editor.universal.framework/libdd3d.macos.editor.universal.dylib new file mode 100644 index 0000000..e15b931 Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.macos.editor.universal.framework/libdd3d.macos.editor.universal.dylib differ diff --git a/addons/debug_draw_3d/libs/libdd3d.macos.template_release.universal.enabled.framework/Resources/Info.plist b/addons/debug_draw_3d/libs/libdd3d.macos.template_release.universal.enabled.framework/Resources/Info.plist new file mode 100644 index 0000000..33bf631 --- /dev/null +++ b/addons/debug_draw_3d/libs/libdd3d.macos.template_release.universal.enabled.framework/Resources/Info.plist @@ -0,0 +1,37 @@ + + + + + CFBundleInfoDictionaryVersion + 6.0 + CFBundleDevelopmentRegion + en + CFBundleExecutable + libdd3d.macos.template_release.universal.enabled.dylib + CFBundleName + Debug Draw 3D + CFBundleDisplayName + Debug Draw 3D + CFBundleIdentifier + ru.dmitriysalnikov.dd3d + NSHumanReadableCopyright + Copyright (c) Dmitriy Salnikov. + CFBundleVersion + 1.5.1 + CFBundleShortVersionString + 1.5.1 + CFBundlePackageType + FMWK + CSResourcesFileMapped + + DTPlatformName + macosx + LSMinimumSystemVersion + 10.14 + CFBundleSupportedPlatforms + + MacOSX + + + + \ No newline at end of file diff --git a/addons/debug_draw_3d/libs/libdd3d.macos.template_release.universal.enabled.framework/libdd3d.macos.template_release.universal.enabled.dylib b/addons/debug_draw_3d/libs/libdd3d.macos.template_release.universal.enabled.framework/libdd3d.macos.template_release.universal.enabled.dylib new file mode 100644 index 0000000..0955618 Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.macos.template_release.universal.enabled.framework/libdd3d.macos.template_release.universal.enabled.dylib differ diff --git a/addons/debug_draw_3d/libs/libdd3d.macos.template_release.universal.framework/Resources/Info.plist b/addons/debug_draw_3d/libs/libdd3d.macos.template_release.universal.framework/Resources/Info.plist new file mode 100644 index 0000000..0b36e0b --- /dev/null +++ b/addons/debug_draw_3d/libs/libdd3d.macos.template_release.universal.framework/Resources/Info.plist @@ -0,0 +1,37 @@ + + + + + CFBundleInfoDictionaryVersion + 6.0 + CFBundleDevelopmentRegion + en + CFBundleExecutable + libdd3d.macos.template_release.universal.dylib + CFBundleName + Debug Draw 3D + CFBundleDisplayName + Debug Draw 3D + CFBundleIdentifier + ru.dmitriysalnikov.dd3d + NSHumanReadableCopyright + Copyright (c) Dmitriy Salnikov. + CFBundleVersion + 1.5.1 + CFBundleShortVersionString + 1.5.1 + CFBundlePackageType + FMWK + CSResourcesFileMapped + + DTPlatformName + macosx + LSMinimumSystemVersion + 10.14 + CFBundleSupportedPlatforms + + MacOSX + + + + \ No newline at end of file diff --git a/addons/debug_draw_3d/libs/libdd3d.macos.template_release.universal.framework/libdd3d.macos.template_release.universal.dylib b/addons/debug_draw_3d/libs/libdd3d.macos.template_release.universal.framework/libdd3d.macos.template_release.universal.dylib new file mode 100644 index 0000000..83d014e Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.macos.template_release.universal.framework/libdd3d.macos.template_release.universal.dylib differ diff --git a/addons/debug_draw_3d/libs/libdd3d.web.template_debug.wasm32.threads.wasm b/addons/debug_draw_3d/libs/libdd3d.web.template_debug.wasm32.threads.wasm new file mode 100644 index 0000000..33fe474 Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.web.template_debug.wasm32.threads.wasm differ diff --git a/addons/debug_draw_3d/libs/libdd3d.web.template_debug.wasm32.wasm b/addons/debug_draw_3d/libs/libdd3d.web.template_debug.wasm32.wasm new file mode 100644 index 0000000..a27ea99 Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.web.template_debug.wasm32.wasm differ diff --git a/addons/debug_draw_3d/libs/libdd3d.web.template_release.wasm32.enabled.wasm b/addons/debug_draw_3d/libs/libdd3d.web.template_release.wasm32.enabled.wasm new file mode 100644 index 0000000..a8445e3 Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.web.template_release.wasm32.enabled.wasm differ diff --git a/addons/debug_draw_3d/libs/libdd3d.web.template_release.wasm32.threads.enabled.wasm b/addons/debug_draw_3d/libs/libdd3d.web.template_release.wasm32.threads.enabled.wasm new file mode 100644 index 0000000..c90fb24 Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.web.template_release.wasm32.threads.enabled.wasm differ diff --git a/addons/debug_draw_3d/libs/libdd3d.web.template_release.wasm32.threads.wasm b/addons/debug_draw_3d/libs/libdd3d.web.template_release.wasm32.threads.wasm new file mode 100644 index 0000000..4ee4c42 Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.web.template_release.wasm32.threads.wasm differ diff --git a/addons/debug_draw_3d/libs/libdd3d.web.template_release.wasm32.wasm b/addons/debug_draw_3d/libs/libdd3d.web.template_release.wasm32.wasm new file mode 100644 index 0000000..b5e7a64 Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.web.template_release.wasm32.wasm differ diff --git a/addons/debug_draw_3d/libs/libdd3d.windows.editor.x86_64.dll b/addons/debug_draw_3d/libs/libdd3d.windows.editor.x86_64.dll new file mode 100644 index 0000000..e733469 Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.windows.editor.x86_64.dll differ diff --git a/addons/debug_draw_3d/libs/libdd3d.windows.template_release.x86_64.dll b/addons/debug_draw_3d/libs/libdd3d.windows.template_release.x86_64.dll new file mode 100644 index 0000000..37889ff Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.windows.template_release.x86_64.dll differ diff --git a/addons/debug_draw_3d/libs/libdd3d.windows.template_release.x86_64.enabled.dll b/addons/debug_draw_3d/libs/libdd3d.windows.template_release.x86_64.enabled.dll new file mode 100644 index 0000000..8a04f8b Binary files /dev/null and b/addons/debug_draw_3d/libs/libdd3d.windows.template_release.x86_64.enabled.dll differ diff --git a/block.gd b/block.gd new file mode 100644 index 0000000..901ed69 --- /dev/null +++ b/block.gd @@ -0,0 +1,5 @@ +extends Node + +class_name Block + +enum BlockType {Air, Dirt} diff --git a/block.gd.uid b/block.gd.uid new file mode 100644 index 0000000..257adee --- /dev/null +++ b/block.gd.uid @@ -0,0 +1 @@ +uid://blimi8ecrjre2 diff --git a/chunk.gd b/chunk.gd new file mode 100644 index 0000000..8e36e4f --- /dev/null +++ b/chunk.gd @@ -0,0 +1,175 @@ +@tool +extends MeshInstance3D + +@export var backface_culling: bool +@export var tex_div = Vector2(1.0/4.0, 1.0/3.0) + +var chunk_size: int +var array_mesh = ArrayMesh.new() +var vertices = PackedVector3Array() +var indices = PackedInt32Array() +var uvs = PackedVector2Array() + +var face_count: int + +var blocks = [] + +var first_load = true + +const AXIS := [ + Vector3i(1, 0, 0), + Vector3i(0, 1, 0), + Vector3i(0, 0, 1), +] + +func _ready() -> void: + pass + +func _process(delta: float) -> void: + pass + +func init_blocks(_chunk_size: int, pos: Vector3i): + chunk_size = _chunk_size + + blocks.resize(chunk_size) + for x in range(chunk_size): + blocks[x] = [] + for y in range(chunk_size): + blocks[x].append([]) + for z in range(chunk_size): + var block_type = get_parent().GetBlock(Vector3i(pos.x + x, pos.y + y, pos.z + z), first_load) + blocks[x][y].append(block_type) + first_load = false + +func SetBlockAtPosition(pos: Vector3i, block_type: Block.BlockType): + blocks[pos.x][pos.y][pos.z] = block_type + +func GetBlockAtPosition(pos: Vector3i): + return blocks[pos.x][pos.y][pos.z] + +func generate_chunk(): + array_mesh = ArrayMesh.new() + vertices = PackedVector3Array() + indices = PackedInt32Array() + uvs = PackedVector2Array() + face_count = 0 + for x in range(chunk_size): + for y in range(chunk_size): + for z in range(chunk_size): + if blocks[x][y][z] == Block.BlockType.Air: + pass + else: + generate_cube_mesh(Vector3i(x, y, z)) + + + if not vertices.size() == 0: + var array = [] + array.resize(Mesh.ARRAY_MAX) + array[Mesh.ARRAY_VERTEX] = vertices + array[Mesh.ARRAY_INDEX] = indices + array[Mesh.ARRAY_TEX_UV] = uvs + array_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, array) + var trimesh_collision = array_mesh.create_trimesh_shape() + var collisionShape3D: CollisionShape3D = find_child("StaticBody3D").find_child("CollisionShape3D") + collisionShape3D.set_shape(trimesh_collision) + mesh = array_mesh + +func add_uvs(x, y): + uvs.append(Vector2(tex_div.x * x, tex_div.y * y)) + uvs.append(Vector2(tex_div.x * x + tex_div.x, tex_div.y * y)) + uvs.append(Vector2(tex_div.x * x + tex_div.x, tex_div.y * y + tex_div.y)) + uvs.append(Vector2(tex_div.x * x, tex_div.y * y + tex_div.y)) + +func add_triangles(): + indices.append(face_count * 4 + 0) + indices.append(face_count * 4 + 1) + indices.append(face_count * 4 + 2) + indices.append(face_count * 4 + 0) + indices.append(face_count * 4 + 2) + indices.append(face_count * 4 + 3) + face_count += 1 + +#func generate_smooth_mesh(pos: Vector3i): + + +func generate_cube_mesh(pos: Vector3): + var is_top_block = false + + # face +y + if is_block_air(pos + Vector3(0, 1, 0)) || not backface_culling: + vertices.append(pos + Vector3(-0.5, 0.5, -0.5)) + vertices.append(pos + Vector3(0.5, 0.5, -0.5)) + vertices.append(pos + Vector3(0.5, 0.5, 0.5)) + vertices.append(pos + Vector3(-0.5, 0.5, 0.5)) + add_triangles() + add_uvs(1, 0) + is_top_block = true + + # face +x + if is_block_air(pos + Vector3(1, 0, 0)) || not backface_culling: + vertices.append(pos + Vector3(0.5, 0.5, 0.5)) + vertices.append(pos + Vector3(0.5, 0.5, -0.5)) + vertices.append(pos + Vector3(0.5, -0.5, -0.5)) + vertices.append(pos + Vector3(0.5, -0.5, 0.5)) + add_triangles() + if is_top_block: + add_uvs(1, 1) + else: + add_uvs(1, 2) + + # face +z + if is_block_air(pos + Vector3(0, 0, 1)) || not backface_culling: + vertices.append(pos + Vector3(-0.5, 0.5, 0.5)) + vertices.append(pos + Vector3(0.5, 0.5, 0.5)) + vertices.append(pos + Vector3(0.5, -0.5, 0.5)) + vertices.append(pos + Vector3(-0.5, -0.5, 0.5)) + add_triangles() + if is_top_block: + add_uvs(0, 1) + else: + add_uvs(1, 2) + + # face -y + if is_block_air(pos + Vector3(0, -1, 0)) || not backface_culling: + vertices.append(pos + Vector3(0.5, -0.5, 0.5)) + vertices.append(pos + Vector3(0.5, -0.5, -0.5)) + vertices.append(pos + Vector3(-0.5, -0.5, -0.5)) + vertices.append(pos + Vector3(-0.5, -0.5, 0.5)) + add_triangles() + add_uvs(1, 2) + + # face -x + if is_block_air(pos + Vector3(-1, 0, 0)) || not backface_culling: + vertices.append(pos + Vector3(-0.5, 0.5, -0.5)) + vertices.append(pos + Vector3(-0.5, 0.5, 0.5)) + vertices.append(pos + Vector3(-0.5, -0.5, 0.5)) + vertices.append(pos + Vector3(-0.5, -0.5, -0.5)) + add_triangles() + if is_top_block: + add_uvs(2, 1) + else: + add_uvs(1, 2) + + # face -z + if is_block_air(pos + Vector3(0, 0, -1)) || not backface_culling: + vertices.append(pos + Vector3(0.5, 0.5, -0.5)) + vertices.append(pos + Vector3(-0.5, 0.5, -0.5)) + vertices.append(pos + Vector3(-0.5, -0.5, -0.5)) + vertices.append(pos + Vector3(0.5, -0.5, -0.5)) + add_triangles() + if is_top_block: + add_uvs(0, 1) + else: + add_uvs(1, 2) + + +func is_block_air(pos: Vector3): + # outside of chunk + if pos.x < 0 or pos.y < 0 or pos.z < 0: + var block = get_parent().GetBlock(pos + position, first_load) + return block == Block.BlockType.Air + elif pos.x >= chunk_size or pos.y >= chunk_size or pos.z >= chunk_size: + var block = get_parent().GetBlock(pos + position, first_load) + return block == Block.BlockType.Air + else: + return blocks[pos.x][pos.y][pos.z] == Block.BlockType.Air diff --git a/chunk.gd.uid b/chunk.gd.uid new file mode 100644 index 0000000..a288817 --- /dev/null +++ b/chunk.gd.uid @@ -0,0 +1 @@ +uid://civdn1k6g4dhy diff --git a/chunk.tscn b/chunk.tscn new file mode 100644 index 0000000..df767c9 --- /dev/null +++ b/chunk.tscn @@ -0,0 +1,13 @@ +[gd_scene load_steps=3 format=3 uid="uid://da568t2u1olhb"] + +[ext_resource type="Material" uid="uid://d2eg0eaiyrt6p" path="res://grass/grass_material.tres" id="1_eat54"] +[ext_resource type="Script" uid="uid://civdn1k6g4dhy" path="res://chunk.gd" id="1_kdh3y"] + +[node name="Chunk" type="MeshInstance3D"] +material_override = ExtResource("1_eat54") +script = ExtResource("1_kdh3y") +backface_culling = true + +[node name="StaticBody3D" type="StaticBody3D" parent="."] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D"] diff --git a/default_env.tres b/default_env.tres new file mode 100644 index 0000000..85b532b --- /dev/null +++ b/default_env.tres @@ -0,0 +1,7 @@ +[gd_resource type="Environment" load_steps=2 format=3 uid="uid://ti46fffblpei"] + +[sub_resource type="Sky" id="1"] + +[resource] +background_mode = 2 +sky = SubResource("1") diff --git a/examples_dd3d/DebugDrawDemoScene.gd b/examples_dd3d/DebugDrawDemoScene.gd new file mode 100644 index 0000000..8c4ef15 --- /dev/null +++ b/examples_dd3d/DebugDrawDemoScene.gd @@ -0,0 +1,621 @@ +@tool +extends Node3D + +@export var custom_font : Font +@export var custom_3d_font : Font +@export var zylann_example := false +@export var update_in_physics := false +@export var test_text := true +@export var more_test_cases := true +@export var draw_3d_text := true +@export var draw_array_of_boxes := false +@export var draw_text_with_boxes := false +@export var draw_1m_boxes := false +@export_range(0, 5, 0.001) var debug_thickness := 0.1 +@export_range(0, 1, 0.001) var debug_center_brightness := 0.8 +@export_range(0, 1) var camera_frustum_scale := 0.9 + +@export_group("Text groups", "text_groups") +@export var text_groups_show_examples := true +@export var text_groups_show_hints := true +@export var text_groups_show_stats := false +@export var text_groups_show_stats_2d := false +@export var text_groups_position := DebugDraw2DConfig.POSITION_LEFT_TOP +@export var text_groups_offset := Vector2i(8, 8) +@export var text_groups_padding := Vector2i(3, 1) +@export_range(1, 100) var text_groups_default_font_size := 15 +@export_range(1, 100) var text_groups_title_font_size := 20 +@export_range(1, 100) var text_groups_text_font_size := 17 + +@export_group("Tests", "tests") +@export var tests_use_threads := false +var test_thread : Thread = null +var test_thread_closing := false + +var button_presses := {} +var frame_rendered := false +var physics_tick_processed := false + +var timer_1 := 0.0 +var timer_cubes := 0.0 +var timer_3 := 0.0 +var timer_text := 0.0 + + +func _process(delta) -> void: + #print("Label3Ds count: %d" % get_child(0).get_child_count() if Engine.is_editor_hint() else get_tree().root.get_child(0).get_child_count()) + + $OtherWorld.mesh.material.set_shader_parameter("albedo_texture", $OtherWorld/SubViewport.get_texture()) + + physics_tick_processed = false + if not update_in_physics: + main_update(delta) + _update_timers(delta) + + _call_from_thread() + + +## Since physics frames may not be called every frame or may be called multiple times in one frame, +## there is an additional check to ensure that a new frame has been drawn before updating the data. +func _physics_process(delta: float) -> void: + if not physics_tick_processed: + physics_tick_processed = true + if update_in_physics: + main_update(delta) + _update_timers(delta) + + # Physics specific: + if not zylann_example: + DebugDraw3D.draw_line($"Lines/8".global_position, $Lines/Target.global_position, Color.YELLOW) + + if more_test_cases: + _draw_rays_casts() + + ## Additional drawing in the Viewport + if true: + var _w1 = DebugDraw3D.new_scoped_config().set_viewport(%OtherWorldBox.get_viewport()).set_thickness(0.01).set_center_brightness(1).set_no_depth_test(true) + DebugDraw3D.draw_box_xf(Transform3D(Basis() + .scaled(Vector3.ONE*0.3) + .rotated(Vector3(0,0,1), PI/4) + .rotated(Vector3(0,1,0), wrapf(Time.get_ticks_msec() / -1500.0, 0, TAU) - PI/4), %OtherWorldBox.global_transform.origin), + Color.BROWN, true, 0.4) + + +func main_update(delta: float) -> void: + DebugDraw3D.scoped_config().set_thickness(debug_thickness).set_center_brightness(debug_center_brightness) + + _update_keys_just_press() + + if _is_key_just_pressed(KEY_F1): + zylann_example = !zylann_example + + # Zylann's example :D + if zylann_example: + var _time = Time.get_ticks_msec() / 1000.0 + var box_pos = Vector3(0, sin(_time * 4), 0) + var line_begin = Vector3(-1, sin(_time * 4), 0) + var line_end = Vector3(1, cos(_time * 4), 0) + + DebugDraw3D.draw_box(box_pos, Quaternion.IDENTITY, Vector3(1, 2, 1), Color(0, 1, 0)) + DebugDraw3D.draw_line(line_begin, line_end, Color(1, 1, 0)) + DebugDraw2D.set_text("Time", _time) + DebugDraw2D.set_text("Frames drawn", Engine.get_frames_drawn()) + DebugDraw2D.set_text("FPS", Engine.get_frames_per_second()) + DebugDraw2D.set_text("delta", delta) + + $HitTest.visible = false + $LagTest.visible = false + $PlaneOrigin.visible = false + $OtherWorld.visible = false + %ZDepthTestCube.visible = false + return + + $HitTest.visible = true + $LagTest.visible = true + $PlaneOrigin.visible = true + $OtherWorld.visible = true + %ZDepthTestCube.visible = true + + # Testing the rendering layers by showing the image from the second camera inside the 2D panel + DebugDraw3D.config.geometry_render_layers = 1 if not Input.is_key_pressed(KEY_ALT) else 0b10010 + $Panel.visible = Input.is_key_pressed(KEY_ALT) + DebugDraw2D.custom_canvas = %CustomCanvas if Input.is_key_pressed(KEY_ALT) else null + + # More property toggles + DebugDraw3D.config.freeze_3d_render = Input.is_key_pressed(KEY_DOWN) + DebugDraw3D.config.visible_instance_bounds = Input.is_key_pressed(KEY_RIGHT) + + # Regenerate meshes + if Input.is_action_just_pressed("ui_end"): + DebugDraw3D.regenerate_geometry_meshes() + + # Some property toggles + if _is_key_just_pressed(KEY_LEFT): + DebugDraw3D.config.use_frustum_culling = !DebugDraw3D.config.use_frustum_culling + if _is_key_just_pressed(KEY_UP): + DebugDraw3D.config.force_use_camera_from_scene = !DebugDraw3D.config.force_use_camera_from_scene + if _is_key_just_pressed(KEY_CTRL): + if not Engine.is_editor_hint(): + get_viewport().msaa_3d = Viewport.MSAA_DISABLED if get_viewport().msaa_3d == Viewport.MSAA_4X else Viewport.MSAA_4X + + if not Engine.is_editor_hint(): + if _is_key_just_pressed(KEY_1): + DebugDraw3D.debug_enabled = !DebugDraw3D.debug_enabled + if _is_key_just_pressed(KEY_2): + DebugDraw2D.debug_enabled = !DebugDraw2D.debug_enabled + if _is_key_just_pressed(KEY_3): + DebugDrawManager.debug_enabled = !DebugDrawManager.debug_enabled + + + DebugDraw3D.config.frustum_length_scale = camera_frustum_scale + + # Zones with black borders + for z in $Zones.get_children(): + DebugDraw3D.draw_box_xf(z.global_transform, Color.BLACK) + + # Spheres + _draw_zone_title(%SpheresBox, "Spheres") + + DebugDraw3D.draw_sphere_xf($Spheres/SphereTransform.global_transform, Color.CRIMSON) + if true: + var _shd = DebugDraw3D.new_scoped_config().set_hd_sphere(true) + DebugDraw3D.draw_sphere_xf($Spheres/SphereHDTransform.global_transform, Color.ORANGE_RED) + + ## Delayed spheres + if timer_1 < 0: + DebugDraw3D.draw_sphere($Spheres/SpherePosition.global_position, 2.0, Color.BLUE_VIOLET, 2.0) + var _shd = DebugDraw3D.new_scoped_config().set_hd_sphere(true) + DebugDraw3D.draw_sphere($Spheres/SpherePosition.global_position + Vector3.FORWARD * 4, 2.0, Color.CORNFLOWER_BLUE, 2.0) + timer_1 = 2 + + # Cylinders + _draw_zone_title(%CylindersBox, "Cylinders") + + DebugDraw3D.draw_cylinder($Cylinders/Cylinder1.global_transform, Color.CRIMSON) + DebugDraw3D.draw_cylinder(Transform3D(Basis.IDENTITY.scaled(Vector3(1,2,1)), $Cylinders/Cylinder2.global_position), Color.RED) + DebugDraw3D.draw_cylinder_ab($"Cylinders/Cylinder3/1".global_position, $"Cylinders/Cylinder3/2".global_position, 0.7) + + # Boxes + _draw_zone_title(%BoxesBox, "Boxes") + + DebugDraw3D.draw_box_xf($Boxes/Box1.global_transform, Color.MEDIUM_PURPLE) + DebugDraw3D.draw_box($Boxes/Box2.global_position, Quaternion.from_euler(Vector3(0, deg_to_rad(45), deg_to_rad(45))), Vector3.ONE, Color.REBECCA_PURPLE) + DebugDraw3D.draw_box_xf(Transform3D(Basis(Vector3.UP, PI * 0.25).scaled(Vector3.ONE * 2), $Boxes/Box3.global_position), Color.ROSY_BROWN) + + DebugDraw3D.draw_aabb(AABB($Boxes/AABB_fixed.global_position, Vector3(2, 1, 2)), Color.AQUA) + DebugDraw3D.draw_aabb_ab($Boxes/AABB/a.global_position, $Boxes/AABB/b.global_position, Color.DEEP_PINK) + + # Boxes AB + DebugDraw3D.draw_arrow($Boxes/BoxAB.global_position, $Boxes/BoxAB/o/up.global_position, Color.GOLD, 0.1, true) + DebugDraw3D.draw_box_ab($Boxes/BoxAB/a.global_position, $Boxes/BoxAB/b.global_position, $Boxes/BoxAB/o/up.global_position - $Boxes/BoxAB.global_position, Color.PERU) + + DebugDraw3D.draw_arrow($Boxes/BoxABEdge.global_position, $Boxes/BoxABEdge/o/up.global_position, Color.DARK_RED, 0.1, true) + DebugDraw3D.draw_box_ab($Boxes/BoxABEdge/a.global_position, $Boxes/BoxABEdge/b.global_position, $Boxes/BoxABEdge/o/up.global_position - $Boxes/BoxABEdge.global_position, Color.DARK_OLIVE_GREEN, false) + + # Lines + _draw_zone_title(%LinesBox, "Lines") + + var target = $Lines/Target + DebugDraw3D.draw_square(target.global_position, 0.5, Color.RED) + + DebugDraw3D.draw_line($"Lines/1".global_position, target.global_position, Color.FUCHSIA) + DebugDraw3D.draw_ray($"Lines/3".global_position, (target.global_position - $"Lines/3".global_position).normalized(), 3.0, Color.CRIMSON) + + if timer_3 < 0: + DebugDraw3D.draw_line($"Lines/6".global_position, target.global_position, Color.FUCHSIA, 2.0) + timer_3 = 2 + + # Test UP vector + DebugDraw3D.draw_line($"Lines/7".global_position, target.global_position, Color.RED) + + # Lines with Arrow + DebugDraw3D.draw_arrow($"Lines/2".global_position, target.global_position, Color.BLUE, 0.5, true) + DebugDraw3D.draw_arrow_ray($"Lines/4".global_position, (target.global_position - $"Lines/4".global_position).normalized(), 8.0, Color.LAVENDER, 0.5, true) + + DebugDraw3D.draw_line_hit_offset($"Lines/5".global_position, target.global_position, true, abs(sin(Time.get_ticks_msec() / 1000.0)), 0.25, Color.AQUA) + + # Paths + _draw_zone_title(%PathsBox, "Paths") + + ## preparing data + var points: PackedVector3Array = [] + var points_below: PackedVector3Array = [] + var points_below2: PackedVector3Array = [] + var points_below3: PackedVector3Array = [] + var points_below4: PackedVector3Array = [] + var lines_above: PackedVector3Array = [] + + for c in $LinePath.get_children(): + if not c is Node3D: + break + points.append(c.global_position) + points_below.append(c.global_position + Vector3.DOWN) + points_below2.append(c.global_position + Vector3.DOWN * 2) + points_below3.append(c.global_position + Vector3.DOWN * 3) + points_below4.append(c.global_position + Vector3.DOWN * 4) + + for x in points.size()-1: + lines_above.append(points[x] + Vector3.UP) + lines_above.append(points[x+1] + Vector3.UP) + + ## drawing lines + DebugDraw3D.draw_lines(lines_above) + DebugDraw3D.draw_line_path(points, Color.BEIGE) + DebugDraw3D.draw_points(points_below, DebugDraw3D.POINT_TYPE_SQUARE, 0.2, Color.DARK_GREEN) + DebugDraw3D.draw_point_path(points_below2, DebugDraw3D.POINT_TYPE_SQUARE, 0.25, Color.BLUE, Color.TOMATO) + DebugDraw3D.draw_arrow_path(points_below3, Color.GOLD, 0.5) + if true: + var _sl = DebugDraw3D.new_scoped_config().set_thickness(0.05) + DebugDraw3D.draw_point_path(points_below4, DebugDraw3D.POINT_TYPE_SPHERE, 0.25, Color.MEDIUM_SEA_GREEN, Color.MEDIUM_VIOLET_RED) + + # Misc + _draw_zone_title(%MiscBox, "Misc") + + if Engine.is_editor_hint(): + #for i in 1000: + var _a11 = DebugDraw3D.new_scoped_config().set_thickness(0) + DebugDraw3D.draw_camera_frustum($Camera, Color.DARK_ORANGE) + + if true: + var _s123 = DebugDraw3D.new_scoped_config().set_center_brightness(0.1) + DebugDraw3D.draw_arrowhead($Misc/Arrow.global_transform, Color.YELLOW_GREEN) + + DebugDraw3D.draw_square($Misc/Billboard.global_position, 0.5, Color.GREEN) + + DebugDraw3D.draw_position($Misc/Position.global_transform, Color.BROWN) + + DebugDraw3D.draw_gizmo($Misc/GizmoTransform.global_transform, DebugDraw3D.empty_color, true) + DebugDraw3D.draw_gizmo($Misc/GizmoOneColor.global_transform, Color.BROWN, true) + if true: + var _s123 = DebugDraw3D.new_scoped_config().set_center_brightness(0.5).set_no_depth_test(true) + DebugDraw3D.draw_gizmo($Misc/GizmoNormal.global_transform.orthonormalized(), DebugDraw3D.empty_color, false) + + # Grids + _draw_zone_title_pos($Grids/GridCentered.global_position + Vector3(0, 1.5, 0), "Grids", 96, 36) + + var tg : Transform3D = $Grids/Grid.global_transform + var tn : Vector3 = $Grids/Grid/Subdivision.transform.origin + DebugDraw3D.draw_grid(tg.origin, tg.basis.x, tg.basis.z, Vector2i(int(tn.x*10), int(tn.z*10)), Color.LIGHT_CORAL, false) + + var tn1 = $Grids/GridCentered/Subdivision.transform.origin + DebugDraw3D.draw_grid_xf($Grids/GridCentered.global_transform, Vector2i(tn1.x*10, tn1.z*10)) + + if true: + var _s32 = DebugDraw3D.new_scoped_config().set_thickness(0.05) + DebugDraw3D.draw_box_xf($PostProcess.global_transform, Color.SEA_GREEN) + + # Local transform + _draw_local_xf_box(%LocalTransformRecursiveOrigin.global_transform, 0.05, 10) + + # 2D + DebugDraw2D.config.text_default_size = text_groups_default_font_size + DebugDraw2D.config.text_block_offset = text_groups_offset + DebugDraw2D.config.text_block_position = text_groups_position + DebugDraw2D.config.text_padding = text_groups_padding + + DebugDraw2D.config.text_custom_font = custom_font + + if test_text: + _text_tests() + + # Lag Test + var lag_test_pos = $LagTest/RESET.get_animation("RESET").track_get_key_value(0,0) + _draw_zone_title_pos(lag_test_pos, "Lag test") + + $LagTest.position = lag_test_pos + Vector3(sin(Time.get_ticks_msec() / 100.0) * 2.5, 0, 0) + DebugDraw3D.draw_box($LagTest.global_position, Quaternion.IDENTITY, Vector3.ONE * 2.01, Color.CHOCOLATE, true) + + if more_test_cases: + for ray in $HitTest/RayEmitter.get_children(): + ray.set_physics_process_internal(true) + + _more_tests() + else: + for ray in $HitTest/RayEmitter.get_children(): + ray.set_physics_process_internal(false) + + _draw_other_world() + + if draw_array_of_boxes: + _draw_array_of_boxes() + + +func _text_tests(): + DebugDraw2D.set_text("FPS", "%.2f" % Engine.get_frames_per_second(), 0, Color.GOLD) + + if text_groups_show_examples: + if timer_text < 0: + DebugDraw2D.set_text("Some delayed text", "for 2.5s", -1, Color.BLACK, 2.5) # it's supposed to show text for 2.5 seconds + timer_text = 5 + + DebugDraw2D.begin_text_group("-- First Group --", 2, Color.LIME_GREEN, true, text_groups_title_font_size, text_groups_text_font_size) + DebugDraw2D.set_text("Simple text") + DebugDraw2D.set_text("Text", "Value", 0, Color.AQUAMARINE) + DebugDraw2D.set_text("Text out of order", null, -1, Color.SILVER) + DebugDraw2D.begin_text_group("-- Second Group --", 1, Color.BEIGE) + DebugDraw2D.set_text("Rendered frames", Engine.get_frames_drawn()) + DebugDraw2D.end_text_group() + + if text_groups_show_stats or text_groups_show_stats_2d: + DebugDraw2D.begin_text_group("-- Stats --", 3, Color.WHEAT) + + var render_stats := DebugDraw3D.get_render_stats() + if render_stats && text_groups_show_stats: + DebugDraw2D.set_text("Total", render_stats.total_geometry) + DebugDraw2D.set_text("Instances", render_stats.instances + render_stats.instances_physics, 1) + DebugDraw2D.set_text("Lines", render_stats.lines + render_stats.lines_physics, 2) + DebugDraw2D.set_text("Total Visible", render_stats.total_visible, 3) + DebugDraw2D.set_text("Visible Instances", render_stats.visible_instances, 4) + DebugDraw2D.set_text("Visible Lines", render_stats.visible_lines, 5) + + DebugDraw2D.set_text("---", null, 12) + + DebugDraw2D.set_text("Culling time", "%.2f ms" % (render_stats.total_time_culling_usec / 1000.0), 13) + DebugDraw2D.set_text("Filling instances buffer", "%.2f ms" % (render_stats.time_filling_buffers_instances_usec / 1000.0), 14) + DebugDraw2D.set_text("Filling lines buffer", "%.2f ms" % (render_stats.time_filling_buffers_lines_usec / 1000.0), 15) + DebugDraw2D.set_text("Filling time", "%.2f ms" % (render_stats.total_time_filling_buffers_usec / 1000.0), 16) + DebugDraw2D.set_text("Total time", "%.2f ms" % (render_stats.total_time_spent_usec / 1000.0), 17) + + DebugDraw2D.set_text("----", null, 32) + + DebugDraw2D.set_text("Total Label3D", render_stats.nodes_label3d_exists_total, 33) + DebugDraw2D.set_text("Visible Label3D", render_stats.nodes_label3d_visible + render_stats.nodes_label3d_visible_physics, 34) + + DebugDraw2D.set_text("-----", null, 48) + + DebugDraw2D.set_text("Created scoped configs", "%d" % render_stats.created_scoped_configs, 49) + + if text_groups_show_stats && text_groups_show_stats_2d: + DebugDraw2D.set_text("------", null, 64) + + var render_stats_2d := DebugDraw2D.get_render_stats() + if render_stats_2d && text_groups_show_stats_2d: + DebugDraw2D.set_text("Text groups", render_stats_2d.overlay_text_groups, 96) + DebugDraw2D.set_text("Text lines", render_stats_2d.overlay_text_lines, 97) + + DebugDraw2D.end_text_group() + + if text_groups_show_hints: + DebugDraw2D.begin_text_group("controls", 1024, Color.WHITE, false) + if not Engine.is_editor_hint(): + DebugDraw2D.set_text("WASD QE, LMB", "To move", 0) + DebugDraw2D.set_text("Alt: change render layers", DebugDraw3D.config.geometry_render_layers, 1) + if not OS.has_feature("web"): + DebugDraw2D.set_text("Ctrl: toggle anti-aliasing", "MSAA 4x" if get_viewport().msaa_3d == Viewport.MSAA_4X else "Disabled", 2) + DebugDraw2D.set_text("Down: freeze render", DebugDraw3D.config.freeze_3d_render, 3) + if Engine.is_editor_hint(): + DebugDraw2D.set_text("Up: use scene camera", DebugDraw3D.config.force_use_camera_from_scene, 4) + DebugDraw2D.set_text("1,2,3: toggle debug", "%s, %s 😐, %s 😏" % [DebugDraw3D.debug_enabled, DebugDraw2D.debug_enabled, DebugDrawManager.debug_enabled], 5) + DebugDraw2D.set_text("Left: toggle frustum culling", DebugDraw3D.config.use_frustum_culling, 6) + DebugDraw2D.set_text("Right: draw bounds for culling", DebugDraw3D.config.visible_instance_bounds, 7) + DebugDraw2D.end_text_group() + + +func _draw_zone_title(node: Node3D, title: String): + if draw_3d_text: + var _s1 = DebugDraw3D.new_scoped_config().set_text_outline_size(72) + DebugDraw3D.draw_text(node.global_position + node.global_basis.y * 0.85, title, 128) + + +func _draw_zone_title_pos(pos: Vector3, title: String, font_size: int = 128, outline: int = 72): + if draw_3d_text: + var _s1 = DebugDraw3D.new_scoped_config().set_text_outline_size(outline) + DebugDraw3D.draw_text(pos, title, font_size) + + +const _local_mul := 0.45 +const _local_mul_vec := Vector3(_local_mul, _local_mul, _local_mul) +var __local_lines_cross_recursive = PackedVector3Array([Vector3(-0.5, -0.5, -0.5), Vector3(0.5, -0.5, 0.5), Vector3(-0.5, -0.5, 0.5), Vector3(0.5, -0.5, -0.5)]) +var __local_box_recursive = Transform3D.IDENTITY.rotated_local(Vector3.UP, deg_to_rad(30)).translated(Vector3(-0.25, -0.55, 0.25)).scaled(_local_mul_vec) +var __local_sphere_recursive = Transform3D.IDENTITY.translated(Vector3(0.5, 0.55, -0.5)).scaled(_local_mul_vec) + +func _draw_local_xf_box(xf: Transform3D, thickness: float, max_depth: int, depth: int = 0): + if depth >= max_depth: + return + + var _s1 = DebugDraw3D.new_scoped_config().set_thickness(thickness).set_transform(xf) + + # a box with a small offset + DebugDraw3D.draw_box_xf(Transform3D(Basis(), Vector3(0, 0.001, 0)), Color.BROWN) + # a box and a stand for the next depth + DebugDraw3D.draw_box_xf(__local_box_recursive, Color.CHARTREUSE) + # just a sphere and lines + DebugDraw3D.draw_sphere_xf(__local_sphere_recursive, Color.DARK_ORANGE) + _s1.set_thickness(0) + DebugDraw3D.draw_lines(__local_lines_cross_recursive, Color.CRIMSON) + + # A simple animation generator with descent into the depth of the scene + if false: + var anim: Animation = %RecursiveTransformTest.get_animation("recursive") + # clear keys + if depth == 0: for i in anim.track_get_key_count(0): anim.track_remove_key(0, 0); anim.track_remove_key(1, 0) + + var time = depth * 2 + var s_xf = xf * __local_sphere_recursive + var next_s_xf = (xf * __local_box_recursive.translated(__local_box_recursive.basis.y)) * __local_sphere_recursive + var get_sphere_pos = func(l_xf): return l_xf.origin + (l_xf).basis.y + anim.position_track_insert_key(0, time, get_sphere_pos.call(s_xf)) + anim.rotation_track_insert_key(1, time, Transform3D(Basis(), get_sphere_pos.call(s_xf)).looking_at(get_sphere_pos.call(next_s_xf), xf.basis.y).basis.get_rotation_quaternion()) + + _draw_local_xf_box(xf * __local_box_recursive.translated(__local_box_recursive.basis.y), thickness * _local_mul, max_depth, depth + 1) + + +func _draw_other_world(): + var _w1 = DebugDraw3D.new_scoped_config().set_viewport(%OtherWorldBox.get_viewport()) + DebugDraw3D.draw_box_xf(%OtherWorldBox.global_transform.rotated_local(Vector3(1,1,-1).normalized(), wrapf(Time.get_ticks_msec() / 1000.0, 0, TAU)), Color.SANDY_BROWN) + DebugDraw3D.draw_box_xf(%OtherWorldBox.global_transform.rotated_local(Vector3(-1,1,-1).normalized(), wrapf(Time.get_ticks_msec() / -1000.0, 0, TAU) - PI/4), Color.SANDY_BROWN) + + if draw_3d_text: + var angle = wrapf(Time.get_ticks_msec() / 1000.0, 0, TAU) + if true: + var _w2 = DebugDraw3D.new_scoped_config().set_text_font(custom_3d_font) + DebugDraw3D.draw_text(%OtherWorldBox.global_position + Vector3(cos(angle), -0.25, sin(angle)), "Hello world!", 32, Color.CRIMSON, 0) + + if true: + var _w3 = DebugDraw3D.new_scoped_config().set_no_depth_test(true).set_text_outline_color(Color.INDIAN_RED).set_text_outline_size(6) + DebugDraw3D.draw_text(%OtherWorldBox.global_position + Vector3(cos(angle), +0.25, sin(-angle)), "World without depth", 20, Color.PINK, 0) + + +func _draw_rays_casts(): + # Line hits render + _draw_zone_title_pos(%HitTestSphere.global_position, "Line hits", 96, 36) + + for ray in $HitTest/RayEmitter.get_children(): + if ray is RayCast3D: + ray.force_raycast_update() + DebugDraw3D.draw_line_hit(ray.global_position, ray.to_global(ray.target_position), ray.get_collision_point(), ray.is_colliding(), 0.3) + + +func _more_tests(): + # Delayed line render + if true: + var _a12 = DebugDraw3D.new_scoped_config().set_thickness(0.035) + DebugDraw3D.draw_line($LagTest.global_position + Vector3.UP, $LagTest.global_position + Vector3(0,3,sin(Time.get_ticks_msec() / 50.0)), DebugDraw3D.empty_color, 0.35) + + if draw_3d_text: + DebugDraw3D.draw_text($LagTest.global_position + Vector3(0,3,sin(Time.get_ticks_msec() / 50.0)), "%.1f" % sin(Time.get_ticks_msec() / 50.0), 16, DebugDraw3D.empty_color, 0.35) + + # Draw plane + if true: + var _s11 = DebugDraw3D.new_scoped_config().set_thickness(0.02).set_plane_size(10) + + var pl_node: Node3D = $PlaneOrigin + var xf: Transform3D = pl_node.global_transform + var normal: = xf.basis.y.normalized() + var plane = Plane(normal, xf.origin.dot(normal)) + + var vp: Viewport = get_viewport() + if Engine.is_editor_hint() and Engine.get_singleton(&"EditorInterface").get_editor_viewport_3d(0): + vp = Engine.get_singleton(&"EditorInterface").get_editor_viewport_3d(0) + + var cam = vp.get_camera_3d() + if cam: + var dir = vp.get_camera_3d().project_ray_normal(vp.get_mouse_position()) + var intersect = plane.intersects_ray(cam.global_position, dir) + + DebugDraw3D.draw_plane(plane, Color.CORAL * Color(1,1,1, 0.4), pl_node.global_position) + if intersect and intersect.distance_to(pl_node.global_position) < _s11.get_plane_size() * 0.5: + # Need to test different colors on both sides of the plane + var col = Color.FIREBRICK if plane.is_point_over(cam.global_position) else Color.AQUAMARINE + DebugDraw3D.draw_sphere(intersect, 0.3, col) + + +func _draw_array_of_boxes(): + # Lots of boxes to check performance.. + var x_size := 50 + var y_size := 50 + var z_size := 3 + var mul := 1 + var cubes_max_time := 1.25 + var show_text := draw_text_with_boxes + var cfg = DebugDraw3D.new_scoped_config() + + if draw_1m_boxes: + x_size = 100 + y_size = 100 + z_size = 100 + mul = 4 + cubes_max_time = 60 + show_text = false + + var size := Vector3.ONE + var half_size := size * 0.5 + + if timer_cubes < 0: + var _start_time = Time.get_ticks_usec() + for x in x_size: + for y in y_size: + for z in z_size: + cfg.set_thickness(randf_range(0, 0.1)) + var pos := Vector3(x * mul, (-4-z) * mul, y * mul) + global_position + DebugDraw3D.draw_box(pos, Quaternion.IDENTITY, size, DebugDraw3D.empty_color, false, cubes_max_time) + + if show_text and z == 0: + DebugDraw3D.draw_text(pos + half_size, str(pos), 32, DebugDraw3D.empty_color, cubes_max_time) + #print("Draw Cubes: %.3fms" % ((Time.get_ticks_usec() - _start_time) / 1000.0)) + timer_cubes = cubes_max_time + + +func _ready() -> void: + _update_keys_just_press() + + await get_tree().process_frame + + # this check is required for inherited scenes, because an instance of this + # script is created first, and then overridden by another + if not is_inside_tree(): + return + + DebugDraw2D.config.text_background_color = Color(0.3, 0.3, 0.3, 0.8) + + +func _is_key_just_pressed(key): + if (button_presses[key] == 1): + button_presses[key] = 2 + return true + return false + + +func _update_keys_just_press(): + var set_key = func (k: Key): + if Input.is_key_pressed(k) and button_presses.has(k): + if button_presses[k] == 0: + return 1 + else: + return button_presses[k] + else: + return 0 + button_presses[KEY_LEFT] = set_key.call(KEY_LEFT) + button_presses[KEY_UP] = set_key.call(KEY_UP) + button_presses[KEY_CTRL] = set_key.call(KEY_CTRL) + button_presses[KEY_F1] = set_key.call(KEY_F1) + button_presses[KEY_1] = set_key.call(KEY_1) + button_presses[KEY_2] = set_key.call(KEY_2) + button_presses[KEY_3] = set_key.call(KEY_3) + + +func _update_timers(delta : float): + timer_1 -= delta + timer_cubes -= delta + timer_3 -= delta + timer_text -= delta + + +func _notification(what: int) -> void: + if what == NOTIFICATION_EDITOR_PRE_SAVE or what == NOTIFICATION_EXIT_TREE: + _thread_stop() + + +func _call_from_thread(): + if tests_use_threads and (not test_thread or not test_thread.is_alive()): + test_thread_closing = false + test_thread = Thread.new() + test_thread.start(_thread_body) + elif not tests_use_threads and (test_thread and test_thread.is_alive()): + _thread_stop() + + +func _thread_stop(): + if test_thread and test_thread.is_alive(): + tests_use_threads = false + test_thread_closing = true + test_thread.wait_to_finish() + + +func _thread_body(): + print("Thread started!") + while not test_thread_closing: + DebugDraw3D.draw_box(Vector3(0,-1,0), Quaternion.IDENTITY, Vector3.ONE, Color.BROWN, true, 0.016) + + var boxes = 10 + for y in boxes: + var offset := sin(TAU/boxes * y + wrapf(Time.get_ticks_msec() / 100.0, 0, TAU)) + var pos := Vector3(offset, y, 0) + DebugDraw3D.draw_box(pos, Quaternion.IDENTITY, Vector3.ONE, Color.GREEN_YELLOW, true, 0.016) + DebugDraw3D.draw_text(pos, str(y), 64, Color.WHITE , 0.016) + + if y == 0: + DebugDraw2D.set_text("thread. sin", offset) + + OS.delay_msec(16) + print("Thread finished!") diff --git a/examples_dd3d/DebugDrawDemoScene.gd.uid b/examples_dd3d/DebugDrawDemoScene.gd.uid new file mode 100644 index 0000000..39b5273 --- /dev/null +++ b/examples_dd3d/DebugDrawDemoScene.gd.uid @@ -0,0 +1 @@ +uid://ba2ie81p2x3x7 diff --git a/examples_dd3d/DebugDrawDemoScene.tscn b/examples_dd3d/DebugDrawDemoScene.tscn new file mode 100644 index 0000000..2193d51 --- /dev/null +++ b/examples_dd3d/DebugDrawDemoScene.tscn @@ -0,0 +1,1042 @@ +[gd_scene load_steps=43 format=3 uid="uid://c3sccy6x0ht5j"] + +[ext_resource type="Script" path="res://examples_dd3d/DebugDrawDemoScene.gd" id="1"] +[ext_resource type="FontFile" uid="uid://erdgllynwqkw" path="res://examples_dd3d/Roboto-Bold.ttf" id="2_aedbq"] +[ext_resource type="Script" path="res://examples_dd3d/demo_camera_movement.gd" id="3_3m1mp"] +[ext_resource type="FontFile" uid="uid://7am1h57ldd6" path="res://examples_dd3d/PixelatedElegance.ttf" id="3_tkhi8"] +[ext_resource type="Script" path="res://examples_dd3d/demo_music_visualizer.gd" id="4_eq2lt"] +[ext_resource type="Script" path="res://examples_dd3d/demo_settings_panel.gd" id="5_31v5h"] +[ext_resource type="Script" path="res://examples_dd3d/demo_web_docs_version_select.gd" id="6_07f7q"] + +[sub_resource type="Animation" id="Animation_ucqh5"] +resource_name = "RESET" +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("..:tests_use_threads") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:mesh:material:shader_parameter/albedo_texture") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [null] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_cq37i"] +_data = { +"RESET": SubResource("Animation_ucqh5") +} + +[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_87638"] +sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) +ground_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) + +[sub_resource type="Sky" id="Sky_4jfme"] +sky_material = SubResource("ProceduralSkyMaterial_87638") + +[sub_resource type="Environment" id="Environment_38m85"] +sky = SubResource("Sky_4jfme") +tonemap_mode = 2 +fog_light_energy = 0.41 +fog_density = 0.0757 +fog_height = 0.5 +fog_height_density = 4.6102 + +[sub_resource type="Animation" id="9"] +resource_name = "New Anim" +length = 1.5 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Spatial2:transform") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.7), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 1, 1), Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0.31558, 1)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Spatial5:transform") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, -1, 1), Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, -1.5801, 1)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Spatial4:transform") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.443643, 0, 1.53767), Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.443643, -0.791383, 1.53767)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Spatial7:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0.4, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector3(1.33, -0.119, -0.025), Vector3(1.32989, -0.583818, -0.025198)] +} + +[sub_resource type="Animation" id="10"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Spatial2:transform") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 1, 1)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Spatial5:transform") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, -1, 1)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Spatial4:transform") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.443643, 0, 1.53767)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Spatial7:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(1.32989, -0.583818, -0.025198)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_nj4nv"] +_data = { +"New Anim": SubResource("9"), +"RESET": SubResource("10") +} + +[sub_resource type="Shader" id="Shader_621vv"] +code = "shader_type spatial; +render_mode unshaded; + +uniform sampler2D albedo_texture : source_color; + +void fragment() { + ALBEDO = texture(albedo_texture,UV).rgb; +} +" + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_ho0aq"] +render_priority = 0 +shader = SubResource("Shader_621vv") + +[sub_resource type="PlaneMesh" id="PlaneMesh_c6mie"] +material = SubResource("ShaderMaterial_ho0aq") +size = Vector2(4, 4) + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_tigpa"] +radius = 0.395 +height = 1.825 + +[sub_resource type="BoxMesh" id="BoxMesh_b14rm"] + +[sub_resource type="Animation" id="Animation_w1m7s"] +length = 0.001 +tracks/0/type = "position_3d" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Camera") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = PackedFloat32Array(0, 1, -6.988, 10.986, 29.206) +tracks/1/type = "rotation_3d" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Camera") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = PackedFloat32Array(0, 1, -0.16935, 0, 0, 0.985556) + +[sub_resource type="Animation" id="Animation_h4e34"] +resource_name = "recursive" +length = 18.0 +tracks/0/type = "position_3d" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Camera") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = PackedFloat32Array(0, 1, -4.43594, -0.0101277, 8.56634, 2, 1, -4.63897, -0.279309, 8.78785, 4, 1, -4.65315, -0.433226, 8.88306, 6, 1, -4.6267, -0.506496, 8.90766, 8, 1, -4.60482, -0.535954, 8.90541, 10, 1, -4.59385, -0.545658, 8.89771, 12, 1, -4.59006, -0.547969, 8.89174, 14, 1, -4.58948, -0.548125, 8.88844, 16, 1, -4.58985, -0.547923, 8.887, 18, 1, -4.5903, -0.547799, 8.8865) +tracks/1/type = "rotation_3d" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Camera") +tracks/1/interp = 2 +tracks/1/loop_wrap = true +tracks/1/keys = PackedFloat32Array(0, 1, 0.190215, 0.859282, 0.43192, 0.197228, 2, 1, 0.183697, 0.853511, 0.484111, -0.0584063, 4, 1, 0.164659, 0.789579, 0.503307, -0.310057, 6, 1, -0.134401, -0.671836, -0.48821, 0.540577, 8, 1, -0.0949895, -0.508291, -0.439844, 0.734271, 10, 1, -0.0490975, -0.310157, -0.361506, 0.877898, 12, 1, 0.000153813, -0.090853, -0.258524, 0.961723, 14, 1, 0.0493618, 0.134434, -0.138051, 0.980017, 16, 1, 0.0953059, 0.351263, -0.00774742, 0.931381, 18, 1, 0.13493, 0.543814, 0.122741, 0.819143) + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_rcwnp"] +_data = { +"RESET": SubResource("Animation_w1m7s"), +"recursive": SubResource("Animation_h4e34") +} + +[sub_resource type="SphereShape3D" id="4"] +radius = 1.0 + +[sub_resource type="StandardMaterial3D" id="5"] +transparency = 1 +albedo_color = Color(0.54902, 0.54902, 0.729412, 0.403922) +emission_enabled = true +emission = Color(0.752941, 0.741176, 0.862745, 1) + +[sub_resource type="Animation" id="6"] +resource_name = "New Anim" +length = 3.0 +loop_mode = 1 +tracks/0/type = "rotation_3d" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("RayEmitter") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1, 1.3, 1, 1.31237e-06, -9.55543e-07, -2.2333e-06, 1, 2.3, 1, -0.158418, 0.0315871, 0.980558, -0.111409) +tracks/1/type = "position_3d" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("RayEmitter") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = PackedFloat32Array(0, 1, -1.03574, 2.47907, -0.819963, 0.5, 1, 0.914907, 1.78507, -0.103575, 1.3, 1, 0.00863326, 2.47907, -0.595551, 2.3, 1, 1.00051, 1.4046, 1.02585) + +[sub_resource type="Animation" id="7"] +length = 0.001 +tracks/0/type = "position_3d" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("RayEmitter") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = PackedFloat32Array(0, 1, -1.03574, 2.47907, -0.819963) +tracks/1/type = "rotation_3d" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("RayEmitter") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = PackedFloat32Array(0, 1, 0, 0, 0, 1) + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_vh8ml"] +_data = { +"New Anim": SubResource("6"), +"RESET": SubResource("7") +} + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_rbfyn"] +transparency = 1 +cull_mode = 2 +shading_mode = 0 +albedo_color = Color(0.215686, 0.215686, 0.215686, 0.764706) + +[sub_resource type="QuadMesh" id="QuadMesh_1t0id"] +material = SubResource("StandardMaterial3D_rbfyn") +orientation = 1 + +[sub_resource type="StandardMaterial3D" id="1"] +shading_mode = 0 +albedo_color = Color(0.533333, 0.105882, 0.105882, 1) + +[sub_resource type="Animation" id="8"] +resource_name = "RESET" +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(7, -2, 0)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_a7f1a"] +_data = { +"RESET": SubResource("8") +} + +[sub_resource type="Shader" id="Shader_3cmiq"] +code = "shader_type spatial; +render_mode unshaded; + +uniform sampler2D screen_texture : hint_screen_texture, repeat_disable, filter_nearest; + +void fragment() { + vec4 col = texture(screen_texture, SCREEN_UV); + ALBEDO = col.brg; + ALPHA = col.a; +} +" + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_t3isk"] +render_priority = 0 +shader = SubResource("Shader_3cmiq") + +[sub_resource type="BoxMesh" id="BoxMesh_0xv07"] +material = SubResource("ShaderMaterial_t3isk") + +[sub_resource type="Gradient" id="Gradient_tup4c"] +offsets = PackedFloat32Array(0.00471698, 0.316038, 0.646226, 1) +colors = PackedColorArray(0, 0.0156863, 1, 1, 0.0988327, 1, 0.122977, 1, 1, 0.111986, 0.118936, 1, 0, 0.0156863, 1, 1) + +[sub_resource type="Animation" id="Animation_n750a"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("../MusicPlayer:stream") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [null] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_0ity1"] +_data = { +"RESET": SubResource("Animation_n750a") +} + +[sub_resource type="Theme" id="3"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_oj5gf"] +content_margin_top = 5.0 +content_margin_bottom = 7.0 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_boyhr"] +content_margin_left = 5.0 +content_margin_top = 5.0 +content_margin_right = 5.0 +content_margin_bottom = 5.0 +bg_color = Color(0.0705882, 0.0705882, 0.0705882, 0.784314) +corner_radius_top_left = 4 +corner_radius_top_right = 4 +corner_radius_bottom_right = 4 +corner_radius_bottom_left = 4 + +[node name="DebugDrawDemoScene" type="Node3D"] +process_priority = 1 +script = ExtResource("1") +custom_font = ExtResource("2_aedbq") +custom_3d_font = ExtResource("3_tkhi8") +text_groups_position = 2 + +[node name="RESET" type="AnimationPlayer" parent="."] +root_node = NodePath("../OtherWorld") +libraries = { +"": SubResource("AnimationLibrary_cq37i") +} + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(-0.866023, -0.433016, 0.250001, 0, 0.499998, 0.866027, -0.500003, 0.749999, -0.43301, 0, 0, 0) +visible = false +directional_shadow_max_distance = 200.0 + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +environment = SubResource("Environment_38m85") + +[node name="Camera" type="Camera3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.942642, 0.333808, 0, -0.333808, 0.942642, -6.988, 10.986, 29.206) +cull_mask = 1 +current = true +fov = 53.0 +near = 0.001 +far = 100.0 +script = ExtResource("3_3m1mp") + +[node name="Panel" type="PanelContainer" parent="."] +visible = false +custom_minimum_size = Vector2(300, 300) +anchors_preset = 2 +anchor_top = 1.0 +anchor_bottom = 1.0 +offset_top = -300.0 +offset_right = 300.0 +grow_vertical = 0 + +[node name="ViewportContainer" type="SubViewportContainer" parent="Panel"] +layout_mode = 2 + +[node name="Viewport" type="SubViewport" parent="Panel/ViewportContainer"] +handle_input_locally = false +size = Vector2i(300, 300) +render_target_update_mode = 0 + +[node name="CameraLayer2_5" type="Camera3D" parent="Panel/ViewportContainer/Viewport"] +transform = Transform3D(1, 0, 0, 0, 0.34202, 0.939693, 0, -0.939693, 0.34202, -3.988, 39.474, 14.053) +cull_mask = 2 +current = true +fov = 38.8 +near = 2.63 +far = 52.5 + +[node name="Zones" type="Node3D" parent="."] + +[node name="SpheresBox" type="Node3D" parent="Zones"] +unique_name_in_owner = true +transform = Transform3D(8.3761, 0, 0, 0, 4.89771, 0, 0, 0, 9.36556, -11.1864, 0.645876, -7.86506) + +[node name="CylindersBox" type="Node3D" parent="Zones"] +unique_name_in_owner = true +transform = Transform3D(9.78549, 0, 0, 0, 4.20302, 0, 0, 0, 5.62455, -23.6827, -0.015712, -6.19233) + +[node name="BoxesBox" type="Node3D" parent="Zones"] +unique_name_in_owner = true +transform = Transform3D(10.0513, 0, 0, 0, 5.99877, 0, 0, 0, 12.1174, -16.0257, -0.206735, 6.27643) + +[node name="LinesBox" type="Node3D" parent="Zones"] +unique_name_in_owner = true +transform = Transform3D(10.7186, 0, 0, 0, 3.9777, 0, 0, 0, 7.05487, 10.6302, 1.91174, -7.11416) + +[node name="PathsBox" type="Node3D" parent="Zones"] +unique_name_in_owner = true +transform = Transform3D(5.95153, 0, 0, 0, 7.71864, 0, 0, 0, 6.31617, 0.184938, 1.12881, -7.18731) + +[node name="MiscBox" type="Node3D" parent="Zones"] +unique_name_in_owner = true +transform = Transform3D(4.38886, 0, 0, 0, 2.72083, 0, 0, 0, 8.81683, -5.69728, -0.206735, 5.58232) + +[node name="LinesAnim" type="AnimationPlayer" parent="."] +root_node = NodePath("../LinePath") +libraries = { +"": SubResource("AnimationLibrary_nj4nv") +} +autoplay = "New Anim" + +[node name="LinePath" type="Node3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.0543, -8) + +[node name="Spatial" type="Node3D" parent="LinePath"] + +[node name="Spatial2" type="Node3D" parent="LinePath"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 1, 1) + +[node name="Spatial3" type="Node3D" parent="LinePath"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.462435, 0, 3) + +[node name="Spatial4" type="Node3D" parent="LinePath"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.443643, 0, 1.53767) + +[node name="Spatial5" type="Node3D" parent="LinePath"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, -1, 1) + +[node name="Spatial6" type="Node3D" parent="LinePath"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, -1) + +[node name="Spatial7" type="Node3D" parent="LinePath"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.32989, -0.583818, -0.025198) + +[node name="Cylinders" type="Node3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -23.5266, 4.76837e-07, -5.82213) + +[node name="Cylinder1" type="Node3D" parent="Cylinders"] +transform = Transform3D(1.20775, 0.591481, -3.4521e-07, 0.554162, -1.12986, 0.858242, 0.208031, -0.424147, -2.28622, -3.03832, 0, -0.377882) + +[node name="Cylinder2" type="Node3D" parent="Cylinders"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.234978, -0.4237, 0.332998) + +[node name="Cylinder3" type="Node3D" parent="Cylinders"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.35527, -0.655492, -0.352802) + +[node name="1" type="Node3D" parent="Cylinders/Cylinder3"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.419773, -2.38419e-07, -1.40591) + +[node name="2" type="Node3D" parent="Cylinders/Cylinder3"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.01018, 0.486778, 1.32635) + +[node name="Spheres" type="Node3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -11.1201, 0.166728, -7.893) + +[node name="SphereTransform" type="Node3D" parent="Spheres"] +transform = Transform3D(3.018, 0, 0, 0, 0.945452, -3.30182, 0, 1.04515, 2.98686, -2.14465, 4.76837e-07, 2.11952) + +[node name="SphereHDTransform" type="Node3D" parent="Spheres"] +transform = Transform3D(1.26984, 1.16629, -2.42095, 0.098772, 0.80937, 4.21576, -2.65493, 0.587941, -1.00109, -2.13175, 4.76837e-07, -2.62531) + +[node name="SpherePosition" type="Node3D" parent="Spheres"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.76745, 0.458486, 1.95921) + +[node name="Boxes" type="Node3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15.2493, 0, 6.42043) + +[node name="Box1" type="Node3D" parent="Boxes"] +transform = Transform3D(2.90583, -0.000527017, -5.34615, 0.00469241, 3.92788, 0.0141019, 0.556318, -0.0303774, 1.91619, -0.961557, 0, -3.78672) +rotation_edit_mode = 2 + +[node name="Box2" type="Node3D" parent="Boxes"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.531922, -1.34723, 1.44924) + +[node name="Box3" type="Node3D" parent="Boxes"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.34837, -1.08298, 4.36414) + +[node name="AABB_fixed" type="Node3D" parent="Boxes"] +transform = Transform3D(0.834492, 0, -0.551019, 0, 1, 0, 0.55102, 0, 0.834493, -3.71325, -1.03995, 0.470324) + +[node name="AABB" type="Node3D" parent="Boxes"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.99963, -0.869998, 0.205034) + +[node name="a" type="Node3D" parent="Boxes/AABB"] +transform = Transform3D(0.864099, 0.258702, 0.431747, -1.49012e-08, 0.857796, -0.51399, -0.503322, 0.444139, 0.741221, 1.48526, -1.45318, 1.96619) + +[node name="b" type="Node3D" parent="Boxes/AABB"] +transform = Transform3D(0.864099, 0.258702, 0.431747, -1.49012e-08, 0.857796, -0.51399, -0.503322, 0.444139, 0.741221, -1.24128, 1.47773, -2.13102) + +[node name="BoxAB" type="Node3D" parent="Boxes"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.66169, -2.2624, 4.04042) + +[node name="a" type="Node3D" parent="Boxes/BoxAB"] +transform = Transform3D(0.864099, 0.258702, 0.431747, -1.49012e-08, 0.857796, -0.51399, -0.503322, 0.444139, 0.741221, 0.556136, -0.666145, 0.951601) + +[node name="b" type="Node3D" parent="Boxes/BoxAB"] +transform = Transform3D(0.864099, 0.258702, 0.431747, -1.49012e-08, 0.857796, -0.51399, -0.503322, 0.444139, 0.741221, -0.548804, 0.715255, -0.942184) + +[node name="o" type="Node3D" parent="Boxes/BoxAB"] +transform = Transform3D(0.826805, 0.360538, 0.431748, -0.102949, 0.851596, -0.51399, -0.552988, 0.380522, 0.741221, 0, 0, 0) +metadata/_edit_group_ = true + +[node name="up" type="Node3D" parent="Boxes/BoxAB/o"] +transform = Transform3D(1, -1.49012e-08, 0, -1.04308e-07, 1, 0, 0, 0, 1, 0, 0.553809, -0.331842) + +[node name="BoxABEdge" type="Node3D" parent="Boxes"] +transform = Transform3D(0.965926, -0.0669873, -0.25, 0, 0.965926, -0.258819, 0.258819, 0.25, 0.933013, 0.348115, -1.30239, 4.88007) + +[node name="a" type="Node3D" parent="Boxes/BoxABEdge"] +transform = Transform3D(0.241143, 0.650584, 0.720132, -0.123077, 0.756539, -0.642262, -0.962654, 0.066246, 0.262507, 0.384618, -0.635015, 0.0956135) + +[node name="b" type="Node3D" parent="Boxes/BoxABEdge"] +transform = Transform3D(0.241143, 0.650584, 0.720133, -0.123077, 0.756539, -0.642261, -0.962654, 0.0662459, 0.262507, -0.287622, 0.997905, -0.144578) + +[node name="o" type="Node3D" parent="Boxes/BoxABEdge"] +transform = Transform3D(1, 1.49012e-08, 2.98023e-08, 7.45058e-09, 1, -1.49012e-08, -1.49012e-08, -1.49012e-08, 1, 0, 0, 0) +metadata/_edit_group_ = true + +[node name="up" type="Node3D" parent="Boxes/BoxABEdge/o"] +transform = Transform3D(1, -7.45058e-09, 0, -7.45058e-09, 1, 0, 2.98023e-08, -1.49012e-08, 1, -9.53674e-07, 0.6, 0) + +[node name="OtherWorld" type="MeshInstance3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.53219, -2.5, 5.30229) +mesh = SubResource("PlaneMesh_c6mie") +skeleton = NodePath("") + +[node name="RESET" type="AnimationPlayer" parent="OtherWorld"] +libraries = { +"": SubResource("AnimationLibrary_cq37i") +} + +[node name="SubViewport" type="SubViewport" parent="OtherWorld"] +own_world_3d = true +handle_input_locally = false +render_target_update_mode = 4 + +[node name="SubViewportContainer" type="SubViewportContainer" parent="OtherWorld/SubViewport"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +stretch = true + +[node name="SubViewport" type="SubViewport" parent="OtherWorld/SubViewport/SubViewportContainer"] +handle_input_locally = false +render_target_update_mode = 4 + +[node name="Camera3D" type="Camera3D" parent="OtherWorld/SubViewport/SubViewportContainer/SubViewport"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.57063, 0.6, 7.25557) +current = true +far = 5.0 + +[node name="MeshInstance3D" type="MeshInstance3D" parent="OtherWorld/SubViewport/SubViewportContainer/SubViewport"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.57063, 0.6, 5.72253) +mesh = SubResource("CapsuleMesh_tigpa") +skeleton = NodePath("../../..") + +[node name="OtherWorldBox" type="Node3D" parent="OtherWorld/SubViewport/SubViewportContainer/SubViewport"] +unique_name_in_owner = true +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.57063, 0.6, 5.72253) + +[node name="Misc" type="Node3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.68259, 0, 4.46741) + +[node name="Billboard" type="Node3D" parent="Misc"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.403353, -0.331599, 2.22542) + +[node name="Arrow" type="Node3D" parent="Misc"] +transform = Transform3D(0.802141, -0.286294, -0.524028, -0.539546, 0.0285125, -0.841473, 0.25585, 0.957718, -0.131597, -0.475607, -0.670307, 2.30581) + +[node name="Position" type="Node3D" parent="Misc"] +transform = Transform3D(1.51514, 0.589536, 1.00858, -1.34875, 0.662262, 1.133, 0, -0.462445, 2.90833, 0.853743, 0.0843356, -1.73676) + +[node name="GizmoNormal" type="Node3D" parent="Misc"] +transform = Transform3D(0.965926, 0, -0.258819, 0, 1, 0, 0.258819, 0, 0.965926, 0.890203, -0.306246, 0.356159) + +[node name="ZDepthTestCube" type="MeshInstance3D" parent="Misc/GizmoNormal"] +unique_name_in_owner = true +transform = Transform3D(0.591801, 0, 4.47035e-08, 0, 0.591801, 0, -4.47035e-08, 0, 0.591801, 0, 0, 0) +mesh = SubResource("BoxMesh_b14rm") + +[node name="GizmoTransform" type="Node3D" parent="Misc"] +transform = Transform3D(0.879881, 0.248446, -0.405072, -0.346604, 0.918688, -0.189411, 0.325077, 0.307059, 0.894449, -0.838587, -0.458, -0.176491) + +[node name="GizmoOneColor" type="Node3D" parent="Misc"] +transform = Transform3D(0.385568, 0.0415614, 0.921743, 0.082879, 0.993386, -0.0794599, -0.91895, 0.107031, 0.379573, -0.838587, -0.139425, -1.93055) + +[node name="LocalTransformRecursiveOrigin" type="Node3D" parent="Misc"] +unique_name_in_owner = true +transform = Transform3D(0.785829, 0.365814, 0.498651, 0.0146361, 0.795073, -0.606337, -0.618271, 0.483775, 0.619438, 0.92688, -0.70441, 4.03998) + +[node name="RecursiveTransformTest" type="AnimationPlayer" parent="Misc/LocalTransformRecursiveOrigin"] +unique_name_in_owner = true +root_node = NodePath("../../..") +libraries = { +"": SubResource("AnimationLibrary_rcwnp") +} + +[node name="HitTest" type="Node3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.724359, -1.03227, 7.85404) + +[node name="StaticBody" type="StaticBody3D" parent="HitTest"] + +[node name="CollisionShape" type="CollisionShape3D" parent="HitTest/StaticBody"] +shape = SubResource("4") + +[node name="HitTestSphere" type="CSGSphere3D" parent="HitTest/StaticBody"] +unique_name_in_owner = true +radius = 1.0 +radial_segments = 16 +rings = 10 +material = SubResource("5") + +[node name="RayEmitter" type="Node3D" parent="HitTest"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.03574, 2.47907, -0.819963) + +[node name="RayCast" type="RayCast3D" parent="HitTest/RayEmitter"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.732104, 0, -0.814761) +enabled = false +target_position = Vector3(0, -3.464, 0) + +[node name="RayCast2" type="RayCast3D" parent="HitTest/RayEmitter"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.684873, 0, -0.791145) +enabled = false +target_position = Vector3(0, -3.464, 0) + +[node name="RayCast3" type="RayCast3D" parent="HitTest/RayEmitter"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.708488, 0, 0.543175) +enabled = false +target_position = Vector3(0, -3.464, 0) + +[node name="RayCast4" type="RayCast3D" parent="HitTest/RayEmitter"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.708489, 0, 0.566791) +enabled = false +target_position = Vector3(0, -3.464, 0) + +[node name="RayCast5" type="RayCast3D" parent="HitTest/RayEmitter"] +transform = Transform3D(0.974217, -0.225614, 0, 0.225614, 0.974217, 0, 0, 0, 1, -0.447564, 0, -0.259778) +enabled = false +target_position = Vector3(0, -3.464, 0) + +[node name="RayCast6" type="RayCast3D" parent="HitTest/RayEmitter"] +transform = Transform3D(0.935992, 0.352021, 0, -0.352021, 0.935992, 0, 0, 0, 1, 0.35227, -0.245904, -0.25849) +enabled = false +target_position = Vector3(0, -3.464, 0) + +[node name="RayEmitterAnimationPlayer" type="AnimationPlayer" parent="HitTest"] +unique_name_in_owner = true +libraries = { +"": SubResource("AnimationLibrary_vh8ml") +} +autoplay = "New Anim" + +[node name="Grids" type="Node3D" parent="."] +transform = Transform3D(0.707106, 0, -0.707108, 0, 1, 0, 0.707108, 0, 0.707106, 0.730597, -2.5, 2.76274) + +[node name="GridCentered" type="Node3D" parent="Grids"] +transform = Transform3D(1.74492, 0.723785, -1.74493, -1.24976, -7.72562e-08, -1.24975, -1.74493, 0.723783, 1.74493, 1.74919, -0.0010004, 1.75466) +rotation_edit_mode = 2 + +[node name="Subdivision" type="Node3D" parent="Grids/GridCentered"] +transform = Transform3D(1, -6.03961e-14, -2.68221e-07, 3.55271e-13, 1, 1.42109e-14, -1.19209e-07, 1.1724e-13, 1, -0.2, 4.76837e-07, 0.4) + +[node name="Grid" type="Node3D" parent="Grids"] +transform = Transform3D(5, 0, 4.76837e-07, 0, 1, 0, -4.76837e-07, 0, 5, 0, 0, 0) + +[node name="Subdivision" type="Node3D" parent="Grids/Grid"] +transform = Transform3D(1, 0, -2.98023e-08, 0, 0.999999, 1.90735e-05, 0, 4.65661e-10, 0.999999, 1, 0, 1) + +[node name="PlaneOrigin" type="MeshInstance3D" parent="."] +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 11.0482, 7.33669, -13.1715) +mesh = SubResource("QuadMesh_1t0id") + +[node name="Lines" type="Node3D" parent="."] +transform = Transform3D(1.51514, 0.589536, 1.00858, -1.34875, 0.662262, 1.133, 0, -0.462445, 2.90833, 10.2488, -0.331599, -10.3326) + +[node name="1" type="Node3D" parent="Lines"] +transform = Transform3D(1, 6.61592e-09, 2.23038e-08, 9.40939e-07, 1, 0, -2.76085e-08, -1.49012e-08, 1, -1.46213, -4.03317, 0.61692) + +[node name="2" type="Node3D" parent="Lines"] +transform = Transform3D(1, 6.61592e-09, 2.23038e-08, 9.40939e-07, 1, 0, -2.76085e-08, -1.49012e-08, 1, -1.01875, -1.79584, -0.163045) + +[node name="3" type="Node3D" parent="Lines"] +transform = Transform3D(1, 6.61592e-09, 2.23038e-08, 6.87561e-07, 1, 0, -2.87275e-08, -1.49012e-08, 1, -0.1559, -0.407045, 0.0523388) + +[node name="4" type="Node3D" parent="Lines"] +transform = Transform3D(1, 6.61592e-09, 2.23038e-08, 4.9239e-07, 1, 0, -3.40677e-08, -1.49012e-08, 1, 1.18591, 1.8987, 0.301906) + +[node name="5" type="Node3D" parent="Lines"] +transform = Transform3D(-0.998871, -0.0207882, -0.0355643, 0.0855375, -0.5714, -2.68836, 0.0136011, -0.249864, 0.572532, 1.43126, 0.26242, 1.92347) + +[node name="6" type="Node3D" parent="Lines"] +transform = Transform3D(-0.998872, -0.0207882, -0.0355643, 0.085537, -0.5714, -2.68836, 0.0136012, -0.249864, 0.572533, 1.43441, 1.50606, 1.20028) + +[node name="7" type="Node3D" parent="Lines"] +transform = Transform3D(-0.998873, -0.0207882, -0.0355641, 0.0855357, -0.5714, -2.68836, 0.0136014, -0.249864, 0.572533, 0.0511096, -1.3236, 1.06745) + +[node name="8" type="Node3D" parent="Lines"] +transform = Transform3D(-0.998873, -0.0207882, -0.0355641, 0.0855353, -0.5714, -2.68836, 0.0136016, -0.249864, 0.572533, -1.01372, -3.80486, 1.25019) + +[node name="Target" type="Node3D" parent="Lines"] +transform = Transform3D(1, -2.7352e-06, 2.60722e-07, 4.10378e-06, 1, 0, -4.28605e-07, -1.49012e-08, 1, -0.69134, 0.176475, 1.30597) + +[node name="LagTest" type="CSGBox3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7, -2, 0) +size = Vector3(2, 2, 2) +material = SubResource("1") + +[node name="RESET" type="AnimationPlayer" parent="LagTest"] +libraries = { +"": SubResource("AnimationLibrary_a7f1a") +} + +[node name="PostProcess" type="MeshInstance3D" parent="."] +transform = Transform3D(-2.18557e-07, 0, 1.5, 0, 5, 0, -5, 0, -6.55671e-08, 16, 0, 0) +mesh = SubResource("BoxMesh_0xv07") +skeleton = NodePath("../Lines") + +[node name="MusicVisualizer" type="VBoxContainer" parent="."] +offset_left = 10.0 +offset_top = 10.0 +offset_right = 50.0 +offset_bottom = 50.0 +script = ExtResource("4_eq2lt") +colors = SubResource("Gradient_tup4c") + +[node name="OpenFile" type="Button" parent="MusicVisualizer"] +layout_mode = 2 +size_flags_horizontal = 0 +text = "Open music" + +[node name="RESET" type="AnimationPlayer" parent="MusicVisualizer"] +root_node = NodePath("../OpenFile") +libraries = { +"": SubResource("AnimationLibrary_0ity1") +} + +[node name="MusicPlayer" type="AudioStreamPlayer" parent="MusicVisualizer"] +unique_name_in_owner = true +autoplay = true +bus = &"MusicAnalyzer" + +[node name="VBox" type="VBoxContainer" parent="MusicVisualizer"] +layout_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="MusicVisualizer/VBox"] +layout_mode = 2 + +[node name="VolumeSlider" type="HSlider" parent="MusicVisualizer/VBox/HBoxContainer"] +unique_name_in_owner = true +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 4 +max_value = 1.0 +step = 0.01 +value = 0.1 + +[node name="MuteMaster" type="CheckBox" parent="MusicVisualizer/VBox/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +button_pressed = true +text = "Mute" + +[node name="AudioVisualizer" type="Node3D" parent="."] +unique_name_in_owner = true +transform = Transform3D(0.2, 0, 0, 0, 5, 0, 0, 0, 0.2, -5.31036, -1.422, 14.14) + +[node name="CustomCanvas" type="Control" parent="."] +unique_name_in_owner = true +layout_mode = 3 +anchors_preset = 1 +anchor_left = 1.0 +anchor_right = 1.0 +offset_left = -545.0 +offset_top = 46.0 +offset_right = -37.0 +offset_bottom = 638.0 +grow_horizontal = 0 +mouse_filter = 2 +metadata/_edit_lock_ = true + +[node name="Settings" type="Control" parent="."] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +theme = SubResource("3") +script = ExtResource("5_31v5h") +switch_to_scene = "res://examples_dd3d/DebugDrawDemoSceneCS.tscn" +metadata/_edit_lock_ = true + +[node name="HBox" type="HBoxContainer" parent="Settings"] +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -497.0 +offset_top = -372.0 +offset_right = -10.0006 +offset_bottom = -10.0 +grow_horizontal = 0 +grow_vertical = 0 + +[node name="VBoxContainer" type="VBoxContainer" parent="Settings/HBox"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 8 + +[node name="VersionBlock" type="HBoxContainer" parent="Settings/HBox/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +script = ExtResource("6_07f7q") + +[node name="Label" type="Label" parent="Settings/HBox/VBoxContainer/VersionBlock"] +layout_mode = 2 +size_flags_horizontal = 10 +theme_override_font_sizes/font_size = 13 +text = "Demo version:" + +[node name="OptionButton" type="OptionButton" parent="Settings/HBox/VBoxContainer/VersionBlock"] +layout_mode = 2 +size_flags_horizontal = 8 +theme_override_font_sizes/font_size = 13 +item_count = 1 +popup/item_0/text = "1.0.0" +popup/item_0/id = 0 + +[node name="Label" type="Label" parent="Settings/HBox/VBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 8 +theme_override_styles/normal = SubResource("StyleBoxEmpty_oj5gf") +text = "GDScript example" +horizontal_alignment = 2 +metadata/_edit_use_anchors_ = true + +[node name="VBox" type="VBoxContainer" parent="Settings/HBox"] +layout_mode = 2 +alignment = 2 + +[node name="HideShowPanelButton" type="Button" parent="Settings/HBox/VBox"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 4 +theme_override_font_sizes/font_size = 13 +text = "Hide panel" + +[node name="SettingsPanel" type="PanelContainer" parent="Settings/HBox/VBox"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 8 +theme_override_styles/panel = SubResource("StyleBoxFlat_boyhr") + +[node name="VBox" type="VBoxContainer" parent="Settings/HBox/VBox/SettingsPanel"] +layout_mode = 2 +size_flags_horizontal = 3 +alignment = 2 + +[node name="Label" type="Label" parent="Settings/HBox/VBox/SettingsPanel/VBox"] +layout_mode = 2 +theme_override_colors/font_color = Color(0.792157, 0.792157, 0.792157, 1) +text = "Common:" + +[node name="HBox3" type="HBoxContainer" parent="Settings/HBox/VBox/SettingsPanel/VBox"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Settings/HBox/VBox/SettingsPanel/VBox/HBox3"] +layout_mode = 2 +text = "Thickness " + +[node name="ThicknessSlider" type="HSlider" parent="Settings/HBox/VBox/SettingsPanel/VBox/HBox3"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 4 +max_value = 0.5 +step = 0.001 +value = 0.05 + +[node name="HBox5" type="HBoxContainer" parent="Settings/HBox/VBox/SettingsPanel/VBox"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Settings/HBox/VBox/SettingsPanel/VBox/HBox5"] +layout_mode = 2 +text = "Frustum Scale" + +[node name="FrustumScaleSlider" type="HSlider" parent="Settings/HBox/VBox/SettingsPanel/VBox/HBox5"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 4 +max_value = 1.0 +step = 0.001 +value = 0.5 + +[node name="UpdateInPhysics" type="CheckBox" parent="Settings/HBox/VBox/SettingsPanel/VBox"] +unique_name_in_owner = true +layout_mode = 2 +text = "Update in physics (15 Ticks) *" + +[node name="Label4" type="Label" parent="Settings/HBox/VBox/SettingsPanel/VBox"] +layout_mode = 2 +theme_override_colors/font_color = Color(0.792157, 0.792157, 0.792157, 1) +text = "Text:" + +[node name="ShowText" type="CheckBox" parent="Settings/HBox/VBox/SettingsPanel/VBox"] +unique_name_in_owner = true +layout_mode = 2 +text = "Show text" + +[node name="ShowExamples" type="CheckBox" parent="Settings/HBox/VBox/SettingsPanel/VBox"] +unique_name_in_owner = true +layout_mode = 2 +text = "Examples" + +[node name="ShowStats" type="CheckBox" parent="Settings/HBox/VBox/SettingsPanel/VBox"] +unique_name_in_owner = true +layout_mode = 2 +text = "Debug stats" + +[node name="ShowHints" type="CheckBox" parent="Settings/HBox/VBox/SettingsPanel/VBox"] +unique_name_in_owner = true +layout_mode = 2 +text = "Hints" + +[node name="Draw3DText" type="CheckBox" parent="Settings/HBox/VBox/SettingsPanel/VBox"] +unique_name_in_owner = true +layout_mode = 2 +text = "3D Text" + +[node name="Label3" type="Label" parent="Settings/HBox/VBox/SettingsPanel/VBox"] +layout_mode = 2 +theme_override_colors/font_color = Color(0.792157, 0.792157, 0.792157, 1) +text = "Boxes:" + +[node name="HBox4" type="HBoxContainer" parent="Settings/HBox/VBox/SettingsPanel/VBox"] +layout_mode = 2 + +[node name="DrawBoxes" type="CheckBox" parent="Settings/HBox/VBox/SettingsPanel/VBox/HBox4"] +unique_name_in_owner = true +layout_mode = 2 +text = "Draw an array of boxes" + +[node name="Draw1MBoxes" type="CheckBox" parent="Settings/HBox/VBox/SettingsPanel/VBox/HBox4"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Draw 1 Million boxes, otherwise 7500pcs." +text = "1M" + +[node name="DrawBoxesAddText" type="CheckBox" parent="Settings/HBox/VBox/SettingsPanel/VBox"] +unique_name_in_owner = true +layout_mode = 2 +text = "Add text to boxes" + +[node name="SwitchLang" type="Button" parent="Settings/HBox/VBox/SettingsPanel/VBox"] +unique_name_in_owner = true +layout_mode = 2 +text = "Switch to C#" + +[connection signal="pressed" from="MusicVisualizer/OpenFile" to="MusicVisualizer" method="_pressed"] +[connection signal="value_changed" from="MusicVisualizer/VBox/HBoxContainer/VolumeSlider" to="MusicVisualizer" method="_on_volume_slider_value_changed"] +[connection signal="toggled" from="MusicVisualizer/VBox/HBoxContainer/MuteMaster" to="MusicVisualizer" method="_on_mute_master_toggled"] +[connection signal="pressed" from="Settings/HBox/VBox/HideShowPanelButton" to="Settings" method="_on_hide_show_panel_pressed"] +[connection signal="value_changed" from="Settings/HBox/VBox/SettingsPanel/VBox/HBox3/ThicknessSlider" to="Settings" method="_on_thickness_slider_value_changed"] +[connection signal="value_changed" from="Settings/HBox/VBox/SettingsPanel/VBox/HBox5/FrustumScaleSlider" to="Settings" method="_on_frustum_scale_slider_value_changed"] +[connection signal="toggled" from="Settings/HBox/VBox/SettingsPanel/VBox/UpdateInPhysics" to="Settings" method="_on_update_in_physics_toggled"] +[connection signal="toggled" from="Settings/HBox/VBox/SettingsPanel/VBox/ShowText" to="Settings" method="_on_show_text_toggled"] +[connection signal="toggled" from="Settings/HBox/VBox/SettingsPanel/VBox/ShowExamples" to="Settings" method="_on_show_examples_toggled"] +[connection signal="toggled" from="Settings/HBox/VBox/SettingsPanel/VBox/ShowStats" to="Settings" method="_on_show_stats_toggled"] +[connection signal="toggled" from="Settings/HBox/VBox/SettingsPanel/VBox/ShowHints" to="Settings" method="_on_show_hints_toggled"] +[connection signal="toggled" from="Settings/HBox/VBox/SettingsPanel/VBox/Draw3DText" to="Settings" method="_on_draw_3d_text_toggled"] +[connection signal="toggled" from="Settings/HBox/VBox/SettingsPanel/VBox/HBox4/DrawBoxes" to="Settings" method="_on_draw_boxes_toggled"] +[connection signal="toggled" from="Settings/HBox/VBox/SettingsPanel/VBox/HBox4/Draw1MBoxes" to="Settings" method="_on_draw_1m_boxes_toggled"] +[connection signal="toggled" from="Settings/HBox/VBox/SettingsPanel/VBox/DrawBoxesAddText" to="Settings" method="_on_add_text_to_boxes_toggled"] +[connection signal="pressed" from="Settings/HBox/VBox/SettingsPanel/VBox/SwitchLang" to="Settings" method="_on_Button_pressed"] diff --git a/examples_dd3d/DebugDrawDemoSceneCS.cs b/examples_dd3d/DebugDrawDemoSceneCS.cs new file mode 100644 index 0000000..f847d05 --- /dev/null +++ b/examples_dd3d/DebugDrawDemoSceneCS.cs @@ -0,0 +1,854 @@ + +using Godot; +using System; +using System.Collections.Generic; + +[Tool] +public partial class DebugDrawDemoSceneCS : Node3D +{ + Random random = new Random(); + + [Export] Font custom_font; + [Export] Font custom_3d_font; + [Export] bool zylann_example = false; + [Export] bool update_in_physics = false; + [Export] bool test_text = true; + [Export] bool more_test_cases = true; + [Export] bool draw_3d_text = true; + [Export] bool draw_array_of_boxes = false; + [Export] bool draw_text_with_boxes = false; + [Export] bool draw_1m_boxes = false; + [Export(PropertyHint.Range, "0, 5, 0.001")] float debug_thickness = 0.1f; + [Export(PropertyHint.Range, "0, 1")] float camera_frustum_scale = 0.9f; + + [ExportGroup("Text groups", "text_groups")] + [Export] bool text_groups_show_examples = true; + [Export] bool text_groups_show_hints = true; + [Export] bool text_groups_show_stats = true; + [Export] bool text_groups_show_stats_2d = true; + [Export] DebugDraw2DConfig.BlockPosition text_groups_position = DebugDraw2DConfig.BlockPosition.LeftTop; + [Export] Vector2I text_groups_offset = new Vector2I(8, 8); + [Export] Vector2I text_groups_padding = new Vector2I(3, 1); + [Export(PropertyHint.Range, "1, 100")] int text_groups_default_font_size = 15; + [Export(PropertyHint.Range, "1, 100")] int text_groups_title_font_size = 20; + [Export(PropertyHint.Range, "1, 100")] int text_groups_text_font_size = 17; + + Dictionary button_presses = new Dictionary() { + { Key.Left, 0 }, + { Key.Up, 0 }, + { Key.Ctrl, 0 }, + { Key.F1, 0 }, + { Key.Key1, 0 }, + { Key.Key2, 0 }, + { Key.Key3, 0 }, + }; + + double timer_1 = 0.0; + double timer_cubes = 0.0; + double timer_3 = 0.0; + double timer_text = 0.0; + + public override async void _Ready() + { + _get_nodes(); + _update_keys_just_press(); + + await new SignalAwaiter(GetTree(), "process_frame", this); + + // this check is required for inherited scenes, because an instance of this + // script is created first, and then overridden by another + if (!IsInsideTree()) + return; + + DebugDraw2D.Config.TextBackgroundColor = new Color(0.3f, 0.3f, 0.3f, 0.8f); + } + + bool _is_key_just_pressed(Key key) + { + if (button_presses[key] == 1) + { + button_presses[key] = 2; + return true; + } + return false; + } + + void _update_timers(double delta) + { + timer_1 -= delta; + timer_cubes -= delta; + timer_3 -= delta; + timer_text -= delta; + } + + void _update_keys_just_press() + { + var set = (Key k) => Input.IsKeyPressed(k) ? (button_presses[k] == 0 ? 1 : button_presses[k]) : 0; + button_presses[Key.Left] = set(Key.Left); + button_presses[Key.Up] = set(Key.Up); + button_presses[Key.Ctrl] = set(Key.Ctrl); + button_presses[Key.F1] = set(Key.F1); + button_presses[Key.Key1] = set(Key.Key1); + button_presses[Key.Key2] = set(Key.Key2); + button_presses[Key.Key3] = set(Key.Key3); + } + + bool phys_frame_called = false; + public override void _Process(double delta) + { + ((ShaderMaterial)((PrimitiveMesh)dOtherWorld.Mesh).Material).SetShaderParameter("albedo_texture", dOtherWorldViewport.GetTexture()); + + phys_frame_called = false; + if (!update_in_physics) + { + MainUpdate(delta); + _update_timers(delta); + } + } + + public override void _PhysicsProcess(double delta) + { + if (!phys_frame_called) + { + phys_frame_called = true; + if (update_in_physics) + { + MainUpdate(delta); + _update_timers(delta); + } + } + + // Physics specific: + if (!zylann_example) + { + DebugDraw3D.DrawLine(dLines_8.GlobalPosition, dLines_Target.GlobalPosition, Colors.Yellow); + if (more_test_cases) + { + _draw_rays_casts(); + } + + // Additional drawing in the Viewport + using (var _w1 = DebugDraw3D.NewScopedConfig().SetViewport(dOtherWorldBox.GetViewport()).SetThickness(0.01f).SetCenterBrightness(1).SetNoDepthTest(true)) + { + DebugDraw3D.DrawBoxXf(new Transform3D(Basis.Identity + .Scaled(Vector3.One * 0.3f) + .Rotated(new Vector3(0, 0, 1), Mathf.Pi / 4) + .Rotated(new Vector3(0, 1, 0), Mathf.Wrap(Time.GetTicksMsec() / -1500.0f, 0, Mathf.Tau) - Mathf.Pi / 4), dOtherWorldBox.GlobalPosition), + Colors.Brown, true, 0.4f); + } + } + } + + void MainUpdate(double delta) + { + DebugDraw3D.ScopedConfig().SetThickness(debug_thickness); + + _update_keys_just_press(); + + if (_is_key_just_pressed(Key.F1)) + zylann_example = !zylann_example; + + // Zylann's example :D + if (zylann_example) + { + var _time = Time.GetTicksMsec() / 1000.0f; + var box_pos = new Vector3(0, Mathf.Sin(_time * 4f), 0); + var line_begin = new Vector3(-1, Mathf.Sin(_time * 4f), 0); + var line_end = new Vector3(1, Mathf.Cos(_time * 4f), 0); + DebugDraw3D.DrawBox(box_pos, Quaternion.Identity, new Vector3(1, 2, 1), new Color(0, 1, 0)); + DebugDraw3D.DrawLine(line_begin, line_end, new Color(1, 1, 0)); + DebugDraw2D.SetText("Time", _time); + DebugDraw2D.SetText("Frames drawn", Engine.GetFramesDrawn()); + DebugDraw2D.SetText("FPS", Engine.GetFramesPerSecond()); + DebugDraw2D.SetText("delta", delta); + + dHitTest.Visible = false; + dLagTest.Visible = false; + dPlaneOrigin.Visible = false; + pZDepthTestCube.Visible = false; + dOtherWorld.Visible = false; + return; + } + + dHitTest.Visible = true; + dLagTest.Visible = true; + dPlaneOrigin.Visible = true; + pZDepthTestCube.Visible = true; + dOtherWorld.Visible = true; + + // Testing the rendering layers by showing the image from the second camera inside the 2D panel + DebugDraw3D.Config.GeometryRenderLayers = !Input.IsKeyPressed(Key.Alt) ? 1 : 0b10010; + dPanel.Visible = Input.IsKeyPressed(Key.Alt); + DebugDraw2D.CustomCanvas = Input.IsKeyPressed(Key.Alt) ? dCustomCanvas : null; + + // More property toggles + DebugDraw3D.Config.Freeze3dRender = Input.IsKeyPressed(Key.Down); + DebugDraw3D.Config.VisibleInstanceBounds = Input.IsKeyPressed(Key.Right); + + // Regenerate meshes + if (Input.IsActionJustPressed("ui_end")) + DebugDraw3D.RegenerateGeometryMeshes(); + + // Some property toggles + if (_is_key_just_pressed(Key.Left)) + DebugDraw3D.Config.UseFrustumCulling = !DebugDraw3D.Config.UseFrustumCulling; + + if (_is_key_just_pressed(Key.Up)) + DebugDraw3D.Config.ForceUseCameraFromScene = !DebugDraw3D.Config.ForceUseCameraFromScene; + + if (_is_key_just_pressed(Key.Ctrl)) + if (!Engine.IsEditorHint()) + GetViewport().Msaa3D = GetViewport().Msaa3D == Viewport.Msaa.Msaa4X ? Viewport.Msaa.Disabled : Viewport.Msaa.Msaa4X; + + if (!Engine.IsEditorHint()) + { + if (_is_key_just_pressed(Key.Key1)) + DebugDraw3D.DebugEnabled = !DebugDraw3D.DebugEnabled; + if (_is_key_just_pressed(Key.Key2)) + DebugDraw2D.DebugEnabled = !DebugDraw2D.DebugEnabled; + if (_is_key_just_pressed(Key.Key3)) + DebugDrawManager.DebugEnabled = !DebugDrawManager.DebugEnabled; + } + + + DebugDraw3D.Config.FrustumLengthScale = camera_frustum_scale; + + // Zones with black borders + foreach (var node in dZones.GetChildren()) + { + if (node is Node3D z) + { + DebugDraw3D.DrawBoxXf(z.GlobalTransform, Colors.Black); + } + } + + // Spheres + _draw_zone_title(pSpheresBox, "Spheres"); + + DebugDraw3D.DrawSphereXf(dSphereTransform.GlobalTransform, Colors.Crimson); + using (var _s1 = DebugDraw3D.NewScopedConfig().SetHdSphere(true)) + DebugDraw3D.DrawSphereXf(dSphereHDTransform.GlobalTransform, Colors.OrangeRed); + + /// Delayed spheres + if (timer_1 <= 0) + { + DebugDraw3D.DrawSphere(dSpherePosition.GlobalPosition, 2.0f, Colors.BlueViolet, 2.0f); + using (var _s1 = DebugDraw3D.NewScopedConfig().SetHdSphere(true)) + DebugDraw3D.DrawSphere(dSpherePosition.GlobalPosition + Vector3.Forward * 4, 2.0f, Colors.CornflowerBlue, 2.0f); + timer_1 = 2; + } + + timer_1 -= delta; + + // Cylinders + _draw_zone_title(pCylindersBox, "Cylinders"); + + DebugDraw3D.DrawCylinder(dCylinder1.GlobalTransform, Colors.Crimson); + DebugDraw3D.DrawCylinder(new Transform3D(Basis.Identity.Scaled(new Vector3(1, 2, 1)), dCylinder2.GlobalPosition), Colors.Red); + DebugDraw3D.DrawCylinderAb(dCylinder3a.GlobalPosition, dCylinder3b.GlobalPosition, 0.7f); + + // Boxes + _draw_zone_title(pBoxesBox, "Boxes"); + + DebugDraw3D.DrawBoxXf(dBox1.GlobalTransform, Colors.MediumPurple); + DebugDraw3D.DrawBox(dBox2.GlobalPosition, Quaternion.FromEuler(new Vector3(0, Mathf.DegToRad(45), Mathf.DegToRad(45))), Vector3.One, Colors.RebeccaPurple); + DebugDraw3D.DrawBoxXf(new Transform3D(new Basis(Vector3.Up, Mathf.Pi * 0.25f).Scaled(Vector3.One * 2), dBox3.GlobalPosition), Colors.RosyBrown); + + DebugDraw3D.DrawAabb(new Aabb(dAABB_fixed.GlobalPosition, new Vector3(2, 1, 2)), Colors.Aqua); + DebugDraw3D.DrawAabbAb(dAABB.GetChild(0).GlobalPosition, dAABB.GetChild(1).GlobalPosition, Colors.DeepPink); + + // Boxes AB + + DebugDraw3D.DrawArrow(dBoxAB.GlobalPosition, dBoxABup.GlobalPosition, Colors.Gold, 0.1f, true); + DebugDraw3D.DrawBoxAb(dBoxABa.GlobalPosition, dBoxABb.GlobalPosition, dBoxABup.GlobalPosition - dBoxAB.GlobalPosition, Colors.Peru); + + DebugDraw3D.DrawArrow(dBoxABEdge.GlobalPosition, dBoxABEdgeup.GlobalPosition, Colors.DarkRed, 0.1f, true); + DebugDraw3D.DrawBoxAb(dBoxABEdgea.GlobalPosition, dBoxABEdgeb.GlobalPosition, dBoxABEdgeup.GlobalPosition - dBoxABEdge.GlobalPosition, Colors.DarkOliveGreen, false); + + // Lines + _draw_zone_title(pLinesBox, "Lines"); + + DebugDraw3D.DrawSquare(dLines_Target.GlobalPosition, 0.5f, Colors.Red); + + DebugDraw3D.DrawLine(dLines_1.GlobalPosition, dLines_Target.GlobalPosition, Colors.Fuchsia); + DebugDraw3D.DrawRay(dLines_3.GlobalPosition, (dLines_Target.GlobalPosition - dLines_3.GlobalPosition).Normalized(), 3.0f, Colors.Crimson); + + + if (timer_3 <= 0) + { + DebugDraw3D.DrawLine(dLines_6.GlobalPosition, dLines_Target.GlobalPosition, Colors.Fuchsia, 2.0f); + timer_3 = 2; + } + + timer_3 -= delta; + + // Test UP vector + DebugDraw3D.DrawLine(dLines_7.GlobalPosition, dLines_Target.GlobalPosition, Colors.Red); + + // Lines with Arrow + DebugDraw3D.DrawArrow(dLines_2.GlobalPosition, dLines_Target.GlobalPosition, Colors.Blue, 0.5f, true); + DebugDraw3D.DrawArrowRay(dLines_4.GlobalPosition, (dLines_Target.GlobalPosition - dLines_4.GlobalPosition).Normalized(), 8.0f, Colors.Lavender, 0.5f, true); + + DebugDraw3D.DrawLineHitOffset(dLines_5.GlobalPosition, dLines_Target.GlobalPosition, true, Mathf.Abs(Mathf.Sin(Time.GetTicksMsec() / 1000.0f)), 0.25f, Colors.Aqua); + + // Paths + _draw_zone_title(pPathsBox, "Paths"); + + /// preparing data + List points = new List(); + List points_below = new List(); + List points_below2 = new List(); + List points_below3 = new List(); + List points_below4 = new List(); + List lines_above = new List(); + + foreach (var node in dLinePath.GetChildren()) + { + if (node is Node3D c) + { + points.Add(c.GlobalPosition); + points_below.Add(c.GlobalPosition + Vector3.Down); + points_below2.Add(c.GlobalPosition + Vector3.Down * 2); + points_below3.Add(c.GlobalPosition + Vector3.Down * 3); + points_below4.Add(c.GlobalPosition + Vector3.Down * 4); + } + } + + for (int x = 0; x < points.Count - 1; x++) + { + lines_above.Add(points[x] + Vector3.Up); + lines_above.Add(points[x + 1] + Vector3.Up); + } + + /// drawing lines + DebugDraw3D.DrawLines(lines_above.ToArray()); + DebugDraw3D.DrawLinePath(points.ToArray(), Colors.Beige); + DebugDraw3D.DrawPoints(points_below.ToArray(), DebugDraw3D.PointType.TypeSquare, 0.2f, Colors.DarkGreen); + DebugDraw3D.DrawPointPath(points_below2.ToArray(), DebugDraw3D.PointType.TypeSquare, 0.25f, Colors.Blue, Colors.Tomato); + DebugDraw3D.DrawArrowPath(points_below3.ToArray(), Colors.Gold, 0.5f); + using (var _sl = DebugDraw3D.NewScopedConfig().SetThickness(0.05f)) + DebugDraw3D.DrawPointPath(points_below4.ToArray(), DebugDraw3D.PointType.TypeSphere, 0.25f, Colors.MediumSeaGreen, Colors.MediumVioletRed); + + // Misc + _draw_zone_title(pMiscBox, "Misc"); + + if (Engine.IsEditorHint()) + { + using var s = DebugDraw3D.NewScopedConfig().SetThickness(0); + DebugDraw3D.DrawCameraFrustum(dCamera, Colors.DarkOrange); + } + + using (var s = DebugDraw3D.NewScopedConfig().SetCenterBrightness(0.1f)) + { + DebugDraw3D.DrawArrowhead(dMisc_Arrow.GlobalTransform, Colors.YellowGreen); + } + + DebugDraw3D.DrawSquare(dMisc_Billboard.GlobalPosition, 0.5f, Colors.Green); + + DebugDraw3D.DrawPosition(dMisc_Position.GlobalTransform, Colors.Brown); + + DebugDraw3D.DrawGizmo(dMisc_GizmoTransform.GlobalTransform, null, true); + DebugDraw3D.DrawGizmo(dMisc_GizmoOneColor.GlobalTransform, Colors.Brown, true); + using (var s = DebugDraw3D.NewScopedConfig().SetCenterBrightness(0.5f).SetNoDepthTest(true)) + { + DebugDraw3D.DrawGizmo(dMisc_GizmoNormal.GlobalTransform.Orthonormalized(), null, false); + } + + // Grids + _draw_zone_title_pos(dGrids_GridCentered.GlobalPosition + new Vector3(0, 1.5f, 0), "Grids", 96, 36); + + Transform3D tg = dGrids_Grid.GlobalTransform; + Vector3 tn = dGrids_Grid_Subdivision.Transform.Origin; + DebugDraw3D.DrawGrid(tg.Origin, tg.Basis.X, tg.Basis.Z, new Vector2I((int)tn.X * 10, (int)tn.Z * 10), Colors.LightCoral, false); + + var tn1 = dGrids_GridCentered_Subdivision.Transform.Origin; + DebugDraw3D.DrawGridXf(dGrids_GridCentered.GlobalTransform, new Vector2I((int)(tn1.X * 10), (int)(tn1.Z * 10))); + + using (var s = DebugDraw3D.NewScopedConfig().SetThickness(0.05f)) + { + DebugDraw3D.DrawBoxXf(dPostProcess.GlobalTransform, Colors.SeaGreen); + } + + // Local transform + _draw_local_xf_box(pLocalTransformRecursiveOrigin.GlobalTransform, 0.05f, 10); + + // 2D + DebugDraw2D.Config.TextDefaultSize = text_groups_default_font_size; + DebugDraw2D.Config.TextBlockOffset = text_groups_offset; + DebugDraw2D.Config.TextBlockPosition = text_groups_position; + DebugDraw2D.Config.TextPadding = text_groups_padding; + + DebugDraw2D.Config.TextCustomFont = custom_font; + + + if (test_text) + { + _text_tests(); + } + + // Lag Test + var lag_test_pos = (Vector3)dLagTest_RESET.GetAnimation("RESET").TrackGetKeyValue(0, 0); + _draw_zone_title_pos(lag_test_pos, "Lag test"); + + dLagTest.Position = lag_test_pos + new Vector3(Mathf.Sin(Time.GetTicksMsec() / 100.0f) * 2.5f, 0, 0); + DebugDraw3D.DrawBox(dLagTest.GlobalPosition, Quaternion.Identity, Vector3.One * 2.01f, Colors.Chocolate, true); + + if (more_test_cases) + { + foreach (var node in dHitTest_RayEmitter.GetChildren()) + { + if (node is RayCast3D ray) + ray.SetPhysicsProcessInternal(true); + } + + _more_tests(); + } + else + { + foreach (var node in dHitTest_RayEmitter.GetChildren()) + { + if (node is RayCast3D ray) + ray.SetPhysicsProcessInternal(false); + } + } + + _draw_other_world(); + + if (draw_array_of_boxes) + { + _draw_array_of_boxes(); + } + + } + + void _text_tests() + { + DebugDraw2D.SetText("FPS", $"{Engine.GetFramesPerSecond():F2}", 0, Colors.Gold); + + if (text_groups_show_examples) + { + if (timer_text < 0) + { + DebugDraw2D.SetText("Some delayed text", "for 2.5s", -1, Colors.Black, 2.5f); // it's supposed to show text for 2.5 seconds + timer_text += 5; + } + + DebugDraw2D.BeginTextGroup("-- First Group --", 2, Colors.LimeGreen, true, text_groups_title_font_size, text_groups_text_font_size); + DebugDraw2D.SetText("Simple text"); + DebugDraw2D.SetText("Text", "Value", 0, Colors.Aquamarine); + DebugDraw2D.SetText("Text out of order", null, -1, Colors.Silver); + DebugDraw2D.BeginTextGroup("-- Second Group --", 1, Colors.Beige); + DebugDraw2D.SetText("Rendered frames", Engine.GetFramesDrawn()); + DebugDraw2D.EndTextGroup(); + } + + if (text_groups_show_stats) + { + DebugDraw2D.BeginTextGroup("-- Stats --", 3, Colors.Wheat); + var render_stats = DebugDraw3D.GetRenderStats(); + + if (render_stats != null && text_groups_show_stats) + { + DebugDraw2D.SetText("Total", render_stats.TotalGeometry); + DebugDraw2D.SetText("Instances", render_stats.Instances, 1); + DebugDraw2D.SetText("Lines", render_stats.Lines, 2); + DebugDraw2D.SetText("Total Visible", render_stats.TotalVisible, 3); + DebugDraw2D.SetText("Visible Instances", render_stats.VisibleInstances, 4); + DebugDraw2D.SetText("Visible Lines", render_stats.VisibleLines, 5); + + DebugDraw2D.SetText("---", "", 12); + + DebugDraw2D.SetText("Culling time", $"{(render_stats.TotalTimeCullingUsec / 1000.0):F2} ms", 13); + DebugDraw2D.SetText("Filling instances buffer", $"{(render_stats.TimeFillingBuffersInstancesUsec / 1000.0):F2} ms", 14); + DebugDraw2D.SetText("Filling lines buffer", $"{(render_stats.TimeFillingBuffersLinesUsec / 1000.0):F2} ms", 15); + DebugDraw2D.SetText("Filling time", $"{(render_stats.TotalTimeFillingBuffersUsec / 1000.0):F2} ms", 16); + DebugDraw2D.SetText("Total time", $"{(render_stats.TotalTimeSpentUsec / 1000.0):F2} ms", 17); + + DebugDraw2D.SetText("----", null, 32); + + DebugDraw2D.SetText("Total Label3D", render_stats.NodesLabel3dExistsTotal, 33); + DebugDraw2D.SetText("Visible Label3D", render_stats.NodesLabel3dVisible + render_stats.NodesLabel3dVisiblePhysics, 34); + + DebugDraw2D.SetText("-----", null, 48); + + DebugDraw2D.SetText("Created scoped configs", $"{render_stats.CreatedScopedConfigs}", 49); + } + + if (text_groups_show_stats && text_groups_show_stats_2d) + { + DebugDraw2D.SetText("------", null, 64); + } + + var render_stats_2d = DebugDraw2D.GetRenderStats(); + if (render_stats_2d != null && text_groups_show_stats_2d) + { + DebugDraw2D.SetText("Text groups", render_stats_2d.OverlayTextGroups, 96); + DebugDraw2D.SetText("Text lines", render_stats_2d.OverlayTextLines, 97); + } + DebugDraw2D.EndTextGroup(); + } + + if (text_groups_show_hints) + { + DebugDraw2D.BeginTextGroup("controls", 1024, Colors.White, false); + if (!Engine.IsEditorHint()) + { + DebugDraw2D.SetText("WASD QE, LMB", "To move", 0); + } + DebugDraw2D.SetText("Alt: change render layers", DebugDraw3D.Config.GeometryRenderLayers, 1); + if (!OS.HasFeature("web")) + { + DebugDraw2D.SetText("Ctrl: toggle anti-aliasing", GetViewport().Msaa3D == Viewport.Msaa.Msaa4X ? "MSAA 4x" : "Disabled", 2); + } + DebugDraw2D.SetText("Down: freeze render", DebugDraw3D.Config.Freeze3dRender, 3); + if (Engine.IsEditorHint()) + { + DebugDraw2D.SetText("Up: use scene camera", DebugDraw3D.Config.ForceUseCameraFromScene, 4); + } + DebugDraw2D.SetText("1,2,3: toggle debug", $"{DebugDraw3D.DebugEnabled}, {DebugDraw2D.DebugEnabled} 😐, {DebugDrawManager.DebugEnabled} 😏", 5); + DebugDraw2D.SetText("Left: toggle frustum culling", DebugDraw3D.Config.UseFrustumCulling, 6); + DebugDraw2D.SetText("Right: draw bounds for culling", DebugDraw3D.Config.VisibleInstanceBounds, 7); + } + } + + void _draw_zone_title(Node3D node, string title) + { + if (draw_3d_text) + { + using var _s1 = DebugDraw3D.NewScopedConfig().SetTextOutlineSize(72); + DebugDraw3D.DrawText(node.GlobalPosition + node.GlobalBasis.Y * 0.85f, title, 128); + } + } + + void _draw_zone_title_pos(Vector3 pos, string title, int font_size = 128, int outline = 72) + { + if (draw_3d_text) + { + using var _s1 = DebugDraw3D.NewScopedConfig().SetTextOutlineSize(outline); + DebugDraw3D.DrawText(pos, title, font_size); + } + } + + const float _local_mul = 0.45f; + static readonly Vector3 _local_mul_vec = new(_local_mul, _local_mul, _local_mul); + Vector3[] __local_lines_cross_recursive = [new Vector3(-0.5f, -0.5f, -0.5f), new Vector3(0.5f, -0.5f, 0.5f), new Vector3(-0.5f, -0.5f, 0.5f), new Vector3(0.5f, -0.5f, -0.5f)]; + Transform3D __local_box_recursive = Transform3D.Identity.RotatedLocal(Vector3.Up, Mathf.DegToRad(30)).Translated(new Vector3(-0.25f, -0.55f, 0.25f)).Scaled(_local_mul_vec); + Transform3D __local_sphere_recursive = Transform3D.Identity.Translated(new Vector3(0.5f, 0.55f, -0.5f)).Scaled(_local_mul_vec); + + void _draw_local_xf_box(Transform3D xf, float thickness, int max_depth, int depth = 0) + { + if (depth >= max_depth) + return; + + using var _s1 = DebugDraw3D.NewScopedConfig().SetThickness(thickness).SetTransform(xf); + + // a box with a small offset + DebugDraw3D.DrawBoxXf(new Transform3D(Basis.Identity, new Vector3(0, 0.001f, 0)), Colors.Brown); + // a box and a stand for the next depth + DebugDraw3D.DrawBoxXf(__local_box_recursive, Colors.Chartreuse); + // just a sphere and lines + DebugDraw3D.DrawSphereXf(__local_sphere_recursive, Colors.DarkOrange); + + _s1.SetThickness(0); + + DebugDraw3D.DrawLines(__local_lines_cross_recursive, Colors.Crimson); + + // A simple animation generator with descent into the depth of the scene +#if false + { + Animation anim = pRecursiveTransformTest.GetAnimation("recursive"); + // clear keys + if (depth == 0) + for (var i = 0; i < anim.TrackGetKeyCount(0); i++) + { + anim.TrackRemoveKey(0, 0); + anim.TrackRemoveKey(1, 0); + } + + var time = depth * 2; + var s_xf = xf * __local_sphere_recursive; + var next_s_xf = (xf * __local_box_recursive.Translated(__local_box_recursive.Basis.Y)) * __local_sphere_recursive; + var get_sphere_pos = (Transform3D l_xf) => l_xf.Origin + (l_xf).Basis.Y; + + anim.PositionTrackInsertKey(0, time, get_sphere_pos(s_xf)); + anim.RotationTrackInsertKey(1, time, new Transform3D(Basis.Identity, get_sphere_pos(s_xf)).LookingAt(get_sphere_pos(next_s_xf), xf.Basis.Y).Basis.GetRotationQuaternion()); + } +#endif + + _draw_local_xf_box(xf * __local_box_recursive.Translated(__local_box_recursive.Basis.Y), thickness * _local_mul, max_depth, depth + 1); + } + + + void _draw_other_world() + { + using var s = DebugDraw3D.NewScopedConfig().SetViewport(dOtherWorldBox.GetViewport()); + DebugDraw3D.DrawBoxXf(dOtherWorldBox.GlobalTransform.RotatedLocal(new Vector3(1, 1, -1).Normalized(), Mathf.Wrap(Time.GetTicksMsec() / 1000.0f, 0f, Mathf.Tau)), Colors.SandyBrown); + DebugDraw3D.DrawBoxXf(dOtherWorldBox.GlobalTransform.RotatedLocal(new Vector3(-1, 1, -1).Normalized(), Mathf.Wrap(Time.GetTicksMsec() / 1000.0f, 0f, Mathf.Tau) - Mathf.Pi / 4), Colors.SandyBrown); + + if (draw_3d_text) + { + var angle = Mathf.Wrap(Time.GetTicksMsec() / 1000.0f, 0, Mathf.Tau); + using (var _w2 = DebugDraw3D.NewScopedConfig().SetTextFont(custom_3d_font)) + { + DebugDraw3D.DrawText(dOtherWorldBox.GlobalPosition + new Vector3(Mathf.Cos(angle), -0.25f, Mathf.Sin(angle)), "Hello world!", 32, Colors.Crimson, 0); + } + + using (var _w3 = DebugDraw3D.NewScopedConfig().SetNoDepthTest(true).SetTextOutlineColor(Colors.IndianRed).SetTextOutlineSize(6)) + { + DebugDraw3D.DrawText(dOtherWorldBox.GlobalPosition + new Vector3(Mathf.Cos(angle), +0.25f, Mathf.Sin(-angle)), "World without depth", 20, Colors.Pink, 0); + } + } + } + + void _draw_rays_casts() + { + // Line hits render + _draw_zone_title_pos(pHitTestSphere.GlobalPosition, "Line hits", 96, 36); + + foreach (var node in dHitTest_RayEmitter.GetChildren()) + { + if (node is RayCast3D ray) + { + ray.ForceRaycastUpdate(); + DebugDraw3D.DrawLineHit(ray.GlobalPosition, ray.ToGlobal(ray.TargetPosition), ray.GetCollisionPoint(), ray.IsColliding(), 0.3f); + } + } + } + + void _more_tests() + { + // Delayed line render + using (var s = DebugDraw3D.NewScopedConfig().SetThickness(0.035f)) + { + DebugDraw3D.DrawLine(dLagTest.GlobalPosition + Vector3.Up, dLagTest.GlobalPosition + new Vector3(0, 3, Mathf.Sin(Time.GetTicksMsec() / 50.0f)), null, 0.35f); + + if (draw_3d_text) + { + DebugDraw3D.DrawText(dLagTest.GlobalPosition + new Vector3(0, 3, Mathf.Sin(Time.GetTicksMsec() / 50.0f)), $"{Mathf.Sin(Time.GetTicksMsec() / 50.0f):F1}", 16, null, 0.35f); + } + } + + // Draw plane + using (var _s11 = DebugDraw3D.NewScopedConfig().SetThickness(0.02f).SetPlaneSize(10)) + { + var pl_node = GetNode("PlaneOrigin"); + var xf = pl_node.GlobalTransform; + var normal = xf.Basis.Y.Normalized(); + var plane = new Plane(normal, xf.Origin.Dot(normal)); + + var vp = GetViewport(); + if (Engine.IsEditorHint() && (Viewport)Engine.GetSingleton("EditorInterface").Call("get_editor_viewport_3d", 0) != null) + { + vp = (Viewport)Engine.GetSingleton("EditorInterface").Call("get_editor_viewport_3d", 0); + } + + var cam = vp.GetCamera3D(); + if (cam != null) + { + var dir = vp.GetCamera3D().ProjectRayNormal(vp.GetMousePosition()); + Vector3? intersect = plane.IntersectsRay(cam.GlobalPosition, dir); + + DebugDraw3D.DrawPlane(plane, Colors.Coral * new Color(1, 1, 1, 0.4f), pl_node.GlobalPosition); + if (intersect.HasValue && intersect.Value.DistanceTo(pl_node.GlobalPosition) < _s11.GetPlaneSize() * 0.5f) + { + // Need to test different colors on both sides of the plane + var col = plane.IsPointOver(cam.GlobalPosition) ? Colors.Firebrick : Colors.Aquamarine; + DebugDraw3D.DrawSphere(intersect.Value, 0.3f, col); + } + } + } + } + + void _draw_array_of_boxes() + { + // Lots of boxes to check performance.. + var x_size = 50; + var y_size = 50; + var z_size = 3; + var mul = 1.0f; + var cubes_max_time = 1.25f; + var show_text = draw_text_with_boxes; + using var cfg = DebugDraw3D.NewScopedConfig(); + + if (draw_1m_boxes) + { + x_size = 100; + y_size = 100; + z_size = 100; + mul = 4.0f; + cubes_max_time = 60f; + draw_text_with_boxes = false; + } + + var size = Vector3.One; + var half_size = size * 0.5f; + + if (timer_cubes <= 0) + { + var start_time = Time.GetTicksUsec(); + for (int x = 0; x < x_size; x++) + { + for (int y = 0; y < y_size; y++) + { + for (int z = 0; z < z_size; z++) + { + cfg.SetThickness(Random.Shared.NextSingle() * 0.1f); + var pos = new Vector3(x * mul, (-4 - z) * mul, y * mul) + GlobalPosition; + DebugDraw3D.DrawBox(pos, Quaternion.Identity, size, null, false, cubes_max_time); + + if (show_text && z == 0) + { + DebugDraw3D.DrawText(pos + half_size, pos.ToString(), 32, null, cubes_max_time); + } + } + } + } + //GD.Print($"Draw Cubes: {((Time.GetTicksUsec() - start_time) / 1000.0):F3}ms"); + timer_cubes = cubes_max_time; + } + } + + Node3D dHitTest; + CsgBox3D dLagTest; + PanelContainer dPanel; + Node3D dZones; + Node3D dSpherePosition; + Node3D dSphereTransform; + Node3D dSphereHDTransform; + Node3D dAABB; + Node3D dAABB_fixed; + Node3D dBox1; + Node3D dBox2; + Node3D dBox3; + Node3D dBoxAB; + Node3D dBoxABa; + Node3D dBoxABb; + Node3D dBoxABup; + Node3D dBoxABEdge; + Node3D dBoxABEdgea; + Node3D dBoxABEdgeb; + Node3D dBoxABEdgeup; + Node3D dLines_1; + Node3D dLines_2; + Node3D dLines_3; + Node3D dLines_4; + Node3D dLines_5; + Node3D dLines_6; + Node3D dLines_7; + Node3D dLines_8; + Node3D dLines_Target; + Node3D dLinePath; + Node3D dCylinder1; + Node3D dCylinder2; + Node3D dCylinder3a; + Node3D dCylinder3b; + + Node3D pSpheresBox; + Node3D pCylindersBox; + Node3D pBoxesBox; + Node3D pLinesBox; + Node3D pPathsBox; + Node3D pMiscBox; + + MeshInstance3D dPlaneOrigin; + MeshInstance3D pZDepthTestCube; + + MeshInstance3D dOtherWorld; + SubViewport dOtherWorldViewport; + Node3D dOtherWorldBox; + + Control dCustomCanvas; + Node3D dMisc_Arrow; + Camera3D dCamera; + Node3D dMisc_Billboard; + Node3D dMisc_Position; + Node3D dMisc_GizmoTransform; + Node3D dMisc_GizmoNormal; + Node3D dMisc_GizmoOneColor; + Node3D pLocalTransformRecursiveOrigin; + AnimationPlayer pRecursiveTransformTest; + + Node3D dGrids_Grid; + Node3D dGrids_Grid_Subdivision; + Node3D dGrids_GridCentered_Subdivision; + Node3D dGrids_GridCentered; + + MeshInstance3D dPostProcess; + AnimationPlayer dLagTest_RESET; + Node3D dHitTest_RayEmitter; + Node3D pHitTestSphere; + + void _get_nodes() + { + dHitTest = GetNode("HitTest"); + dLagTest = GetNode("LagTest"); + dPanel = GetNode("Panel"); + dZones = GetNode("Zones"); + dSpherePosition = GetNode("Spheres/SpherePosition"); + dSphereTransform = GetNode("Spheres/SphereTransform"); + dSphereHDTransform = GetNode("Spheres/SphereHDTransform"); + dAABB = GetNode("Boxes/AABB"); + dAABB_fixed = GetNode("Boxes/AABB_fixed"); + dBox1 = GetNode("Boxes/Box1"); + dBox2 = GetNode("Boxes/Box2"); + dBox3 = GetNode("Boxes/Box3"); + dBoxAB = GetNode("Boxes/BoxAB"); + dBoxABa = GetNode("Boxes/BoxAB/a"); + dBoxABb = GetNode("Boxes/BoxAB/b"); + dBoxABup = GetNode("Boxes/BoxAB/o/up"); + dBoxABEdge = GetNode("Boxes/BoxABEdge"); + dBoxABEdgea = GetNode("Boxes/BoxABEdge/a"); + dBoxABEdgeb = GetNode("Boxes/BoxABEdge/b"); + dBoxABEdgeup = GetNode("Boxes/BoxABEdge/o/up"); + dLines_1 = GetNode("Lines/1"); + dLines_2 = GetNode("Lines/2"); + dLines_3 = GetNode("Lines/3"); + dLines_4 = GetNode("Lines/4"); + dLines_5 = GetNode("Lines/5"); + dLines_6 = GetNode("Lines/6"); + dLines_7 = GetNode("Lines/7"); + dLines_8 = GetNode("Lines/8"); + dLines_Target = GetNode("Lines/Target"); + dLinePath = GetNode("LinePath"); + dCylinder1 = GetNode("Cylinders/Cylinder1"); + dCylinder2 = GetNode("Cylinders/Cylinder2"); + dCylinder3a = GetNode("Cylinders/Cylinder3/1"); + dCylinder3b = GetNode("Cylinders/Cylinder3/2"); + + pSpheresBox = GetNode("%SpheresBox"); + pCylindersBox = GetNode("%CylindersBox"); + pBoxesBox = GetNode("%BoxesBox"); + pLinesBox = GetNode("%LinesBox"); + pPathsBox = GetNode("%PathsBox"); + pMiscBox = GetNode("%MiscBox"); + + dPlaneOrigin = GetNode("PlaneOrigin"); + pZDepthTestCube = GetNode("%ZDepthTestCube"); + + dOtherWorld = GetNode("OtherWorld"); + dOtherWorldViewport = GetNode("OtherWorld/SubViewport"); + dOtherWorldBox = GetNode("OtherWorld/SubViewport/SubViewportContainer/SubViewport/OtherWorldBox"); + + dCustomCanvas = GetNode("CustomCanvas"); + dMisc_Arrow = GetNode("Misc/Arrow"); + dCamera = GetNode("Camera"); + dMisc_Billboard = GetNode("Misc/Billboard"); + dMisc_Position = GetNode("Misc/Position"); + dMisc_GizmoTransform = GetNode("Misc/GizmoTransform"); + dMisc_GizmoNormal = GetNode("Misc/GizmoNormal"); + dMisc_GizmoOneColor = GetNode("Misc/GizmoOneColor"); + pLocalTransformRecursiveOrigin = GetNode("%LocalTransformRecursiveOrigin"); + pRecursiveTransformTest = GetNode("%RecursiveTransformTest"); + + dGrids_Grid = GetNode("Grids/Grid"); + dGrids_Grid_Subdivision = GetNode("Grids/Grid/Subdivision"); + dGrids_GridCentered_Subdivision = GetNode("Grids/GridCentered/Subdivision"); + dGrids_GridCentered = GetNode("Grids/GridCentered"); + + dPostProcess = GetNode("PostProcess"); + + dLagTest_RESET = GetNode("LagTest/RESET"); + dHitTest_RayEmitter = GetNode("HitTest/RayEmitter"); + pHitTestSphere = GetNode("%HitTestSphere"); + } +} diff --git a/examples_dd3d/DebugDrawDemoSceneCS.cs.uid b/examples_dd3d/DebugDrawDemoSceneCS.cs.uid new file mode 100644 index 0000000..8576e05 --- /dev/null +++ b/examples_dd3d/DebugDrawDemoSceneCS.cs.uid @@ -0,0 +1 @@ +uid://dnf8ejsrnlvxb diff --git a/examples_dd3d/DebugDrawDemoSceneCS.tscn b/examples_dd3d/DebugDrawDemoSceneCS.tscn new file mode 100644 index 0000000..670c547 --- /dev/null +++ b/examples_dd3d/DebugDrawDemoSceneCS.tscn @@ -0,0 +1,16 @@ +[gd_scene load_steps=3 format=3 uid="uid://sxtw8fme7g63"] + +[ext_resource type="PackedScene" uid="uid://c3sccy6x0ht5j" path="res://examples_dd3d/DebugDrawDemoScene.tscn" id="2"] +[ext_resource type="Script" path="res://examples_dd3d/DebugDrawDemoSceneCS.cs" id="2_ipqea"] + +[node name="DebugDrawDemoSceneCS" instance=ExtResource("2")] +script = ExtResource("2_ipqea") + +[node name="Settings" parent="." index="23"] +switch_to_scene = "res://examples_dd3d/DebugDrawDemoScene.tscn" + +[node name="Label" parent="Settings/HBox/VBoxContainer" index="1"] +text = "C# example" + +[node name="SwitchLang" parent="Settings/HBox/VBox/SettingsPanel/VBox" index="13"] +text = "Switch to GDScript" diff --git a/examples_dd3d/PixelatedElegance.ttf b/examples_dd3d/PixelatedElegance.ttf new file mode 100644 index 0000000..ce55ead Binary files /dev/null and b/examples_dd3d/PixelatedElegance.ttf differ diff --git a/examples_dd3d/PixelatedElegance.ttf.import b/examples_dd3d/PixelatedElegance.ttf.import new file mode 100644 index 0000000..57b02dc --- /dev/null +++ b/examples_dd3d/PixelatedElegance.ttf.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://7am1h57ldd6" +path="res://.godot/imported/PixelatedElegance.ttf-aac00801d681e5d2b42b23257b2692a7.fontdata" + +[deps] + +source_file="res://examples_dd3d/PixelatedElegance.ttf" +dest_files=["res://.godot/imported/PixelatedElegance.ttf-aac00801d681e5d2b42b23257b2692a7.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +modulate_color_glyphs=false +hinting=1 +subpixel_positioning=1 +keep_rounding_remainders=true +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/examples_dd3d/Roboto-Bold.ttf b/examples_dd3d/Roboto-Bold.ttf new file mode 100644 index 0000000..d3f01ad Binary files /dev/null and b/examples_dd3d/Roboto-Bold.ttf differ diff --git a/examples_dd3d/Roboto-Bold.ttf.import b/examples_dd3d/Roboto-Bold.ttf.import new file mode 100644 index 0000000..f5260f6 --- /dev/null +++ b/examples_dd3d/Roboto-Bold.ttf.import @@ -0,0 +1,40 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://erdgllynwqkw" +path="res://.godot/imported/Roboto-Bold.ttf-3674de3d9ad3ee757cd4b4a89f1e126d.fontdata" + +[deps] + +source_file="res://examples_dd3d/Roboto-Bold.ttf" +dest_files=["res://.godot/imported/Roboto-Bold.ttf-3674de3d9ad3ee757cd4b4a89f1e126d.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +modulate_color_glyphs=false +hinting=1 +subpixel_positioning=1 +keep_rounding_remainders=true +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[{ +"chars": [], +"glyphs": [], +"name": "New Configuration" +}] +language_support={} +script_support={} +opentype_features={} diff --git a/examples_dd3d/VisualizerAudioBus.tres b/examples_dd3d/VisualizerAudioBus.tres new file mode 100644 index 0000000..4c7b662 --- /dev/null +++ b/examples_dd3d/VisualizerAudioBus.tres @@ -0,0 +1,17 @@ +[gd_resource type="AudioBusLayout" load_steps=2 format=3 uid="uid://7sy4h4ibftrk"] + +[sub_resource type="AudioEffectSpectrumAnalyzer" id="AudioEffectSpectrumAnalyzer_odciy"] +resource_name = "SpectrumAnalyzer" +fft_size = 3 + +[resource] +bus/0/mute = true +bus/0/volume_db = -20.0 +bus/1/name = &"MusicAnalyzer" +bus/1/solo = false +bus/1/mute = false +bus/1/bypass_fx = false +bus/1/volume_db = 0.0 +bus/1/send = &"Master" +bus/1/effect/0/effect = SubResource("AudioEffectSpectrumAnalyzer_odciy") +bus/1/effect/0/enabled = true diff --git a/examples_dd3d/addon_icon.gd b/examples_dd3d/addon_icon.gd new file mode 100644 index 0000000..4283024 --- /dev/null +++ b/examples_dd3d/addon_icon.gd @@ -0,0 +1,11 @@ +@tool +extends Node3D + +func _process(delta: float) -> void: + var a = DebugDraw3D.new_scoped_config().set_thickness(0.015) + DebugDraw3D.draw_box_xf($box.global_transform, Color.GREEN) + DebugDraw3D.draw_gizmo($gizmo.global_transform) + DebugDraw3D.draw_grid_xf($gizmo/grid.global_transform, Vector2i(2,2), DebugDraw3D.empty_color, false) + DebugDraw3D.draw_sphere_xf($sphere.global_transform, Color.RED) + DebugDraw3D.draw_cylinder($cylinder.global_transform, Color.BLUE) + DebugDraw3D.draw_line_hit_offset($"line/1".global_transform.origin, $"line/2".global_transform.origin, true, 0.3, 0.1) diff --git a/examples_dd3d/addon_icon.gd.uid b/examples_dd3d/addon_icon.gd.uid new file mode 100644 index 0000000..c3fca43 --- /dev/null +++ b/examples_dd3d/addon_icon.gd.uid @@ -0,0 +1 @@ +uid://b2lj85riqyno0 diff --git a/examples_dd3d/addon_icon.tscn b/examples_dd3d/addon_icon.tscn new file mode 100644 index 0000000..b577312 --- /dev/null +++ b/examples_dd3d/addon_icon.tscn @@ -0,0 +1,37 @@ +[gd_scene load_steps=3 format=3 uid="uid://1lhiwf8tgleh"] + +[ext_resource type="Script" path="res://examples_dd3d/addon_icon.gd" id="1_bq18y"] + +[sub_resource type="Environment" id="1"] +background_mode = 1 + +[node name="icon" type="Node3D"] +script = ExtResource("1_bq18y") + +[node name="Camera" type="Camera3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5.39732) +environment = SubResource("1") +current = true + +[node name="box" type="Node3D" parent="."] +transform = Transform3D(0.316305, 0.0204714, -0.293415, -0.239575, 0.267896, -0.239575, 0.170631, 0.338191, 0.207538, -0.410294, 0.312541, 0.243199) + +[node name="gizmo" type="Node3D" parent="."] +transform = Transform3D(0.707107, 0, -0.707107, -0.294265, 0.909294, -0.294265, 0.642968, 0.416154, 0.642968, 0, 0, 0) + +[node name="grid" type="Node3D" parent="gizmo"] +transform = Transform3D(1, -2.98023e-08, 1.19209e-07, 0, 1, 0, 1.19209e-07, -2.98023e-08, 1, -0.0263093, -0.0170284, -0.0263093) + +[node name="sphere" type="Node3D" parent="."] +transform = Transform3D(0.401341, 0.207831, -0.437109, -0.449118, 0.371584, -0.235691, 0.180418, 0.46267, 0.385639, 0.466197, 0.322665, 0.200436) + +[node name="cylinder" type="Node3D" parent="."] +transform = Transform3D(0.155034, 0.231693, -0.112783, -0.160003, 0.264761, -0.0839674, 0.0232275, 0.277352, 0.174372, -0.0566943, -0.290515, 0.905274) + +[node name="line" type="Node3D" parent="."] + +[node name="1" type="Node3D" parent="line"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.568458, -0.615948, 0.653444) + +[node name="2" type="Node3D" parent="line"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0051975, 0.373791, 0.0974927) diff --git a/examples_dd3d/demo_camera_movement.gd b/examples_dd3d/demo_camera_movement.gd new file mode 100644 index 0000000..51f758d --- /dev/null +++ b/examples_dd3d/demo_camera_movement.gd @@ -0,0 +1,60 @@ +extends Camera3D + +@export var mouse_sensitivity := 0.25 +@export var camera_speed := 10.0 +@export var camera_speed_fast := 30.0 + +var btn_clicked := false +const hPI := PI/2 +var rot_x := 0.0 +var rot_y := 0.0 + + +func _ready(): + reset_input_rotation() + + +func _unhandled_input(event) -> void: + if event is InputEventMouseButton: + btn_clicked = event.pressed + + +func reset_input_rotation(): + rot_x = rotation.y + rot_y = rotation.x + + +func _input(event) -> void: + if btn_clicked: + if event is InputEventMouseMotion: + if event.button_mask == MOUSE_BUTTON_LEFT: + rot_x += -deg_to_rad(event.relative.x * mouse_sensitivity) + rot_y += -deg_to_rad(event.relative.y * mouse_sensitivity) + rot_y = clamp(rot_y, -hPI, hPI) + + transform.basis = Basis() + rotate_object_local(Vector3.UP, rot_x) + rotate_object_local(Vector3.RIGHT, rot_y) + + +func get_axis(neg : Array[Key], pos : Array[Key]) -> float: + var pressed = func (arr: Array[Key]): + var p: float = 0 + for k in arr: + if Input.is_physical_key_pressed(k): + p = 1 + break + return p + + return pressed.call(pos) - pressed.call(neg) + + +func _process(delta) -> void: + var motion := Vector2(get_axis([KEY_S], [KEY_W]), get_axis([KEY_A], [KEY_D])) + var lift := get_axis([KEY_Q, KEY_CTRL], [KEY_E, KEY_SPACE]) + var speed := camera_speed_fast if Input.is_physical_key_pressed(KEY_SHIFT) else camera_speed + motion = motion.limit_length() + + var b := global_transform.basis + var v := (-b.z * motion.x) + (b.x * motion.y) + (b.y * lift) + global_position += v.limit_length() * speed * delta diff --git a/examples_dd3d/demo_camera_movement.gd.uid b/examples_dd3d/demo_camera_movement.gd.uid new file mode 100644 index 0000000..03651ca --- /dev/null +++ b/examples_dd3d/demo_camera_movement.gd.uid @@ -0,0 +1 @@ +uid://b5mdrjubj0lg5 diff --git a/examples_dd3d/demo_music_visualizer.gd b/examples_dd3d/demo_music_visualizer.gd new file mode 100644 index 0000000..73e9867 --- /dev/null +++ b/examples_dd3d/demo_music_visualizer.gd @@ -0,0 +1,175 @@ +@tool +extends VBoxContainer + +@export_range(1, 128) var bars_count := 32 +var transform: Transform3D: + get: + return %AudioVisualizer.global_transform +@export_exp_easing("inout") var motion_smoothing := 0.025 +@export_range(0, 0.5) var bar_thickness := 0.065 +@export_range(0, 10) var bars_separation := 0.325 +@export_exp_easing("inout") var color_offset_speed := 0.4 +@export var colors: Gradient = null + +var MusicAnalyzerBus := &"MusicAnalyzer" +var MasterBus := &"Master" +var MAX_HZ := 16000.0 +var MIN_HZ := 20.0 +var MIN_DB := 60.0 +var spectrum: AudioEffectSpectrumAnalyzerInstance = null + +var smoothed_energy: Array[float] = [] +var color_offset := 0.0 + +var _on_data_loaded_callback = null + + +func _ready(): + var bus = AudioServer.get_bus_index(MusicAnalyzerBus) + if bus == -1: + print("'MusicVisualizer' audio bus not found.\nSet 'VisualizerAudioBus.tres' as the default bus to use the audio visualizer.") + + spectrum = AudioServer.get_bus_effect_instance(bus, 0) + %MuteMaster.button_pressed = AudioServer.is_bus_mute(AudioServer.get_bus_index(MasterBus)) + %VolumeSlider.value = db_to_linear(AudioServer.get_bus_volume_db(AudioServer.get_bus_index(MasterBus))) + + if OS.has_feature('web'): + motion_smoothing = motion_smoothing * 1.5 + + _on_data_loaded_callback = JavaScriptBridge.create_callback(_on_data_loaded) + # Retrieve the 'gd_callbacks' object + var gdcallbacks: JavaScriptObject = JavaScriptBridge.get_interface("gd_callbacks") + # Assign the callbacks + gdcallbacks.dataLoaded = _on_data_loaded_callback + + +func _process(_delta): + if %MusicPlayer.playing: + draw_spectrum() + + +func _pressed(): + var open_file = func(filepath: String): + print("Opening '%s'" % filepath) + var file = FileAccess.open(filepath, FileAccess.READ) + var data = file.get_buffer(file.get_length()) + open_stream(filepath.get_extension(), data) + + if DisplayServer.has_feature(DisplayServer.FEATURE_NATIVE_DIALOG): + DisplayServer.file_dialog_show("Select audio file", "", "", true, DisplayServer.FILE_DIALOG_MODE_OPEN_FILE, ["*.mp3"], + func (status: bool, selected: PackedStringArray, _fileter: int): + if status and selected.size(): + open_file.call(selected[0]) + ) + elif OS.has_feature('web'): + JavaScriptBridge.eval("loadData()") + else: + var fd := FileDialog.new() + add_child(fd) + + fd.title = "Select audio file" + fd.access = FileDialog.ACCESS_FILESYSTEM + fd.file_mode = FileDialog.FILE_MODE_OPEN_FILE + fd.current_dir = OS.get_system_dir(OS.SYSTEM_DIR_DOWNLOADS) + fd.add_filter("*.mp3") + fd.popup_centered_ratio(0.8) + + fd.file_selected.connect(func(path: String): + open_file.call(path) + ) + + fd.visibility_changed.connect(func(): + if not fd.visible: + fd.queue_free() + ) + + +func _on_data_loaded(data: Array) -> void: + # Make sure there is something + if (data.size() == 0): + return + + var file_name: String = data[0] + print("Opening '%s'" % file_name) + + var arr: PackedByteArray = JavaScriptBridge.eval("gd_callbacks.dataLoadedResult;") + open_stream(file_name.get_extension(), arr) + + +func open_stream(file_ext: String, data: PackedByteArray): + var stream: AudioStream = null + if file_ext == "mp3": + stream = AudioStreamMP3.new() + stream.data = data + + if not stream.data: + print("Failed to load MP3!") + return + + if not stream: + print("Failed to load music!") + return + + %MusicPlayer.stream = stream + %MusicPlayer.bus = MusicAnalyzerBus + %MusicPlayer.play() + + # Debugging frequencies + for ih in range(1, bars_count + 1): + var _hz: float = log_freq(ih / float(bars_count), MIN_HZ, MAX_HZ) + #print("%.0f hz %.2f" % [_hz, ih / float(bars_count)]) + + +func draw_spectrum(): + var _s1 = DebugDraw3D.scoped_config().set_thickness(bar_thickness).set_center_brightness(0.9) + var prev_hz = MIN_HZ + smoothed_energy.resize(bars_count) + + var xf := transform + var y := xf.basis.y + var h := y.length() + var x := xf.basis.x + var z := xf.basis.z + var origin := xf.origin - (x * bars_count + (x * bars_separation) * (bars_count - 1)) * 0.5 + var sum := 0.0 + + for ih in range(1, bars_count + 1): + var i := ih - 1 + var hz: float = log_freq(ih / float(bars_count), MIN_HZ, MAX_HZ) + var magnitude: float = spectrum.get_magnitude_for_frequency_range(prev_hz, hz, AudioEffectSpectrumAnalyzerInstance.MAGNITUDE_AVERAGE).length() + var energy: float = clampf((MIN_DB + linear_to_db(magnitude)) / MIN_DB, 0, 1) + var e: float = lerp(smoothed_energy[i], energy, clampf(get_process_delta_time() / motion_smoothing if motion_smoothing else 1.0, 0, 1)) + smoothed_energy[i] = e + var height: float = e * h + sum += e + + var s := x * bars_separation + + var a := origin + x * i + s * i + (z * 0.5) + var b := origin + x * (i + 1) + s * i + (z * -0.5) + xf.basis.y.normalized() * clampf(height, 0.001, h) + var c := Color.HOT_PINK + if colors: + c = colors.sample(wrapf(float(ih) / bars_count + color_offset, 0, 1)) + c.s = clamp(c.s - smoothed_energy[i] * 0.3, 0, 1.0) + + DebugDraw3D.draw_box_ab(a, b, y, c) + + prev_hz = hz + + color_offset = wrapf(color_offset + sum / smoothed_energy.size() * clampf(get_process_delta_time() / color_offset_speed if color_offset_speed else 1.0, 0, 1), 0, 1) + + +func log10(val: float) -> float: + return log(val) / 2.302585 + + +func log_freq(pos: float, min_hz: float, max_hz: float) -> float: + return pow(10, log10(min_hz) + (log10(max_hz) - log10(min_hz)) * pos) + + +func _on_volume_slider_value_changed(value): + AudioServer.set_bus_volume_db(AudioServer.get_bus_index(MasterBus), linear_to_db(value)) + + +func _on_mute_master_toggled(toggled_on): + AudioServer.set_bus_mute(AudioServer.get_bus_index(MasterBus), toggled_on) diff --git a/examples_dd3d/demo_music_visualizer.gd.uid b/examples_dd3d/demo_music_visualizer.gd.uid new file mode 100644 index 0000000..7463855 --- /dev/null +++ b/examples_dd3d/demo_music_visualizer.gd.uid @@ -0,0 +1 @@ +uid://bebbekatkxaoe diff --git a/examples_dd3d/demo_settings_panel.gd b/examples_dd3d/demo_settings_panel.gd new file mode 100644 index 0000000..4896b47 --- /dev/null +++ b/examples_dd3d/demo_settings_panel.gd @@ -0,0 +1,103 @@ +@tool +extends Control + +@export var switch_to_scene = "" +var is_ready := false + +func _ready(): + if Engine.is_editor_hint(): + return + + if ProjectSettings.has_setting("application/config/no_csharp_support"): + %SwitchLang.visible = false + + %SwitchLang.disabled = true + + %ThicknessSlider.value = get_parent().debug_thickness + %FrustumScaleSlider.value = get_parent().camera_frustum_scale + %UpdateInPhysics.text = "Update in physics (%d Ticks) *" % ProjectSettings.get_setting("physics/common/physics_ticks_per_second") + %UpdateInPhysics.button_pressed = get_parent().update_in_physics + + %ShowText.button_pressed = get_parent().test_text + %ShowExamples.button_pressed = get_parent().text_groups_show_examples + %ShowStats.button_pressed = get_parent().text_groups_show_stats + %ShowHints.button_pressed = get_parent().text_groups_show_hints + %Draw3DText.button_pressed = get_parent().draw_3d_text + + %DrawBoxes.button_pressed = get_parent().draw_array_of_boxes + %Draw1MBoxes.button_pressed = get_parent().draw_1m_boxes + %DrawBoxesAddText.button_pressed = get_parent().draw_text_with_boxes + + if get_tree(): + await get_tree().create_timer(0.2).timeout + + %SwitchLang.disabled = false + is_ready = true + + +func _on_Button_pressed() -> void: + get_tree().call_deferred("change_scene_to_file", switch_to_scene) + + +func _on_hide_show_panel_pressed(): + if %SettingsPanel.visible: + %SettingsPanel.hide() + %HideShowPanelButton.text = "Show panel" + else: + %SettingsPanel.show() + %HideShowPanelButton.text = "Hide panel" + + +func _on_thickness_slider_value_changed(value): + if not is_ready: return + + get_parent().debug_thickness = value + + +func _on_frustum_scale_slider_value_changed(value): + if not is_ready: return + + get_parent().camera_frustum_scale = value + + +func _on_update_in_physics_toggled(toggled_on): + get_parent().update_in_physics = toggled_on + + +func _on_show_text_toggled(toggled_on: bool) -> void: + get_parent().test_text = toggled_on + + +func _on_show_examples_toggled(toggled_on: bool) -> void: + get_parent().text_groups_show_examples = toggled_on + + +func _on_show_stats_toggled(toggled_on): + get_parent().text_groups_show_stats = toggled_on + + +func _on_show_hints_toggled(toggled_on: bool) -> void: + get_parent().text_groups_show_hints = toggled_on + + +func _on_draw_3d_text_toggled(toggled_on: bool) -> void: + get_parent().draw_3d_text = toggled_on + + +func _on_draw_boxes_toggled(toggled_on): + get_parent().draw_array_of_boxes = toggled_on + + DebugDraw3D.clear_all() + get_parent().timer_cubes = 0 + + +func _on_draw_1m_boxes_toggled(toggled_on): + get_parent().draw_1m_boxes = toggled_on + + if get_parent().draw_array_of_boxes: + DebugDraw3D.clear_all() + get_parent().timer_cubes = 0 + + +func _on_add_text_to_boxes_toggled(toggled_on: bool) -> void: + get_parent().draw_text_with_boxes = toggled_on diff --git a/examples_dd3d/demo_settings_panel.gd.uid b/examples_dd3d/demo_settings_panel.gd.uid new file mode 100644 index 0000000..3b41e62 --- /dev/null +++ b/examples_dd3d/demo_settings_panel.gd.uid @@ -0,0 +1 @@ +uid://83dhsep7l725 diff --git a/examples_dd3d/demo_web_docs_version_select.gd b/examples_dd3d/demo_web_docs_version_select.gd new file mode 100644 index 0000000..c63bc49 --- /dev/null +++ b/examples_dd3d/demo_web_docs_version_select.gd @@ -0,0 +1,42 @@ +extends HBoxContainer + +var _on_versions_loaded_callback = null +@onready var btn: OptionButton = $OptionButton + +func _enter_tree(): + hide() + + +func _ready(): + if OS.has_feature('web'): + _on_versions_loaded_callback = JavaScriptBridge.create_callback(_on_versions_loaded) + var versions_callbacks: JavaScriptObject = JavaScriptBridge.get_interface("versions_callbacks") + versions_callbacks.loaded = _on_versions_loaded_callback + + JavaScriptBridge.eval("loadVersions()") + + +func _on_versions_loaded(args: Array) -> void: + if (args.size() == 0): + return + + var current_version: String = args[0] + + var versions_str: String = JavaScriptBridge.eval("versions_callbacks.versions;") + var version_urls_str: String = JavaScriptBridge.eval("versions_callbacks.version_urls;") + var versions: PackedStringArray = versions_str.split(";", false) + var version_urls: PackedStringArray = version_urls_str.split(";", false) + + if versions: + show() + btn.clear() + btn.item_selected.connect(func(idx): + # move to another version + JavaScriptBridge.eval("window.location.href = \"%s\"" % version_urls[idx]) + ) + + for i in range(versions.size()): + btn.add_item(versions[i], i) + + if versions[i] == current_version: + btn.select(i) diff --git a/examples_dd3d/demo_web_docs_version_select.gd.uid b/examples_dd3d/demo_web_docs_version_select.gd.uid new file mode 100644 index 0000000..a058966 --- /dev/null +++ b/examples_dd3d/demo_web_docs_version_select.gd.uid @@ -0,0 +1 @@ +uid://hvx3t70syvkm diff --git a/fps_counter.gd b/fps_counter.gd new file mode 100644 index 0000000..67e954f --- /dev/null +++ b/fps_counter.gd @@ -0,0 +1 @@ +extends Node3D diff --git a/fps_counter.gd.uid b/fps_counter.gd.uid new file mode 100644 index 0000000..4813286 --- /dev/null +++ b/fps_counter.gd.uid @@ -0,0 +1 @@ +uid://cd54gy5p1ybrm diff --git a/grass/grass_block_texture.png b/grass/grass_block_texture.png new file mode 100644 index 0000000..956b5a0 Binary files /dev/null and b/grass/grass_block_texture.png differ diff --git a/grass/grass_block_texture.png.import b/grass/grass_block_texture.png.import new file mode 100644 index 0000000..1ede967 --- /dev/null +++ b/grass/grass_block_texture.png.import @@ -0,0 +1,41 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dym0aiwxm8guh" +path.s3tc="res://.godot/imported/grass_block_texture.png-42f7cba7b97b486534d6f99cfd515690.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://grass/grass_block_texture.png" +dest_files=["res://.godot/imported/grass_block_texture.png-42f7cba7b97b486534d6f99cfd515690.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/grass/grass_block_texture.xcf b/grass/grass_block_texture.xcf new file mode 100644 index 0000000..21ec156 Binary files /dev/null and b/grass/grass_block_texture.xcf differ diff --git a/grass/grass_material.tres b/grass/grass_material.tres new file mode 100644 index 0000000..4a67436 --- /dev/null +++ b/grass/grass_material.tres @@ -0,0 +1,8 @@ +[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://d2eg0eaiyrt6p"] + +[ext_resource type="Texture2D" uid="uid://dym0aiwxm8guh" path="res://grass/grass_block_texture.png" id="1_s83eo"] + +[resource] +albedo_texture = ExtResource("1_s83eo") +texture_filter = 0 +proximity_fade_distance = 100.0 diff --git a/heightmap.gd b/heightmap.gd new file mode 100644 index 0000000..ec4fb53 --- /dev/null +++ b/heightmap.gd @@ -0,0 +1,14 @@ +extends CollisionShape3D + + +func _ready(): + print("loading heightmap...") + var heightmap_texture = ResourceLoader.load("res://Rolling Hills Height Map 1k/Rolling Hills Height Map.png") + var heightmap_image = heightmap_texture.get_image() + heightmap_image.convert(Image.FORMAT_RF) + shape = HeightMapShape3D.new() + + var height_min = 0.0 + var height_max = 100.0 + + shape.update_map_data_from_image(heightmap_image, height_min, height_max) diff --git a/heightmap.gd.uid b/heightmap.gd.uid new file mode 100644 index 0000000..a230da6 --- /dev/null +++ b/heightmap.gd.uid @@ -0,0 +1 @@ +uid://r24ehsk3bng1 diff --git a/icon.png b/icon.png new file mode 100644 index 0000000..e032a97 Binary files /dev/null and b/icon.png differ diff --git a/icon.png.import b/icon.png.import new file mode 100644 index 0000000..911e689 --- /dev/null +++ b/icon.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://f0ss3451neoo" +path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.png" +dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/mesh_generation_from_image.gd b/mesh_generation_from_image.gd new file mode 100644 index 0000000..f761027 --- /dev/null +++ b/mesh_generation_from_image.gd @@ -0,0 +1,80 @@ +extends MeshInstance3D + +@export var resolution_scaling = 1 +@export var height_scale = 500 * resolution_scaling + + +func _ready(): + DebugDraw3D.debug_enabled = true + create_mesh() + set_material() + + +func create_mesh(): + var heightmap_texture = ResourceLoader.load("res://Rolling Hills Height Map 1k/Rolling Hills Height Map.png") + var heightmap_image: Image = heightmap_texture.get_image() + heightmap_image.convert(Image.FORMAT_RF) + var st = SurfaceTool.new() + st.begin(Mesh.PRIMITIVE_TRIANGLES) + for i in range(-(heightmap_image.get_height() / resolution_scaling / 2), heightmap_image.get_height() / resolution_scaling / 2): + for j in range(-(heightmap_image.get_width() / resolution_scaling / 2), heightmap_image.get_width() / resolution_scaling / 2): + create_quad(st, Vector2(i, j), heightmap_image) + + st.index() + + mesh = st.commit() + +func set_material(): + var material = StandardMaterial3D.new() + material.vertex_color_use_as_albedo = true + set_surface_override_material(0, material) + +func create_quad(st: SurfaceTool, position: Vector2, heightmap_image: Image): + var height1 = heightmap_image.get_pixel((position.x + 1) * resolution_scaling + heightmap_image.get_width() / 2, position.y * resolution_scaling + heightmap_image.get_height() / 2) + var vertexPosition1 = Vector3(position.x * resolution_scaling + resolution_scaling, height1.get_luminance() * height_scale, position.y * resolution_scaling ) + var height2 = heightmap_image.get_pixel(position.x * resolution_scaling + heightmap_image.get_width() / 2, (position.y + 1) * resolution_scaling + heightmap_image.get_height() / 2) + var vertexPosition2 = Vector3(position.x * resolution_scaling , height2.get_luminance() * height_scale, position.y * resolution_scaling + resolution_scaling) + var height3 = heightmap_image.get_pixel(position.x * resolution_scaling + heightmap_image.get_width() / 2, position.y * resolution_scaling + heightmap_image.get_height() / 2) + var vertexPosition3 = Vector3(position.x * resolution_scaling , height3.get_luminance() * height_scale, position.y * resolution_scaling ) + var height4 = heightmap_image.get_pixel((position.x + 1) * resolution_scaling + heightmap_image.get_width() / 2, (position.y + 1) * resolution_scaling + heightmap_image.get_height() / 2) + var vertexPosition4 = Vector3(position.x * resolution_scaling + resolution_scaling, height4.get_luminance() * height_scale, position.y * resolution_scaling + resolution_scaling) + var height5 = heightmap_image.get_pixel(position.x * resolution_scaling + heightmap_image.get_width() / 2, (position.y + 1) * resolution_scaling + heightmap_image.get_height() / 2) + var vertexPosition5 = Vector3(position.x * resolution_scaling, height5.get_luminance() * height_scale, position.y * resolution_scaling + resolution_scaling) + var height6 = heightmap_image.get_pixel((position.x + 1) * resolution_scaling + heightmap_image.get_width() / 2, position.y * resolution_scaling + heightmap_image.get_height() / 2) + var vertexPosition6 = Vector3(position.x * resolution_scaling + resolution_scaling, height6.get_luminance() * height_scale, position.y * resolution_scaling) + var normal1 = -Vector3(vertexPosition2 - vertexPosition1).cross(Vector3(vertexPosition3 - vertexPosition1)).normalized() + var normal2 = -Vector3(vertexPosition5 - vertexPosition4).cross(Vector3(vertexPosition6 - vertexPosition4)).normalized() + st.set_color(Color.from_rgba8(normal1.x * 255, normal1.y * 255, normal1.z * 255)) + st.set_normal(normal1.normalized()) + st.add_vertex(vertexPosition1) + st.set_color(Color.from_rgba8(normal1.x * 255, normal1.y * 255, normal1.z * 255)) + st.set_normal(normal1.normalized()) + st.add_vertex(vertexPosition2) + st.set_color(Color.from_rgba8(normal1.x * 255, normal1.y * 255, normal1.z * 255)) + st.set_normal(normal1.normalized()) + st.add_vertex(vertexPosition3) + st.set_color(Color.from_rgba8(normal2.x * 255, normal2.y * 255, normal2.z * 255)) + st.set_normal(normal2.normalized()) + st.add_vertex(vertexPosition4) + st.set_color(Color.from_rgba8(normal2.x * 255, normal2.y * 255, normal2.z * 255)) + st.set_normal(normal2.normalized()) + st.add_vertex(vertexPosition5) + st.set_color(Color.from_rgba8(normal2.x * 255, normal2.y * 255, normal2.z * 255)) + st.set_normal(normal2.normalized()) + st.add_vertex(vertexPosition6) + +func _process(delta): + if Input.is_action_pressed("ShowNormals"): + if mesh == null: + return + for surface_index in mesh.get_surface_count(): + var arrays = mesh.surface_get_arrays(surface_index) + if arrays.size() == 0: + continue + + var vertices = arrays[Mesh.ARRAY_VERTEX] + var normals = arrays[Mesh.ARRAY_NORMAL] + for i in vertices.size(): + DebugDraw3D.draw_line(vertices[i], normals[i] + vertices[i] , Color.from_rgba8(normals[i].x * 255, normals[i].y * 255, normals[i].z * 255)) + + diff --git a/mesh_generation_from_image.gd.uid b/mesh_generation_from_image.gd.uid new file mode 100644 index 0000000..a95007c --- /dev/null +++ b/mesh_generation_from_image.gd.uid @@ -0,0 +1 @@ +uid://xpdmwrspdsux diff --git a/project.godot b/project.godot new file mode 100644 index 0000000..cd589d8 --- /dev/null +++ b/project.godot @@ -0,0 +1,98 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="GammaShade" +run/main_scene="res://world.tscn" +config/features=PackedStringArray("4.5") +config/icon="res://icon.png" + +[debug] + +settings/stdout/print_fps=true + +[debug_draw_3d] + +settings/addon_root_folder="res://addons/debug_draw_3d" + +[editor] + +version_control/autoload_on_startup=true + +[gui] + +common/drop_mouse_on_gui_input_disabled=true + +[input] + +MoveCamUp={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +MoveCamDown={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194325,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +MoveCamLeft={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":81,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +MoveCamRight={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":68,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +MoveCamForward={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":90,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +MoveCamBack={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":83,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +ShowCursor={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +LeftClick={ +"deadzone": 0.2, +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null) +] +} +ShowNormals={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":78,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +XRay={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":88,"key_label":0,"unicode":120,"location":0,"echo":false,"script":null) +] +} +RightClick={ +"deadzone": 0.2, +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":2,"canceled":false,"pressed":false,"double_click":false,"script":null) +] +} + +[physics] + +common/enable_pause_aware_picking=true + +[rendering] + +environment/defaults/default_environment="res://default_env.tres" diff --git a/vector-grid-marking-user-hud-interface/1601.m10.i307.n008.F.c05.205439527 Vector grid marking for user HUD interface.eps b/vector-grid-marking-user-hud-interface/1601.m10.i307.n008.F.c05.205439527 Vector grid marking for user HUD interface.eps new file mode 100644 index 0000000..05a737d --- /dev/null +++ b/vector-grid-marking-user-hud-interface/1601.m10.i307.n008.F.c05.205439527 Vector grid marking for user HUD interface.eps @@ -0,0 +1,12561 @@ +%!PS-Adobe-3.1 EPSF-3.0 +%ADO_DSC_Encoding: MacOS Roman +%%Title: 1601.m10.i307.n008.F.c05.205439527 Vector grid marking for user HUD interface.eps +%%Creator: Adobe Illustrator(R) 16.0 +%%For: Max +%%CreationDate: 28.01.16 +%%BoundingBox: 0 0 450 450 +%%HiResBoundingBox: 0 0 450 450 +%%CropBox: 0 0 450 450 +%%LanguageLevel: 2 +%%DocumentData: Clean7Bit +%ADOBeginClientInjection: DocumentHeader "AI11EPS" +%%AI8_CreatorVersion: 16.0.0 %AI9_PrintingDataBegin %ADO_BuildNumber: Adobe Illustrator(R) 16.0.0 x682 R agm 4.6676 ct 5.2591 %ADO_ContainsXMP: MainFirst +%ADOEndClientInjection: DocumentHeader "AI11EPS" +%%Pages: 1 +%%DocumentNeededResources: +%%DocumentSuppliedResources: procset Adobe_AGM_Image 1.0 0 +%%+ procset Adobe_CoolType_Utility_T42 1.0 0 +%%+ procset Adobe_CoolType_Utility_MAKEOCF 1.23 0 +%%+ procset Adobe_CoolType_Core 2.31 0 +%%+ procset Adobe_AGM_Core 2.0 0 +%%+ procset Adobe_AGM_Utils 1.0 0 +%%DocumentFonts: +%%DocumentNeededFonts: +%%DocumentNeededFeatures: +%%DocumentSuppliedFeatures: +%%DocumentCustomColors: +%%CMYKCustomColor: +%%RGBCustomColor: +%%EndComments + + + + + + + +%%BeginDefaults +%%ViewingOrientation: 1 0 0 1 +%%EndDefaults +%%BeginProlog +%%BeginResource: procset Adobe_AGM_Utils 1.0 0 +%%Version: 1.0 0 +%%Copyright: Copyright(C)2000-2006 Adobe Systems, Inc. All Rights Reserved. +systemdict/setpacking known +{currentpacking true setpacking}if +userdict/Adobe_AGM_Utils 75 dict dup begin put +/bdf +{bind def}bind def +/nd{null def}bdf +/xdf +{exch def}bdf +/ldf +{load def}bdf +/ddf +{put}bdf +/xddf +{3 -1 roll put}bdf +/xpt +{exch put}bdf +/ndf +{ + exch dup where{ + pop pop pop + }{ + xdf + }ifelse +}def +/cdndf +{ + exch dup currentdict exch known{ + pop pop + }{ + exch def + }ifelse +}def +/gx +{get exec}bdf +/ps_level + /languagelevel where{ + pop systemdict/languagelevel gx + }{ + 1 + }ifelse +def +/level2 + ps_level 2 ge +def +/level3 + ps_level 3 ge +def +/ps_version + {version cvr}stopped{-1}if +def +/set_gvm +{currentglobal exch setglobal}bdf +/reset_gvm +{setglobal}bdf +/makereadonlyarray +{ + /packedarray where{pop packedarray + }{ + array astore readonly}ifelse +}bdf +/map_reserved_ink_name +{ + dup type/stringtype eq{ + dup/Red eq{ + pop(_Red_) + }{ + dup/Green eq{ + pop(_Green_) + }{ + dup/Blue eq{ + pop(_Blue_) + }{ + dup()cvn eq{ + pop(Process) + }if + }ifelse + }ifelse + }ifelse + }if +}bdf +/AGMUTIL_GSTATE 22 dict def +/get_gstate +{ + AGMUTIL_GSTATE begin + /AGMUTIL_GSTATE_clr_spc currentcolorspace def + /AGMUTIL_GSTATE_clr_indx 0 def + /AGMUTIL_GSTATE_clr_comps 12 array def + mark currentcolor counttomark + {AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 3 -1 roll put + /AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 add def}repeat pop + /AGMUTIL_GSTATE_fnt rootfont def + /AGMUTIL_GSTATE_lw currentlinewidth def + /AGMUTIL_GSTATE_lc currentlinecap def + /AGMUTIL_GSTATE_lj currentlinejoin def + /AGMUTIL_GSTATE_ml currentmiterlimit def + currentdash/AGMUTIL_GSTATE_do xdf/AGMUTIL_GSTATE_da xdf + /AGMUTIL_GSTATE_sa currentstrokeadjust def + /AGMUTIL_GSTATE_clr_rnd currentcolorrendering def + /AGMUTIL_GSTATE_op currentoverprint def + /AGMUTIL_GSTATE_bg currentblackgeneration cvlit def + /AGMUTIL_GSTATE_ucr currentundercolorremoval cvlit def + currentcolortransfer cvlit/AGMUTIL_GSTATE_gy_xfer xdf cvlit/AGMUTIL_GSTATE_b_xfer xdf + cvlit/AGMUTIL_GSTATE_g_xfer xdf cvlit/AGMUTIL_GSTATE_r_xfer xdf + /AGMUTIL_GSTATE_ht currenthalftone def + /AGMUTIL_GSTATE_flt currentflat def + end +}def +/set_gstate +{ + AGMUTIL_GSTATE begin + AGMUTIL_GSTATE_clr_spc setcolorspace + AGMUTIL_GSTATE_clr_indx{AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 1 sub get + /AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 sub def}repeat setcolor + AGMUTIL_GSTATE_fnt setfont + AGMUTIL_GSTATE_lw setlinewidth + AGMUTIL_GSTATE_lc setlinecap + AGMUTIL_GSTATE_lj setlinejoin + AGMUTIL_GSTATE_ml setmiterlimit + AGMUTIL_GSTATE_da AGMUTIL_GSTATE_do setdash + AGMUTIL_GSTATE_sa setstrokeadjust + AGMUTIL_GSTATE_clr_rnd setcolorrendering + AGMUTIL_GSTATE_op setoverprint + AGMUTIL_GSTATE_bg cvx setblackgeneration + AGMUTIL_GSTATE_ucr cvx setundercolorremoval + AGMUTIL_GSTATE_r_xfer cvx AGMUTIL_GSTATE_g_xfer cvx AGMUTIL_GSTATE_b_xfer cvx + AGMUTIL_GSTATE_gy_xfer cvx setcolortransfer + AGMUTIL_GSTATE_ht/HalftoneType get dup 9 eq exch 100 eq or + { + currenthalftone/HalftoneType get AGMUTIL_GSTATE_ht/HalftoneType get ne + { + mark AGMUTIL_GSTATE_ht{sethalftone}stopped cleartomark + }if + }{ + AGMUTIL_GSTATE_ht sethalftone + }ifelse + AGMUTIL_GSTATE_flt setflat + end +}def +/get_gstate_and_matrix +{ + AGMUTIL_GSTATE begin + /AGMUTIL_GSTATE_ctm matrix currentmatrix def + end + get_gstate +}def +/set_gstate_and_matrix +{ + set_gstate + AGMUTIL_GSTATE begin + AGMUTIL_GSTATE_ctm setmatrix + end +}def +/AGMUTIL_str256 256 string def +/AGMUTIL_src256 256 string def +/AGMUTIL_dst64 64 string def +/AGMUTIL_srcLen nd +/AGMUTIL_ndx nd +/AGMUTIL_cpd nd +/capture_cpd{ + //Adobe_AGM_Utils/AGMUTIL_cpd currentpagedevice ddf +}def +/thold_halftone +{ + level3 + {sethalftone currenthalftone} + { + dup/HalftoneType get 3 eq + { + sethalftone currenthalftone + }{ + begin + Width Height mul{ + Thresholds read{pop}if + }repeat + end + currenthalftone + }ifelse + }ifelse +}def +/rdcmntline +{ + currentfile AGMUTIL_str256 readline pop + (%)anchorsearch{pop}if +}bdf +/filter_cmyk +{ + dup type/filetype ne{ + exch()/SubFileDecode filter + }{ + exch pop + } + ifelse + [ + exch + { + AGMUTIL_src256 readstring pop + dup length/AGMUTIL_srcLen exch def + /AGMUTIL_ndx 0 def + AGMCORE_plate_ndx 4 AGMUTIL_srcLen 1 sub{ + 1 index exch get + AGMUTIL_dst64 AGMUTIL_ndx 3 -1 roll put + /AGMUTIL_ndx AGMUTIL_ndx 1 add def + }for + pop + AGMUTIL_dst64 0 AGMUTIL_ndx getinterval + } + bind + /exec cvx + ]cvx +}bdf +/filter_indexed_devn +{ + cvi Names length mul names_index add Lookup exch get +}bdf +/filter_devn +{ + 4 dict begin + /srcStr xdf + /dstStr xdf + dup type/filetype ne{ + 0()/SubFileDecode filter + }if + [ + exch + [ + /devicen_colorspace_dict/AGMCORE_gget cvx/begin cvx + currentdict/srcStr get/readstring cvx/pop cvx + /dup cvx/length cvx 0/gt cvx[ + Adobe_AGM_Utils/AGMUTIL_ndx 0/ddf cvx + names_index Names length currentdict/srcStr get length 1 sub{ + 1/index cvx/exch cvx/get cvx + currentdict/dstStr get/AGMUTIL_ndx/load cvx 3 -1/roll cvx/put cvx + Adobe_AGM_Utils/AGMUTIL_ndx/AGMUTIL_ndx/load cvx 1/add cvx/ddf cvx + }for + currentdict/dstStr get 0/AGMUTIL_ndx/load cvx/getinterval cvx + ]cvx/if cvx + /end cvx + ]cvx + bind + /exec cvx + ]cvx + end +}bdf +/AGMUTIL_imagefile nd +/read_image_file +{ + AGMUTIL_imagefile 0 setfileposition + 10 dict begin + /imageDict xdf + /imbufLen Width BitsPerComponent mul 7 add 8 idiv def + /imbufIdx 0 def + /origDataSource imageDict/DataSource get def + /origMultipleDataSources imageDict/MultipleDataSources get def + /origDecode imageDict/Decode get def + /dstDataStr imageDict/Width get colorSpaceElemCnt mul string def + imageDict/MultipleDataSources known{MultipleDataSources}{false}ifelse + { + /imbufCnt imageDict/DataSource get length def + /imbufs imbufCnt array def + 0 1 imbufCnt 1 sub{ + /imbufIdx xdf + imbufs imbufIdx imbufLen string put + imageDict/DataSource get imbufIdx[AGMUTIL_imagefile imbufs imbufIdx get/readstring cvx/pop cvx]cvx put + }for + DeviceN_PS2{ + imageDict begin + /DataSource[DataSource/devn_sep_datasource cvx]cvx def + /MultipleDataSources false def + /Decode[0 1]def + end + }if + }{ + /imbuf imbufLen string def + Indexed_DeviceN level3 not and DeviceN_NoneName or{ + /srcDataStrs[imageDict begin + currentdict/MultipleDataSources known{MultipleDataSources{DataSource length}{1}ifelse}{1}ifelse + { + Width Decode length 2 div mul cvi string + }repeat + end]def + imageDict begin + /DataSource[AGMUTIL_imagefile Decode BitsPerComponent false 1/filter_indexed_devn load dstDataStr srcDataStrs devn_alt_datasource/exec cvx]cvx def + /Decode[0 1]def + end + }{ + imageDict/DataSource[1 string dup 0 AGMUTIL_imagefile Decode length 2 idiv string/readstring cvx/pop cvx names_index/get cvx/put cvx]cvx put + imageDict/Decode[0 1]put + }ifelse + }ifelse + imageDict exch + load exec + imageDict/DataSource origDataSource put + imageDict/MultipleDataSources origMultipleDataSources put + imageDict/Decode origDecode put + end +}bdf +/write_image_file +{ + begin + {(AGMUTIL_imagefile)(w+)file}stopped{ + false + }{ + Adobe_AGM_Utils/AGMUTIL_imagefile xddf + 2 dict begin + /imbufLen Width BitsPerComponent mul 7 add 8 idiv def + MultipleDataSources{DataSource 0 get}{DataSource}ifelse type/filetype eq{ + /imbuf imbufLen string def + }if + 1 1 Height MultipleDataSources not{Decode length 2 idiv mul}if{ + pop + MultipleDataSources{ + 0 1 DataSource length 1 sub{ + DataSource type dup + /arraytype eq{ + pop DataSource exch gx + }{ + /filetype eq{ + DataSource exch get imbuf readstring pop + }{ + DataSource exch get + }ifelse + }ifelse + AGMUTIL_imagefile exch writestring + }for + }{ + DataSource type dup + /arraytype eq{ + pop DataSource exec + }{ + /filetype eq{ + DataSource imbuf readstring pop + }{ + DataSource + }ifelse + }ifelse + AGMUTIL_imagefile exch writestring + }ifelse + }for + end + true + }ifelse + end +}bdf +/close_image_file +{ + AGMUTIL_imagefile closefile(AGMUTIL_imagefile)deletefile +}def +statusdict/product known userdict/AGMP_current_show known not and{ + /pstr statusdict/product get def + pstr(HP LaserJet 2200)eq + pstr(HP LaserJet 4000 Series)eq or + pstr(HP LaserJet 4050 Series )eq or + pstr(HP LaserJet 8000 Series)eq or + pstr(HP LaserJet 8100 Series)eq or + pstr(HP LaserJet 8150 Series)eq or + pstr(HP LaserJet 5000 Series)eq or + pstr(HP LaserJet 5100 Series)eq or + pstr(HP Color LaserJet 4500)eq or + pstr(HP Color LaserJet 4600)eq or + pstr(HP LaserJet 5Si)eq or + pstr(HP LaserJet 1200 Series)eq or + pstr(HP LaserJet 1300 Series)eq or + pstr(HP LaserJet 4100 Series)eq or + { + userdict/AGMP_current_show/show load put + userdict/show{ + currentcolorspace 0 get + /Pattern eq + {false charpath f} + {AGMP_current_show}ifelse + }put + }if + currentdict/pstr undef +}if +/consumeimagedata +{ + begin + AGMIMG_init_common + currentdict/MultipleDataSources known not + {/MultipleDataSources false def}if + MultipleDataSources + { + DataSource 0 get type + dup/filetype eq + { + 1 dict begin + /flushbuffer Width cvi string def + 1 1 Height cvi + { + pop + 0 1 DataSource length 1 sub + { + DataSource exch get + flushbuffer readstring pop pop + }for + }for + end + }if + dup/arraytype eq exch/packedarraytype eq or DataSource 0 get xcheck and + { + Width Height mul cvi + { + 0 1 DataSource length 1 sub + {dup DataSource exch gx length exch 0 ne{pop}if}for + dup 0 eq + {pop exit}if + sub dup 0 le + {exit}if + }loop + pop + }if + } + { + /DataSource load type + dup/filetype eq + { + 1 dict begin + /flushbuffer Width Decode length 2 idiv mul cvi string def + 1 1 Height{pop DataSource flushbuffer readstring pop pop}for + end + }if + dup/arraytype eq exch/packedarraytype eq or/DataSource load xcheck and + { + Height Width BitsPerComponent mul 8 BitsPerComponent sub add 8 idiv Decode length 2 idiv mul mul + { + DataSource length dup 0 eq + {pop exit}if + sub dup 0 le + {exit}if + }loop + pop + }if + }ifelse + end +}bdf +/addprocs +{ + 2{/exec load}repeat + 3 1 roll + [5 1 roll]bind cvx +}def +/modify_halftone_xfer +{ + currenthalftone dup length dict copy begin + currentdict 2 index known{ + 1 index load dup length dict copy begin + currentdict/TransferFunction known{ + /TransferFunction load + }{ + currenttransfer + }ifelse + addprocs/TransferFunction xdf + currentdict end def + currentdict end sethalftone + }{ + currentdict/TransferFunction known{ + /TransferFunction load + }{ + currenttransfer + }ifelse + addprocs/TransferFunction xdf + currentdict end sethalftone + pop + }ifelse +}def +/clonearray +{ + dup xcheck exch + dup length array exch + Adobe_AGM_Core/AGMCORE_tmp -1 ddf + { + Adobe_AGM_Core/AGMCORE_tmp 2 copy get 1 add ddf + dup type/dicttype eq + { + Adobe_AGM_Core/AGMCORE_tmp get + exch + clonedict + Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf + }if + dup type/arraytype eq + { + Adobe_AGM_Core/AGMCORE_tmp get exch + clonearray + Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf + }if + exch dup + Adobe_AGM_Core/AGMCORE_tmp get 4 -1 roll put + }forall + exch{cvx}if +}bdf +/clonedict +{ + dup length dict + begin + { + dup type/dicttype eq + {clonedict}if + dup type/arraytype eq + {clonearray}if + def + }forall + currentdict + end +}bdf +/DeviceN_PS2 +{ + /currentcolorspace AGMCORE_gget 0 get/DeviceN eq level3 not and +}bdf +/Indexed_DeviceN +{ + /indexed_colorspace_dict AGMCORE_gget dup null ne{ + dup/CSDBase known{ + /CSDBase get/CSD get_res/Names known + }{ + pop false + }ifelse + }{ + pop false + }ifelse +}bdf +/DeviceN_NoneName +{ + /Names where{ + pop + false Names + { + (None)eq or + }forall + }{ + false + }ifelse +}bdf +/DeviceN_PS2_inRip_seps +{ + /AGMCORE_in_rip_sep where + { + pop dup type dup/arraytype eq exch/packedarraytype eq or + { + dup 0 get/DeviceN eq level3 not and AGMCORE_in_rip_sep and + { + /currentcolorspace exch AGMCORE_gput + false + }{ + true + }ifelse + }{ + true + }ifelse + }{ + true + }ifelse +}bdf +/base_colorspace_type +{ + dup type/arraytype eq{0 get}if +}bdf +/currentdistillerparams where{pop currentdistillerparams/CoreDistVersion get 5000 lt}{true}ifelse +{ + /pdfmark_5{cleartomark}bind def +}{ + /pdfmark_5{pdfmark}bind def +}ifelse +/ReadBypdfmark_5 +{ + currentfile exch 0 exch/SubFileDecode filter + /currentdistillerparams where + {pop currentdistillerparams/CoreDistVersion get 5000 lt}{true}ifelse + {flushfile cleartomark} + {/PUT pdfmark}ifelse +}bdf +/ReadBypdfmark_5_string +{ + 2 dict begin + /makerString exch def string/tmpString exch def + { + currentfile tmpString readline not{pop exit}if + makerString anchorsearch + { + pop pop cleartomark exit + }{ + 3 copy/PUT pdfmark_5 pop 2 copy(\n)/PUT pdfmark_5 + }ifelse + }loop + end +}bdf +/xpdfm +{ + { + dup 0 get/Label eq + { + aload length[exch 1 add 1 roll/PAGELABEL + }{ + aload pop + [{ThisPage}<<5 -2 roll>>/PUT + }ifelse + pdfmark_5 + }forall +}bdf +/lmt{ + dup 2 index le{exch}if pop dup 2 index ge{exch}if pop +}bdf +/int{ + dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul exch pop add exch pop +}bdf +/ds{ + Adobe_AGM_Utils begin +}bdf +/dt{ + currentdict Adobe_AGM_Utils eq{ + end + }if +}bdf +systemdict/setpacking known +{setpacking}if +%%EndResource +%%BeginResource: procset Adobe_AGM_Core 2.0 0 +%%Version: 2.0 0 +%%Copyright: Copyright(C)1997-2007 Adobe Systems, Inc. All Rights Reserved. +systemdict/setpacking known +{ + currentpacking + true setpacking +}if +userdict/Adobe_AGM_Core 209 dict dup begin put +/Adobe_AGM_Core_Id/Adobe_AGM_Core_2.0_0 def +/AGMCORE_str256 256 string def +/AGMCORE_save nd +/AGMCORE_graphicsave nd +/AGMCORE_c 0 def +/AGMCORE_m 0 def +/AGMCORE_y 0 def +/AGMCORE_k 0 def +/AGMCORE_cmykbuf 4 array def +/AGMCORE_screen[currentscreen]cvx def +/AGMCORE_tmp 0 def +/AGMCORE_&setgray nd +/AGMCORE_&setcolor nd +/AGMCORE_&setcolorspace nd +/AGMCORE_&setcmykcolor nd +/AGMCORE_cyan_plate nd +/AGMCORE_magenta_plate nd +/AGMCORE_yellow_plate nd +/AGMCORE_black_plate nd +/AGMCORE_plate_ndx nd +/AGMCORE_get_ink_data nd +/AGMCORE_is_cmyk_sep nd +/AGMCORE_host_sep nd +/AGMCORE_avoid_L2_sep_space nd +/AGMCORE_distilling nd +/AGMCORE_composite_job nd +/AGMCORE_producing_seps nd +/AGMCORE_ps_level -1 def +/AGMCORE_ps_version -1 def +/AGMCORE_environ_ok nd +/AGMCORE_CSD_cache 0 dict def +/AGMCORE_currentoverprint false def +/AGMCORE_deltaX nd +/AGMCORE_deltaY nd +/AGMCORE_name nd +/AGMCORE_sep_special nd +/AGMCORE_err_strings 4 dict def +/AGMCORE_cur_err nd +/AGMCORE_current_spot_alias false def +/AGMCORE_inverting false def +/AGMCORE_feature_dictCount nd +/AGMCORE_feature_opCount nd +/AGMCORE_feature_ctm nd +/AGMCORE_ConvertToProcess false def +/AGMCORE_Default_CTM matrix def +/AGMCORE_Default_PageSize nd +/AGMCORE_Default_flatness nd +/AGMCORE_currentbg nd +/AGMCORE_currentucr nd +/AGMCORE_pattern_paint_type 0 def +/knockout_unitsq nd +currentglobal true setglobal +[/CSA/Gradient/Procedure] +{ + /Generic/Category findresource dup length dict copy/Category defineresource pop +}forall +setglobal +/AGMCORE_key_known +{ + where{ + /Adobe_AGM_Core_Id known + }{ + false + }ifelse +}ndf +/flushinput +{ + save + 2 dict begin + /CompareBuffer 3 -1 roll def + /readbuffer 256 string def + mark + { + currentfile readbuffer{readline}stopped + {cleartomark mark} + { + not + {pop exit} + if + CompareBuffer eq + {exit} + if + }ifelse + }loop + cleartomark + end + restore +}bdf +/getspotfunction +{ + AGMCORE_screen exch pop exch pop + dup type/dicttype eq{ + dup/HalftoneType get 1 eq{ + /SpotFunction get + }{ + dup/HalftoneType get 2 eq{ + /GraySpotFunction get + }{ + pop + { + abs exch abs 2 copy add 1 gt{ + 1 sub dup mul exch 1 sub dup mul add 1 sub + }{ + dup mul exch dup mul add 1 exch sub + }ifelse + }bind + }ifelse + }ifelse + }if +}def +/np +{newpath}bdf +/clp_npth +{clip np}def +/eoclp_npth +{eoclip np}def +/npth_clp +{np clip}def +/graphic_setup +{ + /AGMCORE_graphicsave save store + concat + 0 setgray + 0 setlinecap + 0 setlinejoin + 1 setlinewidth + []0 setdash + 10 setmiterlimit + np + false setoverprint + false setstrokeadjust + //Adobe_AGM_Core/spot_alias gx + /Adobe_AGM_Image where{ + pop + Adobe_AGM_Image/spot_alias 2 copy known{ + gx + }{ + pop pop + }ifelse + }if + /sep_colorspace_dict null AGMCORE_gput + 100 dict begin + /dictstackcount countdictstack def + /showpage{}def + mark +}def +/graphic_cleanup +{ + cleartomark + dictstackcount 1 countdictstack 1 sub{end}for + end + AGMCORE_graphicsave restore +}def +/compose_error_msg +{ + grestoreall initgraphics + /Helvetica findfont 10 scalefont setfont + /AGMCORE_deltaY 100 def + /AGMCORE_deltaX 310 def + clippath pathbbox np pop pop 36 add exch 36 add exch moveto + 0 AGMCORE_deltaY rlineto AGMCORE_deltaX 0 rlineto + 0 AGMCORE_deltaY neg rlineto AGMCORE_deltaX neg 0 rlineto closepath + 0 AGMCORE_&setgray + gsave 1 AGMCORE_&setgray fill grestore + 1 setlinewidth gsave stroke grestore + currentpoint AGMCORE_deltaY 15 sub add exch 8 add exch moveto + /AGMCORE_deltaY 12 def + /AGMCORE_tmp 0 def + AGMCORE_err_strings exch get + { + dup 32 eq + { + pop + AGMCORE_str256 0 AGMCORE_tmp getinterval + stringwidth pop currentpoint pop add AGMCORE_deltaX 28 add gt + { + currentpoint AGMCORE_deltaY sub exch pop + clippath pathbbox pop pop pop 44 add exch moveto + }if + AGMCORE_str256 0 AGMCORE_tmp getinterval show( )show + 0 1 AGMCORE_str256 length 1 sub + { + AGMCORE_str256 exch 0 put + }for + /AGMCORE_tmp 0 def + }{ + AGMCORE_str256 exch AGMCORE_tmp xpt + /AGMCORE_tmp AGMCORE_tmp 1 add def + }ifelse + }forall +}bdf +/AGMCORE_CMYKDeviceNColorspaces[ + [/Separation/None/DeviceCMYK{0 0 0}] + [/Separation(Black)/DeviceCMYK{0 0 0 4 -1 roll}bind] + [/Separation(Yellow)/DeviceCMYK{0 0 3 -1 roll 0}bind] + [/DeviceN[(Yellow)(Black)]/DeviceCMYK{0 0 4 2 roll}bind] + [/Separation(Magenta)/DeviceCMYK{0 exch 0 0}bind] + [/DeviceN[(Magenta)(Black)]/DeviceCMYK{0 3 1 roll 0 exch}bind] + [/DeviceN[(Magenta)(Yellow)]/DeviceCMYK{0 3 1 roll 0}bind] + [/DeviceN[(Magenta)(Yellow)(Black)]/DeviceCMYK{0 4 1 roll}bind] + [/Separation(Cyan)/DeviceCMYK{0 0 0}] + [/DeviceN[(Cyan)(Black)]/DeviceCMYK{0 0 3 -1 roll}bind] + [/DeviceN[(Cyan)(Yellow)]/DeviceCMYK{0 exch 0}bind] + [/DeviceN[(Cyan)(Yellow)(Black)]/DeviceCMYK{0 3 1 roll}bind] + [/DeviceN[(Cyan)(Magenta)]/DeviceCMYK{0 0}] + [/DeviceN[(Cyan)(Magenta)(Black)]/DeviceCMYK{0 exch}bind] + [/DeviceN[(Cyan)(Magenta)(Yellow)]/DeviceCMYK{0}] + [/DeviceCMYK] +]def +/ds{ + Adobe_AGM_Core begin + /currentdistillerparams where + { + pop currentdistillerparams/CoreDistVersion get 5000 lt + {<>setdistillerparams}if + }if + /AGMCORE_ps_version xdf + /AGMCORE_ps_level xdf + errordict/AGM_handleerror known not{ + errordict/AGM_handleerror errordict/handleerror get put + errordict/handleerror{ + Adobe_AGM_Core begin + $error/newerror get AGMCORE_cur_err null ne and{ + $error/newerror false put + AGMCORE_cur_err compose_error_msg + }if + $error/newerror true put + end + errordict/AGM_handleerror get exec + }bind put + }if + /AGMCORE_environ_ok + ps_level AGMCORE_ps_level ge + ps_version AGMCORE_ps_version ge and + AGMCORE_ps_level -1 eq or + def + AGMCORE_environ_ok not + {/AGMCORE_cur_err/AGMCORE_bad_environ def}if + /AGMCORE_&setgray systemdict/setgray get def + level2{ + /AGMCORE_&setcolor systemdict/setcolor get def + /AGMCORE_&setcolorspace systemdict/setcolorspace get def + }if + /AGMCORE_currentbg currentblackgeneration def + /AGMCORE_currentucr currentundercolorremoval def + /AGMCORE_Default_flatness currentflat def + /AGMCORE_distilling + /product where{ + pop systemdict/setdistillerparams known product(Adobe PostScript Parser)ne and + }{ + false + }ifelse + def + /AGMCORE_GSTATE AGMCORE_key_known not{ + /AGMCORE_GSTATE 21 dict def + /AGMCORE_tmpmatrix matrix def + /AGMCORE_gstack 32 array def + /AGMCORE_gstackptr 0 def + /AGMCORE_gstacksaveptr 0 def + /AGMCORE_gstackframekeys 14 def + /AGMCORE_&gsave/gsave ldf + /AGMCORE_&grestore/grestore ldf + /AGMCORE_&grestoreall/grestoreall ldf + /AGMCORE_&save/save ldf + /AGMCORE_&setoverprint/setoverprint ldf + /AGMCORE_gdictcopy{ + begin + {def}forall + end + }def + /AGMCORE_gput{ + AGMCORE_gstack AGMCORE_gstackptr get + 3 1 roll + put + }def + /AGMCORE_gget{ + AGMCORE_gstack AGMCORE_gstackptr get + exch + get + }def + /gsave{ + AGMCORE_&gsave + AGMCORE_gstack AGMCORE_gstackptr get + AGMCORE_gstackptr 1 add + dup 32 ge{limitcheck}if + /AGMCORE_gstackptr exch store + AGMCORE_gstack AGMCORE_gstackptr get + AGMCORE_gdictcopy + }def + /grestore{ + AGMCORE_&grestore + AGMCORE_gstackptr 1 sub + dup AGMCORE_gstacksaveptr lt{1 add}if + dup AGMCORE_gstack exch get dup/AGMCORE_currentoverprint known + {/AGMCORE_currentoverprint get setoverprint}{pop}ifelse + /AGMCORE_gstackptr exch store + }def + /grestoreall{ + AGMCORE_&grestoreall + /AGMCORE_gstackptr AGMCORE_gstacksaveptr store + }def + /save{ + AGMCORE_&save + AGMCORE_gstack AGMCORE_gstackptr get + AGMCORE_gstackptr 1 add + dup 32 ge{limitcheck}if + /AGMCORE_gstackptr exch store + /AGMCORE_gstacksaveptr AGMCORE_gstackptr store + AGMCORE_gstack AGMCORE_gstackptr get + AGMCORE_gdictcopy + }def + /setoverprint{ + dup/AGMCORE_currentoverprint exch AGMCORE_gput AGMCORE_&setoverprint + }def + 0 1 AGMCORE_gstack length 1 sub{ + AGMCORE_gstack exch AGMCORE_gstackframekeys dict put + }for + }if + level3/AGMCORE_&sysshfill AGMCORE_key_known not and + { + /AGMCORE_&sysshfill systemdict/shfill get def + /AGMCORE_&sysmakepattern systemdict/makepattern get def + /AGMCORE_&usrmakepattern/makepattern load def + }if + /currentcmykcolor[0 0 0 0]AGMCORE_gput + /currentstrokeadjust false AGMCORE_gput + /currentcolorspace[/DeviceGray]AGMCORE_gput + /sep_tint 0 AGMCORE_gput + /devicen_tints[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]AGMCORE_gput + /sep_colorspace_dict null AGMCORE_gput + /devicen_colorspace_dict null AGMCORE_gput + /indexed_colorspace_dict null AGMCORE_gput + /currentcolor_intent()AGMCORE_gput + /customcolor_tint 1 AGMCORE_gput + /absolute_colorimetric_crd null AGMCORE_gput + /relative_colorimetric_crd null AGMCORE_gput + /saturation_crd null AGMCORE_gput + /perceptual_crd null AGMCORE_gput + currentcolortransfer cvlit/AGMCore_gray_xfer xdf cvlit/AGMCore_b_xfer xdf + cvlit/AGMCore_g_xfer xdf cvlit/AGMCore_r_xfer xdf + << + /MaxPatternItem currentsystemparams/MaxPatternCache get + >> + setuserparams + end +}def +/ps +{ + /setcmykcolor where{ + pop + Adobe_AGM_Core/AGMCORE_&setcmykcolor/setcmykcolor load put + }if + Adobe_AGM_Core begin + /setcmykcolor + { + 4 copy AGMCORE_cmykbuf astore/currentcmykcolor exch AGMCORE_gput + 1 sub 4 1 roll + 3{ + 3 index add neg dup 0 lt{ + pop 0 + }if + 3 1 roll + }repeat + setrgbcolor pop + }ndf + /currentcmykcolor + { + /currentcmykcolor AGMCORE_gget aload pop + }ndf + /setoverprint + {pop}ndf + /currentoverprint + {false}ndf + /AGMCORE_cyan_plate 1 0 0 0 test_cmyk_color_plate def + /AGMCORE_magenta_plate 0 1 0 0 test_cmyk_color_plate def + /AGMCORE_yellow_plate 0 0 1 0 test_cmyk_color_plate def + /AGMCORE_black_plate 0 0 0 1 test_cmyk_color_plate def + /AGMCORE_plate_ndx + AGMCORE_cyan_plate{ + 0 + }{ + AGMCORE_magenta_plate{ + 1 + }{ + AGMCORE_yellow_plate{ + 2 + }{ + AGMCORE_black_plate{ + 3 + }{ + 4 + }ifelse + }ifelse + }ifelse + }ifelse + def + /AGMCORE_have_reported_unsupported_color_space false def + /AGMCORE_report_unsupported_color_space + { + AGMCORE_have_reported_unsupported_color_space false eq + { + (Warning: Job contains content that cannot be separated with on-host methods. This content appears on the black plate, and knocks out all other plates.)== + Adobe_AGM_Core/AGMCORE_have_reported_unsupported_color_space true ddf + }if + }def + /AGMCORE_composite_job + AGMCORE_cyan_plate AGMCORE_magenta_plate and AGMCORE_yellow_plate and AGMCORE_black_plate and def + /AGMCORE_in_rip_sep + /AGMCORE_in_rip_sep where{ + pop AGMCORE_in_rip_sep + }{ + AGMCORE_distilling + { + false + }{ + userdict/Adobe_AGM_OnHost_Seps known{ + false + }{ + level2{ + currentpagedevice/Separations 2 copy known{ + get + }{ + pop pop false + }ifelse + }{ + false + }ifelse + }ifelse + }ifelse + }ifelse + def + /AGMCORE_producing_seps AGMCORE_composite_job not AGMCORE_in_rip_sep or def + /AGMCORE_host_sep AGMCORE_producing_seps AGMCORE_in_rip_sep not and def + /AGM_preserve_spots + /AGM_preserve_spots where{ + pop AGM_preserve_spots + }{ + AGMCORE_distilling AGMCORE_producing_seps or + }ifelse + def + /AGM_is_distiller_preserving_spotimages + { + currentdistillerparams/PreserveOverprintSettings known + { + currentdistillerparams/PreserveOverprintSettings get + { + currentdistillerparams/ColorConversionStrategy known + { + currentdistillerparams/ColorConversionStrategy get + /sRGB ne + }{ + true + }ifelse + }{ + false + }ifelse + }{ + false + }ifelse + }def + /convert_spot_to_process where{pop}{ + /convert_spot_to_process + { + //Adobe_AGM_Core begin + dup map_alias{ + /Name get exch pop + }if + dup dup(None)eq exch(All)eq or + { + pop false + }{ + AGMCORE_host_sep + { + gsave + 1 0 0 0 setcmykcolor currentgray 1 exch sub + 0 1 0 0 setcmykcolor currentgray 1 exch sub + 0 0 1 0 setcmykcolor currentgray 1 exch sub + 0 0 0 1 setcmykcolor currentgray 1 exch sub + add add add 0 eq + { + pop false + }{ + false setoverprint + current_spot_alias false set_spot_alias + 1 1 1 1 6 -1 roll findcmykcustomcolor 1 setcustomcolor + set_spot_alias + currentgray 1 ne + }ifelse + grestore + }{ + AGMCORE_distilling + { + pop AGM_is_distiller_preserving_spotimages not + }{ + //Adobe_AGM_Core/AGMCORE_name xddf + false + //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 0 eq + AGMUTIL_cpd/OverrideSeparations known and + { + AGMUTIL_cpd/OverrideSeparations get + { + /HqnSpots/ProcSet resourcestatus + { + pop pop pop true + }if + }if + }if + { + AGMCORE_name/HqnSpots/ProcSet findresource/TestSpot gx not + }{ + gsave + [/Separation AGMCORE_name/DeviceGray{}]AGMCORE_&setcolorspace + false + AGMUTIL_cpd/SeparationColorNames 2 copy known + { + get + {AGMCORE_name eq or}forall + not + }{ + pop pop pop true + }ifelse + grestore + }ifelse + }ifelse + }ifelse + }ifelse + end + }def + }ifelse + /convert_to_process where{pop}{ + /convert_to_process + { + dup length 0 eq + { + pop false + }{ + AGMCORE_host_sep + { + dup true exch + { + dup(Cyan)eq exch + dup(Magenta)eq 3 -1 roll or exch + dup(Yellow)eq 3 -1 roll or exch + dup(Black)eq 3 -1 roll or + {pop} + {convert_spot_to_process and}ifelse + } + forall + { + true exch + { + dup(Cyan)eq exch + dup(Magenta)eq 3 -1 roll or exch + dup(Yellow)eq 3 -1 roll or exch + (Black)eq or and + }forall + not + }{pop false}ifelse + }{ + false exch + { + /PhotoshopDuotoneList where{pop false}{true}ifelse + { + dup(Cyan)eq exch + dup(Magenta)eq 3 -1 roll or exch + dup(Yellow)eq 3 -1 roll or exch + dup(Black)eq 3 -1 roll or + {pop} + {convert_spot_to_process or}ifelse + } + { + convert_spot_to_process or + } + ifelse + } + forall + }ifelse + }ifelse + }def + }ifelse + /AGMCORE_avoid_L2_sep_space + version cvr 2012 lt + level2 and + AGMCORE_producing_seps not and + def + /AGMCORE_is_cmyk_sep + AGMCORE_cyan_plate AGMCORE_magenta_plate or AGMCORE_yellow_plate or AGMCORE_black_plate or + def + /AGM_avoid_0_cmyk where{ + pop AGM_avoid_0_cmyk + }{ + AGM_preserve_spots + userdict/Adobe_AGM_OnHost_Seps known + userdict/Adobe_AGM_InRip_Seps known or + not and + }ifelse + { + /setcmykcolor[ + { + 4 copy add add add 0 eq currentoverprint and{ + pop 0.0005 + }if + }/exec cvx + /AGMCORE_&setcmykcolor load dup type/operatortype ne{ + /exec cvx + }if + ]cvx def + }if + /AGMCORE_IsSeparationAProcessColor + { + dup(Cyan)eq exch dup(Magenta)eq exch dup(Yellow)eq exch(Black)eq or or or + }def + AGMCORE_host_sep{ + /setcolortransfer + { + AGMCORE_cyan_plate{ + pop pop pop + }{ + AGMCORE_magenta_plate{ + 4 3 roll pop pop pop + }{ + AGMCORE_yellow_plate{ + 4 2 roll pop pop pop + }{ + 4 1 roll pop pop pop + }ifelse + }ifelse + }ifelse + settransfer + } + def + /AGMCORE_get_ink_data + AGMCORE_cyan_plate{ + {pop pop pop} + }{ + AGMCORE_magenta_plate{ + {4 3 roll pop pop pop} + }{ + AGMCORE_yellow_plate{ + {4 2 roll pop pop pop} + }{ + {4 1 roll pop pop pop} + }ifelse + }ifelse + }ifelse + def + /AGMCORE_RemoveProcessColorNames + { + 1 dict begin + /filtername + { + dup/Cyan eq 1 index(Cyan)eq or + {pop(_cyan_)}if + dup/Magenta eq 1 index(Magenta)eq or + {pop(_magenta_)}if + dup/Yellow eq 1 index(Yellow)eq or + {pop(_yellow_)}if + dup/Black eq 1 index(Black)eq or + {pop(_black_)}if + }def + dup type/arraytype eq + {[exch{filtername}forall]} + {filtername}ifelse + end + }def + level3{ + /AGMCORE_IsCurrentColor + { + dup AGMCORE_IsSeparationAProcessColor + { + AGMCORE_plate_ndx 0 eq + {dup(Cyan)eq exch/Cyan eq or}if + AGMCORE_plate_ndx 1 eq + {dup(Magenta)eq exch/Magenta eq or}if + AGMCORE_plate_ndx 2 eq + {dup(Yellow)eq exch/Yellow eq or}if + AGMCORE_plate_ndx 3 eq + {dup(Black)eq exch/Black eq or}if + AGMCORE_plate_ndx 4 eq + {pop false}if + }{ + gsave + false setoverprint + current_spot_alias false set_spot_alias + 1 1 1 1 6 -1 roll findcmykcustomcolor 1 setcustomcolor + set_spot_alias + currentgray 1 ne + grestore + }ifelse + }def + /AGMCORE_filter_functiondatasource + { + 5 dict begin + /data_in xdf + data_in type/stringtype eq + { + /ncomp xdf + /comp xdf + /string_out data_in length ncomp idiv string def + 0 ncomp data_in length 1 sub + { + string_out exch dup ncomp idiv exch data_in exch ncomp getinterval comp get 255 exch sub put + }for + string_out + }{ + string/string_in xdf + /string_out 1 string def + /component xdf + [ + data_in string_in/readstring cvx + [component/get cvx 255/exch cvx/sub cvx string_out/exch cvx 0/exch cvx/put cvx string_out]cvx + [/pop cvx()]cvx/ifelse cvx + ]cvx/ReusableStreamDecode filter + }ifelse + end + }def + /AGMCORE_separateShadingFunction + { + 2 dict begin + /paint? xdf + /channel xdf + dup type/dicttype eq + { + begin + FunctionType 0 eq + { + /DataSource channel Range length 2 idiv DataSource AGMCORE_filter_functiondatasource def + currentdict/Decode known + {/Decode Decode channel 2 mul 2 getinterval def}if + paint? not + {/Decode[1 1]def}if + }if + FunctionType 2 eq + { + paint? + { + /C0[C0 channel get 1 exch sub]def + /C1[C1 channel get 1 exch sub]def + }{ + /C0[1]def + /C1[1]def + }ifelse + }if + FunctionType 3 eq + { + /Functions[Functions{channel paint? AGMCORE_separateShadingFunction}forall]def + }if + currentdict/Range known + {/Range[0 1]def}if + currentdict + end}{ + channel get 0 paint? AGMCORE_separateShadingFunction + }ifelse + end + }def + /AGMCORE_separateShading + { + 3 -1 roll begin + currentdict/Function known + { + currentdict/Background known + {[1 index{Background 3 index get 1 exch sub}{1}ifelse]/Background xdf}if + Function 3 1 roll AGMCORE_separateShadingFunction/Function xdf + /ColorSpace[/DeviceGray]def + }{ + ColorSpace dup type/arraytype eq{0 get}if/DeviceCMYK eq + { + /ColorSpace[/DeviceN[/_cyan_/_magenta_/_yellow_/_black_]/DeviceCMYK{}]def + }{ + ColorSpace dup 1 get AGMCORE_RemoveProcessColorNames 1 exch put + }ifelse + ColorSpace 0 get/Separation eq + { + { + [1/exch cvx/sub cvx]cvx + }{ + [/pop cvx 1]cvx + }ifelse + ColorSpace 3 3 -1 roll put + pop + }{ + { + [exch ColorSpace 1 get length 1 sub exch sub/index cvx 1/exch cvx/sub cvx ColorSpace 1 get length 1 add 1/roll cvx ColorSpace 1 get length{/pop cvx}repeat]cvx + }{ + pop[ColorSpace 1 get length{/pop cvx}repeat cvx 1]cvx + }ifelse + ColorSpace 3 3 -1 roll bind put + }ifelse + ColorSpace 2/DeviceGray put + }ifelse + end + }def + /AGMCORE_separateShadingDict + { + dup/ColorSpace get + dup type/arraytype ne + {[exch]}if + dup 0 get/DeviceCMYK eq + { + exch begin + currentdict + AGMCORE_cyan_plate + {0 true}if + AGMCORE_magenta_plate + {1 true}if + AGMCORE_yellow_plate + {2 true}if + AGMCORE_black_plate + {3 true}if + AGMCORE_plate_ndx 4 eq + {0 false}if + dup not currentoverprint and + {/AGMCORE_ignoreshade true def}if + AGMCORE_separateShading + currentdict + end exch + }if + dup 0 get/Separation eq + { + exch begin + ColorSpace 1 get dup/None ne exch/All ne and + { + ColorSpace 1 get AGMCORE_IsCurrentColor AGMCORE_plate_ndx 4 lt and ColorSpace 1 get AGMCORE_IsSeparationAProcessColor not and + { + ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq + { + /ColorSpace + [ + /Separation + ColorSpace 1 get + /DeviceGray + [ + ColorSpace 3 get/exec cvx + 4 AGMCORE_plate_ndx sub -1/roll cvx + 4 1/roll cvx + 3[/pop cvx]cvx/repeat cvx + 1/exch cvx/sub cvx + ]cvx + ]def + }{ + AGMCORE_report_unsupported_color_space + AGMCORE_black_plate not + { + currentdict 0 false AGMCORE_separateShading + }if + }ifelse + }{ + currentdict ColorSpace 1 get AGMCORE_IsCurrentColor + 0 exch + dup not currentoverprint and + {/AGMCORE_ignoreshade true def}if + AGMCORE_separateShading + }ifelse + }if + currentdict + end exch + }if + dup 0 get/DeviceN eq + { + exch begin + ColorSpace 1 get convert_to_process + { + ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq + { + /ColorSpace + [ + /DeviceN + ColorSpace 1 get + /DeviceGray + [ + ColorSpace 3 get/exec cvx + 4 AGMCORE_plate_ndx sub -1/roll cvx + 4 1/roll cvx + 3[/pop cvx]cvx/repeat cvx + 1/exch cvx/sub cvx + ]cvx + ]def + }{ + AGMCORE_report_unsupported_color_space + AGMCORE_black_plate not + { + currentdict 0 false AGMCORE_separateShading + /ColorSpace[/DeviceGray]def + }if + }ifelse + }{ + currentdict + false -1 ColorSpace 1 get + { + AGMCORE_IsCurrentColor + { + 1 add + exch pop true exch exit + }if + 1 add + }forall + exch + dup not currentoverprint and + {/AGMCORE_ignoreshade true def}if + AGMCORE_separateShading + }ifelse + currentdict + end exch + }if + dup 0 get dup/DeviceCMYK eq exch dup/Separation eq exch/DeviceN eq or or not + { + exch begin + ColorSpace dup type/arraytype eq + {0 get}if + /DeviceGray ne + { + AGMCORE_report_unsupported_color_space + AGMCORE_black_plate not + { + ColorSpace 0 get/CIEBasedA eq + { + /ColorSpace[/Separation/_ciebaseda_/DeviceGray{}]def + }if + ColorSpace 0 get dup/CIEBasedABC eq exch dup/CIEBasedDEF eq exch/DeviceRGB eq or or + { + /ColorSpace[/DeviceN[/_red_/_green_/_blue_]/DeviceRGB{}]def + }if + ColorSpace 0 get/CIEBasedDEFG eq + { + /ColorSpace[/DeviceN[/_cyan_/_magenta_/_yellow_/_black_]/DeviceCMYK{}]def + }if + currentdict 0 false AGMCORE_separateShading + }if + }if + currentdict + end exch + }if + pop + dup/AGMCORE_ignoreshade known + { + begin + /ColorSpace[/Separation(None)/DeviceGray{}]def + currentdict end + }if + }def + /shfill + { + AGMCORE_separateShadingDict + dup/AGMCORE_ignoreshade known + {pop} + {AGMCORE_&sysshfill}ifelse + }def + /makepattern + { + exch + dup/PatternType get 2 eq + { + clonedict + begin + /Shading Shading AGMCORE_separateShadingDict def + Shading/AGMCORE_ignoreshade known + currentdict end exch + {pop<>}if + exch AGMCORE_&sysmakepattern + }{ + exch AGMCORE_&usrmakepattern + }ifelse + }def + }if + }if + AGMCORE_in_rip_sep{ + /setcustomcolor + { + exch aload pop + dup 7 1 roll inRip_spot_has_ink not { + 4{4 index mul 4 1 roll} + repeat + /DeviceCMYK setcolorspace + 6 -2 roll pop pop + }{ + //Adobe_AGM_Core begin + /AGMCORE_k xdf/AGMCORE_y xdf/AGMCORE_m xdf/AGMCORE_c xdf + end + [/Separation 4 -1 roll/DeviceCMYK + {dup AGMCORE_c mul exch dup AGMCORE_m mul exch dup AGMCORE_y mul exch AGMCORE_k mul} + ] + setcolorspace + }ifelse + setcolor + }ndf + /setseparationgray + { + [/Separation(All)/DeviceGray{}]setcolorspace_opt + 1 exch sub setcolor + }ndf + }{ + /setseparationgray + { + AGMCORE_&setgray + }ndf + }ifelse + /findcmykcustomcolor + { + 5 makereadonlyarray + }ndf + /setcustomcolor + { + exch aload pop pop + 4{4 index mul 4 1 roll}repeat + setcmykcolor pop + }ndf + /has_color + /colorimage where{ + AGMCORE_producing_seps{ + pop true + }{ + systemdict eq + }ifelse + }{ + false + }ifelse + def + /map_index + { + 1 index mul exch getinterval{255 div}forall + }bdf + /map_indexed_devn + { + Lookup Names length 3 -1 roll cvi map_index + }bdf + /n_color_components + { + base_colorspace_type + dup/DeviceGray eq{ + pop 1 + }{ + /DeviceCMYK eq{ + 4 + }{ + 3 + }ifelse + }ifelse + }bdf + level2{ + /mo/moveto ldf + /li/lineto ldf + /cv/curveto ldf + /knockout_unitsq + { + 1 setgray + 0 0 1 1 rectfill + }def + level2/setcolorspace AGMCORE_key_known not and{ + /AGMCORE_&&&setcolorspace/setcolorspace ldf + /AGMCORE_ReplaceMappedColor + { + dup type dup/arraytype eq exch/packedarraytype eq or + { + /AGMCORE_SpotAliasAry2 where{ + begin + dup 0 get dup/Separation eq + { + pop + dup length array copy + dup dup 1 get + current_spot_alias + { + dup map_alias + { + false set_spot_alias + dup 1 exch setsepcolorspace + true set_spot_alias + begin + /sep_colorspace_dict currentdict AGMCORE_gput + pop pop pop + [ + /Separation Name + CSA map_csa + MappedCSA + /sep_colorspace_proc load + ] + dup Name + end + }if + }if + map_reserved_ink_name 1 xpt + }{ + /DeviceN eq + { + dup length array copy + dup dup 1 get[ + exch{ + current_spot_alias{ + dup map_alias{ + /Name get exch pop + }if + }if + map_reserved_ink_name + }forall + ]1 xpt + }if + }ifelse + end + }if + }if + }def + /setcolorspace + { + dup type dup/arraytype eq exch/packedarraytype eq or + { + dup 0 get/Indexed eq + { + AGMCORE_distilling + { + /PhotoshopDuotoneList where + { + pop false + }{ + true + }ifelse + }{ + true + }ifelse + { + aload pop 3 -1 roll + AGMCORE_ReplaceMappedColor + 3 1 roll 4 array astore + }if + }{ + AGMCORE_ReplaceMappedColor + }ifelse + }if + DeviceN_PS2_inRip_seps{AGMCORE_&&&setcolorspace}if + }def + }if + }{ + /adj + { + currentstrokeadjust{ + transform + 0.25 sub round 0.25 add exch + 0.25 sub round 0.25 add exch + itransform + }if + }def + /mo{ + adj moveto + }def + /li{ + adj lineto + }def + /cv{ + 6 2 roll adj + 6 2 roll adj + 6 2 roll adj curveto + }def + /knockout_unitsq + { + 1 setgray + 8 8 1[8 0 0 8 0 0]{}image + }def + /currentstrokeadjust{ + /currentstrokeadjust AGMCORE_gget + }def + /setstrokeadjust{ + /currentstrokeadjust exch AGMCORE_gput + }def + /setcolorspace + { + /currentcolorspace exch AGMCORE_gput + }def + /currentcolorspace + { + /currentcolorspace AGMCORE_gget + }def + /setcolor_devicecolor + { + base_colorspace_type + dup/DeviceGray eq{ + pop setgray + }{ + /DeviceCMYK eq{ + setcmykcolor + }{ + setrgbcolor + }ifelse + }ifelse + }def + /setcolor + { + currentcolorspace 0 get + dup/DeviceGray ne{ + dup/DeviceCMYK ne{ + dup/DeviceRGB ne{ + dup/Separation eq{ + pop + currentcolorspace 3 gx + currentcolorspace 2 get + }{ + dup/Indexed eq{ + pop + currentcolorspace 3 get dup type/stringtype eq{ + currentcolorspace 1 get n_color_components + 3 -1 roll map_index + }{ + exec + }ifelse + currentcolorspace 1 get + }{ + /AGMCORE_cur_err/AGMCORE_invalid_color_space def + AGMCORE_invalid_color_space + }ifelse + }ifelse + }if + }if + }if + setcolor_devicecolor + }def + }ifelse + /sop/setoverprint ldf + /lw/setlinewidth ldf + /lc/setlinecap ldf + /lj/setlinejoin ldf + /ml/setmiterlimit ldf + /dsh/setdash ldf + /sadj/setstrokeadjust ldf + /gry/setgray ldf + /rgb/setrgbcolor ldf + /cmyk[ + /currentcolorspace[/DeviceCMYK]/AGMCORE_gput cvx + /setcmykcolor load dup type/operatortype ne{/exec cvx}if + ]cvx bdf + level3 AGMCORE_host_sep not and{ + /nzopmsc{ + 6 dict begin + /kk exch def + /yy exch def + /mm exch def + /cc exch def + /sum 0 def + cc 0 ne{/sum sum 2#1000 or def cc}if + mm 0 ne{/sum sum 2#0100 or def mm}if + yy 0 ne{/sum sum 2#0010 or def yy}if + kk 0 ne{/sum sum 2#0001 or def kk}if + AGMCORE_CMYKDeviceNColorspaces sum get setcolorspace + sum 0 eq{0}if + end + setcolor + }bdf + }{ + /nzopmsc/cmyk ldf + }ifelse + /sep/setsepcolor ldf + /devn/setdevicencolor ldf + /idx/setindexedcolor ldf + /colr/setcolor ldf + /csacrd/set_csa_crd ldf + /sepcs/setsepcolorspace ldf + /devncs/setdevicencolorspace ldf + /idxcs/setindexedcolorspace ldf + /cp/closepath ldf + /clp/clp_npth ldf + /eclp/eoclp_npth ldf + /f/fill ldf + /ef/eofill ldf + /@/stroke ldf + /nclp/npth_clp ldf + /gset/graphic_setup ldf + /gcln/graphic_cleanup ldf + /ct/concat ldf + /cf/currentfile ldf + /fl/filter ldf + /rs/readstring ldf + /AGMCORE_def_ht currenthalftone def + /clonedict Adobe_AGM_Utils begin/clonedict load end def + /clonearray Adobe_AGM_Utils begin/clonearray load end def + currentdict{ + dup xcheck 1 index type dup/arraytype eq exch/packedarraytype eq or and{ + bind + }if + def + }forall + /getrampcolor + { + /indx exch def + 0 1 NumComp 1 sub + { + dup + Samples exch get + dup type/stringtype eq{indx get}if + exch + Scaling exch get aload pop + 3 1 roll + mul add + }for + ColorSpaceFamily/Separation eq + {sep} + { + ColorSpaceFamily/DeviceN eq + {devn}{setcolor}ifelse + }ifelse + }bdf + /sssetbackground{ + aload pop + ColorSpaceFamily/Separation eq + {sep} + { + ColorSpaceFamily/DeviceN eq + {devn}{setcolor}ifelse + }ifelse + }bdf + /RadialShade + { + 40 dict begin + /ColorSpaceFamily xdf + /background xdf + /ext1 xdf + /ext0 xdf + /BBox xdf + /r2 xdf + /c2y xdf + /c2x xdf + /r1 xdf + /c1y xdf + /c1x xdf + /rampdict xdf + /setinkoverprint where{pop/setinkoverprint{pop}def}if + gsave + BBox length 0 gt + { + np + BBox 0 get BBox 1 get moveto + BBox 2 get BBox 0 get sub 0 rlineto + 0 BBox 3 get BBox 1 get sub rlineto + BBox 2 get BBox 0 get sub neg 0 rlineto + closepath + clip + np + }if + c1x c2x eq + { + c1y c2y lt{/theta 90 def}{/theta 270 def}ifelse + }{ + /slope c2y c1y sub c2x c1x sub div def + /theta slope 1 atan def + c2x c1x lt c2y c1y ge and{/theta theta 180 sub def}if + c2x c1x lt c2y c1y lt and{/theta theta 180 add def}if + }ifelse + gsave + clippath + c1x c1y translate + theta rotate + -90 rotate + {pathbbox}stopped + {0 0 0 0}if + /yMax xdf + /xMax xdf + /yMin xdf + /xMin xdf + grestore + xMax xMin eq yMax yMin eq or + { + grestore + end + }{ + /max{2 copy gt{pop}{exch pop}ifelse}bdf + /min{2 copy lt{pop}{exch pop}ifelse}bdf + rampdict begin + 40 dict begin + background length 0 gt{background sssetbackground gsave clippath fill grestore}if + gsave + c1x c1y translate + theta rotate + -90 rotate + /c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def + /c1y 0 def + /c1x 0 def + /c2x 0 def + ext0 + { + 0 getrampcolor + c2y r2 add r1 sub 0.0001 lt + { + c1x c1y r1 360 0 arcn + pathbbox + /aymax exch def + /axmax exch def + /aymin exch def + /axmin exch def + /bxMin xMin axmin min def + /byMin yMin aymin min def + /bxMax xMax axmax max def + /byMax yMax aymax max def + bxMin byMin moveto + bxMax byMin lineto + bxMax byMax lineto + bxMin byMax lineto + bxMin byMin lineto + eofill + }{ + c2y r1 add r2 le + { + c1x c1y r1 0 360 arc + fill + } + { + c2x c2y r2 0 360 arc fill + r1 r2 eq + { + /p1x r1 neg def + /p1y c1y def + /p2x r1 def + /p2y c1y def + p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto + fill + }{ + /AA r2 r1 sub c2y div def + AA -1 eq + {/theta 89.99 def} + {/theta AA 1 AA dup mul sub sqrt div 1 atan def} + ifelse + /SS1 90 theta add dup sin exch cos div def + /p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def + /p1y p1x SS1 div neg def + /SS2 90 theta sub dup sin exch cos div def + /p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def + /p2y p2x SS2 div neg def + r1 r2 gt + { + /L1maxX p1x yMin p1y sub SS1 div add def + /L2maxX p2x yMin p2y sub SS2 div add def + }{ + /L1maxX 0 def + /L2maxX 0 def + }ifelse + p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto + L1maxX L1maxX p1x sub SS1 mul p1y add lineto + fill + }ifelse + }ifelse + }ifelse + }if + c1x c2x sub dup mul + c1y c2y sub dup mul + add 0.5 exp + 0 dtransform + dup mul exch dup mul add 0.5 exp 72 div + 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt + 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt + 1 index 1 index lt{exch}if pop + /hires xdf + hires mul + /numpix xdf + /numsteps NumSamples def + /rampIndxInc 1 def + /subsampling false def + numpix 0 ne + { + NumSamples numpix div 0.5 gt + { + /numsteps numpix 2 div round cvi dup 1 le{pop 2}if def + /rampIndxInc NumSamples 1 sub numsteps div def + /subsampling true def + }if + }if + /xInc c2x c1x sub numsteps div def + /yInc c2y c1y sub numsteps div def + /rInc r2 r1 sub numsteps div def + /cx c1x def + /cy c1y def + /radius r1 def + np + xInc 0 eq yInc 0 eq rInc 0 eq and and + { + 0 getrampcolor + cx cy radius 0 360 arc + stroke + NumSamples 1 sub getrampcolor + cx cy radius 72 hires div add 0 360 arc + 0 setlinewidth + stroke + }{ + 0 + numsteps + { + dup + subsampling{round cvi}if + getrampcolor + cx cy radius 0 360 arc + /cx cx xInc add def + /cy cy yInc add def + /radius radius rInc add def + cx cy radius 360 0 arcn + eofill + rampIndxInc add + }repeat + pop + }ifelse + ext1 + { + c2y r2 add r1 lt + { + c2x c2y r2 0 360 arc + fill + }{ + c2y r1 add r2 sub 0.0001 le + { + c2x c2y r2 360 0 arcn + pathbbox + /aymax exch def + /axmax exch def + /aymin exch def + /axmin exch def + /bxMin xMin axmin min def + /byMin yMin aymin min def + /bxMax xMax axmax max def + /byMax yMax aymax max def + bxMin byMin moveto + bxMax byMin lineto + bxMax byMax lineto + bxMin byMax lineto + bxMin byMin lineto + eofill + }{ + c2x c2y r2 0 360 arc fill + r1 r2 eq + { + /p1x r2 neg def + /p1y c2y def + /p2x r2 def + /p2y c2y def + p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto + fill + }{ + /AA r2 r1 sub c2y div def + AA -1 eq + {/theta 89.99 def} + {/theta AA 1 AA dup mul sub sqrt div 1 atan def} + ifelse + /SS1 90 theta add dup sin exch cos div def + /p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def + /p1y c2y p1x SS1 div sub def + /SS2 90 theta sub dup sin exch cos div def + /p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def + /p2y c2y p2x SS2 div sub def + r1 r2 lt + { + /L1maxX p1x yMax p1y sub SS1 div add def + /L2maxX p2x yMax p2y sub SS2 div add def + }{ + /L1maxX 0 def + /L2maxX 0 def + }ifelse + p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto + L1maxX L1maxX p1x sub SS1 mul p1y add lineto + fill + }ifelse + }ifelse + }ifelse + }if + grestore + grestore + end + end + end + }ifelse + }bdf + /GenStrips + { + 40 dict begin + /ColorSpaceFamily xdf + /background xdf + /ext1 xdf + /ext0 xdf + /BBox xdf + /y2 xdf + /x2 xdf + /y1 xdf + /x1 xdf + /rampdict xdf + /setinkoverprint where{pop/setinkoverprint{pop}def}if + gsave + BBox length 0 gt + { + np + BBox 0 get BBox 1 get moveto + BBox 2 get BBox 0 get sub 0 rlineto + 0 BBox 3 get BBox 1 get sub rlineto + BBox 2 get BBox 0 get sub neg 0 rlineto + closepath + clip + np + }if + x1 x2 eq + { + y1 y2 lt{/theta 90 def}{/theta 270 def}ifelse + }{ + /slope y2 y1 sub x2 x1 sub div def + /theta slope 1 atan def + x2 x1 lt y2 y1 ge and{/theta theta 180 sub def}if + x2 x1 lt y2 y1 lt and{/theta theta 180 add def}if + } + ifelse + gsave + clippath + x1 y1 translate + theta rotate + {pathbbox}stopped + {0 0 0 0}if + /yMax exch def + /xMax exch def + /yMin exch def + /xMin exch def + grestore + xMax xMin eq yMax yMin eq or + { + grestore + end + }{ + rampdict begin + 20 dict begin + background length 0 gt{background sssetbackground gsave clippath fill grestore}if + gsave + x1 y1 translate + theta rotate + /xStart 0 def + /xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def + /ySpan yMax yMin sub def + /numsteps NumSamples def + /rampIndxInc 1 def + /subsampling false def + xStart 0 transform + xEnd 0 transform + 3 -1 roll + sub dup mul + 3 1 roll + sub dup mul + add 0.5 exp 72 div + 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt + 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt + 1 index 1 index lt{exch}if pop + mul + /numpix xdf + numpix 0 ne + { + NumSamples numpix div 0.5 gt + { + /numsteps numpix 2 div round cvi dup 1 le{pop 2}if def + /rampIndxInc NumSamples 1 sub numsteps div def + /subsampling true def + }if + }if + ext0 + { + 0 getrampcolor + xMin xStart lt + { + xMin yMin xMin neg ySpan rectfill + }if + }if + /xInc xEnd xStart sub numsteps div def + /x xStart def + 0 + numsteps + { + dup + subsampling{round cvi}if + getrampcolor + x yMin xInc ySpan rectfill + /x x xInc add def + rampIndxInc add + }repeat + pop + ext1{ + xMax xEnd gt + { + xEnd yMin xMax xEnd sub ySpan rectfill + }if + }if + grestore + grestore + end + end + end + }ifelse + }bdf +}def +/pt +{ + end +}def +/dt{ +}def +/pgsv{ + //Adobe_AGM_Core/AGMCORE_save save put +}def +/pgrs{ + //Adobe_AGM_Core/AGMCORE_save get restore +}def +systemdict/findcolorrendering known{ + /findcolorrendering systemdict/findcolorrendering get def +}if +systemdict/setcolorrendering known{ + /setcolorrendering systemdict/setcolorrendering get def +}if +/test_cmyk_color_plate +{ + gsave + setcmykcolor currentgray 1 ne + grestore +}def +/inRip_spot_has_ink +{ + dup//Adobe_AGM_Core/AGMCORE_name xddf + convert_spot_to_process not +}def +/map255_to_range +{ + 1 index sub + 3 -1 roll 255 div mul add +}def +/set_csa_crd +{ + /sep_colorspace_dict null AGMCORE_gput + begin + CSA get_csa_by_name setcolorspace_opt + set_crd + end +} +def +/map_csa +{ + currentdict/MappedCSA known{MappedCSA null ne}{false}ifelse + {pop}{get_csa_by_name/MappedCSA xdf}ifelse +}def +/setsepcolor +{ + /sep_colorspace_dict AGMCORE_gget begin + dup/sep_tint exch AGMCORE_gput + TintProc + end +}def +/setdevicencolor +{ + /devicen_colorspace_dict AGMCORE_gget begin + Names length copy + Names length 1 sub -1 0 + { + /devicen_tints AGMCORE_gget 3 1 roll xpt + }for + TintProc + end +}def +/sep_colorspace_proc +{ + /AGMCORE_tmp exch store + /sep_colorspace_dict AGMCORE_gget begin + currentdict/Components known{ + Components aload pop + TintMethod/Lab eq{ + 2{AGMCORE_tmp mul NComponents 1 roll}repeat + LMax sub AGMCORE_tmp mul LMax add NComponents 1 roll + }{ + TintMethod/Subtractive eq{ + NComponents{ + AGMCORE_tmp mul NComponents 1 roll + }repeat + }{ + NComponents{ + 1 sub AGMCORE_tmp mul 1 add NComponents 1 roll + }repeat + }ifelse + }ifelse + }{ + ColorLookup AGMCORE_tmp ColorLookup length 1 sub mul round cvi get + aload pop + }ifelse + end +}def +/sep_colorspace_gray_proc +{ + /AGMCORE_tmp exch store + /sep_colorspace_dict AGMCORE_gget begin + GrayLookup AGMCORE_tmp GrayLookup length 1 sub mul round cvi get + end +}def +/sep_proc_name +{ + dup 0 get + dup/DeviceRGB eq exch/DeviceCMYK eq or level2 not and has_color not and{ + pop[/DeviceGray] + /sep_colorspace_gray_proc + }{ + /sep_colorspace_proc + }ifelse +}def +/setsepcolorspace +{ + current_spot_alias{ + dup begin + Name map_alias{ + exch pop + }if + end + }if + dup/sep_colorspace_dict exch AGMCORE_gput + begin + CSA map_csa + /AGMCORE_sep_special Name dup()eq exch(All)eq or store + AGMCORE_avoid_L2_sep_space{ + [/Indexed MappedCSA sep_proc_name 255 exch + {255 div}/exec cvx 3 -1 roll[4 1 roll load/exec cvx]cvx + ]setcolorspace_opt + /TintProc{ + 255 mul round cvi setcolor + }bdf + }{ + MappedCSA 0 get/DeviceCMYK eq + currentdict/Components known and + AGMCORE_sep_special not and{ + /TintProc[ + Components aload pop Name findcmykcustomcolor + /exch cvx/setcustomcolor cvx + ]cvx bdf + }{ + AGMCORE_host_sep Name(All)eq and{ + /TintProc{ + 1 exch sub setseparationgray + }bdf + }{ + AGMCORE_in_rip_sep MappedCSA 0 get/DeviceCMYK eq and + AGMCORE_host_sep or + Name()eq and{ + /TintProc[ + MappedCSA sep_proc_name exch 0 get/DeviceCMYK eq{ + cvx/setcmykcolor cvx + }{ + cvx/setgray cvx + }ifelse + ]cvx bdf + }{ + AGMCORE_producing_seps MappedCSA 0 get dup/DeviceCMYK eq exch/DeviceGray eq or and AGMCORE_sep_special not and{ + /TintProc[ + /dup cvx + MappedCSA sep_proc_name cvx exch + 0 get/DeviceGray eq{ + 1/exch cvx/sub cvx 0 0 0 4 -1/roll cvx + }if + /Name cvx/findcmykcustomcolor cvx/exch cvx + AGMCORE_host_sep{ + AGMCORE_is_cmyk_sep + /Name cvx + /AGMCORE_IsSeparationAProcessColor load/exec cvx + /not cvx/and cvx + }{ + Name inRip_spot_has_ink not + }ifelse + [ + /pop cvx 1 + ]cvx/if cvx + /setcustomcolor cvx + ]cvx bdf + }{ + /TintProc{setcolor}bdf + [/Separation Name MappedCSA sep_proc_name load]setcolorspace_opt + }ifelse + }ifelse + }ifelse + }ifelse + }ifelse + set_crd + setsepcolor + end +}def +/additive_blend +{ + 3 dict begin + /numarrays xdf + /numcolors xdf + 0 1 numcolors 1 sub + { + /c1 xdf + 1 + 0 1 numarrays 1 sub + { + 1 exch add/index cvx + c1/get cvx/mul cvx + }for + numarrays 1 add 1/roll cvx + }for + numarrays[/pop cvx]cvx/repeat cvx + end +}def +/subtractive_blend +{ + 3 dict begin + /numarrays xdf + /numcolors xdf + 0 1 numcolors 1 sub + { + /c1 xdf + 1 1 + 0 1 numarrays 1 sub + { + 1 3 3 -1 roll add/index cvx + c1/get cvx/sub cvx/mul cvx + }for + /sub cvx + numarrays 1 add 1/roll cvx + }for + numarrays[/pop cvx]cvx/repeat cvx + end +}def +/exec_tint_transform +{ + /TintProc[ + /TintTransform cvx/setcolor cvx + ]cvx bdf + MappedCSA setcolorspace_opt +}bdf +/devn_makecustomcolor +{ + 2 dict begin + /names_index xdf + /Names xdf + 1 1 1 1 Names names_index get findcmykcustomcolor + /devicen_tints AGMCORE_gget names_index get setcustomcolor + Names length{pop}repeat + end +}bdf +/setdevicencolorspace +{ + dup/AliasedColorants known{false}{true}ifelse + current_spot_alias and{ + 7 dict begin + /names_index 0 def + dup/names_len exch/Names get length def + /new_names names_len array def + /new_LookupTables names_len array def + /alias_cnt 0 def + dup/Names get + { + dup map_alias{ + exch pop + dup/ColorLookup known{ + dup begin + new_LookupTables names_index ColorLookup put + end + }{ + dup/Components known{ + dup begin + new_LookupTables names_index Components put + end + }{ + dup begin + new_LookupTables names_index[null null null null]put + end + }ifelse + }ifelse + new_names names_index 3 -1 roll/Name get put + /alias_cnt alias_cnt 1 add def + }{ + /name xdf + new_names names_index name put + dup/LookupTables known{ + dup begin + new_LookupTables names_index LookupTables names_index get put + end + }{ + dup begin + new_LookupTables names_index[null null null null]put + end + }ifelse + }ifelse + /names_index names_index 1 add def + }forall + alias_cnt 0 gt{ + /AliasedColorants true def + /lut_entry_len new_LookupTables 0 get dup length 256 ge{0 get length}{length}ifelse def + 0 1 names_len 1 sub{ + /names_index xdf + new_LookupTables names_index get dup length 256 ge{0 get length}{length}ifelse lut_entry_len ne{ + /AliasedColorants false def + exit + }{ + new_LookupTables names_index get 0 get null eq{ + dup/Names get names_index get/name xdf + name(Cyan)eq name(Magenta)eq name(Yellow)eq name(Black)eq + or or or not{ + /AliasedColorants false def + exit + }if + }if + }ifelse + }for + lut_entry_len 1 eq{ + /AliasedColorants false def + }if + AliasedColorants{ + dup begin + /Names new_names def + /LookupTables new_LookupTables def + /AliasedColorants true def + /NComponents lut_entry_len def + /TintMethod NComponents 4 eq{/Subtractive}{/Additive}ifelse def + /MappedCSA TintMethod/Additive eq{/DeviceRGB}{/DeviceCMYK}ifelse def + currentdict/TTTablesIdx known not{ + /TTTablesIdx -1 def + }if + end + }if + }if + end + }if + dup/devicen_colorspace_dict exch AGMCORE_gput + begin + currentdict/AliasedColorants known{ + AliasedColorants + }{ + false + }ifelse + dup not{ + CSA map_csa + }if + /TintTransform load type/nulltype eq or{ + /TintTransform[ + 0 1 Names length 1 sub + { + /TTTablesIdx TTTablesIdx 1 add def + dup LookupTables exch get dup 0 get null eq + { + 1 index + Names exch get + dup(Cyan)eq + { + pop exch + LookupTables length exch sub + /index cvx + 0 0 0 + } + { + dup(Magenta)eq + { + pop exch + LookupTables length exch sub + /index cvx + 0/exch cvx 0 0 + }{ + (Yellow)eq + { + exch + LookupTables length exch sub + /index cvx + 0 0 3 -1/roll cvx 0 + }{ + exch + LookupTables length exch sub + /index cvx + 0 0 0 4 -1/roll cvx + }ifelse + }ifelse + }ifelse + 5 -1/roll cvx/astore cvx + }{ + dup length 1 sub + LookupTables length 4 -1 roll sub 1 add + /index cvx/mul cvx/round cvx/cvi cvx/get cvx + }ifelse + Names length TTTablesIdx add 1 add 1/roll cvx + }for + Names length[/pop cvx]cvx/repeat cvx + NComponents Names length + TintMethod/Subtractive eq + { + subtractive_blend + }{ + additive_blend + }ifelse + ]cvx bdf + }if + AGMCORE_host_sep{ + Names convert_to_process{ + exec_tint_transform + } + { + currentdict/AliasedColorants known{ + AliasedColorants not + }{ + false + }ifelse + 5 dict begin + /AvoidAliasedColorants xdf + /painted? false def + /names_index 0 def + /names_len Names length def + AvoidAliasedColorants{ + /currentspotalias current_spot_alias def + false set_spot_alias + }if + Names{ + AGMCORE_is_cmyk_sep{ + dup(Cyan)eq AGMCORE_cyan_plate and exch + dup(Magenta)eq AGMCORE_magenta_plate and exch + dup(Yellow)eq AGMCORE_yellow_plate and exch + (Black)eq AGMCORE_black_plate and or or or{ + /devicen_colorspace_dict AGMCORE_gget/TintProc[ + Names names_index/devn_makecustomcolor cvx + ]cvx ddf + /painted? true def + }if + painted?{exit}if + }{ + 0 0 0 0 5 -1 roll findcmykcustomcolor 1 setcustomcolor currentgray 0 eq{ + /devicen_colorspace_dict AGMCORE_gget/TintProc[ + Names names_index/devn_makecustomcolor cvx + ]cvx ddf + /painted? true def + exit + }if + }ifelse + /names_index names_index 1 add def + }forall + AvoidAliasedColorants{ + currentspotalias set_spot_alias + }if + painted?{ + /devicen_colorspace_dict AGMCORE_gget/names_index names_index put + }{ + /devicen_colorspace_dict AGMCORE_gget/TintProc[ + names_len[/pop cvx]cvx/repeat cvx 1/setseparationgray cvx + 0 0 0 0/setcmykcolor cvx + ]cvx ddf + }ifelse + end + }ifelse + } + { + AGMCORE_in_rip_sep{ + Names convert_to_process not + }{ + level3 + }ifelse + { + [/DeviceN Names MappedCSA/TintTransform load]setcolorspace_opt + /TintProc level3 not AGMCORE_in_rip_sep and{ + [ + Names/length cvx[/pop cvx]cvx/repeat cvx + ]cvx bdf + }{ + {setcolor}bdf + }ifelse + }{ + exec_tint_transform + }ifelse + }ifelse + set_crd + /AliasedColorants false def + end +}def +/setindexedcolorspace +{ + dup/indexed_colorspace_dict exch AGMCORE_gput + begin + currentdict/CSDBase known{ + CSDBase/CSD get_res begin + currentdict/Names known{ + currentdict devncs + }{ + 1 currentdict sepcs + }ifelse + AGMCORE_host_sep{ + 4 dict begin + /compCnt/Names where{pop Names length}{1}ifelse def + /NewLookup HiVal 1 add string def + 0 1 HiVal{ + /tableIndex xdf + Lookup dup type/stringtype eq{ + compCnt tableIndex map_index + }{ + exec + }ifelse + /Names where{ + pop setdevicencolor + }{ + setsepcolor + }ifelse + currentgray + tableIndex exch + 255 mul cvi + NewLookup 3 1 roll put + }for + [/Indexed currentcolorspace HiVal NewLookup]setcolorspace_opt + end + }{ + level3 + { + currentdict/Names known{ + [/Indexed[/DeviceN Names MappedCSA/TintTransform load]HiVal Lookup]setcolorspace_opt + }{ + [/Indexed[/Separation Name MappedCSA sep_proc_name load]HiVal Lookup]setcolorspace_opt + }ifelse + }{ + [/Indexed MappedCSA HiVal + [ + currentdict/Names known{ + Lookup dup type/stringtype eq + {/exch cvx CSDBase/CSD get_res/Names get length dup/mul cvx exch/getinterval cvx{255 div}/forall cvx} + {/exec cvx}ifelse + /TintTransform load/exec cvx + }{ + Lookup dup type/stringtype eq + {/exch cvx/get cvx 255/div cvx} + {/exec cvx}ifelse + CSDBase/CSD get_res/MappedCSA get sep_proc_name exch pop/load cvx/exec cvx + }ifelse + ]cvx + ]setcolorspace_opt + }ifelse + }ifelse + end + set_crd + } + { + CSA map_csa + AGMCORE_host_sep level2 not and{ + 0 0 0 0 setcmykcolor + }{ + [/Indexed MappedCSA + level2 not has_color not and{ + dup 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or{ + pop[/DeviceGray] + }if + HiVal GrayLookup + }{ + HiVal + currentdict/RangeArray known{ + { + /indexed_colorspace_dict AGMCORE_gget begin + Lookup exch + dup HiVal gt{ + pop HiVal + }if + NComponents mul NComponents getinterval{}forall + NComponents 1 sub -1 0{ + RangeArray exch 2 mul 2 getinterval aload pop map255_to_range + NComponents 1 roll + }for + end + }bind + }{ + Lookup + }ifelse + }ifelse + ]setcolorspace_opt + set_crd + }ifelse + }ifelse + end +}def +/setindexedcolor +{ + AGMCORE_host_sep{ + /indexed_colorspace_dict AGMCORE_gget + begin + currentdict/CSDBase known{ + CSDBase/CSD get_res begin + currentdict/Names known{ + map_indexed_devn + devn + } + { + Lookup 1 3 -1 roll map_index + sep + }ifelse + end + }{ + Lookup MappedCSA/DeviceCMYK eq{4}{1}ifelse 3 -1 roll + map_index + MappedCSA/DeviceCMYK eq{setcmykcolor}{setgray}ifelse + }ifelse + end + }{ + level3 not AGMCORE_in_rip_sep and/indexed_colorspace_dict AGMCORE_gget/CSDBase known and{ + /indexed_colorspace_dict AGMCORE_gget/CSDBase get/CSD get_res begin + map_indexed_devn + devn + end + } + { + setcolor + }ifelse + }ifelse +}def +/ignoreimagedata +{ + currentoverprint not{ + gsave + dup clonedict begin + 1 setgray + /Decode[0 1]def + /DataSourcedef + /MultipleDataSources false def + /BitsPerComponent 8 def + currentdict end + systemdict/image gx + grestore + }if + consumeimagedata +}def +/add_res +{ + dup/CSD eq{ + pop + //Adobe_AGM_Core begin + /AGMCORE_CSD_cache load 3 1 roll put + end + }{ + defineresource pop + }ifelse +}def +/del_res +{ + { + aload pop exch + dup/CSD eq{ + pop + {//Adobe_AGM_Core/AGMCORE_CSD_cache get exch undef}forall + }{ + exch + {1 index undefineresource}forall + pop + }ifelse + }forall +}def +/get_res +{ + dup/CSD eq{ + pop + dup type dup/nametype eq exch/stringtype eq or{ + AGMCORE_CSD_cache exch get + }if + }{ + findresource + }ifelse +}def +/get_csa_by_name +{ + dup type dup/nametype eq exch/stringtype eq or{ + /CSA get_res + }if +}def +/paintproc_buf_init +{ + /count get 0 0 put +}def +/paintproc_buf_next +{ + dup/count get dup 0 get + dup 3 1 roll + 1 add 0 xpt + get +}def +/cachepaintproc_compress +{ + 5 dict begin + currentfile exch 0 exch/SubFileDecode filter/ReadFilter exch def + /ppdict 20 dict def + /string_size 16000 def + /readbuffer string_size string def + currentglobal true setglobal + ppdict 1 array dup 0 1 put/count xpt + setglobal + /LZWFilter + { + exch + dup length 0 eq{ + pop + }{ + ppdict dup length 1 sub 3 -1 roll put + }ifelse + {string_size}{0}ifelse string + }/LZWEncode filter def + { + ReadFilter readbuffer readstring + exch LZWFilter exch writestring + not{exit}if + }loop + LZWFilter closefile + ppdict + end +}def +/cachepaintproc +{ + 2 dict begin + currentfile exch 0 exch/SubFileDecode filter/ReadFilter exch def + /ppdict 20 dict def + currentglobal true setglobal + ppdict 1 array dup 0 1 put/count xpt + setglobal + { + ReadFilter 16000 string readstring exch + ppdict dup length 1 sub 3 -1 roll put + not{exit}if + }loop + ppdict dup dup length 1 sub()put + end +}def +/make_pattern +{ + exch clonedict exch + dup matrix currentmatrix matrix concatmatrix 0 0 3 2 roll itransform + exch 3 index/XStep get 1 index exch 2 copy div cvi mul sub sub + exch 3 index/YStep get 1 index exch 2 copy div cvi mul sub sub + matrix translate exch matrix concatmatrix + 1 index begin + BBox 0 get XStep div cvi XStep mul/xshift exch neg def + BBox 1 get YStep div cvi YStep mul/yshift exch neg def + BBox 0 get xshift add + BBox 1 get yshift add + BBox 2 get xshift add + BBox 3 get yshift add + 4 array astore + /BBox exch def + [xshift yshift/translate load null/exec load]dup + 3/PaintProc load put cvx/PaintProc exch def + end + gsave 0 setgray + makepattern + grestore +}def +/set_pattern +{ + dup/PatternType get 1 eq{ + dup/PaintType get 1 eq{ + currentoverprint sop[/DeviceGray]setcolorspace 0 setgray + }if + }if + setpattern +}def +/setcolorspace_opt +{ + dup currentcolorspace eq{pop}{setcolorspace}ifelse +}def +/updatecolorrendering +{ + currentcolorrendering/RenderingIntent known{ + currentcolorrendering/RenderingIntent get + } + { + Intent/AbsoluteColorimetric eq + { + /absolute_colorimetric_crd AGMCORE_gget dup null eq + } + { + Intent/RelativeColorimetric eq + { + /relative_colorimetric_crd AGMCORE_gget dup null eq + } + { + Intent/Saturation eq + { + /saturation_crd AGMCORE_gget dup null eq + } + { + /perceptual_crd AGMCORE_gget dup null eq + }ifelse + }ifelse + }ifelse + { + pop null + } + { + /RenderingIntent known{null}{Intent}ifelse + }ifelse + }ifelse + Intent ne{ + Intent/ColorRendering{findresource}stopped + { + pop pop systemdict/findcolorrendering known + { + Intent findcolorrendering + { + /ColorRendering findresource true exch + } + { + /ColorRendering findresource + product(Xerox Phaser 5400)ne + exch + }ifelse + dup Intent/AbsoluteColorimetric eq + { + /absolute_colorimetric_crd exch AGMCORE_gput + } + { + Intent/RelativeColorimetric eq + { + /relative_colorimetric_crd exch AGMCORE_gput + } + { + Intent/Saturation eq + { + /saturation_crd exch AGMCORE_gput + } + { + Intent/Perceptual eq + { + /perceptual_crd exch AGMCORE_gput + } + { + pop + }ifelse + }ifelse + }ifelse + }ifelse + 1 index{exch}{pop}ifelse + } + {false}ifelse + } + {true}ifelse + { + dup begin + currentdict/TransformPQR known{ + currentdict/TransformPQR get aload pop + 3{{}eq 3 1 roll}repeat or or + } + {true}ifelse + currentdict/MatrixPQR known{ + currentdict/MatrixPQR get aload pop + 1.0 eq 9 1 roll 0.0 eq 9 1 roll 0.0 eq 9 1 roll + 0.0 eq 9 1 roll 1.0 eq 9 1 roll 0.0 eq 9 1 roll + 0.0 eq 9 1 roll 0.0 eq 9 1 roll 1.0 eq + and and and and and and and and + } + {true}ifelse + end + or + { + clonedict begin + /TransformPQR[ + {4 -1 roll 3 get dup 3 1 roll sub 5 -1 roll 3 get 3 -1 roll sub div + 3 -1 roll 3 get 3 -1 roll 3 get dup 4 1 roll sub mul add}bind + {4 -1 roll 4 get dup 3 1 roll sub 5 -1 roll 4 get 3 -1 roll sub div + 3 -1 roll 4 get 3 -1 roll 4 get dup 4 1 roll sub mul add}bind + {4 -1 roll 5 get dup 3 1 roll sub 5 -1 roll 5 get 3 -1 roll sub div + 3 -1 roll 5 get 3 -1 roll 5 get dup 4 1 roll sub mul add}bind + ]def + /MatrixPQR[0.8951 -0.7502 0.0389 0.2664 1.7135 -0.0685 -0.1614 0.0367 1.0296]def + /RangePQR[-0.3227950745 2.3229645538 -1.5003771057 3.5003465881 -0.1369979095 2.136967392]def + currentdict end + }if + setcolorrendering_opt + }if + }if +}def +/set_crd +{ + AGMCORE_host_sep not level2 and{ + currentdict/ColorRendering known{ + ColorRendering/ColorRendering{findresource}stopped not{setcolorrendering_opt}if + }{ + currentdict/Intent known{ + updatecolorrendering + }if + }ifelse + currentcolorspace dup type/arraytype eq + {0 get}if + /DeviceRGB eq + { + currentdict/UCR known + {/UCR}{/AGMCORE_currentucr}ifelse + load setundercolorremoval + currentdict/BG known + {/BG}{/AGMCORE_currentbg}ifelse + load setblackgeneration + }if + }if +}def +/set_ucrbg +{ + dup null eq {pop /AGMCORE_currentbg load}{/Procedure get_res}ifelse + dup currentblackgeneration eq {pop}{setblackgeneration}ifelse + dup null eq {pop /AGMCORE_currentucr load}{/Procedure get_res}ifelse + dup currentundercolorremoval eq {pop}{setundercolorremoval}ifelse +}def +/setcolorrendering_opt +{ + dup currentcolorrendering eq{ + pop + }{ + product(HP Color LaserJet 2605)anchorsearch{ + pop pop pop + }{ + pop + clonedict + begin + /Intent Intent def + currentdict + end + setcolorrendering + }ifelse + }ifelse +}def +/cpaint_gcomp +{ + convert_to_process//Adobe_AGM_Core/AGMCORE_ConvertToProcess xddf + //Adobe_AGM_Core/AGMCORE_ConvertToProcess get not + { + (%end_cpaint_gcomp)flushinput + }if +}def +/cpaint_gsep +{ + //Adobe_AGM_Core/AGMCORE_ConvertToProcess get + { + (%end_cpaint_gsep)flushinput + }if +}def +/cpaint_gend +{np}def +/T1_path +{ + currentfile token pop currentfile token pop mo + { + currentfile token pop dup type/stringtype eq + {pop exit}if + 0 exch rlineto + currentfile token pop dup type/stringtype eq + {pop exit}if + 0 rlineto + }loop +}def +/T1_gsave + level3 + {/clipsave} + {/gsave}ifelse + load def +/T1_grestore + level3 + {/cliprestore} + {/grestore}ifelse + load def +/set_spot_alias_ary +{ + dup inherit_aliases + //Adobe_AGM_Core/AGMCORE_SpotAliasAry xddf +}def +/set_spot_normalization_ary +{ + dup inherit_aliases + dup length + /AGMCORE_SpotAliasAry where{pop AGMCORE_SpotAliasAry length add}if + array + //Adobe_AGM_Core/AGMCORE_SpotAliasAry2 xddf + /AGMCORE_SpotAliasAry where{ + pop + AGMCORE_SpotAliasAry2 0 AGMCORE_SpotAliasAry putinterval + AGMCORE_SpotAliasAry length + }{0}ifelse + AGMCORE_SpotAliasAry2 3 1 roll exch putinterval + true set_spot_alias +}def +/inherit_aliases +{ + {dup/Name get map_alias{/CSD put}{pop}ifelse}forall +}def +/set_spot_alias +{ + /AGMCORE_SpotAliasAry2 where{ + /AGMCORE_current_spot_alias 3 -1 roll put + }{ + pop + }ifelse +}def +/current_spot_alias +{ + /AGMCORE_SpotAliasAry2 where{ + /AGMCORE_current_spot_alias get + }{ + false + }ifelse +}def +/map_alias +{ + /AGMCORE_SpotAliasAry2 where{ + begin + /AGMCORE_name xdf + false + AGMCORE_SpotAliasAry2{ + dup/Name get AGMCORE_name eq{ + /CSD get/CSD get_res + exch pop true + exit + }{ + pop + }ifelse + }forall + end + }{ + pop false + }ifelse +}bdf +/spot_alias +{ + true set_spot_alias + /AGMCORE_&setcustomcolor AGMCORE_key_known not{ + //Adobe_AGM_Core/AGMCORE_&setcustomcolor/setcustomcolor load put + }if + /customcolor_tint 1 AGMCORE_gput + //Adobe_AGM_Core begin + /setcustomcolor + { + //Adobe_AGM_Core begin + dup/customcolor_tint exch AGMCORE_gput + 1 index aload pop pop 1 eq exch 1 eq and exch 1 eq and exch 1 eq and not + current_spot_alias and{1 index 4 get map_alias}{false}ifelse + { + false set_spot_alias + /sep_colorspace_dict AGMCORE_gget null ne + {/sep_colorspace_dict AGMCORE_gget/ForeignContent known not}{false}ifelse + 3 1 roll 2 index{ + exch pop/sep_tint AGMCORE_gget exch + }if + mark 3 1 roll + setsepcolorspace + counttomark 0 ne{ + setsepcolor + }if + pop + not{/sep_tint 1.0 AGMCORE_gput/sep_colorspace_dict AGMCORE_gget/ForeignContent true put}if + pop + true set_spot_alias + }{ + AGMCORE_&setcustomcolor + }ifelse + end + }bdf + end +}def +/begin_feature +{ + Adobe_AGM_Core/AGMCORE_feature_dictCount countdictstack put + count Adobe_AGM_Core/AGMCORE_feature_opCount 3 -1 roll put + {Adobe_AGM_Core/AGMCORE_feature_ctm matrix currentmatrix put}if +}def +/end_feature +{ + 2 dict begin + /spd/setpagedevice load def + /setpagedevice{get_gstate spd set_gstate}def + stopped{$error/newerror false put}if + end + count Adobe_AGM_Core/AGMCORE_feature_opCount get sub dup 0 gt{{pop}repeat}{pop}ifelse + countdictstack Adobe_AGM_Core/AGMCORE_feature_dictCount get sub dup 0 gt{{end}repeat}{pop}ifelse + {Adobe_AGM_Core/AGMCORE_feature_ctm get setmatrix}if +}def +/set_negative +{ + //Adobe_AGM_Core begin + /AGMCORE_inverting exch def + level2{ + currentpagedevice/NegativePrint known AGMCORE_distilling not and{ + currentpagedevice/NegativePrint get//Adobe_AGM_Core/AGMCORE_inverting get ne{ + true begin_feature true{ + <>setpagedevice + }end_feature + }if + /AGMCORE_inverting false def + }if + }if + AGMCORE_inverting{ + [{1 exch sub}/exec load dup currenttransfer exch]cvx bind settransfer + AGMCORE_distilling{ + erasepage + }{ + gsave np clippath 1/setseparationgray where{pop setseparationgray}{setgray}ifelse + /AGMIRS_&fill where{pop AGMIRS_&fill}{fill}ifelse grestore + }ifelse + }if + end +}def +/lw_save_restore_override{ + /md where{ + pop + md begin + initializepage + /initializepage{}def + /pmSVsetup{}def + /endp{}def + /pse{}def + /psb{}def + /orig_showpage where + {pop} + {/orig_showpage/showpage load def} + ifelse + /showpage{orig_showpage gR}def + end + }if +}def +/pscript_showpage_override{ + /NTPSOct95 where + { + begin + showpage + save + /showpage/restore load def + /restore{exch pop}def + end + }if +}def +/driver_media_override +{ + /md where{ + pop + md/initializepage known{ + md/initializepage{}put + }if + md/rC known{ + md/rC{4{pop}repeat}put + }if + }if + /mysetup where{ + /mysetup[1 0 0 1 0 0]put + }if + Adobe_AGM_Core/AGMCORE_Default_CTM matrix currentmatrix put + level2 + {Adobe_AGM_Core/AGMCORE_Default_PageSize currentpagedevice/PageSize get put}if +}def +/capture_mysetup +{ + /Pscript_Win_Data where{ + pop + Pscript_Win_Data/mysetup known{ + Adobe_AGM_Core/save_mysetup Pscript_Win_Data/mysetup get put + }if + }if +}def +/restore_mysetup +{ + /Pscript_Win_Data where{ + pop + Pscript_Win_Data/mysetup known{ + Adobe_AGM_Core/save_mysetup known{ + Pscript_Win_Data/mysetup Adobe_AGM_Core/save_mysetup get put + Adobe_AGM_Core/save_mysetup undef + }if + }if + }if +}def +/driver_check_media_override +{ + /PrepsDict where + {pop} + { + Adobe_AGM_Core/AGMCORE_Default_CTM get matrix currentmatrix ne + Adobe_AGM_Core/AGMCORE_Default_PageSize get type/arraytype eq + { + Adobe_AGM_Core/AGMCORE_Default_PageSize get 0 get currentpagedevice/PageSize get 0 get eq and + Adobe_AGM_Core/AGMCORE_Default_PageSize get 1 get currentpagedevice/PageSize get 1 get eq and + }if + { + Adobe_AGM_Core/AGMCORE_Default_CTM get setmatrix + }if + }ifelse +}def +AGMCORE_err_strings begin + /AGMCORE_bad_environ(Environment not satisfactory for this job. Ensure that the PPD is correct or that the PostScript level requested is supported by this printer. )def + /AGMCORE_color_space_onhost_seps(This job contains colors that will not separate with on-host methods. )def + /AGMCORE_invalid_color_space(This job contains an invalid color space. )def +end +/set_def_ht +{AGMCORE_def_ht sethalftone}def +/set_def_flat +{AGMCORE_Default_flatness setflat}def +end +systemdict/setpacking known +{setpacking}if +%%EndResource +%%BeginResource: procset Adobe_CoolType_Core 2.31 0 %%Copyright: Copyright 1997-2006 Adobe Systems Incorporated. All Rights Reserved. %%Version: 2.31 0 10 dict begin /Adobe_CoolType_Passthru currentdict def /Adobe_CoolType_Core_Defined userdict/Adobe_CoolType_Core known def Adobe_CoolType_Core_Defined {/Adobe_CoolType_Core userdict/Adobe_CoolType_Core get def} if userdict/Adobe_CoolType_Core 70 dict dup begin put /Adobe_CoolType_Version 2.31 def /Level2? systemdict/languagelevel known dup {pop systemdict/languagelevel get 2 ge} if def Level2? not { /currentglobal false def /setglobal/pop load def /gcheck{pop false}bind def /currentpacking false def /setpacking/pop load def /SharedFontDirectory 0 dict def } if currentpacking true setpacking currentglobal false setglobal userdict/Adobe_CoolType_Data 2 copy known not {2 copy 10 dict put} if get begin /@opStackCountByLevel 32 dict def /@opStackLevel 0 def /@dictStackCountByLevel 32 dict def /@dictStackLevel 0 def end setglobal currentglobal true setglobal userdict/Adobe_CoolType_GVMFonts known not {userdict/Adobe_CoolType_GVMFonts 10 dict put} if setglobal currentglobal false setglobal userdict/Adobe_CoolType_LVMFonts known not {userdict/Adobe_CoolType_LVMFonts 10 dict put} if setglobal /ct_VMDictPut { dup gcheck{Adobe_CoolType_GVMFonts}{Adobe_CoolType_LVMFonts}ifelse 3 1 roll put }bind def /ct_VMDictUndef { dup Adobe_CoolType_GVMFonts exch known {Adobe_CoolType_GVMFonts exch undef} { dup Adobe_CoolType_LVMFonts exch known {Adobe_CoolType_LVMFonts exch undef} {pop} ifelse }ifelse }bind def /ct_str1 1 string def /ct_xshow { /_ct_na exch def /_ct_i 0 def currentpoint /_ct_y exch def /_ct_x exch def { pop pop ct_str1 exch 0 exch put ct_str1 show {_ct_na _ct_i get}stopped {pop pop} { _ct_x _ct_y moveto 0 rmoveto } ifelse /_ct_i _ct_i 1 add def currentpoint /_ct_y exch def /_ct_x exch def } exch @cshow }bind def /ct_yshow { /_ct_na exch def /_ct_i 0 def currentpoint /_ct_y exch def /_ct_x exch def { pop pop ct_str1 exch 0 exch put ct_str1 show {_ct_na _ct_i get}stopped {pop pop} { _ct_x _ct_y moveto 0 exch rmoveto } ifelse /_ct_i _ct_i 1 add def currentpoint /_ct_y exch def /_ct_x exch def } exch @cshow }bind def /ct_xyshow { /_ct_na exch def /_ct_i 0 def currentpoint /_ct_y exch def /_ct_x exch def { pop pop ct_str1 exch 0 exch put ct_str1 show {_ct_na _ct_i get}stopped {pop pop} { {_ct_na _ct_i 1 add get}stopped {pop pop pop} { _ct_x _ct_y moveto rmoveto } ifelse } ifelse /_ct_i _ct_i 2 add def currentpoint /_ct_y exch def /_ct_x exch def } exch @cshow }bind def /xsh{{@xshow}stopped{Adobe_CoolType_Data begin ct_xshow end}if}bind def /ysh{{@yshow}stopped{Adobe_CoolType_Data begin ct_yshow end}if}bind def /xysh{{@xyshow}stopped{Adobe_CoolType_Data begin ct_xyshow end}if}bind def currentglobal true setglobal /ct_T3Defs { /BuildChar { 1 index/Encoding get exch get 1 index/BuildGlyph get exec }bind def /BuildGlyph { exch begin GlyphProcs exch get exec end }bind def }bind def setglobal /@_SaveStackLevels { Adobe_CoolType_Data begin /@vmState currentglobal def false setglobal @opStackCountByLevel @opStackLevel 2 copy known not { 2 copy 3 dict dup/args 7 index 5 add array put put get } { get dup/args get dup length 3 index lt { dup length 5 add array exch 1 index exch 0 exch putinterval 1 index exch/args exch put } {pop} ifelse } ifelse begin count 1 sub 1 index lt {pop count} if dup/argCount exch def dup 0 gt { args exch 0 exch getinterval astore pop } {pop} ifelse count /restCount exch def end /@opStackLevel @opStackLevel 1 add def countdictstack 1 sub @dictStackCountByLevel exch @dictStackLevel exch put /@dictStackLevel @dictStackLevel 1 add def @vmState setglobal end }bind def /@_RestoreStackLevels { Adobe_CoolType_Data begin /@opStackLevel @opStackLevel 1 sub def @opStackCountByLevel @opStackLevel get begin count restCount sub dup 0 gt {{pop}repeat} {pop} ifelse args 0 argCount getinterval{}forall end /@dictStackLevel @dictStackLevel 1 sub def @dictStackCountByLevel @dictStackLevel get end countdictstack exch sub dup 0 gt {{end}repeat} {pop} ifelse }bind def /@_PopStackLevels { Adobe_CoolType_Data begin /@opStackLevel @opStackLevel 1 sub def /@dictStackLevel @dictStackLevel 1 sub def end }bind def /@Raise { exch cvx exch errordict exch get exec stop }bind def /@ReRaise { cvx $error/errorname get errordict exch get exec stop }bind def /@Stopped { 0 @#Stopped }bind def /@#Stopped { @_SaveStackLevels stopped {@_RestoreStackLevels true} {@_PopStackLevels false} ifelse }bind def /@Arg { Adobe_CoolType_Data begin @opStackCountByLevel @opStackLevel 1 sub get begin args exch argCount 1 sub exch sub get end end }bind def currentglobal true setglobal /CTHasResourceForAllBug Level2? { 1 dict dup /@shouldNotDisappearDictValue true def Adobe_CoolType_Data exch/@shouldNotDisappearDict exch put begin count @_SaveStackLevels {(*){pop stop}128 string/Category resourceforall} stopped pop @_RestoreStackLevels currentdict Adobe_CoolType_Data/@shouldNotDisappearDict get dup 3 1 roll ne dup 3 1 roll { /@shouldNotDisappearDictValue known { { end currentdict 1 index eq {pop exit} if } loop } if } { pop end } ifelse } {false} ifelse def true setglobal /CTHasResourceStatusBug Level2? { mark {/steveamerige/Category resourcestatus} stopped {cleartomark true} {cleartomark currentglobal not} ifelse } {false} ifelse def setglobal /CTResourceStatus { mark 3 1 roll /Category findresource begin ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec {cleartomark false} {{3 2 roll pop true}{cleartomark false}ifelse} ifelse end }bind def /CTWorkAroundBugs { Level2? { /cid_PreLoad/ProcSet resourcestatus { pop pop currentglobal mark { (*) { dup/CMap CTHasResourceStatusBug {CTResourceStatus} {resourcestatus} ifelse { pop dup 0 eq exch 1 eq or { dup/CMap findresource gcheck setglobal /CMap undefineresource } { pop CTHasResourceForAllBug {exit} {stop} ifelse } ifelse } {pop} ifelse } 128 string/CMap resourceforall } stopped {cleartomark} stopped pop setglobal } if } if }bind def /ds { Adobe_CoolType_Core begin CTWorkAroundBugs /mo/moveto load def /nf/newencodedfont load def /msf{makefont setfont}bind def /uf{dup undefinefont ct_VMDictUndef}bind def /ur/undefineresource load def /chp/charpath load def /awsh/awidthshow load def /wsh/widthshow load def /ash/ashow load def /@xshow/xshow load def /@yshow/yshow load def /@xyshow/xyshow load def /@cshow/cshow load def /sh/show load def /rp/repeat load def /.n/.notdef def end currentglobal false setglobal userdict/Adobe_CoolType_Data 2 copy known not {2 copy 10 dict put} if get begin /AddWidths? false def /CC 0 def /charcode 2 string def /@opStackCountByLevel 32 dict def /@opStackLevel 0 def /@dictStackCountByLevel 32 dict def /@dictStackLevel 0 def /InVMFontsByCMap 10 dict def /InVMDeepCopiedFonts 10 dict def end setglobal }bind def /dt { currentdict Adobe_CoolType_Core eq {end} if }bind def /ps { Adobe_CoolType_Core begin Adobe_CoolType_GVMFonts begin Adobe_CoolType_LVMFonts begin SharedFontDirectory begin }bind def /pt { end end end end }bind def /unload { systemdict/languagelevel known { systemdict/languagelevel get 2 ge { userdict/Adobe_CoolType_Core 2 copy known {undef} {pop pop} ifelse } if } if }bind def /ndf { 1 index where {pop pop pop} {dup xcheck{bind}if def} ifelse }def /findfont systemdict begin userdict begin /globaldict where{/globaldict get begin}if dup where pop exch get /globaldict where{pop end}if end end Adobe_CoolType_Core_Defined {/systemfindfont exch def} { /findfont 1 index def /systemfindfont exch def } ifelse /undefinefont {pop}ndf /copyfont { currentglobal 3 1 roll 1 index gcheck setglobal dup null eq{0}{dup length}ifelse 2 index length add 1 add dict begin exch { 1 index/FID eq {pop pop} {def} ifelse } forall dup null eq {pop} {{def}forall} ifelse currentdict end exch setglobal }bind def /copyarray { currentglobal exch dup gcheck setglobal dup length array copy exch setglobal }bind def /newencodedfont { currentglobal { SharedFontDirectory 3 index known {SharedFontDirectory 3 index get/FontReferenced known} {false} ifelse } { FontDirectory 3 index known {FontDirectory 3 index get/FontReferenced known} { SharedFontDirectory 3 index known {SharedFontDirectory 3 index get/FontReferenced known} {false} ifelse } ifelse } ifelse dup { 3 index findfont/FontReferenced get 2 index dup type/nametype eq {findfont} if ne {pop false} if } if dup { 1 index dup type/nametype eq {findfont} if dup/CharStrings known { /CharStrings get length 4 index findfont/CharStrings get length ne { pop false } if } {pop} ifelse } if { pop 1 index findfont /Encoding get exch 0 1 255 {2 copy get 3 index 3 1 roll put} for pop pop pop } { currentglobal 4 1 roll dup type/nametype eq {findfont} if dup gcheck setglobal dup dup maxlength 2 add dict begin exch { 1 index/FID ne 2 index/Encoding ne and {def} {pop pop} ifelse } forall /FontReferenced exch def /Encoding exch dup length array copy def /FontName 1 index dup type/stringtype eq{cvn}if def dup currentdict end definefont ct_VMDictPut setglobal } ifelse }bind def /SetSubstituteStrategy { $SubstituteFont begin dup type/dicttype ne {0 dict} if currentdict/$Strategies known { exch $Strategies exch 2 copy known { get 2 copy maxlength exch maxlength add dict begin {def}forall {def}forall currentdict dup/$Init known {dup/$Init get exec} if end /$Strategy exch def } {pop pop pop} ifelse } {pop pop} ifelse end }bind def /scff { $SubstituteFont begin dup type/stringtype eq {dup length exch} {null} ifelse /$sname exch def /$slen exch def /$inVMIndex $sname null eq { 1 index $str cvs dup length $slen sub $slen getinterval cvn } {$sname} ifelse def end {findfont} @Stopped { dup length 8 add string exch 1 index 0(BadFont:)putinterval 1 index exch 8 exch dup length string cvs putinterval cvn {findfont} @Stopped {pop/Courier findfont} if } if $SubstituteFont begin /$sname null def /$slen 0 def /$inVMIndex null def end }bind def /isWidthsOnlyFont { dup/WidthsOnly known {pop pop true} { dup/FDepVector known {/FDepVector get{isWidthsOnlyFont dup{exit}if}forall} { dup/FDArray known {/FDArray get{isWidthsOnlyFont dup{exit}if}forall} {pop} ifelse } ifelse } ifelse }bind def /ct_StyleDicts 4 dict dup begin /Adobe-Japan1 4 dict dup begin Level2? { /Serif /HeiseiMin-W3-83pv-RKSJ-H/Font resourcestatus {pop pop/HeiseiMin-W3} { /CIDFont/Category resourcestatus { pop pop /HeiseiMin-W3/CIDFont resourcestatus {pop pop/HeiseiMin-W3} {/Ryumin-Light} ifelse } {/Ryumin-Light} ifelse } ifelse def /SansSerif /HeiseiKakuGo-W5-83pv-RKSJ-H/Font resourcestatus {pop pop/HeiseiKakuGo-W5} { /CIDFont/Category resourcestatus { pop pop /HeiseiKakuGo-W5/CIDFont resourcestatus {pop pop/HeiseiKakuGo-W5} {/GothicBBB-Medium} ifelse } {/GothicBBB-Medium} ifelse } ifelse def /HeiseiMaruGo-W4-83pv-RKSJ-H/Font resourcestatus {pop pop/HeiseiMaruGo-W4} { /CIDFont/Category resourcestatus { pop pop /HeiseiMaruGo-W4/CIDFont resourcestatus {pop pop/HeiseiMaruGo-W4} { /Jun101-Light-RKSJ-H/Font resourcestatus {pop pop/Jun101-Light} {SansSerif} ifelse } ifelse } { /Jun101-Light-RKSJ-H/Font resourcestatus {pop pop/Jun101-Light} {SansSerif} ifelse } ifelse } ifelse /RoundSansSerif exch def /Default Serif def } { /Serif/Ryumin-Light def /SansSerif/GothicBBB-Medium def { (fonts/Jun101-Light-83pv-RKSJ-H)status }stopped {pop}{ {pop pop pop pop/Jun101-Light} {SansSerif} ifelse /RoundSansSerif exch def }ifelse /Default Serif def } ifelse end def /Adobe-Korea1 4 dict dup begin /Serif/HYSMyeongJo-Medium def /SansSerif/HYGoThic-Medium def /RoundSansSerif SansSerif def /Default Serif def end def /Adobe-GB1 4 dict dup begin /Serif/STSong-Light def /SansSerif/STHeiti-Regular def /RoundSansSerif SansSerif def /Default Serif def end def /Adobe-CNS1 4 dict dup begin /Serif/MKai-Medium def /SansSerif/MHei-Medium def /RoundSansSerif SansSerif def /Default Serif def end def end def Level2?{currentglobal true setglobal}if /ct_BoldRomanWidthProc { stringwidth 1 index 0 ne{exch .03 add exch}if setcharwidth 0 0 }bind def /ct_Type0WidthProc { dup stringwidth 0 0 moveto 2 index true charpath pathbbox 0 -1 7 index 2 div .88 setcachedevice2 pop 0 0 }bind def /ct_Type0WMode1WidthProc { dup stringwidth pop 2 div neg -0.88 2 copy moveto 0 -1 5 -1 roll true charpath pathbbox setcachedevice }bind def /cHexEncoding [/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12 /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25 /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38 /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71 /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84 /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97 /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0 /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3 /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6 /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def /ct_BoldBaseFont 11 dict begin /FontType 3 def /FontMatrix[1 0 0 1 0 0]def /FontBBox[0 0 1 1]def /Encoding cHexEncoding def /_setwidthProc/ct_BoldRomanWidthProc load def /_bcstr1 1 string def /BuildChar { exch begin _basefont setfont _bcstr1 dup 0 4 -1 roll put dup _setwidthProc 3 copy moveto show _basefonto setfont moveto show end }bind def currentdict end def systemdict/composefont known { /ct_DefineIdentity-H { /Identity-H/CMap resourcestatus { pop pop } { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering(Identity)def /Supplement 0 def end def /CMapName/Identity-H def /CMapVersion 1.000 def /CMapType 1 def 1 begincodespacerange <0000> endcodespacerange 1 begincidrange <0000>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } ifelse } def /ct_BoldBaseCIDFont 11 dict begin /CIDFontType 1 def /CIDFontName/ct_BoldBaseCIDFont def /FontMatrix[1 0 0 1 0 0]def /FontBBox[0 0 1 1]def /_setwidthProc/ct_Type0WidthProc load def /_bcstr2 2 string def /BuildGlyph { exch begin _basefont setfont _bcstr2 1 2 index 256 mod put _bcstr2 0 3 -1 roll 256 idiv put _bcstr2 dup _setwidthProc 3 copy moveto show _basefonto setfont moveto show end }bind def currentdict end def }if Level2?{setglobal}if /ct_CopyFont{ { 1 index/FID ne 2 index/UniqueID ne and {def}{pop pop}ifelse }forall }bind def /ct_Type0CopyFont { exch dup length dict begin ct_CopyFont [ exch FDepVector { dup/FontType get 0 eq { 1 index ct_Type0CopyFont /_ctType0 exch definefont } { /_ctBaseFont exch 2 index exec } ifelse exch } forall pop ] /FDepVector exch def currentdict end }bind def /ct_MakeBoldFont { dup/ct_SyntheticBold known { dup length 3 add dict begin ct_CopyFont /ct_StrokeWidth .03 0 FontMatrix idtransform pop def /ct_SyntheticBold true def currentdict end definefont } { dup dup length 3 add dict begin ct_CopyFont /PaintType 2 def /StrokeWidth .03 0 FontMatrix idtransform pop def /dummybold currentdict end definefont dup/FontType get dup 9 ge exch 11 le and { ct_BoldBaseCIDFont dup length 3 add dict copy begin dup/CIDSystemInfo get/CIDSystemInfo exch def ct_DefineIdentity-H /_Type0Identity/Identity-H 3 -1 roll[exch]composefont /_basefont exch def /_Type0Identity/Identity-H 3 -1 roll[exch]composefont /_basefonto exch def currentdict end /CIDFont defineresource } { ct_BoldBaseFont dup length 3 add dict copy begin /_basefont exch def /_basefonto exch def currentdict end definefont } ifelse } ifelse }bind def /ct_MakeBold{ 1 index 1 index findfont currentglobal 5 1 roll dup gcheck setglobal dup /FontType get 0 eq { dup/WMode known{dup/WMode get 1 eq}{false}ifelse version length 4 ge and {version 0 4 getinterval cvi 2015 ge} {true} ifelse {/ct_Type0WidthProc} {/ct_Type0WMode1WidthProc} ifelse ct_BoldBaseFont/_setwidthProc 3 -1 roll load put {ct_MakeBoldFont}ct_Type0CopyFont definefont } { dup/_fauxfont known not 1 index/SubstMaster known not and { ct_BoldBaseFont/_setwidthProc /ct_BoldRomanWidthProc load put ct_MakeBoldFont } { 2 index 2 index eq {exch pop } { dup length dict begin ct_CopyFont currentdict end definefont } ifelse } ifelse } ifelse pop pop pop setglobal }bind def /?str1 256 string def /?set { $SubstituteFont begin /$substituteFound false def /$fontname 1 index def /$doSmartSub false def end dup findfont $SubstituteFont begin $substituteFound {false} { dup/FontName known { dup/FontName get $fontname eq 1 index/DistillerFauxFont known not and /currentdistillerparams where {pop false 2 index isWidthsOnlyFont not and} if } {false} ifelse } ifelse exch pop /$doSmartSub true def end { 5 1 roll pop pop pop pop findfont } { 1 index findfont dup/FontType get 3 eq { 6 1 roll pop pop pop pop pop false } {pop true} ifelse { $SubstituteFont begin pop pop /$styleArray 1 index def /$regOrdering 2 index def pop pop 0 1 $styleArray length 1 sub { $styleArray exch get ct_StyleDicts $regOrdering 2 copy known { get exch 2 copy known not {pop/Default} if get dup type/nametype eq { ?str1 cvs length dup 1 add exch ?str1 exch(-)putinterval exch dup length exch ?str1 exch 3 index exch putinterval add ?str1 exch 0 exch getinterval cvn } { pop pop/Unknown } ifelse } { pop pop pop pop/Unknown } ifelse } for end findfont }if } ifelse currentglobal false setglobal 3 1 roll null copyfont definefont pop setglobal }bind def setpacking userdict/$SubstituteFont 25 dict put 1 dict begin /SubstituteFont dup $error exch 2 copy known {get} {pop pop{pop/Courier}bind} ifelse def /currentdistillerparams where dup { pop pop currentdistillerparams/CannotEmbedFontPolicy 2 copy known {get/Error eq} {pop pop false} ifelse } if not { countdictstack array dictstack 0 get begin userdict begin $SubstituteFont begin /$str 128 string def /$fontpat 128 string def /$slen 0 def /$sname null def /$match false def /$fontname null def /$substituteFound false def /$inVMIndex null def /$doSmartSub true def /$depth 0 def /$fontname null def /$italicangle 26.5 def /$dstack null def /$Strategies 10 dict dup begin /$Type3Underprint { currentglobal exch false setglobal 11 dict begin /UseFont exch $WMode 0 ne { dup length dict copy dup/WMode $WMode put /UseFont exch definefont } if def /FontName $fontname dup type/stringtype eq{cvn}if def /FontType 3 def /FontMatrix[.001 0 0 .001 0 0]def /Encoding 256 array dup 0 1 255{/.notdef put dup}for pop def /FontBBox[0 0 0 0]def /CCInfo 7 dict dup begin /cc null def /x 0 def /y 0 def end def /BuildChar { exch begin CCInfo begin 1 string dup 0 3 index put exch pop /cc exch def UseFont 1000 scalefont setfont cc stringwidth/y exch def/x exch def x y setcharwidth $SubstituteFont/$Strategy get/$Underprint get exec 0 0 moveto cc show x y moveto end end }bind def currentdict end exch setglobal }bind def /$GetaTint 2 dict dup begin /$BuildFont { dup/WMode known {dup/WMode get} {0} ifelse /$WMode exch def $fontname exch dup/FontName known { dup/FontName get dup type/stringtype eq{cvn}if } {/unnamedfont} ifelse exch Adobe_CoolType_Data/InVMDeepCopiedFonts get 1 index/FontName get known { pop Adobe_CoolType_Data/InVMDeepCopiedFonts get 1 index get null copyfont } {$deepcopyfont} ifelse exch 1 index exch/FontBasedOn exch put dup/FontName $fontname dup type/stringtype eq{cvn}if put definefont Adobe_CoolType_Data/InVMDeepCopiedFonts get begin dup/FontBasedOn get 1 index def end }bind def /$Underprint { gsave x abs y abs gt {/y 1000 def} {/x -1000 def 500 120 translate} ifelse Level2? { [/Separation(All)/DeviceCMYK{0 0 0 1 pop}] setcolorspace } {0 setgray} ifelse 10 setlinewidth x .8 mul [7 3] { y mul 8 div 120 sub x 10 div exch moveto 0 y 4 div neg rlineto dup 0 rlineto 0 y 4 div rlineto closepath gsave Level2? {.2 setcolor} {.8 setgray} ifelse fill grestore stroke } forall pop grestore }bind def end def /$Oblique 1 dict dup begin /$BuildFont { currentglobal exch dup gcheck setglobal null copyfont begin /FontBasedOn currentdict/FontName known { FontName dup type/stringtype eq{cvn}if } {/unnamedfont} ifelse def /FontName $fontname dup type/stringtype eq{cvn}if def /currentdistillerparams where {pop} { /FontInfo currentdict/FontInfo known {FontInfo null copyfont} {2 dict} ifelse dup begin /ItalicAngle $italicangle def /FontMatrix FontMatrix [1 0 ItalicAngle dup sin exch cos div 1 0 0] matrix concatmatrix readonly end 4 2 roll def def } ifelse FontName currentdict end definefont exch setglobal }bind def end def /$None 1 dict dup begin /$BuildFont{}bind def end def end def /$Oblique SetSubstituteStrategy /$findfontByEnum { dup type/stringtype eq{cvn}if dup/$fontname exch def $sname null eq {$str cvs dup length $slen sub $slen getinterval} {pop $sname} ifelse $fontpat dup 0(fonts/*)putinterval exch 7 exch putinterval /$match false def $SubstituteFont/$dstack countdictstack array dictstack put mark { $fontpat 0 $slen 7 add getinterval {/$match exch def exit} $str filenameforall } stopped { cleardictstack currentdict true $SubstituteFont/$dstack get { exch { 1 index eq {pop false} {true} ifelse } {begin false} ifelse } forall pop } if cleartomark /$slen 0 def $match false ne {$match(fonts/)anchorsearch pop pop cvn} {/Courier} ifelse }bind def /$ROS 1 dict dup begin /Adobe 4 dict dup begin /Japan1 [/Ryumin-Light/HeiseiMin-W3 /GothicBBB-Medium/HeiseiKakuGo-W5 /HeiseiMaruGo-W4/Jun101-Light]def /Korea1 [/HYSMyeongJo-Medium/HYGoThic-Medium]def /GB1 [/STSong-Light/STHeiti-Regular]def /CNS1 [/MKai-Medium/MHei-Medium]def end def end def /$cmapname null def /$deepcopyfont { dup/FontType get 0 eq { 1 dict dup/FontName/copied put copyfont begin /FDepVector FDepVector copyarray 0 1 2 index length 1 sub { 2 copy get $deepcopyfont dup/FontName/copied put /copied exch definefont 3 copy put pop pop } for def currentdict end } {$Strategies/$Type3Underprint get exec} ifelse }bind def /$buildfontname { dup/CIDFont findresource/CIDSystemInfo get begin Registry length Ordering length Supplement 8 string cvs 3 copy length 2 add add add string dup 5 1 roll dup 0 Registry putinterval dup 4 index(-)putinterval dup 4 index 1 add Ordering putinterval 4 2 roll add 1 add 2 copy(-)putinterval end 1 add 2 copy 0 exch getinterval $cmapname $fontpat cvs exch anchorsearch {pop pop 3 2 roll putinterval cvn/$cmapname exch def} {pop pop pop pop pop} ifelse length $str 1 index(-)putinterval 1 add $str 1 index $cmapname $fontpat cvs putinterval $cmapname length add $str exch 0 exch getinterval cvn }bind def /$findfontByROS { /$fontname exch def $ROS Registry 2 copy known { get Ordering 2 copy known {get} {pop pop[]} ifelse } {pop pop[]} ifelse false exch { dup/CIDFont resourcestatus { pop pop save 1 index/CIDFont findresource dup/WidthsOnly known {dup/WidthsOnly get} {false} ifelse exch pop exch restore {pop} {exch pop true exit} ifelse } {pop} ifelse } forall {$str cvs $buildfontname} { false(*) { save exch dup/CIDFont findresource dup/WidthsOnly known {dup/WidthsOnly get not} {true} ifelse exch/CIDSystemInfo get dup/Registry get Registry eq exch/Ordering get Ordering eq and and {exch restore exch pop true exit} {pop restore} ifelse } $str/CIDFont resourceforall {$buildfontname} {$fontname $findfontByEnum} ifelse } ifelse }bind def end end currentdict/$error known currentdict/languagelevel known and dup {pop $error/SubstituteFont known} if dup {$error} {Adobe_CoolType_Core} ifelse begin { /SubstituteFont /CMap/Category resourcestatus { pop pop { $SubstituteFont begin /$substituteFound true def dup length $slen gt $sname null ne or $slen 0 gt and { $sname null eq {dup $str cvs dup length $slen sub $slen getinterval cvn} {$sname} ifelse Adobe_CoolType_Data/InVMFontsByCMap get 1 index 2 copy known { get false exch { pop currentglobal { GlobalFontDirectory 1 index known {exch pop true exit} {pop} ifelse } { FontDirectory 1 index known {exch pop true exit} { GlobalFontDirectory 1 index known {exch pop true exit} {pop} ifelse } ifelse } ifelse } forall } {pop pop false} ifelse { exch pop exch pop } { dup/CMap resourcestatus { pop pop dup/$cmapname exch def /CMap findresource/CIDSystemInfo get{def}forall $findfontByROS } { 128 string cvs dup(-)search { 3 1 roll search { 3 1 roll pop {dup cvi} stopped {pop pop pop pop pop $findfontByEnum} { 4 2 roll pop pop exch length exch 2 index length 2 index sub exch 1 sub -1 0 { $str cvs dup length 4 index 0 4 index 4 3 roll add getinterval exch 1 index exch 3 index exch putinterval dup/CMap resourcestatus { pop pop 4 1 roll pop pop pop dup/$cmapname exch def /CMap findresource/CIDSystemInfo get{def}forall $findfontByROS true exit } {pop} ifelse } for dup type/booleantype eq {pop} {pop pop pop $findfontByEnum} ifelse } ifelse } {pop pop pop $findfontByEnum} ifelse } {pop pop $findfontByEnum} ifelse } ifelse } ifelse } {//SubstituteFont exec} ifelse /$slen 0 def end } } { { $SubstituteFont begin /$substituteFound true def dup length $slen gt $sname null ne or $slen 0 gt and {$findfontByEnum} {//SubstituteFont exec} ifelse end } } ifelse bind readonly def Adobe_CoolType_Core/scfindfont/systemfindfont load put } { /scfindfont { $SubstituteFont begin dup systemfindfont dup/FontName known {dup/FontName get dup 3 index ne} {/noname true} ifelse dup { /$origfontnamefound 2 index def /$origfontname 4 index def/$substituteFound true def } if exch pop { $slen 0 gt $sname null ne 3 index length $slen gt or and { pop dup $findfontByEnum findfont dup maxlength 1 add dict begin {1 index/FID eq{pop pop}{def}ifelse} forall currentdict end definefont dup/FontName known{dup/FontName get}{null}ifelse $origfontnamefound ne { $origfontname $str cvs print ( substitution revised, using )print dup/FontName known {dup/FontName get}{(unspecified font)} ifelse $str cvs print(.\n)print } if } {exch pop} ifelse } {exch pop} ifelse end }bind def } ifelse end end Adobe_CoolType_Core_Defined not { Adobe_CoolType_Core/findfont { $SubstituteFont begin $depth 0 eq { /$fontname 1 index dup type/stringtype ne{$str cvs}if def /$substituteFound false def } if /$depth $depth 1 add def end scfindfont $SubstituteFont begin /$depth $depth 1 sub def $substituteFound $depth 0 eq and { $inVMIndex null ne {dup $inVMIndex $AddInVMFont} if $doSmartSub { currentdict/$Strategy known {$Strategy/$BuildFont get exec} if } if } if end }bind put } if } if end /$AddInVMFont { exch/FontName 2 copy known { get 1 dict dup begin exch 1 index gcheck def end exch Adobe_CoolType_Data/InVMFontsByCMap get exch $DictAdd } {pop pop pop} ifelse }bind def /$DictAdd { 2 copy known not {2 copy 4 index length dict put} if Level2? not { 2 copy get dup maxlength exch length 4 index length add lt 2 copy get dup length 4 index length add exch maxlength 1 index lt { 2 mul dict begin 2 copy get{forall}def 2 copy currentdict put end } {pop} ifelse } if get begin {def} forall end }bind def end end %%EndResource currentglobal true setglobal %%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.23 0 %%Copyright: Copyright 1987-2006 Adobe Systems Incorporated. %%Version: 1.23 0 systemdict/languagelevel known dup {currentglobal false setglobal} {false} ifelse exch userdict/Adobe_CoolType_Utility 2 copy known {2 copy get dup maxlength 27 add dict copy} {27 dict} ifelse put Adobe_CoolType_Utility begin /@eexecStartData def /@recognizeCIDFont null def /ct_Level2? exch def /ct_Clone? 1183615869 internaldict dup /CCRun known not exch/eCCRun known not ct_Level2? and or def ct_Level2? {globaldict begin currentglobal true setglobal} if /ct_AddStdCIDMap ct_Level2? {{ mark Adobe_CoolType_Utility/@recognizeCIDFont currentdict put { ((Hex)57 StartData 0615 1e27 2c39 1c60 d8a8 cc31 fe2b f6e0 7aa3 e541 e21c 60d8 a8c9 c3d0 6d9e 1c60 d8a8 c9c2 02d7 9a1c 60d8 a849 1c60 d8a8 cc36 74f4 1144 b13b 77)0()/SubFileDecode filter cvx exec } stopped { cleartomark Adobe_CoolType_Utility/@recognizeCIDFont get countdictstack dup array dictstack exch 1 sub -1 0 { 2 copy get 3 index eq {1 index length exch sub 1 sub{end}repeat exit} {pop} ifelse } for pop pop Adobe_CoolType_Utility/@eexecStartData get eexec } {cleartomark} ifelse }} {{ Adobe_CoolType_Utility/@eexecStartData get eexec }} ifelse bind def userdict/cid_extensions known dup{cid_extensions/cid_UpdateDB known and}if { cid_extensions begin /cid_GetCIDSystemInfo { 1 index type/stringtype eq {exch cvn exch} if cid_extensions begin dup load 2 index known { 2 copy cid_GetStatusInfo dup null ne { 1 index load 3 index get dup null eq {pop pop cid_UpdateDB} { exch 1 index/Created get eq {exch pop exch pop} {pop cid_UpdateDB} ifelse } ifelse } {pop cid_UpdateDB} ifelse } {cid_UpdateDB} ifelse end }bind def end } if ct_Level2? {end setglobal} if /ct_UseNativeCapability? systemdict/composefont known def /ct_MakeOCF 35 dict def /ct_Vars 25 dict def /ct_GlyphDirProcs 6 dict def /ct_BuildCharDict 15 dict dup begin /charcode 2 string def /dst_string 1500 string def /nullstring()def /usewidths? true def end def ct_Level2?{setglobal}{pop}ifelse ct_GlyphDirProcs begin /GetGlyphDirectory { systemdict/languagelevel known {pop/CIDFont findresource/GlyphDirectory get} { 1 index/CIDFont findresource/GlyphDirectory get dup type/dicttype eq { dup dup maxlength exch length sub 2 index lt { dup length 2 index add dict copy 2 index /CIDFont findresource/GlyphDirectory 2 index put } if } if exch pop exch pop } ifelse + }def /+ { systemdict/languagelevel known { currentglobal false setglobal 3 dict begin /vm exch def } {1 dict begin} ifelse /$ exch def systemdict/languagelevel known { vm setglobal /gvm currentglobal def $ gcheck setglobal } if ?{$ begin}if }def /?{$ type/dicttype eq}def /|{ userdict/Adobe_CoolType_Data known { Adobe_CoolType_Data/AddWidths? known { currentdict Adobe_CoolType_Data begin begin AddWidths? { Adobe_CoolType_Data/CC 3 index put ?{def}{$ 3 1 roll put}ifelse CC charcode exch 1 index 0 2 index 256 idiv put 1 index exch 1 exch 256 mod put stringwidth 2 array astore currentfont/Widths get exch CC exch put } {?{def}{$ 3 1 roll put}ifelse} ifelse end end } {?{def}{$ 3 1 roll put}ifelse} ifelse } {?{def}{$ 3 1 roll put}ifelse} ifelse }def /! { ?{end}if systemdict/languagelevel known {gvm setglobal} if end }def /:{string currentfile exch readstring pop}executeonly def end ct_MakeOCF begin /ct_cHexEncoding [/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12 /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25 /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38 /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71 /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84 /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97 /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0 /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3 /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6 /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def /ct_CID_STR_SIZE 8000 def /ct_mkocfStr100 100 string def /ct_defaultFontMtx[.001 0 0 .001 0 0]def /ct_1000Mtx[1000 0 0 1000 0 0]def /ct_raise{exch cvx exch errordict exch get exec stop}bind def /ct_reraise {cvx $error/errorname get(Error: )print dup( )cvs print errordict exch get exec stop }bind def /ct_cvnsi { 1 index add 1 sub 1 exch 0 4 1 roll { 2 index exch get exch 8 bitshift add } for exch pop }bind def /ct_GetInterval { Adobe_CoolType_Utility/ct_BuildCharDict get begin /dst_index 0 def dup dst_string length gt {dup string/dst_string exch def} if 1 index ct_CID_STR_SIZE idiv /arrayIndex exch def 2 index arrayIndex get 2 index arrayIndex ct_CID_STR_SIZE mul sub { dup 3 index add 2 index length le { 2 index getinterval dst_string dst_index 2 index putinterval length dst_index add/dst_index exch def exit } { 1 index length 1 index sub dup 4 1 roll getinterval dst_string dst_index 2 index putinterval pop dup dst_index add/dst_index exch def sub /arrayIndex arrayIndex 1 add def 2 index dup length arrayIndex gt {arrayIndex get} { pop exit } ifelse 0 } ifelse } loop pop pop pop dst_string 0 dst_index getinterval end }bind def ct_Level2? { /ct_resourcestatus currentglobal mark true setglobal {/unknowninstancename/Category resourcestatus} stopped {cleartomark setglobal true} {cleartomark currentglobal not exch setglobal} ifelse { { mark 3 1 roll/Category findresource begin ct_Vars/vm currentglobal put ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec {cleartomark false} {{3 2 roll pop true}{cleartomark false}ifelse} ifelse ct_Vars/vm get setglobal end } } {{resourcestatus}} ifelse bind def /CIDFont/Category ct_resourcestatus {pop pop} { currentglobal true setglobal /Generic/Category findresource dup length dict copy dup/InstanceType/dicttype put /CIDFont exch/Category defineresource pop setglobal } ifelse ct_UseNativeCapability? { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering(Identity)def /Supplement 0 def end def /CMapName/Identity-H def /CMapVersion 1.000 def /CMapType 1 def 1 begincodespacerange <0000> endcodespacerange 1 begincidrange <0000>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } if } { /ct_Category 2 dict begin /CIDFont 10 dict def /ProcSet 2 dict def currentdict end def /defineresource { ct_Category 1 index 2 copy known { get dup dup maxlength exch length eq { dup length 10 add dict copy ct_Category 2 index 2 index put } if 3 index 3 index put pop exch pop } {pop pop/defineresource/undefined ct_raise} ifelse }bind def /findresource { ct_Category 1 index 2 copy known { get 2 index 2 copy known {get 3 1 roll pop pop} {pop pop/findresource/undefinedresource ct_raise} ifelse } {pop pop/findresource/undefined ct_raise} ifelse }bind def /resourcestatus { ct_Category 1 index 2 copy known { get 2 index known exch pop exch pop { 0 -1 true } { false } ifelse } {pop pop/findresource/undefined ct_raise} ifelse }bind def /ct_resourcestatus/resourcestatus load def } ifelse /ct_CIDInit 2 dict begin /ct_cidfont_stream_init { { dup(Binary)eq { pop null currentfile ct_Level2? { {cid_BYTE_COUNT()/SubFileDecode filter} stopped {pop pop pop} if } if /readstring load exit } if dup(Hex)eq { pop currentfile ct_Level2? { {null exch/ASCIIHexDecode filter/readstring} stopped {pop exch pop(>)exch/readhexstring} if } {(>)exch/readhexstring} ifelse load exit } if /StartData/typecheck ct_raise } loop cid_BYTE_COUNT ct_CID_STR_SIZE le { 2 copy cid_BYTE_COUNT string exch exec pop 1 array dup 3 -1 roll 0 exch put } { cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi dup array exch 2 sub 0 exch 1 exch { 2 copy 5 index ct_CID_STR_SIZE string 6 index exec pop put pop } for 2 index cid_BYTE_COUNT ct_CID_STR_SIZE mod string 3 index exec pop 1 index exch 1 index length 1 sub exch put } ifelse cid_CIDFONT exch/GlyphData exch put 2 index null eq { pop pop pop } { pop/readstring load 1 string exch { 3 copy exec pop dup length 0 eq { pop pop pop pop pop true exit } if 4 index eq { pop pop pop pop false exit } if } loop pop } ifelse }bind def /StartData { mark { currentdict dup/FDArray get 0 get/FontMatrix get 0 get 0.001 eq { dup/CDevProc known not { /CDevProc 1183615869 internaldict/stdCDevProc 2 copy known {get} { pop pop {pop pop pop pop pop 0 -1000 7 index 2 div 880} } ifelse def } if } { /CDevProc { pop pop pop pop pop 0 1 cid_temp/cid_CIDFONT get /FDArray get 0 get /FontMatrix get 0 get div 7 index 2 div 1 index 0.88 mul }def } ifelse /cid_temp 15 dict def cid_temp begin /cid_CIDFONT exch def 3 copy pop dup/cid_BYTE_COUNT exch def 0 gt { ct_cidfont_stream_init FDArray { /Private get dup/SubrMapOffset known { begin /Subrs SubrCount array def Subrs SubrMapOffset SubrCount SDBytes ct_Level2? { currentdict dup/SubrMapOffset undef dup/SubrCount undef /SDBytes undef } if end /cid_SD_BYTES exch def /cid_SUBR_COUNT exch def /cid_SUBR_MAP_OFFSET exch def /cid_SUBRS exch def cid_SUBR_COUNT 0 gt { GlyphData cid_SUBR_MAP_OFFSET cid_SD_BYTES ct_GetInterval 0 cid_SD_BYTES ct_cvnsi 0 1 cid_SUBR_COUNT 1 sub { exch 1 index 1 add cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add GlyphData exch cid_SD_BYTES ct_GetInterval 0 cid_SD_BYTES ct_cvnsi cid_SUBRS 4 2 roll GlyphData exch 4 index 1 index sub ct_GetInterval dup length string copy put } for pop } if } {pop} ifelse } forall } if cleartomark pop pop end CIDFontName currentdict/CIDFont defineresource pop end end } stopped {cleartomark/StartData ct_reraise} if }bind def currentdict end def /ct_saveCIDInit { /CIDInit/ProcSet ct_resourcestatus {true} {/CIDInitC/ProcSet ct_resourcestatus} ifelse { pop pop /CIDInit/ProcSet findresource ct_UseNativeCapability? {pop null} {/CIDInit ct_CIDInit/ProcSet defineresource pop} ifelse } {/CIDInit ct_CIDInit/ProcSet defineresource pop null} ifelse ct_Vars exch/ct_oldCIDInit exch put }bind def /ct_restoreCIDInit { ct_Vars/ct_oldCIDInit get dup null ne {/CIDInit exch/ProcSet defineresource pop} {pop} ifelse }bind def /ct_BuildCharSetUp { 1 index begin CIDFont begin Adobe_CoolType_Utility/ct_BuildCharDict get begin /ct_dfCharCode exch def /ct_dfDict exch def CIDFirstByte ct_dfCharCode add dup CIDCount ge {pop 0} if /cid exch def { GlyphDirectory cid 2 copy known {get} {pop pop nullstring} ifelse dup length FDBytes sub 0 gt { dup FDBytes 0 ne {0 FDBytes ct_cvnsi} {pop 0} ifelse /fdIndex exch def dup length FDBytes sub FDBytes exch getinterval /charstring exch def exit } { pop cid 0 eq {/charstring nullstring def exit} if /cid 0 def } ifelse } loop }def /ct_SetCacheDevice { 0 0 moveto dup stringwidth 3 -1 roll true charpath pathbbox 0 -1000 7 index 2 div 880 setcachedevice2 0 0 moveto }def /ct_CloneSetCacheProc { 1 eq { stringwidth pop -2 div -880 0 -1000 setcharwidth moveto } { usewidths? { currentfont/Widths get cid 2 copy known {get exch pop aload pop} {pop pop stringwidth} ifelse } {stringwidth} ifelse setcharwidth 0 0 moveto } ifelse }def /ct_Type3ShowCharString { ct_FDDict fdIndex 2 copy known {get} { currentglobal 3 1 roll 1 index gcheck setglobal ct_Type1FontTemplate dup maxlength dict copy begin FDArray fdIndex get dup/FontMatrix 2 copy known {get} {pop pop ct_defaultFontMtx} ifelse /FontMatrix exch dup length array copy def /Private get /Private exch def /Widths rootfont/Widths get def /CharStrings 1 dict dup/.notdef dup length string copy put def currentdict end /ct_Type1Font exch definefont dup 5 1 roll put setglobal } ifelse dup/CharStrings get 1 index/Encoding get ct_dfCharCode get charstring put rootfont/WMode 2 copy known {get} {pop pop 0} ifelse exch 1000 scalefont setfont ct_str1 0 ct_dfCharCode put ct_str1 exch ct_dfSetCacheProc ct_SyntheticBold { currentpoint ct_str1 show newpath moveto ct_str1 true charpath ct_StrokeWidth setlinewidth stroke } {ct_str1 show} ifelse }def /ct_Type4ShowCharString { ct_dfDict ct_dfCharCode charstring FDArray fdIndex get dup/FontMatrix get dup ct_defaultFontMtx ct_matrixeq not {ct_1000Mtx matrix concatmatrix concat} {pop} ifelse /Private get Adobe_CoolType_Utility/ct_Level2? get not { ct_dfDict/Private 3 -1 roll {put} 1183615869 internaldict/superexec get exec } if 1183615869 internaldict Adobe_CoolType_Utility/ct_Level2? get {1 index} {3 index/Private get mark 6 1 roll} ifelse dup/RunInt known {/RunInt get} {pop/CCRun} ifelse get exec Adobe_CoolType_Utility/ct_Level2? get not {cleartomark} if }bind def /ct_BuildCharIncremental { { Adobe_CoolType_Utility/ct_MakeOCF get begin ct_BuildCharSetUp ct_ShowCharString } stopped {stop} if end end end end }bind def /BaseFontNameStr(BF00)def /ct_Type1FontTemplate 14 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0]def /FontBBox [-250 -250 1250 1250]def /Encoding ct_cHexEncoding def /PaintType 0 def currentdict end def /BaseFontTemplate 11 dict begin /FontMatrix [0.001 0 0 0.001 0 0]def /FontBBox [-250 -250 1250 1250]def /Encoding ct_cHexEncoding def /BuildChar/ct_BuildCharIncremental load def ct_Clone? { /FontType 3 def /ct_ShowCharString/ct_Type3ShowCharString load def /ct_dfSetCacheProc/ct_CloneSetCacheProc load def /ct_SyntheticBold false def /ct_StrokeWidth 1 def } { /FontType 4 def /Private 1 dict dup/lenIV 4 put def /CharStrings 1 dict dup/.notdefput def /PaintType 0 def /ct_ShowCharString/ct_Type4ShowCharString load def } ifelse /ct_str1 1 string def currentdict end def /BaseFontDictSize BaseFontTemplate length 5 add def /ct_matrixeq { true 0 1 5 { dup 4 index exch get exch 3 index exch get eq and dup not {exit} if } for exch pop exch pop }bind def /ct_makeocf { 15 dict begin exch/WMode exch def exch/FontName exch def /FontType 0 def /FMapType 2 def dup/FontMatrix known {dup/FontMatrix get/FontMatrix exch def} {/FontMatrix matrix def} ifelse /bfCount 1 index/CIDCount get 256 idiv 1 add dup 256 gt{pop 256}if def /Encoding 256 array 0 1 bfCount 1 sub{2 copy dup put pop}for bfCount 1 255{2 copy bfCount put pop}for def /FDepVector bfCount dup 256 lt{1 add}if array def BaseFontTemplate BaseFontDictSize dict copy begin /CIDFont exch def CIDFont/FontBBox known {CIDFont/FontBBox get/FontBBox exch def} if CIDFont/CDevProc known {CIDFont/CDevProc get/CDevProc exch def} if currentdict end BaseFontNameStr 3(0)putinterval 0 1 bfCount dup 256 eq{1 sub}if { FDepVector exch 2 index BaseFontDictSize dict copy begin dup/CIDFirstByte exch 256 mul def FontType 3 eq {/ct_FDDict 2 dict def} if currentdict end 1 index 16 BaseFontNameStr 2 2 getinterval cvrs pop BaseFontNameStr exch definefont put } for ct_Clone? {/Widths 1 index/CIDFont get/GlyphDirectory get length dict def} if FontName currentdict end definefont ct_Clone? { gsave dup 1000 scalefont setfont ct_BuildCharDict begin /usewidths? false def currentfont/Widths get begin exch/CIDFont get/GlyphDirectory get { pop dup charcode exch 1 index 0 2 index 256 idiv put 1 index exch 1 exch 256 mod put stringwidth 2 array astore def } forall end /usewidths? true def end grestore } {exch pop} ifelse }bind def currentglobal true setglobal /ct_ComposeFont { ct_UseNativeCapability? { 2 index/CMap ct_resourcestatus {pop pop exch pop} { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CMapName 3 index def /CMapVersion 1.000 def /CMapType 1 def exch/WMode exch def /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering CMapName ct_mkocfStr100 cvs (Adobe-)search { pop pop (-)search { dup length string copy exch pop exch pop } {pop(Identity)} ifelse } {pop (Identity)} ifelse def /Supplement 0 def end def 1 begincodespacerange <0000> endcodespacerange 1 begincidrange <0000>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } ifelse composefont } { 3 2 roll pop 0 get/CIDFont findresource ct_makeocf } ifelse }bind def setglobal /ct_MakeIdentity { ct_UseNativeCapability? { 1 index/CMap ct_resourcestatus {pop pop} { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CMapName 2 index def /CMapVersion 1.000 def /CMapType 1 def /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering CMapName ct_mkocfStr100 cvs (Adobe-)search { pop pop (-)search {dup length string copy exch pop exch pop} {pop(Identity)} ifelse } {pop(Identity)} ifelse def /Supplement 0 def end def 1 begincodespacerange <0000> endcodespacerange 1 begincidrange <0000>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } ifelse composefont } { exch pop 0 get/CIDFont findresource ct_makeocf } ifelse }bind def currentdict readonly pop end end %%EndResource setglobal %%BeginResource: procset Adobe_CoolType_Utility_T42 1.0 0 %%Copyright: Copyright 1987-2004 Adobe Systems Incorporated. %%Version: 1.0 0 userdict/ct_T42Dict 15 dict put ct_T42Dict begin /Is2015? { version cvi 2015 ge }bind def /AllocGlyphStorage { Is2015? { pop } { {string}forall }ifelse }bind def /Type42DictBegin { 25 dict begin /FontName exch def /CharStrings 256 dict begin /.notdef 0 def currentdict end def /Encoding exch def /PaintType 0 def /FontType 42 def /FontMatrix[1 0 0 1 0 0]def 4 array astore cvx/FontBBox exch def /sfnts }bind def /Type42DictEnd { currentdict dup/FontName get exch definefont end ct_T42Dict exch dup/FontName get exch put }bind def /RD{string currentfile exch readstring pop}executeonly def /PrepFor2015 { Is2015? { /GlyphDirectory 16 dict def sfnts 0 get dup 2 index (glyx) putinterval 2 index (locx) putinterval pop pop } { pop pop }ifelse }bind def /AddT42Char { Is2015? { /GlyphDirectory get begin def end pop pop } { /sfnts get 4 index get 3 index 2 index putinterval pop pop pop pop }ifelse }bind def /T0AddT42Mtx2 { /CIDFont findresource/Metrics2 get begin def end }bind def end %%EndResource currentglobal true setglobal %%BeginFile: MMFauxFont.prc %%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. %%All Rights Reserved. userdict /ct_EuroDict 10 dict put ct_EuroDict begin /ct_CopyFont { { 1 index /FID ne {def} {pop pop} ifelse} forall } def /ct_GetGlyphOutline { gsave initmatrix newpath exch findfont dup length 1 add dict begin ct_CopyFont /Encoding Encoding dup length array copy dup 4 -1 roll 0 exch put def currentdict end /ct_EuroFont exch definefont 1000 scalefont setfont 0 0 moveto [ <00> stringwidth <00> false charpath pathbbox [ {/m cvx} {/l cvx} {/c cvx} {/cp cvx} pathforall grestore counttomark 8 add } def /ct_MakeGlyphProc { ] cvx /ct_PSBuildGlyph cvx ] cvx } def /ct_PSBuildGlyph { gsave 8 -1 roll pop 7 1 roll 6 -2 roll ct_FontMatrix transform 6 2 roll 4 -2 roll ct_FontMatrix transform 4 2 roll ct_FontMatrix transform currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse dup 9 1 roll { currentdict /StrokeWidth 2 copy known { get 2 div 0 ct_FontMatrix dtransform pop 5 1 roll 4 -1 roll 4 index sub 4 1 roll 3 -1 roll 4 index sub 3 1 roll exch 4 index add exch 4 index add 5 -1 roll pop } { pop pop } ifelse } if setcachedevice ct_FontMatrix concat ct_PSPathOps begin exec end { currentdict /StrokeWidth 2 copy known { get } { pop pop 0 } ifelse setlinewidth stroke } { fill } ifelse grestore } def /ct_PSPathOps 4 dict dup begin /m {moveto} def /l {lineto} def /c {curveto} def /cp {closepath} def end def /ct_matrix1000 [1000 0 0 1000 0 0] def /ct_AddGlyphProc { 2 index findfont dup length 4 add dict begin ct_CopyFont /CharStrings CharStrings dup length 1 add dict copy begin 3 1 roll def currentdict end def /ct_FontMatrix ct_matrix1000 FontMatrix matrix concatmatrix def /ct_PSBuildGlyph /ct_PSBuildGlyph load def /ct_PSPathOps /ct_PSPathOps load def currentdict end definefont pop } def systemdict /languagelevel known { /ct_AddGlyphToPrinterFont { 2 copy ct_GetGlyphOutline 3 add -1 roll restore ct_MakeGlyphProc ct_AddGlyphProc } def } { /ct_AddGlyphToPrinterFont { pop pop restore Adobe_CTFauxDict /$$$FONTNAME get /Euro Adobe_CTFauxDict /$$$SUBSTITUTEBASE get ct_EuroDict exch get ct_AddGlyphProc } def } ifelse /AdobeSansMM { 556 0 24 -19 541 703 { 541 628 m 510 669 442 703 354 703 c 201 703 117 607 101 444 c 50 444 l 25 372 l 97 372 l 97 301 l 49 301 l 24 229 l 103 229 l 124 67 209 -19 350 -19 c 435 -19 501 25 509 32 c 509 131 l 492 105 417 60 343 60 c 267 60 204 127 197 229 c 406 229 l 430 301 l 191 301 l 191 372 l 455 372 l 479 444 l 194 444 l 201 531 245 624 348 624 c 433 624 484 583 509 534 c cp 556 0 m } ct_PSBuildGlyph } def /AdobeSerifMM { 500 0 10 -12 484 692 { 347 298 m 171 298 l 170 310 170 322 170 335 c 170 362 l 362 362 l 374 403 l 172 403 l 184 580 244 642 308 642 c 380 642 434 574 457 457 c 481 462 l 474 691 l 449 691 l 433 670 429 657 410 657 c 394 657 360 692 299 692 c 204 692 94 604 73 403 c 22 403 l 10 362 l 70 362 l 69 352 69 341 69 330 c 69 319 69 308 70 298 c 22 298 l 10 257 l 73 257 l 97 57 216 -12 295 -12 c 364 -12 427 25 484 123 c 458 142 l 425 101 384 37 316 37 c 256 37 189 84 173 257 c 335 257 l cp 500 0 m } ct_PSBuildGlyph } def end %%EndFile setglobal Adobe_CoolType_Core begin /$Oblique SetSubstituteStrategy end %%BeginResource: procset Adobe_AGM_Image 1.0 0 +%%Version: 1.0 0 +%%Copyright: Copyright(C)2000-2006 Adobe Systems, Inc. All Rights Reserved. +systemdict/setpacking known +{ + currentpacking + true setpacking +}if +userdict/Adobe_AGM_Image 71 dict dup begin put +/Adobe_AGM_Image_Id/Adobe_AGM_Image_1.0_0 def +/nd{ + null def +}bind def +/AGMIMG_&image nd +/AGMIMG_&colorimage nd +/AGMIMG_&imagemask nd +/AGMIMG_mbuf()def +/AGMIMG_ybuf()def +/AGMIMG_kbuf()def +/AGMIMG_c 0 def +/AGMIMG_m 0 def +/AGMIMG_y 0 def +/AGMIMG_k 0 def +/AGMIMG_tmp nd +/AGMIMG_imagestring0 nd +/AGMIMG_imagestring1 nd +/AGMIMG_imagestring2 nd +/AGMIMG_imagestring3 nd +/AGMIMG_imagestring4 nd +/AGMIMG_imagestring5 nd +/AGMIMG_cnt nd +/AGMIMG_fsave nd +/AGMIMG_colorAry nd +/AGMIMG_override nd +/AGMIMG_name nd +/AGMIMG_maskSource nd +/AGMIMG_flushfilters nd +/invert_image_samples nd +/knockout_image_samples nd +/img nd +/sepimg nd +/devnimg nd +/idximg nd +/ds +{ + Adobe_AGM_Core begin + Adobe_AGM_Image begin + /AGMIMG_&image systemdict/image get def + /AGMIMG_&imagemask systemdict/imagemask get def + /colorimage where{ + pop + /AGMIMG_&colorimage/colorimage ldf + }if + end + end +}def +/ps +{ + Adobe_AGM_Image begin + /AGMIMG_ccimage_exists{/customcolorimage where + { + pop + /Adobe_AGM_OnHost_Seps where + { + pop false + }{ + /Adobe_AGM_InRip_Seps where + { + pop false + }{ + true + }ifelse + }ifelse + }{ + false + }ifelse + }bdf + level2{ + /invert_image_samples + { + Adobe_AGM_Image/AGMIMG_tmp Decode length ddf + /Decode[Decode 1 get Decode 0 get]def + }def + /knockout_image_samples + { + Operator/imagemask ne{ + /Decode[1 1]def + }if + }def + }{ + /invert_image_samples + { + {1 exch sub}currenttransfer addprocs settransfer + }def + /knockout_image_samples + { + {pop 1}currenttransfer addprocs settransfer + }def + }ifelse + /img/imageormask ldf + /sepimg/sep_imageormask ldf + /devnimg/devn_imageormask ldf + /idximg/indexed_imageormask ldf + /_ctype 7 def + currentdict{ + dup xcheck 1 index type dup/arraytype eq exch/packedarraytype eq or and{ + bind + }if + def + }forall +}def +/pt +{ + end +}def +/dt +{ +}def +/AGMIMG_flushfilters +{ + dup type/arraytype ne + {1 array astore}if + dup 0 get currentfile ne + {dup 0 get flushfile}if + { + dup type/filetype eq + { + dup status 1 index currentfile ne and + {closefile} + {pop} + ifelse + }{pop}ifelse + }forall +}def +/AGMIMG_init_common +{ + currentdict/T known{/ImageType/T ldf currentdict/T undef}if + currentdict/W known{/Width/W ldf currentdict/W undef}if + currentdict/H known{/Height/H ldf currentdict/H undef}if + currentdict/M known{/ImageMatrix/M ldf currentdict/M undef}if + currentdict/BC known{/BitsPerComponent/BC ldf currentdict/BC undef}if + currentdict/D known{/Decode/D ldf currentdict/D undef}if + currentdict/DS known{/DataSource/DS ldf currentdict/DS undef}if + currentdict/O known{ + /Operator/O load 1 eq{ + /imagemask + }{ + /O load 2 eq{ + /image + }{ + /colorimage + }ifelse + }ifelse + def + currentdict/O undef + }if + currentdict/HSCI known{/HostSepColorImage/HSCI ldf currentdict/HSCI undef}if + currentdict/MD known{/MultipleDataSources/MD ldf currentdict/MD undef}if + currentdict/I known{/Interpolate/I ldf currentdict/I undef}if + currentdict/SI known{/SkipImageProc/SI ldf currentdict/SI undef}if + /DataSource load xcheck not{ + DataSource type/arraytype eq{ + DataSource 0 get type/filetype eq{ + /_Filters DataSource def + currentdict/MultipleDataSources known not{ + /DataSource DataSource dup length 1 sub get def + }if + }if + }if + currentdict/MultipleDataSources known not{ + /MultipleDataSources DataSource type/arraytype eq{ + DataSource length 1 gt + } + {false}ifelse def + }if + }if + /NComponents Decode length 2 div def + currentdict/SkipImageProc known not{/SkipImageProc{false}def}if +}bdf +/imageormask_sys +{ + begin + AGMIMG_init_common + save mark + level2{ + currentdict + Operator/imagemask eq{ + AGMIMG_&imagemask + }{ + use_mask{ + process_mask AGMIMG_&image + }{ + AGMIMG_&image + }ifelse + }ifelse + }{ + Width Height + Operator/imagemask eq{ + Decode 0 get 1 eq Decode 1 get 0 eq and + ImageMatrix/DataSource load + AGMIMG_&imagemask + }{ + BitsPerComponent ImageMatrix/DataSource load + AGMIMG_&image + }ifelse + }ifelse + currentdict/_Filters known{_Filters AGMIMG_flushfilters}if + cleartomark restore + end +}def +/overprint_plate +{ + currentoverprint{ + 0 get dup type/nametype eq{ + dup/DeviceGray eq{ + pop AGMCORE_black_plate not + }{ + /DeviceCMYK eq{ + AGMCORE_is_cmyk_sep not + }if + }ifelse + }{ + false exch + { + AGMOHS_sepink eq or + }forall + not + }ifelse + }{ + pop false + }ifelse +}def +/process_mask +{ + level3{ + dup begin + /ImageType 1 def + end + 4 dict begin + /DataDict exch def + /ImageType 3 def + /InterleaveType 3 def + /MaskDict 9 dict begin + /ImageType 1 def + /Width DataDict dup/MaskWidth known{/MaskWidth}{/Width}ifelse get def + /Height DataDict dup/MaskHeight known{/MaskHeight}{/Height}ifelse get def + /ImageMatrix[Width 0 0 Height neg 0 Height]def + /NComponents 1 def + /BitsPerComponent 1 def + /Decode DataDict dup/MaskD known{/MaskD}{[1 0]}ifelse get def + /DataSource Adobe_AGM_Core/AGMIMG_maskSource get def + currentdict end def + currentdict end + }if +}def +/use_mask +{ + dup/Mask known {dup/Mask get}{false}ifelse +}def +/imageormask +{ + begin + AGMIMG_init_common + SkipImageProc{ + currentdict consumeimagedata + } + { + save mark + level2 AGMCORE_host_sep not and{ + currentdict + Operator/imagemask eq DeviceN_PS2 not and{ + imagemask + }{ + AGMCORE_in_rip_sep currentoverprint and currentcolorspace 0 get/DeviceGray eq and{ + [/Separation/Black/DeviceGray{}]setcolorspace + /Decode[Decode 1 get Decode 0 get]def + }if + use_mask{ + process_mask image + }{ + DeviceN_NoneName DeviceN_PS2 Indexed_DeviceN level3 not and or or AGMCORE_in_rip_sep and + { + Names convert_to_process not{ + 2 dict begin + /imageDict xdf + /names_index 0 def + gsave + imageDict write_image_file{ + Names{ + dup(None)ne{ + [/Separation 3 -1 roll/DeviceGray{1 exch sub}]setcolorspace + Operator imageDict read_image_file + names_index 0 eq{true setoverprint}if + /names_index names_index 1 add def + }{ + pop + }ifelse + }forall + close_image_file + }if + grestore + end + }{ + Operator/imagemask eq{ + imagemask + }{ + image + }ifelse + }ifelse + }{ + Operator/imagemask eq{ + imagemask + }{ + image + }ifelse + }ifelse + }ifelse + }ifelse + }{ + Width Height + Operator/imagemask eq{ + Decode 0 get 1 eq Decode 1 get 0 eq and + ImageMatrix/DataSource load + /Adobe_AGM_OnHost_Seps where{ + pop imagemask + }{ + currentgray 1 ne{ + currentdict imageormask_sys + }{ + currentoverprint not{ + 1 AGMCORE_&setgray + currentdict imageormask_sys + }{ + currentdict ignoreimagedata + }ifelse + }ifelse + }ifelse + }{ + BitsPerComponent ImageMatrix + MultipleDataSources{ + 0 1 NComponents 1 sub{ + DataSource exch get + }for + }{ + /DataSource load + }ifelse + Operator/colorimage eq{ + AGMCORE_host_sep{ + MultipleDataSources level2 or NComponents 4 eq and{ + AGMCORE_is_cmyk_sep{ + MultipleDataSources{ + /DataSource DataSource 0 get xcheck + { + [ + DataSource 0 get/exec cvx + DataSource 1 get/exec cvx + DataSource 2 get/exec cvx + DataSource 3 get/exec cvx + /AGMCORE_get_ink_data cvx + ]cvx + }{ + DataSource aload pop AGMCORE_get_ink_data + }ifelse def + }{ + /DataSource + Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul + /DataSource load + filter_cmyk 0()/SubFileDecode filter def + }ifelse + /Decode[Decode 0 get Decode 1 get]def + /MultipleDataSources false def + /NComponents 1 def + /Operator/image def + invert_image_samples + 1 AGMCORE_&setgray + currentdict imageormask_sys + }{ + currentoverprint not Operator/imagemask eq and{ + 1 AGMCORE_&setgray + currentdict imageormask_sys + }{ + currentdict ignoreimagedata + }ifelse + }ifelse + }{ + MultipleDataSources NComponents AGMIMG_&colorimage + }ifelse + }{ + true NComponents colorimage + }ifelse + }{ + Operator/image eq{ + AGMCORE_host_sep{ + /DoImage true def + currentdict/HostSepColorImage known{HostSepColorImage not}{false}ifelse + { + AGMCORE_black_plate not Operator/imagemask ne and{ + /DoImage false def + currentdict ignoreimagedata + }if + }if + 1 AGMCORE_&setgray + DoImage + {currentdict imageormask_sys}if + }{ + use_mask{ + process_mask image + }{ + image + }ifelse + }ifelse + }{ + Operator/knockout eq{ + pop pop pop pop pop + currentcolorspace overprint_plate not{ + knockout_unitsq + }if + }if + }ifelse + }ifelse + }ifelse + }ifelse + cleartomark restore + }ifelse + currentdict/_Filters known{_Filters AGMIMG_flushfilters}if + end +}def +/sep_imageormask +{ + /sep_colorspace_dict AGMCORE_gget begin + CSA map_csa + begin + AGMIMG_init_common + SkipImageProc{ + currentdict consumeimagedata + }{ + save mark + AGMCORE_avoid_L2_sep_space{ + /Decode[Decode 0 get 255 mul Decode 1 get 255 mul]def + }if + AGMIMG_ccimage_exists + MappedCSA 0 get/DeviceCMYK eq and + currentdict/Components known and + Name()ne and + Name(All)ne and + Operator/image eq and + AGMCORE_producing_seps not and + level2 not and + { + Width Height BitsPerComponent ImageMatrix + [ + /DataSource load/exec cvx + { + 0 1 2 index length 1 sub{ + 1 index exch + 2 copy get 255 xor put + }for + }/exec cvx + ]cvx bind + MappedCSA 0 get/DeviceCMYK eq{ + Components aload pop + }{ + 0 0 0 Components aload pop 1 exch sub + }ifelse + Name findcmykcustomcolor + customcolorimage + }{ + AGMCORE_producing_seps not{ + level2{ + //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne AGMCORE_avoid_L2_sep_space not and currentcolorspace 0 get/Separation ne and{ + [/Separation Name MappedCSA sep_proc_name exch dup 0 get 15 string cvs(/Device)anchorsearch{pop pop 0 get}{pop}ifelse exch load]setcolorspace_opt + /sep_tint AGMCORE_gget setcolor + }if + currentdict imageormask + }{ + currentdict + Operator/imagemask eq{ + imageormask + }{ + sep_imageormask_lev1 + }ifelse + }ifelse + }{ + AGMCORE_host_sep{ + Operator/knockout eq{ + currentdict/ImageMatrix get concat + knockout_unitsq + }{ + currentgray 1 ne{ + AGMCORE_is_cmyk_sep Name(All)ne and{ + level2{ + Name AGMCORE_IsSeparationAProcessColor + { + Operator/imagemask eq{ + //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{ + /sep_tint AGMCORE_gget 1 exch sub AGMCORE_&setcolor + }if + }{ + invert_image_samples + }ifelse + }{ + //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{ + [/Separation Name[/DeviceGray] + { + sep_colorspace_proc AGMCORE_get_ink_data + 1 exch sub + }bind + ]AGMCORE_&setcolorspace + /sep_tint AGMCORE_gget AGMCORE_&setcolor + }if + }ifelse + currentdict imageormask_sys + }{ + currentdict + Operator/imagemask eq{ + imageormask_sys + }{ + sep_image_lev1_sep + }ifelse + }ifelse + }{ + Operator/imagemask ne{ + invert_image_samples + }if + currentdict imageormask_sys + }ifelse + }{ + currentoverprint not Name(All)eq or Operator/imagemask eq and{ + currentdict imageormask_sys + }{ + currentoverprint not + { + gsave + knockout_unitsq + grestore + }if + currentdict consumeimagedata + }ifelse + }ifelse + }ifelse + }{ + //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{ + currentcolorspace 0 get/Separation ne{ + [/Separation Name MappedCSA sep_proc_name exch 0 get exch load]setcolorspace_opt + /sep_tint AGMCORE_gget setcolor + }if + }if + currentoverprint + MappedCSA 0 get/DeviceCMYK eq and + Name AGMCORE_IsSeparationAProcessColor not and + //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{Name inRip_spot_has_ink not and}{false}ifelse + Name(All)ne and{ + imageormask_l2_overprint + }{ + currentdict imageormask + }ifelse + }ifelse + }ifelse + }ifelse + cleartomark restore + }ifelse + currentdict/_Filters known{_Filters AGMIMG_flushfilters}if + end + end +}def +/colorSpaceElemCnt +{ + mark currentcolor counttomark dup 2 add 1 roll cleartomark +}bdf +/devn_sep_datasource +{ + 1 dict begin + /dataSource xdf + [ + 0 1 dataSource length 1 sub{ + dup currentdict/dataSource get/exch cvx/get cvx/exec cvx + /exch cvx names_index/ne cvx[/pop cvx]cvx/if cvx + }for + ]cvx bind + end +}bdf +/devn_alt_datasource +{ + 11 dict begin + /convProc xdf + /origcolorSpaceElemCnt xdf + /origMultipleDataSources xdf + /origBitsPerComponent xdf + /origDecode xdf + /origDataSource xdf + /dsCnt origMultipleDataSources{origDataSource length}{1}ifelse def + /DataSource origMultipleDataSources + { + [ + BitsPerComponent 8 idiv origDecode length 2 idiv mul string + 0 1 origDecode length 2 idiv 1 sub + { + dup 7 mul 1 add index exch dup BitsPerComponent 8 idiv mul exch + origDataSource exch get 0()/SubFileDecode filter + BitsPerComponent 8 idiv string/readstring cvx/pop cvx/putinterval cvx + }for + ]bind cvx + }{origDataSource}ifelse 0()/SubFileDecode filter def + [ + origcolorSpaceElemCnt string + 0 2 origDecode length 2 sub + { + dup origDecode exch get dup 3 -1 roll 1 add origDecode exch get exch sub 2 BitsPerComponent exp 1 sub div + 1 BitsPerComponent 8 idiv{DataSource/read cvx/not cvx{0}/if cvx/mul cvx}repeat/mul cvx/add cvx + }for + /convProc load/exec cvx + origcolorSpaceElemCnt 1 sub -1 0 + { + /dup cvx 2/add cvx/index cvx + 3 1/roll cvx/exch cvx 255/mul cvx/cvi cvx/put cvx + }for + ]bind cvx 0()/SubFileDecode filter + end +}bdf +/devn_imageormask +{ + /devicen_colorspace_dict AGMCORE_gget begin + CSA map_csa + 2 dict begin + dup + /srcDataStrs[3 -1 roll begin + AGMIMG_init_common + currentdict/MultipleDataSources known{MultipleDataSources{DataSource length}{1}ifelse}{1}ifelse + { + Width Decode length 2 div mul cvi + { + dup 65535 gt{1 add 2 div cvi}{exit}ifelse + }loop + string + }repeat + end]def + /dstDataStr srcDataStrs 0 get length string def + begin + AGMIMG_init_common + SkipImageProc{ + currentdict consumeimagedata + }{ + save mark + AGMCORE_producing_seps not{ + level3 not{ + Operator/imagemask ne{ + /DataSource[[ + DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse + colorSpaceElemCnt/devicen_colorspace_dict AGMCORE_gget/TintTransform get + devn_alt_datasource 1/string cvx/readstring cvx/pop cvx]cvx colorSpaceElemCnt 1 sub{dup}repeat]def + /MultipleDataSources true def + /Decode colorSpaceElemCnt[exch{0 1}repeat]def + }if + }if + currentdict imageormask + }{ + AGMCORE_host_sep{ + Names convert_to_process{ + CSA get_csa_by_name 0 get/DeviceCMYK eq{ + /DataSource + Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul + DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse + 4/devicen_colorspace_dict AGMCORE_gget/TintTransform get + devn_alt_datasource + filter_cmyk 0()/SubFileDecode filter def + /MultipleDataSources false def + /Decode[1 0]def + /DeviceGray setcolorspace + currentdict imageormask_sys + }{ + AGMCORE_report_unsupported_color_space + AGMCORE_black_plate{ + /DataSource + DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse + CSA get_csa_by_name 0 get/DeviceRGB eq{3}{1}ifelse/devicen_colorspace_dict AGMCORE_gget/TintTransform get + devn_alt_datasource + /MultipleDataSources false def + /Decode colorSpaceElemCnt[exch{0 1}repeat]def + currentdict imageormask_sys + }{ + gsave + knockout_unitsq + grestore + currentdict consumeimagedata + }ifelse + }ifelse + } + { + /devicen_colorspace_dict AGMCORE_gget/names_index known{ + Operator/imagemask ne{ + MultipleDataSources{ + /DataSource[DataSource devn_sep_datasource/exec cvx]cvx def + /MultipleDataSources false def + }{ + /DataSource/DataSource load dstDataStr srcDataStrs 0 get filter_devn def + }ifelse + invert_image_samples + }if + currentdict imageormask_sys + }{ + currentoverprint not Operator/imagemask eq and{ + currentdict imageormask_sys + }{ + currentoverprint not + { + gsave + knockout_unitsq + grestore + }if + currentdict consumeimagedata + }ifelse + }ifelse + }ifelse + }{ + currentdict imageormask + }ifelse + }ifelse + cleartomark restore + }ifelse + currentdict/_Filters known{_Filters AGMIMG_flushfilters}if + end + end + end +}def +/imageormask_l2_overprint +{ + currentdict + currentcmykcolor add add add 0 eq{ + currentdict consumeimagedata + }{ + level3{ + currentcmykcolor + /AGMIMG_k xdf + /AGMIMG_y xdf + /AGMIMG_m xdf + /AGMIMG_c xdf + Operator/imagemask eq{ + [/DeviceN[ + AGMIMG_c 0 ne{/Cyan}if + AGMIMG_m 0 ne{/Magenta}if + AGMIMG_y 0 ne{/Yellow}if + AGMIMG_k 0 ne{/Black}if + ]/DeviceCMYK{}]setcolorspace + AGMIMG_c 0 ne{AGMIMG_c}if + AGMIMG_m 0 ne{AGMIMG_m}if + AGMIMG_y 0 ne{AGMIMG_y}if + AGMIMG_k 0 ne{AGMIMG_k}if + setcolor + }{ + /Decode[Decode 0 get 255 mul Decode 1 get 255 mul]def + [/Indexed + [ + /DeviceN[ + AGMIMG_c 0 ne{/Cyan}if + AGMIMG_m 0 ne{/Magenta}if + AGMIMG_y 0 ne{/Yellow}if + AGMIMG_k 0 ne{/Black}if + ] + /DeviceCMYK{ + AGMIMG_k 0 eq{0}if + AGMIMG_y 0 eq{0 exch}if + AGMIMG_m 0 eq{0 3 1 roll}if + AGMIMG_c 0 eq{0 4 1 roll}if + } + ] + 255 + { + 255 div + mark exch + dup dup dup + AGMIMG_k 0 ne{ + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 1 roll pop pop pop + counttomark 1 roll + }{ + pop + }ifelse + AGMIMG_y 0 ne{ + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 2 roll pop pop pop + counttomark 1 roll + }{ + pop + }ifelse + AGMIMG_m 0 ne{ + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 3 roll pop pop pop + counttomark 1 roll + }{ + pop + }ifelse + AGMIMG_c 0 ne{ + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec pop pop pop + counttomark 1 roll + }{ + pop + }ifelse + counttomark 1 add -1 roll pop + } + ]setcolorspace + }ifelse + imageormask_sys + }{ + write_image_file{ + currentcmykcolor + 0 ne{ + [/Separation/Black/DeviceGray{}]setcolorspace + gsave + /Black + [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 1 roll pop pop pop 1 exch sub}/exec cvx] + cvx modify_halftone_xfer + Operator currentdict read_image_file + grestore + }if + 0 ne{ + [/Separation/Yellow/DeviceGray{}]setcolorspace + gsave + /Yellow + [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 2 roll pop pop pop 1 exch sub}/exec cvx] + cvx modify_halftone_xfer + Operator currentdict read_image_file + grestore + }if + 0 ne{ + [/Separation/Magenta/DeviceGray{}]setcolorspace + gsave + /Magenta + [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 3 roll pop pop pop 1 exch sub}/exec cvx] + cvx modify_halftone_xfer + Operator currentdict read_image_file + grestore + }if + 0 ne{ + [/Separation/Cyan/DeviceGray{}]setcolorspace + gsave + /Cyan + [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{pop pop pop 1 exch sub}/exec cvx] + cvx modify_halftone_xfer + Operator currentdict read_image_file + grestore + }if + close_image_file + }{ + imageormask + }ifelse + }ifelse + }ifelse +}def +/indexed_imageormask +{ + begin + AGMIMG_init_common + save mark + currentdict + AGMCORE_host_sep{ + Operator/knockout eq{ + /indexed_colorspace_dict AGMCORE_gget dup/CSA known{ + /CSA get get_csa_by_name + }{ + /Names get + }ifelse + overprint_plate not{ + knockout_unitsq + }if + }{ + Indexed_DeviceN{ + /devicen_colorspace_dict AGMCORE_gget dup/names_index known exch/Names get convert_to_process or{ + indexed_image_lev2_sep + }{ + currentoverprint not{ + knockout_unitsq + }if + currentdict consumeimagedata + }ifelse + }{ + AGMCORE_is_cmyk_sep{ + Operator/imagemask eq{ + imageormask_sys + }{ + level2{ + indexed_image_lev2_sep + }{ + indexed_image_lev1_sep + }ifelse + }ifelse + }{ + currentoverprint not{ + knockout_unitsq + }if + currentdict consumeimagedata + }ifelse + }ifelse + }ifelse + }{ + level2{ + Indexed_DeviceN{ + /indexed_colorspace_dict AGMCORE_gget begin + }{ + /indexed_colorspace_dict AGMCORE_gget dup null ne + { + begin + currentdict/CSDBase known{CSDBase/CSD get_res/MappedCSA get}{CSA}ifelse + get_csa_by_name 0 get/DeviceCMYK eq ps_level 3 ge and ps_version 3015.007 lt and + AGMCORE_in_rip_sep and{ + [/Indexed[/DeviceN[/Cyan/Magenta/Yellow/Black]/DeviceCMYK{}]HiVal Lookup] + setcolorspace + }if + end + } + {pop}ifelse + }ifelse + imageormask + Indexed_DeviceN{ + end + }if + }{ + Operator/imagemask eq{ + imageormask + }{ + indexed_imageormask_lev1 + }ifelse + }ifelse + }ifelse + cleartomark restore + currentdict/_Filters known{_Filters AGMIMG_flushfilters}if + end +}def +/indexed_image_lev2_sep +{ + /indexed_colorspace_dict AGMCORE_gget begin + begin + Indexed_DeviceN not{ + currentcolorspace + dup 1/DeviceGray put + dup 3 + currentcolorspace 2 get 1 add string + 0 1 2 3 AGMCORE_get_ink_data 4 currentcolorspace 3 get length 1 sub + { + dup 4 idiv exch currentcolorspace 3 get exch get 255 exch sub 2 index 3 1 roll put + }for + put setcolorspace + }if + currentdict + Operator/imagemask eq{ + AGMIMG_&imagemask + }{ + use_mask{ + process_mask AGMIMG_&image + }{ + AGMIMG_&image + }ifelse + }ifelse + end end +}def + /OPIimage + { + dup type/dicttype ne{ + 10 dict begin + /DataSource xdf + /ImageMatrix xdf + /BitsPerComponent xdf + /Height xdf + /Width xdf + /ImageType 1 def + /Decode[0 1 def] + currentdict + end + }if + dup begin + /NComponents 1 cdndf + /MultipleDataSources false cdndf + /SkipImageProc{false}cdndf + /Decode[ + 0 + currentcolorspace 0 get/Indexed eq{ + 2 BitsPerComponent exp 1 sub + }{ + 1 + }ifelse + ]cdndf + /Operator/image cdndf + end + /sep_colorspace_dict AGMCORE_gget null eq{ + imageormask + }{ + gsave + dup begin invert_image_samples end + sep_imageormask + grestore + }ifelse + }def +/cachemask_level2 +{ + 3 dict begin + /LZWEncode filter/WriteFilter xdf + /readBuffer 256 string def + /ReadFilter + currentfile + 0(%EndMask)/SubFileDecode filter + /ASCII85Decode filter + /RunLengthDecode filter + def + { + ReadFilter readBuffer readstring exch + WriteFilter exch writestring + not{exit}if + }loop + WriteFilter closefile + end +}def +/spot_alias +{ + /mapto_sep_imageormask + { + dup type/dicttype ne{ + 12 dict begin + /ImageType 1 def + /DataSource xdf + /ImageMatrix xdf + /BitsPerComponent xdf + /Height xdf + /Width xdf + /MultipleDataSources false def + }{ + begin + }ifelse + /Decode[/customcolor_tint AGMCORE_gget 0]def + /Operator/image def + /SkipImageProc{false}def + currentdict + end + sep_imageormask + }bdf + /customcolorimage + { + Adobe_AGM_Image/AGMIMG_colorAry xddf + /customcolor_tint AGMCORE_gget + << + /Name AGMIMG_colorAry 4 get + /CSA[/DeviceCMYK] + /TintMethod/Subtractive + /TintProc null + /MappedCSA null + /NComponents 4 + /Components[AGMIMG_colorAry aload pop pop] + >> + setsepcolorspace + mapto_sep_imageormask + }ndf + Adobe_AGM_Image/AGMIMG_&customcolorimage/customcolorimage load put + /customcolorimage + { + Adobe_AGM_Image/AGMIMG_override false put + current_spot_alias{dup 4 get map_alias}{false}ifelse + { + false set_spot_alias + /customcolor_tint AGMCORE_gget exch setsepcolorspace + pop + mapto_sep_imageormask + true set_spot_alias + }{ + //Adobe_AGM_Image/AGMIMG_&customcolorimage get exec + }ifelse + }bdf +}def +/snap_to_device +{ + 6 dict begin + matrix currentmatrix + dup 0 get 0 eq 1 index 3 get 0 eq and + 1 index 1 get 0 eq 2 index 2 get 0 eq and or exch pop + { + 1 1 dtransform 0 gt exch 0 gt/AGMIMG_xSign? exch def/AGMIMG_ySign? exch def + 0 0 transform + AGMIMG_ySign?{floor 0.1 sub}{ceiling 0.1 add}ifelse exch + AGMIMG_xSign?{floor 0.1 sub}{ceiling 0.1 add}ifelse exch + itransform/AGMIMG_llY exch def/AGMIMG_llX exch def + 1 1 transform + AGMIMG_ySign?{ceiling 0.1 add}{floor 0.1 sub}ifelse exch + AGMIMG_xSign?{ceiling 0.1 add}{floor 0.1 sub}ifelse exch + itransform/AGMIMG_urY exch def/AGMIMG_urX exch def + [AGMIMG_urX AGMIMG_llX sub 0 0 AGMIMG_urY AGMIMG_llY sub AGMIMG_llX AGMIMG_llY]concat + }{ + }ifelse + end +}def +level2 not{ + /colorbuf + { + 0 1 2 index length 1 sub{ + dup 2 index exch get + 255 exch sub + 2 index + 3 1 roll + put + }for + }def + /tint_image_to_color + { + begin + Width Height BitsPerComponent ImageMatrix + /DataSource load + end + Adobe_AGM_Image begin + /AGMIMG_mbuf 0 string def + /AGMIMG_ybuf 0 string def + /AGMIMG_kbuf 0 string def + { + colorbuf dup length AGMIMG_mbuf length ne + { + dup length dup dup + /AGMIMG_mbuf exch string def + /AGMIMG_ybuf exch string def + /AGMIMG_kbuf exch string def + }if + dup AGMIMG_mbuf copy AGMIMG_ybuf copy AGMIMG_kbuf copy pop + } + addprocs + {AGMIMG_mbuf}{AGMIMG_ybuf}{AGMIMG_kbuf}true 4 colorimage + end + }def + /sep_imageormask_lev1 + { + begin + MappedCSA 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or has_color not and{ + { + 255 mul round cvi GrayLookup exch get + }currenttransfer addprocs settransfer + currentdict imageormask + }{ + /sep_colorspace_dict AGMCORE_gget/Components known{ + MappedCSA 0 get/DeviceCMYK eq{ + Components aload pop + }{ + 0 0 0 Components aload pop 1 exch sub + }ifelse + Adobe_AGM_Image/AGMIMG_k xddf + Adobe_AGM_Image/AGMIMG_y xddf + Adobe_AGM_Image/AGMIMG_m xddf + Adobe_AGM_Image/AGMIMG_c xddf + AGMIMG_y 0.0 eq AGMIMG_m 0.0 eq and AGMIMG_c 0.0 eq and{ + {AGMIMG_k mul 1 exch sub}currenttransfer addprocs settransfer + currentdict imageormask + }{ + currentcolortransfer + {AGMIMG_k mul 1 exch sub}exch addprocs 4 1 roll + {AGMIMG_y mul 1 exch sub}exch addprocs 4 1 roll + {AGMIMG_m mul 1 exch sub}exch addprocs 4 1 roll + {AGMIMG_c mul 1 exch sub}exch addprocs 4 1 roll + setcolortransfer + currentdict tint_image_to_color + }ifelse + }{ + MappedCSA 0 get/DeviceGray eq{ + {255 mul round cvi ColorLookup exch get 0 get}currenttransfer addprocs settransfer + currentdict imageormask + }{ + MappedCSA 0 get/DeviceCMYK eq{ + currentcolortransfer + {255 mul round cvi ColorLookup exch get 3 get 1 exch sub}exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 2 get 1 exch sub}exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 1 get 1 exch sub}exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 0 get 1 exch sub}exch addprocs 4 1 roll + setcolortransfer + currentdict tint_image_to_color + }{ + currentcolortransfer + {pop 1}exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 2 get}exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 1 get}exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 0 get}exch addprocs 4 1 roll + setcolortransfer + currentdict tint_image_to_color + }ifelse + }ifelse + }ifelse + }ifelse + end + }def + /sep_image_lev1_sep + { + begin + /sep_colorspace_dict AGMCORE_gget/Components known{ + Components aload pop + Adobe_AGM_Image/AGMIMG_k xddf + Adobe_AGM_Image/AGMIMG_y xddf + Adobe_AGM_Image/AGMIMG_m xddf + Adobe_AGM_Image/AGMIMG_c xddf + {AGMIMG_c mul 1 exch sub} + {AGMIMG_m mul 1 exch sub} + {AGMIMG_y mul 1 exch sub} + {AGMIMG_k mul 1 exch sub} + }{ + {255 mul round cvi ColorLookup exch get 0 get 1 exch sub} + {255 mul round cvi ColorLookup exch get 1 get 1 exch sub} + {255 mul round cvi ColorLookup exch get 2 get 1 exch sub} + {255 mul round cvi ColorLookup exch get 3 get 1 exch sub} + }ifelse + AGMCORE_get_ink_data currenttransfer addprocs settransfer + currentdict imageormask_sys + end + }def + /indexed_imageormask_lev1 + { + /indexed_colorspace_dict AGMCORE_gget begin + begin + currentdict + MappedCSA 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or has_color not and{ + {HiVal mul round cvi GrayLookup exch get HiVal div}currenttransfer addprocs settransfer + imageormask + }{ + MappedCSA 0 get/DeviceGray eq{ + {HiVal mul round cvi Lookup exch get HiVal div}currenttransfer addprocs settransfer + imageormask + }{ + MappedCSA 0 get/DeviceCMYK eq{ + currentcolortransfer + {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll + {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll + {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll + {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll + setcolortransfer + tint_image_to_color + }{ + currentcolortransfer + {pop 1}exch addprocs 4 1 roll + {3 mul HiVal mul round cvi 2 add Lookup exch get HiVal div}exch addprocs 4 1 roll + {3 mul HiVal mul round cvi 1 add Lookup exch get HiVal div}exch addprocs 4 1 roll + {3 mul HiVal mul round cvi Lookup exch get HiVal div}exch addprocs 4 1 roll + setcolortransfer + tint_image_to_color + }ifelse + }ifelse + }ifelse + end end + }def + /indexed_image_lev1_sep + { + /indexed_colorspace_dict AGMCORE_gget begin + begin + {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub} + {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub} + {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub} + {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub} + AGMCORE_get_ink_data currenttransfer addprocs settransfer + currentdict imageormask_sys + end end + }def +}if +end +systemdict/setpacking known +{setpacking}if +%%EndResource +currentdict Adobe_AGM_Utils eq {end} if +%%EndProlog +%%BeginSetup +Adobe_AGM_Utils begin +2 2010 Adobe_AGM_Core/ds gx +Adobe_CoolType_Core/ds get exec Adobe_AGM_Image/ds gx +currentdict Adobe_AGM_Utils eq {end} if +%%EndSetup +%%Page: 1 1 +%%EndPageComments +%%BeginPageSetup +%ADOBeginClientInjection: PageSetup Start "AI11EPS" +%AI12_RMC_Transparency: Balance=75 RasterRes=300 GradRes=150 Text=0 Stroke=1 Clip=1 OP=0 +%ADOEndClientInjection: PageSetup Start "AI11EPS" +Adobe_AGM_Utils begin +Adobe_AGM_Core/ps gx +Adobe_AGM_Utils/capture_cpd gx +Adobe_CoolType_Core/ps get exec Adobe_AGM_Image/ps gx +%ADOBeginClientInjection: PageSetup End "AI11EPS" +/currentdistillerparams where {pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse { userdict /AI11_PDFMark5 /cleartomark load put userdict /AI11_ReadMetadata_PDFMark5 {flushfile cleartomark } bind put} { userdict /AI11_PDFMark5 /pdfmark load put userdict /AI11_ReadMetadata_PDFMark5 {/PUT pdfmark} bind put } ifelse [/NamespacePush AI11_PDFMark5 [/_objdef {ai_metadata_stream_123} /type /stream /OBJ AI11_PDFMark5 [{ai_metadata_stream_123} currentfile 0 (% &&end XMP packet marker&&) /SubFileDecode filter AI11_ReadMetadata_PDFMark5 + + + + application/postscript + + + Print + + + + + 2016-01-28T22:22:10+03:00 + 2016-01-28T22:22:10+03:00 + 2016-01-28T22:22:10+03:00 + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 256 + JPEG + /9j/4AAQSkZJRgABAgEC0ALQAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAC0AAAAAEA AQLQAAAAAQAB/+IMWElDQ19QUk9GSUxFAAEBAAAMSExpbm8CEAAAbW50clJHQiBYWVogB84AAgAJ AAYAMQAAYWNzcE1TRlQAAAAASUVDIHNSR0IAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1IUCAgAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARY3BydAAAAVAAAAAz ZGVzYwAAAYQAAABsd3RwdAAAAfAAAAAUYmtwdAAAAgQAAAAUclhZWgAAAhgAAAAUZ1hZWgAAAiwA AAAUYlhZWgAAAkAAAAAUZG1uZAAAAlQAAABwZG1kZAAAAsQAAACIdnVlZAAAA0wAAACGdmlldwAA A9QAAAAkbHVtaQAAA/gAAAAUbWVhcwAABAwAAAAkdGVjaAAABDAAAAAMclRSQwAABDwAAAgMZ1RS QwAABDwAAAgMYlRSQwAABDwAAAgMdGV4dAAAAABDb3B5cmlnaHQgKGMpIDE5OTggSGV3bGV0dC1Q YWNrYXJkIENvbXBhbnkAAGRlc2MAAAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAS c1JHQiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAFhZWiAAAAAAAADzUQABAAAAARbMWFlaIAAAAAAAAAAAAAAAAAAAAABYWVogAAAA AAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9kZXNj AAAAAAAAABZJRUMgaHR0cDovL3d3dy5pZWMuY2gAAAAAAAAAAAAAABZJRUMgaHR0cDovL3d3dy5p ZWMuY2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAA AAAAAAAuSUVDIDYxOTY2LTIuMSBEZWZhdWx0IFJHQiBjb2xvdXIgc3BhY2UgLSBzUkdCAAAAAAAA AAAAAAAuSUVDIDYxOTY2LTIuMSBEZWZhdWx0IFJHQiBjb2xvdXIgc3BhY2UgLSBzUkdCAAAAAAAA AAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBp biBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4g SUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2aWV3AAAAAAATpP4AFF8uABDP FAAD7cwABBMLAANcngAAAAFYWVogAAAAAABMCVYAUAAAAFcf521lYXMAAAAAAAAAAQAAAAAAAAAA AAAAAAAAAAAAAAKPAAAAAnNpZyAAAAAAQ1JUIGN1cnYAAAAAAAAEAAAAAAUACgAPABQAGQAeACMA KAAtADIANwA7AEAARQBKAE8AVABZAF4AYwBoAG0AcgB3AHwAgQCGAIsAkACVAJoAnwCkAKkArgCy ALcAvADBAMYAywDQANUA2wDgAOUA6wDwAPYA+wEBAQcBDQETARkBHwElASsBMgE4AT4BRQFMAVIB WQFgAWcBbgF1AXwBgwGLAZIBmgGhAakBsQG5AcEByQHRAdkB4QHpAfIB+gIDAgwCFAIdAiYCLwI4 AkECSwJUAl0CZwJxAnoChAKOApgCogKsArYCwQLLAtUC4ALrAvUDAAMLAxYDIQMtAzgDQwNPA1oD ZgNyA34DigOWA6IDrgO6A8cD0wPgA+wD+QQGBBMEIAQtBDsESARVBGMEcQR+BIwEmgSoBLYExATT BOEE8AT+BQ0FHAUrBToFSQVYBWcFdwWGBZYFpgW1BcUF1QXlBfYGBgYWBicGNwZIBlkGagZ7BowG nQavBsAG0QbjBvUHBwcZBysHPQdPB2EHdAeGB5kHrAe/B9IH5Qf4CAsIHwgyCEYIWghuCIIIlgiq CL4I0gjnCPsJEAklCToJTwlkCXkJjwmkCboJzwnlCfsKEQonCj0KVApqCoEKmAquCsUK3ArzCwsL Igs5C1ELaQuAC5gLsAvIC+EL+QwSDCoMQwxcDHUMjgynDMAM2QzzDQ0NJg1ADVoNdA2ODakNww3e DfgOEw4uDkkOZA5/DpsOtg7SDu4PCQ8lD0EPXg96D5YPsw/PD+wQCRAmEEMQYRB+EJsQuRDXEPUR ExExEU8RbRGMEaoRyRHoEgcSJhJFEmQShBKjEsMS4xMDEyMTQxNjE4MTpBPFE+UUBhQnFEkUahSL FK0UzhTwFRIVNBVWFXgVmxW9FeAWAxYmFkkWbBaPFrIW1hb6Fx0XQRdlF4kXrhfSF/cYGxhAGGUY ihivGNUY+hkgGUUZaxmRGbcZ3RoEGioaURp3Gp4axRrsGxQbOxtjG4obshvaHAIcKhxSHHscoxzM HPUdHh1HHXAdmR3DHeweFh5AHmoelB6+HukfEx8+H2kflB+/H+ogFSBBIGwgmCDEIPAhHCFIIXUh oSHOIfsiJyJVIoIiryLdIwojOCNmI5QjwiPwJB8kTSR8JKsk2iUJJTglaCWXJccl9yYnJlcmhya3 JugnGCdJJ3onqyfcKA0oPyhxKKIo1CkGKTgpaymdKdAqAio1KmgqmyrPKwIrNitpK50r0SwFLDks biyiLNctDC1BLXYtqy3hLhYuTC6CLrcu7i8kL1ovkS/HL/4wNTBsMKQw2zESMUoxgjG6MfIyKjJj Mpsy1DMNM0YzfzO4M/E0KzRlNJ402DUTNU01hzXCNf02NzZyNq426TckN2A3nDfXOBQ4UDiMOMg5 BTlCOX85vDn5OjY6dDqyOu87LTtrO6o76DwnPGU8pDzjPSI9YT2hPeA+ID5gPqA+4D8hP2E/oj/i QCNAZECmQOdBKUFqQaxB7kIwQnJCtUL3QzpDfUPARANER0SKRM5FEkVVRZpF3kYiRmdGq0bwRzVH e0fASAVIS0iRSNdJHUljSalJ8Eo3Sn1KxEsMS1NLmkviTCpMcky6TQJNSk2TTdxOJU5uTrdPAE9J T5NP3VAnUHFQu1EGUVBRm1HmUjFSfFLHUxNTX1OqU/ZUQlSPVNtVKFV1VcJWD1ZcVqlW91dEV5JX 4FgvWH1Yy1kaWWlZuFoHWlZaplr1W0VblVvlXDVchlzWXSddeF3JXhpebF69Xw9fYV+zYAVgV2Cq YPxhT2GiYfViSWKcYvBjQ2OXY+tkQGSUZOllPWWSZedmPWaSZuhnPWeTZ+loP2iWaOxpQ2maafFq SGqfavdrT2una/9sV2yvbQhtYG25bhJua27Ebx5veG/RcCtwhnDgcTpxlXHwcktypnMBc11zuHQU dHB0zHUodYV14XY+dpt2+HdWd7N4EXhueMx5KnmJeed6RnqlewR7Y3vCfCF8gXzhfUF9oX4BfmJ+ wn8jf4R/5YBHgKiBCoFrgc2CMIKSgvSDV4O6hB2EgITjhUeFq4YOhnKG14c7h5+IBIhpiM6JM4mZ if6KZIrKizCLlov8jGOMyo0xjZiN/45mjs6PNo+ekAaQbpDWkT+RqJIRknqS45NNk7aUIJSKlPSV X5XJljSWn5cKl3WX4JhMmLiZJJmQmfyaaJrVm0Kbr5wcnImc951kndKeQJ6unx2fi5/6oGmg2KFH obaiJqKWowajdqPmpFakx6U4pammGqaLpv2nbqfgqFKoxKk3qamqHKqPqwKrdavprFys0K1Erbiu La6hrxavi7AAsHWw6rFgsdayS7LCszizrrQltJy1E7WKtgG2ebbwt2i34LhZuNG5SrnCuju6tbsu u6e8IbybvRW9j74KvoS+/796v/XAcMDswWfB48JfwtvDWMPUxFHEzsVLxcjGRsbDx0HHv8g9yLzJ Osm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc 1+DYZNjo2WzZ8dp22vvbgNwF3IrdEN2W3hzeot8p36/gNuC94UThzOJT4tvjY+Pr5HPk/OWE5g3m lucf56noMui86Ubp0Opb6uXrcOv77IbtEe2c7ijutO9A78zwWPDl8XLx//KM8xnzp/Q09ML1UPXe 9m32+/eK+Bn4qPk4+cf6V/rn+3f8B/yY/Sn9uv5L/tz/bf///+4ADkFkb2JlAGTAAAAAAf/bAIQA BgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoKDBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8f Hx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f Hx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwERAAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQF AwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMB AgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPBUtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdU ZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eX p7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUE BQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PS NeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG 1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/a AAwDAQACEQMRAD8A874q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYqyTyV5KuPNVxfRRX1rY/UbWW6ZrqWKLl6UTyAASOnw/B8b9EG5xVL 28v3AYj63ZGhpUXcJH/EsVbby9cqaNdWQNAf96oehFR+1irh5duijOLqy4qQCfrUPetP2vbFWh5f uCQBdWVT/wAvUP8AzVirm8vXKsVN1ZAg0P8ApUPb/ZYq2fL1yED/AFqy4kkA/WoeopX9r3xVNPK/ kC81/WYdMj1HT7dpan1HuoK0HXipdebewxVLbjy1cwTyQm909zGxUvHeQOhp3Vg1CMVWt5euVCk3 VlRhVf8ASoelSP5vbFXL5dumDFbqyPEcm/0qHpWn83viq39AXH/LXZf9JUP/ADVirbeXrlW4tdWQ P/MVD33/AJsVbHl65KF/rVlxBAJ+tQ9TWn7XtiqM0PyZdatrFnpq6hYQtdyrEJXuoKLyPgXFT4Cu 52xV2ueTLrSdYvNNbULCZrSVojKl1BRuJ8A5ofEV2O2KoM+XrkIH+tWXEkgH61D1FK/te+KtL5eu Wbit1ZE/8xUPbf8AmxVr9AXH/LXZf9JUP/NWKrm8u3ShS11ZDkOS/wClQ9K0/m9sVcvl65YMRdWV FFW/0qHpUD+b3xVdb+WrmeeOEXunoZGCh5LyBEFe7MWoBiqZeaPIF5oGszaZJqOn3DRUPqJdQVoe nJQ7cG9jiqVjy9clC/1qy4ggE/WoeprT9r2xVpfL1yzBRdWRJNB/pUPf/ZYq4+X7gEg3VlUf8vUP /NWKtny7dBFc3VlxYkA/Woe1K/te+KuXy9csaLdWRNCf96oegFT+1irS+X7gsB9bshU0qbuED/iW Kph518lXHlW4sYpb61vvr1rFdK1rLFLx9WJJCCI3f4fj+B+jjcYqxvFXYqmnl9mFxd0JFbK7Bp4G FsVSvFVa6/vV/wCMcf8AybXFV0X+8U/+tH/xtiqjH/eL8x+vFV1x/vRL/rt+vFVzf7yR/wDGST/i KYqjvLJK63bEGhHOhH/GNsVSvFVaf+6t/wDjGf8Ak42KrrX7Fx/xiP8AxJcVQ+Kq13/fn5L/AMRG KuX/AHkk/wCMkf8AxF8VVNKJGqWZBoRPHQ/7MYq7VSTql4SakzyVP+zOKqbf7yR/8ZJP+IpirrT+ /Hyb/iJxVRxVEXX2Lf8A4xD/AIk2KrYP7q4/4xj/AJOLiqjiqaeZiW1u5JNSeFSf+Ma4qgV/3kk/ 4yR/8RfFVtv/AL0Rf66/rxVbJ/eN8z+vFVaX/eKD/Wk/41xVba/3rf8AGOT/AJNtiqjiqaeYGY3F pUk0srQCvgIVxVK8Vdiqa+XmK3N0wpUWV11AI/uW7HFUB9al/lj/AORcf/NOKqt1dS+qvwx/3cf+ 64/99r/k4quiupPqc/wx/aj/AN1x/wCV/k4qpR3UvqL8MfUf7rj8f9XFW7i6l9eT4Y/tt/uuPx/1 cVXNdS/VI/hj/vJP91x/yp/k4qjfLdzIdat9o/2/91p/vtv8nFUt+tS/yx/8i4/+acVVZ7qX0rf4 Y/7s/wC64/8Afjf5OKrrW6k4XHwx/wB0f91x/wAy/wCTiqh9al/lj/5Fx/8ANOKqt3dS+ufhj6L/ ALrj/lH+Tirlupfqknwx/wB5H/uuP+V/8nFVTTLqT9JWnwx/30f+64/5x/k4q7U7qT9JXfwx/wB9 J/uuP+c/5OKqbXUv1SP4Y/7yT/dcf8qf5OKutLqX1x8MfRv91x/yn/JxVS+tS/yx/wDIuP8A5pxV XurqThb/AAx/3Q/3XH/M3+Tiq2C6l9K4+GP+7H+64/8Afi/5OKqX1qX+WP8A5Fx/804qmXmS5kGt XG0f7H+60/32v+TiqCW6l+qSfDH/AHkf+64/5X/ycVW291L68fwx/bX/AHXH4/6uKtSXUvqN8MfU /wC64/H/AFcVVZbqT6nB8Mf2pP8Adcf+T/k4qttbqX1W+GP+7k/3XH/vtv8AJxVS+tS/yx/8i4/+ acVR/mFi1zasaVNla9AAP7lewxVKsVdiqa+XQhuroOxVfqV1UgV/3S3aoxVBelZf7/b/AJF/83Yq q3UVn6i/v2/u4/8Adf8AxWv+Viq6KKz+pz/v2+1H/uv/AFv8rFVKOKy9Rf37dR/uv3/1sVbuIrL1 5P37fbb/AHX7/wCtiq5orP6pH+/b+8k/3X7J/lYqjfLcdn+mrek7E/H/ALr/AOK2/wArFUt9Ky/3 +3/Iv/m7FVWeKz9O3/ft/dn/AHX/AMWN/lYqutYrPhcfv2/uj/uv/KX/ACsVUPSsv9/t/wAi/wDm 7FVW7is/XP79ui/7r/yR/lYq5YrP6pJ+/b+8j/3X7P8A5WKqmmRWf6StP37f30f+6/8ALH+VirtT is/0ld/v2/vpP91/5Z/ysVU2is/qkf79v7yT/dfsn+VirrSKz9cfv26N/uv/ACT/AJWKqXpWX+/2 /wCRf/N2Kq91FZ8Lf9+390P91/5Tf5WKrYIrP07j9+392P8Adf8AxYv+Viql6Vl/v9v+Rf8Azdiq ZeZI7P8ATVxWdgfg/wB1/wDFa/5WKoJYrP6pJ+/b+8j/AN1+z/5WKrbeKy9eP9+321/3X7/62KtS RWXqN+/bqf8Adfv/AK2KqssVn9Tg/ft9qT/df+r/AJWKrbWKz9Rv37f3cn+6/wDitv8AKxVS9Ky/ 3+3/ACL/AObsVRvmIILq1CMWX6la0JFP90r2qcVSrFXYqmnl8E3F0AKn6ldf8mWxVLfTk/lP3HFV a6jk9VfhP93H2P8AvtcVXRRyfUp/hP2o+x/ysVWAMzQgQ8Cnwsy8queRPJqkitDx+GgoPGpKrVxH J68nwn7bdj44quaOT6pH8J/vJOx/lTFUb5bjk/TVv8J/b7H/AH22KpZ6cn8p+44qrTxyelb/AAn+ 7PY/78bFV1rHJwuPhP8AdHsf5lxVSIYxKno0ZWZjKOXJgQAFO/Gi02oK7mtdqKr7uOT1z8J6L2P8 oxVyxyfVJPhP95H2P8r4qv0uOT9JWnwn++j7H+cYq7VI5P0ld/Cf76Tsf5ziqxo5Pqkfwn+8k7H+ VMVdaRyeuPhPRux/lOKrAGETJ6NWZlYSnlyUAEFRvxo1d6iuwpTeqqrdRycLf4T/AHQ7H+ZsVWwR yelcfCf7sdj/AL8XFVH05P5T9xxVM/Mkcn6auPhP7HY/77XFUEscn1ST4T/eR9j/ACviq23jk9eP 4T9tex8cVbIZWmBh5l/hVm5VQ8geS0IFaDj8VRQ+NCFV8scn1KD4T9qTsf8AJxVbaxyeq3wn+7k7 H/fbYqo+nJ/KfuOKpl5gBFxagih+pWv/ACZXFUrxV2Kpp5eZluboqSCLK63G3+6WxVL/AKxcf79f /gjiqrdXE/qr+8f+7j/aP++1xVdFcT/Up/3j/aj/AGj/AJWKqUdxP6i/vH6j9o+OKrri4n9eT94/ 22/aPjirbXE/1SP94/8AeSftH+VMVR3lu4n/AE1b/vG/b/aP++2xVLPrFx/v1/8AgjiqrPcT+lb/ ALx/7s/tH/fjYqutbifhcfvH/uj+0f5lxVQ+sXH+/X/4I4qrXdxP65/eP0X9o/yjFWluJ/qkn7x/ 7yP9o/yviqppdxP+krT94399H+0f5xirtUuJ/wBJXf7xv76T9o/znFVNrif6pH+8f+8k/aP8qYq3 aXE/rj94/Rv2j/KcVUfrFx/v1/8AgjiqvdXE/C3/AHj/AN0P2j/M2KrYLif0rj94/wDdj9o/78XF VL6xcf79f/gjiqZ+ZLif9NXH7xv2P2j/AL7XFUCtxP8AVJP3j/3kf7R/lfFWre4n9eP94/21/aPj iq2S4n9Rv3j9T+0fHFVWW4n+pQfvH+1J+0f8nFVtrcT+q37x/wC7k/aP++2xVS+sXH+/X/4I4qmH mFma5tSxJJsrXc7/AO6VxVK8Vdiqa+XigubrmCV+pXVQDQ/3Ld6HFUBytP8Afcn/ACMX/mjFVW6a 09Vf3cn93H/uxf8Afa/5GKromtPqc/7uT7Uf+7B/lf5GKqUbWnqL+7k6j/di+P8AqYq3cNaevJ+7 k+23+7F8f9TFVzNafVI/3cn95J/uxf5U/wAjFUb5ba1/TVvSOT9v9sf77b/IxVLeVp/vuT/kYv8A zRiqrO1p6Vv+7k/uz/uxf9+N/kYqutWtOFx+7k/uj/uwfzL/AJGKqHK0/wB9yf8AIxf+aMVVbtrT 1z+7k6L/ALsX+Uf5GKuVrT6pJ+7k/vI/92L/ACv/AJGKqmmNafpK0/dyf30f+7B/OP8AIxV2ptaf pK7/AHcn99J/uwfzn/IxVTZrT6pH+7k/vJP92L/Kn+RirrRrT1x+7k6N/uxf5T/kYqpcrT/fcn/I xf8AmjFVe6a04W/7uT+6H+7B/M3+Riq2BrT0rj93J/dj/di/78X/ACMVUuVp/vuT/kYv/NGKpl5k a1/TVxWOT9j9sf77X/IxVBK1p9Uk/dyf3kf+7F/lf/IxVbbtaevH+7k+2v8AuxfH/UxVqRrT1G/d ydT/ALsXx/1MVVZWtPqcH7uT7Un+7B/k/wCRiq21a09Vv3cn93J/uxf99t/kYqpcrT/fcn/Ixf8A mjFUf5hKG5teAIX6la0BNT/cr3oMVSrFXYqynyB5X1nX7zUY9Mh9VrfT7p5Kmgr6DlVr/M/GgxVK j5Z1tSQbahGxHOP/AJqxVUufLetGQf6P/uuP9uP+Rf8AKxVdH5b1r6nOPq+5aP8Abj/yv8rFVKPy 3rXqL/o/cftx+P8ArYquuPLetevJ/o/7Tftx+P8ArYq23lvWvqsY+r/7sf8Abj8E/wArFU58j+R/ MmpeZLW2trUc6OWYunFV4EVNCTSpHbFUkn8qeYIJnhmtCksZKuheOoI6j7WKrpvLetenB/o/SM/t x/zt/lYqutfLetBLj/R+sR/bj/mX/KxVQ/w1rX/LN/w8f/NWKq115b1ozn/R+y/tx/yj/KxVpfLe tfVZB9X/AN2J+3H4P/lYqjPLnk3zFfa/p9pBa1lluIwtXSg+IEk0JNANzirvMfk3zFY6/qFpPa0l iuJA1HSh+IkEVINCNxiqDby3rX1WMfV/92P+3H4J/lYq3a+W9aE4/wBH7N+3H/Kf8rFVH/DWtf8A LN/w8f8AzViqvdeW9aKW/wDo/SIftx/zN/lYqth8t616c/8Ao/WMftx/zr/lYqtg8qeYJ5khhtC8 shCogeOpJ6D7WKp3548j+ZNN8yXVtc2o50QqwdOLLwAqKkGlQe2KpMvlvWvqsg+r/wC7E/bj8H/y sVat/LetevH/AKP+0v7cfj/rYqtk8t616jf6P3P7cfj/AK2KqsnlvWvqcA+r7hpP24/8n/KxVbbe W9aEh/0f/dcn7cf8jf5WKqY8s62xAFtUnYDnH/zViqa+f/K+s6BeadHqcPpNcafavHQ1FfQQstf5 k5UOKsWxV2Kpv5auJ4Lm9MMjRl9PvI3KmlUeBgyn2IxVKMVVrr+9X/jHH/ybXFV0X+8U/wDrR/8A G2KqMf8AeL8x+vFV1x/vRL/rt+vFVzf7yR/8ZJP+IpiqYeVJ5oPMFpNC5jlQuUdTQg+m3Q4qlOKq 0/8AdW//ABjP/JxsVXWv2Lj/AIxH/iS4qh8VVrv+/PyX/iIxVy/7ySf8ZI/+Iviqto8skWr2MsbF JI7iJkcbEMHBBGKu1iWSXV76WRi8klxKzudyWLkknFVFv95I/wDjJJ/xFMVdaf34+Tf8ROKqOKoi 6+xb/wDGIf8AEmxVbB/dXH/GMf8AJxcVUcVTbzXPNP5gu5pnMkrlC7sakn016nFUvX/eST/jJH/x F8VW2/8AvRF/rr+vFVsn943zP68VVpf94oP9aT/jXFVtr/et/wAY5P8Ak22KqOKpv5luJ57myM0j SFNPs40LGtESBQqj2AxVKMVdiqa+XmC3N0SoYfUrr4TWn9y3gRiqA9eL/lnj++T/AJqxVVup4vVX /R4/7uPvJ/vtf8rFV0U8f1Of/R4/tR95P8r/ACsVUo54vUX/AEePqO8nj/rYq3cTxevJ/o8f227y eP8ArYquaeL6pH/o8f8AeSd5P5U/ysVRvluaP9NW/wC4jH2+7/77b/KxVLfXi/5Z4/vk/wCasVVZ 54vSt/8AR4/7s95P9+N/lYqutZ4+Fx/o8f8AdHvJ/Mv+Viqh68X/ACzx/fJ/zViqrdzxeuf9Hj6L 3k/lH+Virlni+qSf6PH/AHkfeT+V/wDKxVU0yaP9JWn+jx/30feT+cf5WKu1OaP9JXf+jx/30neT +c/5WKqbTxfVI/8AR4/7yTvJ/Kn+VirrSeL1x/o8fRu8n8p/ysVUvXi/5Z4/vk/5qxVXup4+Fv8A 6PH/AHQ7yfzN/lYqtgni9K4/0eP+7HeT/fi/5WKqXrxf8s8f3yf81YqmXmSaP9NXH7iM/Y7v/vtf 8rFUEs8X1ST/AEeP+8j7yfyv/lYqtt54vXj/ANHj+2veTx/1sVakni9Rv9Hj6nvJ4/62Kqss8f1O D/R4/tSd5P8AJ/ysVW2s8Xqt/o8f93J3k/323+Viql68X/LPH98n/NWKo/zCwa5tSFCj6la/CK0/ uV8ScVSrFXYqmvl1Q11dKWC1srr4mrT+5bwriqC+qp/y0Rfe3/NOKqt1ap6i/wCkRf3cfdv99r/k 4quitU+pz/6RF9qPu3+V/k4qpR2qeov+kRdR3bx/1cVbuLVPXk/0iL7bd28f9XFVzWqfVI/9Ii/v JO7eCf5OKo3y3aoNat/9IiP2+7f77b/JxVLfqqf8tEX3t/zTiqrPap6dv/pEX92e7f78b/JxVda2 qcLj/SIv7o92/mX/ACcVUPqqf8tEX3t/zTiqrd2qeuf9Ii6L3b+Uf5OKuW1T6pJ/pEX95H3bwf8A ycVVNMtU/SVp/pEX99H3b+cf5OKu1O1T9JXf+kRf30ndv5z/AJOKqbWqfVI/9Ii/vJO7eCf5OKut LVPXH+kRdG7t/Kf8nFVL6qn/AC0Rfe3/ADTiqvdWqcLf/SIv7od2/mb/ACcVWwWqencf6RF/dju3 +/F/ycVUvqqf8tEX3t/zTiqZeZLVDrVx/pEQ+x3b/fa/5OKoJbVPqkn+kRf3kfdvB/8AJxVbb2qe vH/pEX217t4/6uKtSWqeo3+kRdT3bx/1cVVZbVPqcH+kRfak7t/k/wCTiq21tU9Rv9Ii/u5O7f77 b/JxVS+qp/y0Rfe3/NOKo3zEoW6tVDBqWVr8S1p/cr40xVKsVdiqZ6B/vRd/8wV1/wAmWxVLMVVr r+9X/jHH/wAm1xVdF/vFP/rR/wDG2KrAYi0PBWVhtKWYEM3I7qABxHGgpvvvXegVauP96Jf9dv14 qub/AHkj/wCMkn/EUxVG+Wv+O1bf7P8A5NtiqWYqrT/3Vv8A8Yz/AMnGxVda/YuP+MR/4kuKqRMX pKArCYMxdywKlSBxAWlQQeVTy322FN1V93/fn5L/AMRGKuX/AHkk/wCMkf8AxF8VX6X/AMdO0/4z R/8AExirtU/46d3/AMZpP+JnFVjf7yR/8ZJP+IpirrT+/Hyb/iJxVYDF6TAqxmLKUcMAoUA8gVpU knjQ8tt9jXZVVuvsW/8AxiH/ABJsVWwf3Vx/xjH/ACcXFVHFUz8y/wDHauf9h/ybXFUEv+8kn/GS P/iL4qtt/wDeiL/XX9eKtkxBpuaszHaIqwAVuQ3YEHkONRTbfeu1Cqvl/wB4oP8AWk/41xVba/3r f8Y5P+TbYqo4qmev/wC9Fp/zBWv/ACZXFUsxV2Kpp5eZlubpl6iyuvf/AHS3jiqB+tz+I/4Ff6Yq q3V3P6q7j+7j/ZX/AH2vtiq6K7n+pz7j7Uf7K/5XtiqlHdz+ou46j9lfH5YquuLuf15Nx9tv2V8f lirbXc/1SPcf3kn7K/yp7YqjvLd1Odat9x+3+yv++29sVSz63P4j/gV/piqrPdz+lb7j+7P7K/78 b2xVda3c/C43H90f2V/mX2xVQ+tz+I/4Ff6YqrXd3P653HRf2V/lHtirS3c/1STcf3kf7K/yv7Yq qaZdz/pK03H99H+yv849sVdqd3P+krvcf30n7K/zn2xVTa7n+qR7j+8k/ZX+VPbFW7S7n9cbjo37 K/yn2xVR+tz+I/4Ff6Yqr3V3Pwt9x/dD9lf5m9sVWwXc/pXG4/ux+yv+/F9sVUvrc/iP+BX+mKpn 5kupxrVxuP2P2V/32vtiqBW7n+qSbj+8j/ZX+V/bFWre7n9ePcfbX9lfH5Yqtku5/UbcdT+yvj8s VVZbuf6nBuPtSfsr/k+2KrbW7n9Vtx/dyfsr/vtvbFVL63P4j/gV/piqO8wszXNqzdTZWvt/ulfD FUrxV2Kpr5eCG5uuZIX6ldVIFT/ct2qMVQHG0/35J/yLX/mvFVW6W09Vf3kn93H/ALrX/fa/5eKr oltPqc/7yT7Uf+6x/lf5eKqUa2nqL+8k6j/da+P+virdwtp68n7yT7bf7rXx/wBfFVzLafVI/wB5 J/eSf7rX+VP8vFUb5bW1/TVvSST9v9gf77b/AC8VS3jaf78k/wCRa/8ANeKqs62npW/7yT+7P+61 /wB+N/l4qutVtOFx+8k/uj/usfzL/l4qocbT/fkn/Itf+a8VVbtbT1z+8k6L/utf5R/l4q5VtPqk n7yT+8j/AN1r/K/+Xiqppi2n6StP3kn99H/usfzj/LxV2prafpK7/eSf30n+6x/Of8vFVNltPqkf 7yT+8k/3Wv8AKn+XirrRbT1x+8k6N/utf5T/AJeKqXG0/wB+Sf8AItf+a8VV7pbThb/vJP7of7rH 8zf5eKrYFtPSuP3kn92P91r/AL8X/LxVS42n+/JP+Ra/814qmXmRbX9NXFZJP2P2B/vtf8vFUEq2 n1ST95J/eR/7rX+V/wDLxVbbraevH+8k+2v+618f9fFWpFtPUb95J1P+618f9fFVWVbT6nB+8k+1 J/usf5P+Xiq21W09Vv3kn93J/utf99t/l4qpcbT/AH5J/wAi1/5rxVH+YQgubXgSV+pWtCRQ/wBy vapxVKsVdirIfJmh6xq11qC6bZy3bQ2F08oiUtxHoOR9JoaDqe2KpQdK1QEg2c4I6j03/piqrdaZ qXqL/ok393H/ALrf/fa+2KrotM1L6nP/AKJN9qP/AHW/+V7Yqox6XqXqL/ok3Uf7rfx+WKrrjS9S 9eT/AESb7Tf7rfx+WKrm0zUvqkf+iTf3kn+638E9sVTXyb5c1++8xWsFpp9xLKeZ4iNthwIqSRQC p6nFUnl0fV4pGjlsbiORDR0aJwwI7EEYqvm0zUvTt/8ARJv7s/7rf/fje2KrrXTNS4XH+iTf3R/3 W/8AMvtiqH/Rep/8sk3/ACLf+mKq13pmpeuf9Em6L/ut/wCUe2KuXTNS+qSf6JN/eR/7rfwf2xVE 6DoOt3et2FtbWFxLPLcRqiLG1SeQ9tgO5xV2vaDrdprd/bXNhcRTxXEiujRtUHkfbcHscVQzaZqX 1SP/AESb+8k/3W/gntirrTTNS9cf6JN0b/db/wAp9sVUf0Xqf/LJN/yLf+mKoi60zUuFv/ok390P 91v/ADN7Yqth0zUvTuP9Em/ux/ut/wDfi+2KrItH1eWRY4rG4kkc0RFicsSewAGKpx5y8ua/Y+Yr qC70+4ilHA8TG244AVBAoRUdRiqVLpmpfVJP9Em/vI/91v4P7Yqtt9L1L14/9Em+0v8Aut/H5Yqt k0vUvUb/AESbqf8Adb+PyxVWl0zUvqcH+iTfak/3W/8Ak+2KrbXTNS9Rv9Em/u5P91v/AL7b2xVS GlaoSALOck9B6b/0xVN/Oeh6xpN1p66lZy2jTWFq8QlUryHoIT9IqKjqO+KsexV2Ksh8ma5rGk3W oNpt5LaNNYXSSmJivIeg4H0ipoeo7YqlB1XVCSTeTknqfUf+uKqt1qepeov+lzf3cf8Aux/99r74 qui1PUvqc/8Apc32o/8Adj/5XviqjHqmpeov+lzdR/ux/H54quuNU1L15P8AS5vtN/ux/H54qubU 9S+qR/6XN/eSf7sfwT3xVNfJvmPX7HzFaz2moXEUo5jkJG3HAmhBNCKjocVSeXWNXlkaSW+uJJHN XdpXLEnuSTiq+bU9S9O3/wBLm/uz/ux/9+N74qutdT1Lhcf6XN/dH/dj/wAy++Kof9Kan/y1zf8A Ix/64qrXep6l65/0ubov+7H/AJR74q5dT1L6pJ/pc395H/ux/B/fFUToOva3aa3YXNtf3EU8VxGy OsjVB5D33B7jFXa9r2t3et39zc39xLPLcSM7tI1SeR99gOwxVDNqepfVI/8AS5v7yT/dj+Ce+Kut NT1L1x/pc3Rv92P/ACn3xVR/Smp/8tc3/Ix/64qiLrU9S4W/+lzf3Q/3Y/8AM3viq2HU9S9O4/0u b+7H+7H/AN+L74qsi1jV4pFkivriORDVHWVwwI7gg4qnHnLzHr995iup7vULiWU8ByMjbDgDQAGg FT0GKpUup6l9Uk/0ub+8j/3Y/g/viq231TUvXj/0ub7S/wC7H8fniq2TVNS9Rv8AS5up/wB2P4/P FVaXU9S+pwf6XN9qT/dj/wCT74qttdT1L1G/0ub+7k/3Y/8AvtvfFVIarqgIIvJwR0PqP/XFU385 65rGrXWntqV5LdtDYWqRGVi3EeggP0mgqep74qx7FXYqmvl4oLm65glfqV1UA0P9y3ehxVAcrT/f cn/Ixf8AmjFVW6a09Vf3cn93H/uxf99r/kYquia0+pz/ALuT7Uf+7B/lf5GKqUbWnqL+7k6j/di+ P+pirdw1p68n7uT7bf7sXx/1MVXM1p9Uj/dyf3kn+7F/lT/IxVG+W2tf01b0jk/b/bH++2/yMVS3 laf77k/5GL/zRiqrO1p6Vv8Au5P7s/7sX/fjf5GKrrVrThcfu5P7o/7sH8y/5GKqHK0/33J/yMX/ AJoxVVu2tPXP7uTov+7F/lH+Rirla0+qSfu5P7yP/di/yv8A5GKqmmNafpK0/dyf30f+7B/OP8jF Xam1p+krv93J/fSf7sH85/yMVU2a0+qR/u5P7yT/AHYv8qf5GKutGtPXH7uTo3+7F/lP+RiqlytP 99yf8jF/5oxVXumtOFv+7k/uh/uwfzN/kYqtga09K4/dyf3Y/wB2L/vxf8jFVLlaf77k/wCRi/8A NGKpl5ka1/TVxWOT9j9sf77X/IxVBK1p9Uk/dyf3kf8Auxf5X/yMVW27Wnrx/u5Ptr/uxfH/AFMV aka09Rv3cnU/7sXx/wBTFVWVrT6nB+7k+1J/uwf5P+Riq21a09Vv3cn93J/uxf8Afbf5GKqXK0/3 3J/yMX/mjFUf5hKG5teAIX6la0BNT/cr3oMVSrFXYqmnl5Wa5ulXqbK69v8AdLeOKoH6pP4D/gl/ riqrdWk/qrsP7uP9pf8Afa++KrorSf6nPsPtR/tL/le+KqUdpP6i7DqP2l8fniq64tJ/Xk2H22/a Xx+eKttaT/VI9h/eSftL/KnviqO8t2s41q32H7f7S/77b3xVLPqk/gP+CX+uKqs9pP6VvsP7s/tL /vxvfFV1raT8LjYf3R/aX+ZffFVD6pP4D/gl/riqtd2k/rnYdF/aX+Ue+KtLaT/VJNh/eR/tL/K/ viqpplpP+krTYf30f7S/zj3xV2p2k/6Su9h/fSftL/OffFVNrSf6pHsP7yT9pf5U98VbtLSf1xsO jftL/KffFVH6pP4D/gl/riqvdWk/C32H90P2l/mb3xVbBaT+lcbD+7H7S/78X3xVS+qT+A/4Jf64 qmfmS1nOtXGw/Y/aX/fa++KoFbSf6pJsP7yP9pf5X98Vat7Sf149h9tf2l8fniq2S0n9Rth1P7S+ PzxVVltJ/qcGw+1J+0v+T74qttbSf1W2H93J+0v++298VUvqk/gP+CX+uKo7zCrLc2qt1Fla+/8A ulfDFUrxV2KpnoH+9F3/AMwV1/yZbFUsxVWuv71f+Mcf/JtcVXRf7xT/AOtH/wAbYqsAiDQ8GZmO 8oZQArcjspBPIcaGu2+1NqlVq4/3ol/12/Xiq5v95I/+Mkn/ABFMVRvlr/jtW3+z/wCTbYqlmKq0 /wDdW/8AxjP/ACcbFV1r9i4/4xH/AIkuKqREXpKQzGYswdCoChQBxIatSSeVRx223NdlV93/AH5+ S/8AERirl/3kk/4yR/8AEXxVfpf/AB07T/jNH/xMYq7VP+Ond/8AGaT/AImcVWN/vJH/AMZJP+Ip irrT+/Hyb/iJxVYBF6TEswmDKEQKCpUg8iWrUEHjQcd99xTdVVuvsW//ABiH/EmxVbB/dXH/ABjH /JxcVUcVTPzL/wAdq5/2H/JtcVQS/wC8kn/GSP8A4i+Krbf/AHoi/wBdf14q2REWm5sysN4gqghm 5DZiSOI41Nd99qb1Cq+X/eKD/Wk/41xVba/3rf8AGOT/AJNtiqjiqZ6//vRaf8wVr/yZXFUsxV2K pr5dYLdXTFQ1LK6+Fq0/uW8KYqgvrSf8s8X3N/zViqrdXSeov+jxf3cfZv8Afa/5WKrorpPqc/8A o8X2o+zf5X+ViqlHdJ6i/wCjxdR2bx/1sVbuLpPXk/0eL7bdm8f9bFVzXSfVI/8AR4v7yTs3gn+V iqN8t3SHWrf/AEeIfb7N/vtv8rFUt+tJ/wAs8X3N/wA1Yqqz3Senb/6PF/dns3+/G/ysVXWt0nC4 /wBHi/uj2b+Zf8rFVD60n/LPF9zf81Yqq3d0nrn/AEeLovZv5R/lYq5bpPqkn+jxf3kfZvB/8rFV TTLpP0laf6PF/fR9m/nH+VirtTuk/SV3/o8X99J2b+c/5WKqbXSfVI/9Hi/vJOzeCf5WKutLpPXH +jxdG7N/Kf8AKxVS+tJ/yzxfc3/NWKq91dJwt/8AR4v7odm/mb/KxVbBdJ6dx/o8X92Ozf78X/Kx VS+tJ/yzxfc3/NWKpl5kukGtXH+jxH7HZv8Afa/5WKoJbpPqkn+jxf3kfZvB/wDKxVbb3SevH/o8 X217N4/62KtSXSeo3+jxdT2bx/1sVVZbpPqcH+jxfak7N/k/5WKrbW6T1G/0eL+7k7N/vtv8rFVL 60n/ACzxfc3/ADViqN8xMGurVgoWtla/Ctaf3K+NcVSrFXYqmvl5Q1zdAsFH1K6+I1p/ct4A4qgP Qi/5aI/uk/5pxVVuoIvVX/SI/wC7j7Sf77X/ACcVXRQR/U5/9Ij+1H2k/wAr/JxVSjgi9Rf9Ij6j tJ4/6uKt3EEXryf6RH9tu0nj/q4quaCL6pH/AKRH/eSdpP5U/wAnFUb5bhj/AE1b/v4z9vs/++2/ ycVS30Iv+WiP7pP+acVVZ4IvSt/9Ij/uz2k/343+Tiq61gj4XH+kR/3R7SfzL/k4qoehF/y0R/dJ /wA04qq3cEXrn/SI+i9pP5R/k4q5YIvqkn+kR/3kfaT+V/8AJxVU0yGP9JWn+kR/30faT+cf5OKu 1OGP9JXf+kR/30naT+c/5OKqbQRfVI/9Ij/vJO0n8qf5OKutIIvXH+kR9G7Sfyn/ACcVUvQi/wCW iP7pP+acVV7qCPhb/wCkR/3Q7SfzN/k4qtggi9K4/wBIj/ux2k/34v8Ak4qpehF/y0R/dJ/zTiqZ eZIY/wBNXH7+MfY7P/vtf8nFUEsEX1ST/SI/7yPtJ/K/+Tiq23gi9eP/AEiP7a9pPH/VxVqSCL1G /wBIj6ntJ4/6uKqssEf1OD/SI/tSdpP8n/JxVbawReq3+kR/3cnaT/fbf5OKqXoRf8tEf3Sf804q j/MKhbm1AYMPqVr8QrT+5XxAxVKsVdiqb+Wreee5vRDG0hTT7yRworREgYsx9gMVSjFVa6/vV/4x x/8AJtcVXRf7xT/60f8AxtiqjH/eL8x+vFV1x/vRL/rt+vFVzf7yR/8AGST/AIimKph5Ugmn8wWk MKGSVy4RFFST6bdBiqU4qrT/AN1b/wDGM/8AJxsVXWv2Lj/jEf8AiS4qh8VVrv8Avz8l/wCIjFXL /vJJ/wAZI/8AiL4qraPFJLq9jFGpeSS4iVEG5LFwABirtYiki1e+ikUpJHcSq6HYhg5BBxVRb/eS P/jJJ/xFMVdaf34+Tf8AETiqjiqIuvsW/wDxiH/EmxVbB/dXH/GMf8nFxVRxVNvNcE0HmC7hmQxy oUDowoQfTXqMVS9f95JP+Mkf/EXxVbb/AO9EX+uv68VWyf3jfM/rxVWl/wB4oP8AWk/41xVba/3r f8Y5P+TbYqo4qm/mW3ngubITRtGX0+zkQMKVR4FKsPYjFUoxV2Ksp8geaNZ0C81GTTJvSa40+6SS oqK+g4VqfzJyqMVSo+ZtbYkm5qTuTwj/AOacVVLnzJrQkH+kf7rj/Yj/AJF/ycVXR+ZNa+pzn6xu Gj/Yj/yv8nFVKPzJrXqL/pHcfsR+P+riq648ya168n+kftN+xH4/6uKtt5k1r6rGfrH+7H/Yj8E/ ycVTnyP548yab5ktbm2uhzo4ZSicWXgTQ0ANKgd8VSSfzX5gnmeaa7LyyEs7lI6knqfs4qum8ya1 6cH+kdYz+xH/ADt/k4qutfMmtFLj/SOkR/Yj/mX/ACcVUP8AEutf8tP/AAkf/NOKq115k1oTn/SO y/sR/wAo/wAnFWl8ya19VkP1j/difsR+D/5OKozy55y8xWOv6fdwXVJYriMrVEofiAINADQjY4q7 zH5y8xX2v6hdz3VZZbiQtREoPiIAFQTQDYYqg28ya19VjP1j/dj/ALEfgn+Tirdr5k1ozj/SOzfs R/yn/JxVR/xLrX/LT/wkf/NOKq915k1oJb/6R1iH7Ef8zf5OKrYfMmtenP8A6R0jH7Ef86/5OKrY PNfmCCZJobspLGQyOEjqCOh+ziqd+ePPHmTUvMl1c3N0OdECqETiq8AaCoJpUnviqTL5k1r6rIfr H+7E/Yj8H/ycVat/MmtevH/pH7S/sR+P+riq2TzJrXqN/pHc/sR+P+riqrJ5k1r6nAfrG5aT9iP/ ACf8nFVtt5k1oyH/AEj/AHXJ+xH/ACN/k4qpjzNrakEXNCNweEf/ADTiqa+f/NGs6/eadJqc3qtb 6fapHQUFfQQM1P5n41OKsWxV2Kpr5eCG5uuZIX6ldVIFT/ct2qMVQHG0/wB+Sf8AItf+a8VVbpbT 1V/eSf3cf+61/wB9r/l4quiW0+pz/vJPtR/7rH+V/l4qpRraeov7yTqP91r4/wCvirdwtp68n7yT 7bf7rXx/18VXMtp9Uj/eSf3kn+61/lT/AC8VRvltbX9NW9JJP2/2B/vtv8vFUt42n+/JP+Ra/wDN eKqs62npW/7yT+7P+61/343+Xiq61W04XH7yT+6P+6x/Mv8Al4qocbT/AH5J/wAi1/5rxVVu1tPX P7yTov8Autf5R/l4q5VtPqkn7yT+8j/3Wv8AK/8Al4qqaYtp+krT95J/fR/7rH84/wAvFXamtp+k rv8AeSf30n+6x/Of8vFVNltPqkf7yT+8k/3Wv8qf5eKutFtPXH7yTo3+61/lP+XiqlxtP9+Sf8i1 /wCa8VV7pbThb/vJP7of7rH8zf5eKrYFtPSuP3kn92P91r/vxf8ALxVS42n+/JP+Ra/814qmXmRb X9NXFZJP2P2B/vtf8vFUEq2n1ST95J/eR/7rX+V/8vFVtutp68f7yT7a/wC618f9fFWpFtPUb95J 1P8AutfH/XxVVlW0+pwfvJPtSf7rH+T/AJeKrbVbT1W/eSf3cn+61/323+XiqlxtP9+Sf8i1/wCa 8VR/mEILm14ElfqVrQkUP9yvapxVKsVdiqaeXlZrm6Cgkmyuthv/ALpbFUv+r3H++n/4E4qq3VvP 6q/u3/u4/wBk/wC+1xVdFbz/AFKf92/2o/2T/lYqpR28/qL+7fqP2T44quuLef15P3b/AG2/ZPji rbW8/wBUj/dv/eSfsn+VMVR3lu3n/TVv+7b9v9k/77bFUs+r3H++n/4E4qqz28/pW/7t/wC7P7J/ 342KrrW3n4XH7t/7o/sn+ZcVUPq9x/vp/wDgTiqtd28/rn92/Rf2T/KMVaW3n+qSfu3/ALyP9k/y viqppdvP+krT92399H+yf5xirtUt5/0ld/u2/vpP2T/OcVU2t5/qkf7t/wC8k/ZP8qYq3aW8/rj9 2/Rv2T/KcVUfq9x/vp/+BOKq91bz8Lf92/8AdD9k/wAzYqtgt5/SuP3b/wB2P2T/AL8XFVL6vcf7 6f8A4E4qmfmS3n/TVx+7b9j9k/77XFUCtvP9Uk/dv/eR/sn+V8Vat7ef14/3b/bX9k+OKrZLef1G /dv1P7J8cVVZbef6lB+7f7Un7J/ycVW2tvP6rfu3/u5P2T/vtsVUvq9x/vp/+BOKph5hVlubUMCC LK12O3+6VxVK8VdiqaeXyRcXRBofqV1/yZbFUt9ST+Y/ecVVrqST1V+I/wB3H3P++1xVdFJJ9Sn+ I/aj7n/KxVYCytCRNzL/ABMq8qoeRHFqgCtBy+GoofGoCrVxJJ68nxH7bdz44quaST6pH8R/vJO5 /lTFUb5bkk/TVv8AEf2+5/322KpZ6kn8x+84qrTySelb/Ef7s9z/AL8bFV1rJJwuPiP90e5/mXFV IlhEr+tVmZlMQ5clAAIY7caNXahrsa02qqvu5JPXPxHovc/yjFXLJJ9Uk+I/3kfc/wAr4qv0uST9 JWnxH++j7n+cYq7VJJP0ld/Ef76Tuf5ziqxpJPqkfxH+8k7n+VMVdaSSeuPiPRu5/lOKrAWMTP61 GVlURHlyYEElhtxotN6mu4pXeiqrdSScLf4j/dDuf5mxVbBJJ6Vx8R/ux3P+/FxVR9ST+Y/ecVTP zJJJ+mrj4j+x3P8AvtcVQSySfVJPiP8AeR9z/K+KrbeST14/iP217nxxVslmaYmbgU+JVblVzyA4 rQEVoeXxUFB40BVXyySfUoPiP2pO5/ycVW2sknqt8R/u5O5/322KqPqSfzH7ziqZeYCTcWpJqfqV r/yZXFUrxV2Kpr5dKC6ui6ll+pXVQDT/AHS3ehxVBerZf74b/kZ/zbiqrdS2fqL+4b+7j/3Z/wAV r/k4quils/qc/wC4b7Uf+7P9b/JxVSjlsvUX9w3Uf7s9/wDVxVu4lsvXk/cN9tv92e/+riq5pbP6 pH+4b+8k/wB2eyf5OKo3y3JZ/pq3pAwPx/7s/wCK2/ycVS31bL/fDf8AIz/m3FVWeWz9O3/cN/dn /dn/ABY3+Tiq61ls+Fx+4b+6P+7P8pf8nFVD1bL/AHw3/Iz/AJtxVVu5bP1z+4bov+7P8kf5OKuW Wz+qSfuG/vI/92ez/wCTiqppktn+krT9w399H/uz/LH+TirtTls/0ld/uG/vpP8Adn+Wf8nFVNpb P6pH+4b+8k/3Z7J/k4q60ls/XH7hujf7s/yT/k4qperZf74b/kZ/zbiqvdS2fC3/AHDf3Q/3Z/lN /k4qtgls/TuP3Df3Y/3Z/wAWL/k4qperZf74b/kZ/wA24qmXmSSz/TVxWBifg/3Z/wAVr/k4qgll s/qkn7hv7yP/AHZ7P/k4qtt5bL14/wBw321/3Z7/AOrirUktl6jfuG6n/dnv/q4qqyy2f1OD9w32 pP8Adn+r/k4qttZbP1G/cN/dyf7s/wCK2/ycVUvVsv8AfDf8jP8Am3FUb5iKG6tSilV+pWtATX/d K96DFUqxV2Kpr5eUtc3SilTZXXUgD+5bucVQH1WX+aP/AJGR/wDNWKqt1ay+qvxR/wB3H/uyP/fa /wCViq6K1k+pz/FH9qP/AHZH/lf5WKqUdrL6i/FH1H+7I/H/AFsVbuLWX15Pij+23+7I/H/WxVc1 rL9Uj+KP+8k/3ZH/ACp/lYqjfLdtINat94/2/wDdif77b/KxVLfqsv8ANH/yMj/5qxVVntZfSt/i j/uz/uyP/fjf5WKrrW1k4XHxR/3R/wB2R/zL/lYqofVZf5o/+Rkf/NWKqt3ay+ufij6L/uyP+Uf5 WKuW1l+qSfFH/eR/7sj/AJX/AMrFVTTLWT9JWnxR/wB9H/uyP+cf5WKu1O1k/SV38Uf99J/uyP8A nP8AlYqptay/VI/ij/vJP92R/wAqf5WKutLWX1x8UfRv92R/yn/KxVS+qy/zR/8AIyP/AJqxVXur WThb/FH/AHQ/3ZH/ADN/lYqtgtZfSuPij/ux/uyP/fi/5WKqX1WX+aP/AJGR/wDNWKpl5ktpDrVx vH+x/uxP99r/AJWKoJbWX6pJ8Uf95H/uyP8Alf8AysVW29rL68fxR/bX/dkfj/rYq1Jay+o3xR9T /uyPx/1sVVZbWT6nB8Uf2pP92R/5P+Viq21tZfVb4o/7uT/dkf8Avtv8rFVL6rL/ADR/8jI/+asV R/mFStzaqaVFla9CCP7le4xVKsVdiqaeX1Y3F3QE0srsmngIWxVK8VVrr+9X/jHH/wAm1xVdF/vF P/rR/wDG2KqMf94vzH68VXXH+9Ev+u368VXN/vJH/wAZJP8AiKYqjvLILa3bACpPOgH/ABjbFUrx VWn/ALq3/wCMZ/5ONiq61+xcf8Yj/wASXFUPiqtd/wB+fkv/ABEYq5f95JP+Mkf/ABF8VVNKBOqW YAqTPHQf7MYq7VQRql4CKETyVH+zOKqbf7yR/wDGST/iKYq60/vx8m/4icVUcVRF19i3/wCMQ/4k 2KrYP7q4/wCMY/5OLiqjiqaeZgV1u5BFCOFQf+Ma4qgV/wB5JP8AjJH/AMRfFVtv/vRF/rr+vFVs n943zP68VVpf94oP9aT/AI1xVba/3rf8Y5P+TbYqo4qmnmBWFxaVBFbK0Ir4GFcVSvFXYqyTyV51 uPKtxfSxWNrffXrWW1ZbqKKXj6sTxggyI/w/H8adHGxxVL28wXBYn6pZCprQWkIH/EcVbbzDcsat a2RNAP8AeWHoBQfs4q4eYroIyC1suLEEj6rD2rT9n3xVoeYLgEEWtlUf8usP/NOKubzDcsxY2tkS TU/6LD3/ANjirZ8w3JQJ9VsuIJIH1WHqaV/Z9sVTTyv5/vNA1mHU49O0+4aKo9N7WCtD14sUbg3u MVS248y3M88kxstPQyMWKR2cCIK9lULQDFVreYblgoNrZUUUX/RYelSf5ffFXL5iulDBbWyHIcW/ 0WHpWv8AL7Yqt/T9x/yyWX/SLD/zTirbeYblm5Na2RP/ADCw9tv5cVbHmG5CFPqtlxJBI+qw9RWn 7PviqM0PzndaTrFnqS6fYTNaSrKIntYKNxPiUND4Gmx3xV2uec7rVtYvNSbT7CFruVpTElrBReR8 QgqfE03O+KoM+YbkoE+q2XEEkD6rD1NK/s+2KtL5huVbktrZA/8AMLD32/lxVr9P3H/LJZf9IsP/ ADTiq5vMV0wUNa2R4jiv+iw9K1/l98VcvmG5UMBa2VGFG/0WHpUH+X2xVdb+ZbmCeOYWWnuY2DBJ LOB0NOzKVoRiqZeaPP8Aea/rM2pyadp9u0tB6aWsFaDpyYIvNvc4qlY8w3IQp9VsuJIJH1WHqK0/ Z98VaXzDcqwYWtkCDUf6LD2/2OKuPmC4JJNrZVP/AC6w/wDNOKtnzFdFFQ2tlxUkgfVYe9K/s+2K uXzDcqara2QNCP8AeWHoRQ/s4q0vmC4DA/VLI0NaG0hI/wCI4qmHnXzrcearixllsbWx+o2sVqq2 sUUXL0okjJJjRPh+D4E6INhirG8VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVf//Z + + + + + + xmp.iid:68315B360F2268118083D046FEF5E253 + xmp.did:68315B360F2268118083D046FEF5E253 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + xmp.iid:67315B360F2268118083D046FEF5E253 + xmp.did:67315B360F2268118083D046FEF5E253 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:87D55B89282168118083D046FEF5E253 + 2016-01-27T16:07:09+03:00 + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:68315B360F2268118083D046FEF5E253 + 2016-01-28T22:22:10+03:00 + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Print + + + False + True + 1 + + 450.000000 + 450.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + % &&end XMP packet marker&& [{ai_metadata_stream_123} <> /PUT AI11_PDFMark5 [/Document 1 dict begin /Metadata {ai_metadata_stream_123} def currentdict end /BDC AI11_PDFMark5 +%ADOEndClientInjection: PageSetup End "AI11EPS" +%%EndPageSetup +1 -1 scale 0 -450 translate +pgsv +[1 0 0 1 0 0 ]ct +gsave +np +gsave +0 0 mo +0 450 li +450 450 li +450 0 li +cp +clp +450 450 mo +0 450 li +0 0 li +450 0 li +450 450 li +false sop +/0 +[/DeviceRGB] /CSA add_res +.101961 .101961 .101961 rgb +f +25 425 mo +24.5 425 li +24.5 25 li +25 25 li +25 25.5 li +25.5 25.5 li +25.5 44.0488 li +24.5 44.0488 li +24.5 45.0513 li +25.5 45.0513 li +25.5 64.0986 li +24.5 64.0986 li +24.5 65.101 li +25.5 65.101 li +25.5 84.1489 li +24.5 84.1489 li +24.5 85.1513 li +25.5 85.1513 li +25.5 104.199 li +24.5 104.199 li +24.5 105.201 li +25.5 105.201 li +25.5 124.248 li +24.5 124.248 li +24.5 125.251 li +25.5 125.251 li +25.5 144.299 li +24.5 144.299 li +24.5 145.301 li +25.5 145.301 li +25.5 164.349 li +24.5 164.349 li +24.5 165.351 li +25.5 165.351 li +25.5 184.399 li +24.5 184.399 li +24.5 185.401 li +25.5 185.401 li +25.5 204.449 li +24.5 204.449 li +24.5 205.451 li +25.5 205.451 li +25.5 224.499 li +24.5 224.499 li +24.5 225.501 li +25.5 225.501 li +25.5 244.549 li +24.5 244.549 li +24.5 245.551 li +25.5 245.551 li +25.5 264.599 li +24.5 264.599 li +24.5 265.602 li +25.5 265.602 li +25.5 284.648 li +24.5 284.648 li +24.5 285.651 li +25.5 285.651 li +25.5 304.699 li +24.5 304.699 li +24.5 305.701 li +25.5 305.701 li +25.5 324.749 li +24.5 324.749 li +24.5 325.751 li +25.5 325.751 li +25.5 344.799 li +24.5 344.799 li +24.5 345.801 li +25.5 345.801 li +25.5 364.849 li +24.5 364.849 li +24.5 365.852 li +25.5 365.852 li +25.5 384.898 li +24.5 384.898 li +24.5 385.901 li +25.5 385.901 li +25.5 404.949 li +24.5 404.949 li +24.5 405.951 li +25.5 405.951 li +25.5 424.5 li +25 424.5 li +25 425 li +.552941 .552941 .552941 rgb +f +45.0513 424.5 mo +44.0488 424.5 li +44.0488 405.951 li +45.0513 405.951 li +45.0513 424.5 li +45.0513 404.949 mo +44.0488 404.949 li +44.0488 385.901 li +45.0513 385.901 li +45.0513 404.949 li +45.0513 384.898 mo +44.0488 384.898 li +44.0488 365.852 li +45.0513 365.852 li +45.0513 384.898 li +45.0513 364.849 mo +44.0488 364.849 li +44.0488 345.801 li +45.0513 345.801 li +45.0513 364.849 li +45.0513 344.799 mo +44.0488 344.799 li +44.0488 325.751 li +45.0513 325.751 li +45.0513 344.799 li +45.0513 324.749 mo +44.0488 324.749 li +44.0488 305.701 li +45.0513 305.701 li +45.0513 324.749 li +45.0513 304.699 mo +44.0488 304.699 li +44.0488 285.651 li +45.0513 285.651 li +45.0513 304.699 li +45.0513 284.648 mo +44.0488 284.648 li +44.0488 265.602 li +45.0513 265.602 li +45.0513 284.648 li +45.0513 264.599 mo +44.0488 264.599 li +44.0488 245.551 li +45.0513 245.551 li +45.0513 264.599 li +45.0513 244.549 mo +44.0488 244.549 li +44.0488 225.501 li +45.0513 225.501 li +45.0513 244.549 li +45.0513 224.499 mo +44.0488 224.499 li +44.0488 205.451 li +45.0513 205.451 li +45.0513 224.499 li +45.0513 204.449 mo +44.0488 204.449 li +44.0488 185.401 li +45.0513 185.401 li +45.0513 204.449 li +45.0513 184.399 mo +44.0488 184.399 li +44.0488 165.351 li +45.0513 165.351 li +45.0513 184.399 li +45.0513 164.349 mo +44.0488 164.349 li +44.0488 145.301 li +45.0513 145.301 li +45.0513 164.349 li +45.0513 144.299 mo +44.0488 144.299 li +44.0488 125.251 li +45.0513 125.251 li +45.0513 144.299 li +45.0513 124.248 mo +44.0488 124.248 li +44.0488 105.201 li +45.0513 105.201 li +45.0513 124.248 li +45.0513 104.199 mo +44.0488 104.199 li +44.0488 85.1513 li +45.0513 85.1513 li +45.0513 104.199 li +45.0513 84.1489 mo +44.0488 84.1489 li +44.0488 65.101 li +45.0513 65.101 li +45.0513 84.1489 li +45.0513 64.0986 mo +44.0488 64.0986 li +44.0488 45.0513 li +45.0513 45.0513 li +45.0513 64.0986 li +45.0513 44.0488 mo +44.0488 44.0488 li +44.0488 25.5 li +45.0513 25.5 li +45.0513 44.0488 li +.282353 .282353 .282353 rgb +f +65.101 424.5 mo +64.0986 424.5 li +64.0986 405.951 li +65.101 405.951 li +65.101 424.5 li +65.101 404.949 mo +64.0986 404.949 li +64.0986 385.901 li +65.101 385.901 li +65.101 404.949 li +65.101 384.898 mo +64.0986 384.898 li +64.0986 365.852 li +65.101 365.852 li +65.101 384.898 li +65.101 364.849 mo +64.0986 364.849 li +64.0986 345.801 li +65.101 345.801 li +65.101 364.849 li +65.101 344.799 mo +64.0986 344.799 li +64.0986 325.751 li +65.101 325.751 li +65.101 344.799 li +65.101 324.749 mo +64.0986 324.749 li +64.0986 305.701 li +65.101 305.701 li +65.101 324.749 li +65.101 304.699 mo +64.0986 304.699 li +64.0986 285.651 li +65.101 285.651 li +65.101 304.699 li +65.101 284.648 mo +64.0986 284.648 li +64.0986 265.602 li +65.101 265.602 li +65.101 284.648 li +65.101 264.599 mo +64.0986 264.599 li +64.0986 245.551 li +65.101 245.551 li +65.101 264.599 li +65.101 244.549 mo +64.0986 244.549 li +64.0986 225.501 li +65.101 225.501 li +65.101 244.549 li +65.101 224.499 mo +64.0986 224.499 li +64.0986 205.451 li +65.101 205.451 li +65.101 224.499 li +65.101 204.449 mo +64.0986 204.449 li +64.0986 185.401 li +65.101 185.401 li +65.101 204.449 li +65.101 184.399 mo +64.0986 184.399 li +64.0986 165.351 li +65.101 165.351 li +65.101 184.399 li +65.101 164.349 mo +64.0986 164.349 li +64.0986 145.301 li +65.101 145.301 li +65.101 164.349 li +65.101 144.299 mo +64.0986 144.299 li +64.0986 125.251 li +65.101 125.251 li +65.101 144.299 li +65.101 124.248 mo +64.0986 124.248 li +64.0986 105.201 li +65.101 105.201 li +65.101 124.248 li +65.101 104.199 mo +64.0986 104.199 li +64.0986 85.1513 li +65.101 85.1513 li +65.101 104.199 li +65.101 84.1489 mo +64.0986 84.1489 li +64.0986 65.101 li +65.101 65.101 li +65.101 84.1489 li +65.101 64.0986 mo +64.0986 64.0986 li +64.0986 45.0513 li +65.101 45.0513 li +65.101 64.0986 li +65.101 44.0488 mo +64.0986 44.0488 li +64.0986 25.5 li +65.101 25.5 li +65.101 44.0488 li +f +85.1513 424.5 mo +84.1489 424.5 li +84.1489 405.951 li +85.1513 405.951 li +85.1513 424.5 li +85.1513 404.949 mo +84.1489 404.949 li +84.1489 385.901 li +85.1513 385.901 li +85.1513 404.949 li +85.1513 384.898 mo +84.1489 384.898 li +84.1489 365.852 li +85.1513 365.852 li +85.1513 384.898 li +85.1513 364.849 mo +84.1489 364.849 li +84.1489 345.801 li +85.1513 345.801 li +85.1513 364.849 li +85.1513 344.799 mo +84.1489 344.799 li +84.1489 325.751 li +85.1513 325.751 li +85.1513 344.799 li +85.1513 324.749 mo +84.1489 324.749 li +84.1489 305.701 li +85.1513 305.701 li +85.1513 324.749 li +85.1513 304.699 mo +84.1489 304.699 li +84.1489 285.651 li +85.1513 285.651 li +85.1513 304.699 li +85.1513 284.648 mo +84.1489 284.648 li +84.1489 265.602 li +85.1513 265.602 li +85.1513 284.648 li +85.1513 264.599 mo +84.1489 264.599 li +84.1489 245.551 li +85.1513 245.551 li +85.1513 264.599 li +85.1513 244.549 mo +84.1489 244.549 li +84.1489 225.501 li +85.1513 225.501 li +85.1513 244.549 li +85.1513 224.499 mo +84.1489 224.499 li +84.1489 205.451 li +85.1513 205.451 li +85.1513 224.499 li +85.1513 204.449 mo +84.1489 204.449 li +84.1489 185.401 li +85.1513 185.401 li +85.1513 204.449 li +85.1513 184.399 mo +84.1489 184.399 li +84.1489 165.351 li +85.1513 165.351 li +85.1513 184.399 li +85.1513 164.349 mo +84.1489 164.349 li +84.1489 145.301 li +85.1513 145.301 li +85.1513 164.349 li +85.1513 144.299 mo +84.1489 144.299 li +84.1489 125.251 li +85.1513 125.251 li +85.1513 144.299 li +85.1513 124.248 mo +84.1489 124.248 li +84.1489 105.201 li +85.1513 105.201 li +85.1513 124.248 li +85.1513 104.199 mo +84.1489 104.199 li +84.1489 85.1513 li +85.1513 85.1513 li +85.1513 104.199 li +85.1513 84.1489 mo +84.1489 84.1489 li +84.1489 65.101 li +85.1513 65.101 li +85.1513 84.1489 li +85.1513 64.0986 mo +84.1489 64.0986 li +84.1489 45.0513 li +85.1513 45.0513 li +85.1513 64.0986 li +85.1513 44.0488 mo +84.1489 44.0488 li +84.1489 25.5 li +85.1513 25.5 li +85.1513 44.0488 li +f +105.201 424.5 mo +104.199 424.5 li +104.199 405.951 li +105.201 405.951 li +105.201 424.5 li +105.201 404.949 mo +104.199 404.949 li +104.199 385.901 li +105.201 385.901 li +105.201 404.949 li +105.201 384.898 mo +104.199 384.898 li +104.199 365.852 li +105.201 365.852 li +105.201 384.898 li +105.201 364.849 mo +104.199 364.849 li +104.199 345.801 li +105.201 345.801 li +105.201 364.849 li +105.201 344.799 mo +104.199 344.799 li +104.199 325.751 li +105.201 325.751 li +105.201 344.799 li +105.201 324.749 mo +104.199 324.749 li +104.199 305.701 li +105.201 305.701 li +105.201 324.749 li +105.201 304.699 mo +104.199 304.699 li +104.199 285.651 li +105.201 285.651 li +105.201 304.699 li +105.201 284.648 mo +104.199 284.648 li +104.199 265.602 li +105.201 265.602 li +105.201 284.648 li +105.201 264.599 mo +104.199 264.599 li +104.199 245.551 li +105.201 245.551 li +105.201 264.599 li +105.201 244.549 mo +104.199 244.549 li +104.199 225.501 li +105.201 225.501 li +105.201 244.549 li +105.201 224.499 mo +104.199 224.499 li +104.199 205.451 li +105.201 205.451 li +105.201 224.499 li +105.201 204.449 mo +104.199 204.449 li +104.199 185.401 li +105.201 185.401 li +105.201 204.449 li +105.201 184.399 mo +104.199 184.399 li +104.199 165.351 li +105.201 165.351 li +105.201 184.399 li +105.201 164.349 mo +104.199 164.349 li +104.199 145.301 li +105.201 145.301 li +105.201 164.349 li +105.201 144.299 mo +104.199 144.299 li +104.199 125.251 li +105.201 125.251 li +105.201 144.299 li +105.201 124.248 mo +104.199 124.248 li +104.199 105.201 li +105.201 105.201 li +105.201 124.248 li +105.201 104.199 mo +104.199 104.199 li +104.199 85.1513 li +105.201 85.1513 li +105.201 104.199 li +105.201 84.1489 mo +104.199 84.1489 li +104.199 65.101 li +105.201 65.101 li +105.201 84.1489 li +105.201 64.0986 mo +104.199 64.0986 li +104.199 45.0513 li +105.201 45.0513 li +105.201 64.0986 li +105.201 44.0488 mo +104.199 44.0488 li +104.199 25.5 li +105.201 25.5 li +105.201 44.0488 li +f +125.251 424.5 mo +124.248 424.5 li +124.248 405.951 li +125.251 405.951 li +125.251 424.5 li +125.251 404.949 mo +124.248 404.949 li +124.248 385.901 li +125.251 385.901 li +125.251 404.949 li +125.251 384.898 mo +124.248 384.898 li +124.248 365.852 li +125.251 365.852 li +125.251 384.898 li +125.251 364.849 mo +124.248 364.849 li +124.248 345.801 li +125.251 345.801 li +125.251 364.849 li +125.251 344.799 mo +124.248 344.799 li +124.248 325.751 li +125.251 325.751 li +125.251 344.799 li +125.251 324.749 mo +124.248 324.749 li +124.248 305.701 li +125.251 305.701 li +125.251 324.749 li +125.251 304.699 mo +124.248 304.699 li +124.248 285.651 li +125.251 285.651 li +125.251 304.699 li +125.251 284.648 mo +124.248 284.648 li +124.248 265.602 li +125.251 265.602 li +125.251 284.648 li +125.251 264.599 mo +124.248 264.599 li +124.248 245.551 li +125.251 245.551 li +125.251 264.599 li +125.251 244.549 mo +124.248 244.549 li +124.248 225.501 li +125.251 225.501 li +125.251 244.549 li +125.251 224.499 mo +124.248 224.499 li +124.248 205.451 li +125.251 205.451 li +125.251 224.499 li +125.251 204.449 mo +124.248 204.449 li +124.248 185.401 li +125.251 185.401 li +125.251 204.449 li +125.251 184.399 mo +124.248 184.399 li +124.248 165.351 li +125.251 165.351 li +125.251 184.399 li +125.251 164.349 mo +124.248 164.349 li +124.248 145.301 li +125.251 145.301 li +125.251 164.349 li +125.251 144.299 mo +124.248 144.299 li +124.248 125.251 li +125.251 125.251 li +125.251 144.299 li +125.251 124.248 mo +124.248 124.248 li +124.248 105.201 li +125.251 105.201 li +125.251 124.248 li +125.251 104.199 mo +124.248 104.199 li +124.248 85.1513 li +125.251 85.1513 li +125.251 104.199 li +125.251 84.1489 mo +124.248 84.1489 li +124.248 65.101 li +125.251 65.101 li +125.251 84.1489 li +125.251 64.0986 mo +124.248 64.0986 li +124.248 45.0513 li +125.251 45.0513 li +125.251 64.0986 li +125.251 44.0488 mo +124.248 44.0488 li +124.248 25.5 li +125.251 25.5 li +125.251 44.0488 li +.552941 .552941 .552941 rgb +f +145.301 424.5 mo +144.299 424.5 li +144.299 405.951 li +145.301 405.951 li +145.301 424.5 li +145.301 404.949 mo +144.299 404.949 li +144.299 385.901 li +145.301 385.901 li +145.301 404.949 li +145.301 384.898 mo +144.299 384.898 li +144.299 365.852 li +145.301 365.852 li +145.301 384.898 li +145.301 364.849 mo +144.299 364.849 li +144.299 345.801 li +145.301 345.801 li +145.301 364.849 li +145.301 344.799 mo +144.299 344.799 li +144.299 325.751 li +145.301 325.751 li +145.301 344.799 li +145.301 324.749 mo +144.299 324.749 li +144.299 305.701 li +145.301 305.701 li +145.301 324.749 li +145.301 304.699 mo +144.299 304.699 li +144.299 285.651 li +145.301 285.651 li +145.301 304.699 li +145.301 284.648 mo +144.299 284.648 li +144.299 265.602 li +145.301 265.602 li +145.301 284.648 li +145.301 264.599 mo +144.299 264.599 li +144.299 245.551 li +145.301 245.551 li +145.301 264.599 li +145.301 244.549 mo +144.299 244.549 li +144.299 225.501 li +145.301 225.501 li +145.301 244.549 li +145.301 224.499 mo +144.299 224.499 li +144.299 205.451 li +145.301 205.451 li +145.301 224.499 li +145.301 204.449 mo +144.299 204.449 li +144.299 185.401 li +145.301 185.401 li +145.301 204.449 li +145.301 184.399 mo +144.299 184.399 li +144.299 165.351 li +145.301 165.351 li +145.301 184.399 li +145.301 164.349 mo +144.299 164.349 li +144.299 145.301 li +145.301 145.301 li +145.301 164.349 li +145.301 144.299 mo +144.299 144.299 li +144.299 125.251 li +145.301 125.251 li +145.301 144.299 li +145.301 124.248 mo +144.299 124.248 li +144.299 105.201 li +145.301 105.201 li +145.301 124.248 li +145.301 104.199 mo +144.299 104.199 li +144.299 85.1513 li +145.301 85.1513 li +145.301 104.199 li +145.301 84.1489 mo +144.299 84.1489 li +144.299 65.101 li +145.301 65.101 li +145.301 84.1489 li +145.301 64.0986 mo +144.299 64.0986 li +144.299 45.0513 li +145.301 45.0513 li +145.301 64.0986 li +145.301 44.0488 mo +144.299 44.0488 li +144.299 25.5 li +145.301 25.5 li +145.301 44.0488 li +.282353 .282353 .282353 rgb +f +165.351 424.5 mo +164.349 424.5 li +164.349 405.951 li +165.351 405.951 li +165.351 424.5 li +165.351 404.949 mo +164.349 404.949 li +164.349 385.901 li +165.351 385.901 li +165.351 404.949 li +165.351 384.898 mo +164.349 384.898 li +164.349 365.852 li +165.351 365.852 li +165.351 384.898 li +165.351 364.849 mo +164.349 364.849 li +164.349 345.801 li +165.351 345.801 li +165.351 364.849 li +165.351 344.799 mo +164.349 344.799 li +164.349 325.751 li +165.351 325.751 li +165.351 344.799 li +165.351 324.749 mo +164.349 324.749 li +164.349 305.701 li +165.351 305.701 li +165.351 324.749 li +165.351 304.699 mo +164.349 304.699 li +164.349 285.651 li +165.351 285.651 li +165.351 304.699 li +165.351 284.648 mo +164.349 284.648 li +164.349 265.602 li +165.351 265.602 li +165.351 284.648 li +165.351 264.599 mo +164.349 264.599 li +164.349 245.551 li +165.351 245.551 li +165.351 264.599 li +165.351 244.549 mo +164.349 244.549 li +164.349 225.501 li +165.351 225.501 li +165.351 244.549 li +165.351 224.499 mo +164.349 224.499 li +164.349 205.451 li +165.351 205.451 li +165.351 224.499 li +165.351 204.449 mo +164.349 204.449 li +164.349 185.401 li +165.351 185.401 li +165.351 204.449 li +165.351 184.399 mo +164.349 184.399 li +164.349 165.351 li +165.351 165.351 li +165.351 184.399 li +165.351 164.349 mo +164.349 164.349 li +164.349 145.301 li +165.351 145.301 li +165.351 164.349 li +165.351 144.299 mo +164.349 144.299 li +164.349 125.251 li +165.351 125.251 li +165.351 144.299 li +165.351 124.248 mo +164.349 124.248 li +164.349 105.201 li +165.351 105.201 li +165.351 124.248 li +165.351 104.199 mo +164.349 104.199 li +164.349 85.1513 li +165.351 85.1513 li +165.351 104.199 li +165.351 84.1489 mo +164.349 84.1489 li +164.349 65.101 li +165.351 65.101 li +165.351 84.1489 li +165.351 64.0986 mo +164.349 64.0986 li +164.349 45.0513 li +165.351 45.0513 li +165.351 64.0986 li +165.351 44.0488 mo +164.349 44.0488 li +164.349 25.5 li +165.351 25.5 li +165.351 44.0488 li +f +185.401 424.5 mo +184.399 424.5 li +184.399 405.951 li +185.401 405.951 li +185.401 424.5 li +185.401 404.949 mo +184.399 404.949 li +184.399 385.901 li +185.401 385.901 li +185.401 404.949 li +185.401 384.898 mo +184.399 384.898 li +184.399 365.852 li +185.401 365.852 li +185.401 384.898 li +185.401 364.849 mo +184.399 364.849 li +184.399 345.801 li +185.401 345.801 li +185.401 364.849 li +185.401 344.799 mo +184.399 344.799 li +184.399 325.751 li +185.401 325.751 li +185.401 344.799 li +185.401 324.749 mo +184.399 324.749 li +184.399 305.701 li +185.401 305.701 li +185.401 324.749 li +185.401 304.699 mo +184.399 304.699 li +184.399 285.651 li +185.401 285.651 li +185.401 304.699 li +185.401 284.648 mo +184.399 284.648 li +184.399 265.602 li +185.401 265.602 li +185.401 284.648 li +185.401 264.599 mo +184.399 264.599 li +184.399 245.551 li +185.401 245.551 li +185.401 264.599 li +185.401 244.549 mo +184.399 244.549 li +184.399 225.501 li +185.401 225.501 li +185.401 244.549 li +185.401 224.499 mo +184.399 224.499 li +184.399 205.451 li +185.401 205.451 li +185.401 224.499 li +185.401 204.449 mo +184.399 204.449 li +184.399 185.401 li +185.401 185.401 li +185.401 204.449 li +185.401 184.399 mo +184.399 184.399 li +184.399 165.351 li +185.401 165.351 li +185.401 184.399 li +185.401 164.349 mo +184.399 164.349 li +184.399 145.301 li +185.401 145.301 li +185.401 164.349 li +185.401 144.299 mo +184.399 144.299 li +184.399 125.251 li +185.401 125.251 li +185.401 144.299 li +185.401 124.248 mo +184.399 124.248 li +184.399 105.201 li +185.401 105.201 li +185.401 124.248 li +185.401 104.199 mo +184.399 104.199 li +184.399 85.1513 li +185.401 85.1513 li +185.401 104.199 li +185.401 84.1489 mo +184.399 84.1489 li +184.399 65.101 li +185.401 65.101 li +185.401 84.1489 li +185.401 64.0986 mo +184.399 64.0986 li +184.399 45.0513 li +185.401 45.0513 li +185.401 64.0986 li +185.401 44.0488 mo +184.399 44.0488 li +184.399 25.5 li +185.401 25.5 li +185.401 44.0488 li +f +205.451 424.5 mo +204.449 424.5 li +204.449 405.951 li +205.451 405.951 li +205.451 424.5 li +205.451 404.949 mo +204.449 404.949 li +204.449 385.901 li +205.451 385.901 li +205.451 404.949 li +205.451 384.898 mo +204.449 384.898 li +204.449 365.852 li +205.451 365.852 li +205.451 384.898 li +205.451 364.849 mo +204.449 364.849 li +204.449 345.801 li +205.451 345.801 li +205.451 364.849 li +205.451 344.799 mo +204.449 344.799 li +204.449 325.751 li +205.451 325.751 li +205.451 344.799 li +205.451 324.749 mo +204.449 324.749 li +204.449 305.701 li +205.451 305.701 li +205.451 324.749 li +205.451 304.699 mo +204.449 304.699 li +204.449 285.651 li +205.451 285.651 li +205.451 304.699 li +205.451 284.648 mo +204.449 284.648 li +204.449 265.602 li +205.451 265.602 li +205.451 284.648 li +205.451 264.599 mo +204.449 264.599 li +204.449 245.551 li +205.451 245.551 li +205.451 264.599 li +205.451 244.549 mo +204.449 244.549 li +204.449 225.501 li +205.451 225.501 li +205.451 244.549 li +205.451 224.499 mo +204.449 224.499 li +204.449 205.451 li +205.451 205.451 li +205.451 224.499 li +205.451 204.449 mo +204.449 204.449 li +204.449 185.401 li +205.451 185.401 li +205.451 204.449 li +205.451 184.399 mo +204.449 184.399 li +204.449 165.351 li +205.451 165.351 li +205.451 184.399 li +205.451 164.349 mo +204.449 164.349 li +204.449 145.301 li +205.451 145.301 li +205.451 164.349 li +205.451 144.299 mo +204.449 144.299 li +204.449 125.251 li +205.451 125.251 li +205.451 144.299 li +205.451 124.248 mo +204.449 124.248 li +204.449 105.201 li +205.451 105.201 li +205.451 124.248 li +205.451 104.199 mo +204.449 104.199 li +204.449 85.1513 li +205.451 85.1513 li +205.451 104.199 li +205.451 84.1489 mo +204.449 84.1489 li +204.449 65.101 li +205.451 65.101 li +205.451 84.1489 li +205.451 64.0986 mo +204.449 64.0986 li +204.449 45.0513 li +205.451 45.0513 li +205.451 64.0986 li +205.451 44.0488 mo +204.449 44.0488 li +204.449 25.5 li +205.451 25.5 li +205.451 44.0488 li +f +225.501 424.5 mo +224.499 424.5 li +224.499 405.951 li +225.501 405.951 li +225.501 424.5 li +225.501 404.949 mo +224.499 404.949 li +224.499 385.901 li +225.501 385.901 li +225.501 404.949 li +225.501 384.898 mo +224.499 384.898 li +224.499 365.852 li +225.501 365.852 li +225.501 384.898 li +225.501 364.849 mo +224.499 364.849 li +224.499 345.801 li +225.501 345.801 li +225.501 364.849 li +225.501 344.799 mo +224.499 344.799 li +224.499 325.751 li +225.501 325.751 li +225.501 344.799 li +225.501 324.749 mo +224.499 324.749 li +224.499 305.701 li +225.501 305.701 li +225.501 324.749 li +225.501 304.699 mo +224.499 304.699 li +224.499 285.651 li +225.501 285.651 li +225.501 304.699 li +225.501 284.648 mo +224.499 284.648 li +224.499 265.602 li +225.501 265.602 li +225.501 284.648 li +225.501 264.599 mo +224.499 264.599 li +224.499 245.551 li +225.501 245.551 li +225.501 264.599 li +225.501 244.549 mo +224.499 244.549 li +224.499 225.501 li +225.501 225.501 li +225.501 244.549 li +225.501 224.499 mo +224.499 224.499 li +224.499 205.451 li +225.501 205.451 li +225.501 224.499 li +225.501 204.449 mo +224.499 204.449 li +224.499 185.401 li +225.501 185.401 li +225.501 204.449 li +225.501 184.399 mo +224.499 184.399 li +224.499 165.351 li +225.501 165.351 li +225.501 184.399 li +225.501 164.349 mo +224.499 164.349 li +224.499 145.301 li +225.501 145.301 li +225.501 164.349 li +225.501 144.299 mo +224.499 144.299 li +224.499 125.251 li +225.501 125.251 li +225.501 144.299 li +225.501 124.248 mo +224.499 124.248 li +224.499 105.201 li +225.501 105.201 li +225.501 124.248 li +225.501 104.199 mo +224.499 104.199 li +224.499 85.1513 li +225.501 85.1513 li +225.501 104.199 li +225.501 84.1489 mo +224.499 84.1489 li +224.499 65.101 li +225.501 65.101 li +225.501 84.1489 li +225.501 64.0986 mo +224.499 64.0986 li +224.499 45.0513 li +225.501 45.0513 li +225.501 64.0986 li +225.501 44.0488 mo +224.499 44.0488 li +224.499 25.5 li +225.501 25.5 li +225.501 44.0488 li +.552941 .552941 .552941 rgb +f +245.551 424.5 mo +244.549 424.5 li +244.549 405.951 li +245.551 405.951 li +245.551 424.5 li +245.551 404.949 mo +244.549 404.949 li +244.549 385.901 li +245.551 385.901 li +245.551 404.949 li +245.551 384.898 mo +244.549 384.898 li +244.549 365.852 li +245.551 365.852 li +245.551 384.898 li +245.551 364.849 mo +244.549 364.849 li +244.549 345.801 li +245.551 345.801 li +245.551 364.849 li +245.551 344.799 mo +244.549 344.799 li +244.549 325.751 li +245.551 325.751 li +245.551 344.799 li +245.551 324.749 mo +244.549 324.749 li +244.549 305.701 li +245.551 305.701 li +245.551 324.749 li +245.551 304.699 mo +244.549 304.699 li +244.549 285.651 li +245.551 285.651 li +245.551 304.699 li +245.551 284.648 mo +244.549 284.648 li +244.549 265.602 li +245.551 265.602 li +245.551 284.648 li +245.551 264.599 mo +244.549 264.599 li +244.549 245.551 li +245.551 245.551 li +245.551 264.599 li +245.551 244.549 mo +244.549 244.549 li +244.549 225.501 li +245.551 225.501 li +245.551 244.549 li +245.551 224.499 mo +244.549 224.499 li +244.549 205.451 li +245.551 205.451 li +245.551 224.499 li +245.551 204.449 mo +244.549 204.449 li +244.549 185.401 li +245.551 185.401 li +245.551 204.449 li +245.551 184.399 mo +244.549 184.399 li +244.549 165.351 li +245.551 165.351 li +245.551 184.399 li +245.551 164.349 mo +244.549 164.349 li +244.549 145.301 li +245.551 145.301 li +245.551 164.349 li +245.551 144.299 mo +244.549 144.299 li +244.549 125.251 li +245.551 125.251 li +245.551 144.299 li +245.551 124.248 mo +244.549 124.248 li +244.549 105.201 li +245.551 105.201 li +245.551 124.248 li +245.551 104.199 mo +244.549 104.199 li +244.549 85.1513 li +245.551 85.1513 li +245.551 104.199 li +245.551 84.1489 mo +244.549 84.1489 li +244.549 65.101 li +245.551 65.101 li +245.551 84.1489 li +245.551 64.0986 mo +244.549 64.0986 li +244.549 45.0513 li +245.551 45.0513 li +245.551 64.0986 li +245.551 44.0488 mo +244.549 44.0488 li +244.549 25.5 li +245.551 25.5 li +245.551 44.0488 li +.282353 .282353 .282353 rgb +f +265.602 424.5 mo +264.599 424.5 li +264.599 405.951 li +265.602 405.951 li +265.602 424.5 li +265.602 404.949 mo +264.599 404.949 li +264.599 385.901 li +265.602 385.901 li +265.602 404.949 li +265.602 384.898 mo +264.599 384.898 li +264.599 365.852 li +265.602 365.852 li +265.602 384.898 li +265.602 364.849 mo +264.599 364.849 li +264.599 345.801 li +265.602 345.801 li +265.602 364.849 li +265.602 344.799 mo +264.599 344.799 li +264.599 325.751 li +265.602 325.751 li +265.602 344.799 li +265.602 324.749 mo +264.599 324.749 li +264.599 305.701 li +265.602 305.701 li +265.602 324.749 li +265.602 304.699 mo +264.599 304.699 li +264.599 285.651 li +265.602 285.651 li +265.602 304.699 li +265.602 284.648 mo +264.599 284.648 li +264.599 265.602 li +265.602 265.602 li +265.602 284.648 li +265.602 264.599 mo +264.599 264.599 li +264.599 245.551 li +265.602 245.551 li +265.602 264.599 li +265.602 244.549 mo +264.599 244.549 li +264.599 225.501 li +265.602 225.501 li +265.602 244.549 li +265.602 224.499 mo +264.599 224.499 li +264.599 205.451 li +265.602 205.451 li +265.602 224.499 li +265.602 204.449 mo +264.599 204.449 li +264.599 185.401 li +265.602 185.401 li +265.602 204.449 li +265.602 184.399 mo +264.599 184.399 li +264.599 165.351 li +265.602 165.351 li +265.602 184.399 li +265.602 164.349 mo +264.599 164.349 li +264.599 145.301 li +265.602 145.301 li +265.602 164.349 li +265.602 144.299 mo +264.599 144.299 li +264.599 125.251 li +265.602 125.251 li +265.602 144.299 li +265.602 124.248 mo +264.599 124.248 li +264.599 105.201 li +265.602 105.201 li +265.602 124.248 li +265.602 104.199 mo +264.599 104.199 li +264.599 85.1513 li +265.602 85.1513 li +265.602 104.199 li +265.602 84.1489 mo +264.599 84.1489 li +264.599 65.101 li +265.602 65.101 li +265.602 84.1489 li +265.602 64.0986 mo +264.599 64.0986 li +264.599 45.0513 li +265.602 45.0513 li +265.602 64.0986 li +265.602 44.0488 mo +264.599 44.0488 li +264.599 25.5 li +265.602 25.5 li +265.602 44.0488 li +f +285.651 424.5 mo +284.648 424.5 li +284.648 405.951 li +285.651 405.951 li +285.651 424.5 li +285.651 404.949 mo +284.648 404.949 li +284.648 385.901 li +285.651 385.901 li +285.651 404.949 li +285.651 384.898 mo +284.648 384.898 li +284.648 365.852 li +285.651 365.852 li +285.651 384.898 li +285.651 364.849 mo +284.648 364.849 li +284.648 345.801 li +285.651 345.801 li +285.651 364.849 li +285.651 344.799 mo +284.648 344.799 li +284.648 325.751 li +285.651 325.751 li +285.651 344.799 li +285.651 324.749 mo +284.648 324.749 li +284.648 305.701 li +285.651 305.701 li +285.651 324.749 li +285.651 304.699 mo +284.648 304.699 li +284.648 285.651 li +285.651 285.651 li +285.651 304.699 li +285.651 284.648 mo +284.648 284.648 li +284.648 265.602 li +285.651 265.602 li +285.651 284.648 li +285.651 264.599 mo +284.648 264.599 li +284.648 245.551 li +285.651 245.551 li +285.651 264.599 li +285.651 244.549 mo +284.648 244.549 li +284.648 225.501 li +285.651 225.501 li +285.651 244.549 li +285.651 224.499 mo +284.648 224.499 li +284.648 205.451 li +285.651 205.451 li +285.651 224.499 li +285.651 204.449 mo +284.648 204.449 li +284.648 185.401 li +285.651 185.401 li +285.651 204.449 li +285.651 184.399 mo +284.648 184.399 li +284.648 165.351 li +285.651 165.351 li +285.651 184.399 li +285.651 164.349 mo +284.648 164.349 li +284.648 145.301 li +285.651 145.301 li +285.651 164.349 li +285.651 144.299 mo +284.648 144.299 li +284.648 125.251 li +285.651 125.251 li +285.651 144.299 li +285.651 124.248 mo +284.648 124.248 li +284.648 105.201 li +285.651 105.201 li +285.651 124.248 li +285.651 104.199 mo +284.648 104.199 li +284.648 85.1513 li +285.651 85.1513 li +285.651 104.199 li +285.651 84.1489 mo +284.648 84.1489 li +284.648 65.101 li +285.651 65.101 li +285.651 84.1489 li +285.651 64.0986 mo +284.648 64.0986 li +284.648 45.0513 li +285.651 45.0513 li +285.651 64.0986 li +285.651 44.0488 mo +284.648 44.0488 li +284.648 25.5 li +285.651 25.5 li +285.651 44.0488 li +f +305.701 424.5 mo +304.699 424.5 li +304.699 405.951 li +305.701 405.951 li +305.701 424.5 li +305.701 404.949 mo +304.699 404.949 li +304.699 385.901 li +305.701 385.901 li +305.701 404.949 li +305.701 384.898 mo +304.699 384.898 li +304.699 365.852 li +305.701 365.852 li +305.701 384.898 li +305.701 364.849 mo +304.699 364.849 li +304.699 345.801 li +305.701 345.801 li +305.701 364.849 li +305.701 344.799 mo +304.699 344.799 li +304.699 325.751 li +305.701 325.751 li +305.701 344.799 li +305.701 324.749 mo +304.699 324.749 li +304.699 305.701 li +305.701 305.701 li +305.701 324.749 li +305.701 304.699 mo +304.699 304.699 li +304.699 285.651 li +305.701 285.651 li +305.701 304.699 li +305.701 284.648 mo +304.699 284.648 li +304.699 265.602 li +305.701 265.602 li +305.701 284.648 li +305.701 264.599 mo +304.699 264.599 li +304.699 245.551 li +305.701 245.551 li +305.701 264.599 li +305.701 244.549 mo +304.699 244.549 li +304.699 225.501 li +305.701 225.501 li +305.701 244.549 li +305.701 224.499 mo +304.699 224.499 li +304.699 205.451 li +305.701 205.451 li +305.701 224.499 li +305.701 204.449 mo +304.699 204.449 li +304.699 185.401 li +305.701 185.401 li +305.701 204.449 li +305.701 184.399 mo +304.699 184.399 li +304.699 165.351 li +305.701 165.351 li +305.701 184.399 li +305.701 164.349 mo +304.699 164.349 li +304.699 145.301 li +305.701 145.301 li +305.701 164.349 li +305.701 144.299 mo +304.699 144.299 li +304.699 125.251 li +305.701 125.251 li +305.701 144.299 li +305.701 124.248 mo +304.699 124.248 li +304.699 105.201 li +305.701 105.201 li +305.701 124.248 li +305.701 104.199 mo +304.699 104.199 li +304.699 85.1513 li +305.701 85.1513 li +305.701 104.199 li +305.701 84.1489 mo +304.699 84.1489 li +304.699 65.101 li +305.701 65.101 li +305.701 84.1489 li +305.701 64.0986 mo +304.699 64.0986 li +304.699 45.0513 li +305.701 45.0513 li +305.701 64.0986 li +305.701 44.0488 mo +304.699 44.0488 li +304.699 25.5 li +305.701 25.5 li +305.701 44.0488 li +f +325.751 424.5 mo +324.749 424.5 li +324.749 405.951 li +325.751 405.951 li +325.751 424.5 li +325.751 404.949 mo +324.749 404.949 li +324.749 385.901 li +325.751 385.901 li +325.751 404.949 li +325.751 384.898 mo +324.749 384.898 li +324.749 365.852 li +325.751 365.852 li +325.751 384.898 li +325.751 364.849 mo +324.749 364.849 li +324.749 345.801 li +325.751 345.801 li +325.751 364.849 li +325.751 344.799 mo +324.749 344.799 li +324.749 325.751 li +325.751 325.751 li +325.751 344.799 li +325.751 324.749 mo +324.749 324.749 li +324.749 305.701 li +325.751 305.701 li +325.751 324.749 li +325.751 304.699 mo +324.749 304.699 li +324.749 285.651 li +325.751 285.651 li +325.751 304.699 li +325.751 284.648 mo +324.749 284.648 li +324.749 265.602 li +325.751 265.602 li +325.751 284.648 li +325.751 264.599 mo +324.749 264.599 li +324.749 245.551 li +325.751 245.551 li +325.751 264.599 li +325.751 244.549 mo +324.749 244.549 li +324.749 225.501 li +325.751 225.501 li +325.751 244.549 li +325.751 224.499 mo +324.749 224.499 li +324.749 205.451 li +325.751 205.451 li +325.751 224.499 li +325.751 204.449 mo +324.749 204.449 li +324.749 185.401 li +325.751 185.401 li +325.751 204.449 li +325.751 184.399 mo +324.749 184.399 li +324.749 165.351 li +325.751 165.351 li +325.751 184.399 li +325.751 164.349 mo +324.749 164.349 li +324.749 145.301 li +325.751 145.301 li +325.751 164.349 li +325.751 144.299 mo +324.749 144.299 li +324.749 125.251 li +325.751 125.251 li +325.751 144.299 li +325.751 124.248 mo +324.749 124.248 li +324.749 105.201 li +325.751 105.201 li +325.751 124.248 li +325.751 104.199 mo +324.749 104.199 li +324.749 85.1513 li +325.751 85.1513 li +325.751 104.199 li +325.751 84.1489 mo +324.749 84.1489 li +324.749 65.101 li +325.751 65.101 li +325.751 84.1489 li +325.751 64.0986 mo +324.749 64.0986 li +324.749 45.0513 li +325.751 45.0513 li +325.751 64.0986 li +325.751 44.0488 mo +324.749 44.0488 li +324.749 25.5 li +325.751 25.5 li +325.751 44.0488 li +.552941 .552941 .552941 rgb +f +345.801 424.5 mo +344.799 424.5 li +344.799 405.951 li +345.801 405.951 li +345.801 424.5 li +345.801 404.949 mo +344.799 404.949 li +344.799 385.901 li +345.801 385.901 li +345.801 404.949 li +345.801 384.898 mo +344.799 384.898 li +344.799 365.852 li +345.801 365.852 li +345.801 384.898 li +345.801 364.849 mo +344.799 364.849 li +344.799 345.801 li +345.801 345.801 li +345.801 364.849 li +345.801 344.799 mo +344.799 344.799 li +344.799 325.751 li +345.801 325.751 li +345.801 344.799 li +345.801 324.749 mo +344.799 324.749 li +344.799 305.701 li +345.801 305.701 li +345.801 324.749 li +345.801 304.699 mo +344.799 304.699 li +344.799 285.651 li +345.801 285.651 li +345.801 304.699 li +345.801 284.648 mo +344.799 284.648 li +344.799 265.602 li +345.801 265.602 li +345.801 284.648 li +345.801 264.599 mo +344.799 264.599 li +344.799 245.551 li +345.801 245.551 li +345.801 264.599 li +345.801 244.549 mo +344.799 244.549 li +344.799 225.501 li +345.801 225.501 li +345.801 244.549 li +345.801 224.499 mo +344.799 224.499 li +344.799 205.451 li +345.801 205.451 li +345.801 224.499 li +345.801 204.449 mo +344.799 204.449 li +344.799 185.401 li +345.801 185.401 li +345.801 204.449 li +345.801 184.399 mo +344.799 184.399 li +344.799 165.351 li +345.801 165.351 li +345.801 184.399 li +345.801 164.349 mo +344.799 164.349 li +344.799 145.301 li +345.801 145.301 li +345.801 164.349 li +345.801 144.299 mo +344.799 144.299 li +344.799 125.251 li +345.801 125.251 li +345.801 144.299 li +345.801 124.248 mo +344.799 124.248 li +344.799 105.201 li +345.801 105.201 li +345.801 124.248 li +345.801 104.199 mo +344.799 104.199 li +344.799 85.1513 li +345.801 85.1513 li +345.801 104.199 li +345.801 84.1489 mo +344.799 84.1489 li +344.799 65.101 li +345.801 65.101 li +345.801 84.1489 li +345.801 64.0986 mo +344.799 64.0986 li +344.799 45.0513 li +345.801 45.0513 li +345.801 64.0986 li +345.801 44.0488 mo +344.799 44.0488 li +344.799 25.5 li +345.801 25.5 li +345.801 44.0488 li +.282353 .282353 .282353 rgb +f +365.852 424.5 mo +364.849 424.5 li +364.849 405.951 li +365.852 405.951 li +365.852 424.5 li +365.852 404.949 mo +364.849 404.949 li +364.849 385.901 li +365.852 385.901 li +365.852 404.949 li +365.852 384.898 mo +364.849 384.898 li +364.849 365.852 li +365.852 365.852 li +365.852 384.898 li +365.852 364.849 mo +364.849 364.849 li +364.849 345.801 li +365.852 345.801 li +365.852 364.849 li +365.852 344.799 mo +364.849 344.799 li +364.849 325.751 li +365.852 325.751 li +365.852 344.799 li +365.852 324.749 mo +364.849 324.749 li +364.849 305.701 li +365.852 305.701 li +365.852 324.749 li +365.852 304.699 mo +364.849 304.699 li +364.849 285.651 li +365.852 285.651 li +365.852 304.699 li +365.852 284.648 mo +364.849 284.648 li +364.849 265.602 li +365.852 265.602 li +365.852 284.648 li +365.852 264.599 mo +364.849 264.599 li +364.849 245.551 li +365.852 245.551 li +365.852 264.599 li +365.852 244.549 mo +364.849 244.549 li +364.849 225.501 li +365.852 225.501 li +365.852 244.549 li +365.852 224.499 mo +364.849 224.499 li +364.849 205.451 li +365.852 205.451 li +365.852 224.499 li +365.852 204.449 mo +364.849 204.449 li +364.849 185.401 li +365.852 185.401 li +365.852 204.449 li +365.852 184.399 mo +364.849 184.399 li +364.849 165.351 li +365.852 165.351 li +365.852 184.399 li +365.852 164.349 mo +364.849 164.349 li +364.849 145.301 li +365.852 145.301 li +365.852 164.349 li +365.852 144.299 mo +364.849 144.299 li +364.849 125.251 li +365.852 125.251 li +365.852 144.299 li +365.852 124.248 mo +364.849 124.248 li +364.849 105.201 li +365.852 105.201 li +365.852 124.248 li +365.852 104.199 mo +364.849 104.199 li +364.849 85.1513 li +365.852 85.1513 li +365.852 104.199 li +365.852 84.1489 mo +364.849 84.1489 li +364.849 65.101 li +365.852 65.101 li +365.852 84.1489 li +365.852 64.0986 mo +364.849 64.0986 li +364.849 45.0513 li +365.852 45.0513 li +365.852 64.0986 li +365.852 44.0488 mo +364.849 44.0488 li +364.849 25.5 li +365.852 25.5 li +365.852 44.0488 li +f +385.901 424.5 mo +384.898 424.5 li +384.898 405.951 li +385.901 405.951 li +385.901 424.5 li +385.901 404.949 mo +384.898 404.949 li +384.898 385.901 li +385.901 385.901 li +385.901 404.949 li +385.901 384.898 mo +384.898 384.898 li +384.898 365.852 li +385.901 365.852 li +385.901 384.898 li +385.901 364.849 mo +384.898 364.849 li +384.898 345.801 li +385.901 345.801 li +385.901 364.849 li +385.901 344.799 mo +384.898 344.799 li +384.898 325.751 li +385.901 325.751 li +385.901 344.799 li +385.901 324.749 mo +384.898 324.749 li +384.898 305.701 li +385.901 305.701 li +385.901 324.749 li +385.901 304.699 mo +384.898 304.699 li +384.898 285.651 li +385.901 285.651 li +385.901 304.699 li +385.901 284.648 mo +384.898 284.648 li +384.898 265.602 li +385.901 265.602 li +385.901 284.648 li +385.901 264.599 mo +384.898 264.599 li +384.898 245.551 li +385.901 245.551 li +385.901 264.599 li +385.901 244.549 mo +384.898 244.549 li +384.898 225.501 li +385.901 225.501 li +385.901 244.549 li +385.901 224.499 mo +384.898 224.499 li +384.898 205.451 li +385.901 205.451 li +385.901 224.499 li +385.901 204.449 mo +384.898 204.449 li +384.898 185.401 li +385.901 185.401 li +385.901 204.449 li +385.901 184.399 mo +384.898 184.399 li +384.898 165.351 li +385.901 165.351 li +385.901 184.399 li +385.901 164.349 mo +384.898 164.349 li +384.898 145.301 li +385.901 145.301 li +385.901 164.349 li +385.901 144.299 mo +384.898 144.299 li +384.898 125.251 li +385.901 125.251 li +385.901 144.299 li +385.901 124.248 mo +384.898 124.248 li +384.898 105.201 li +385.901 105.201 li +385.901 124.248 li +385.901 104.199 mo +384.898 104.199 li +384.898 85.1513 li +385.901 85.1513 li +385.901 104.199 li +385.901 84.1489 mo +384.898 84.1489 li +384.898 65.101 li +385.901 65.101 li +385.901 84.1489 li +385.901 64.0986 mo +384.898 64.0986 li +384.898 45.0513 li +385.901 45.0513 li +385.901 64.0986 li +385.901 44.0488 mo +384.898 44.0488 li +384.898 25.5 li +385.901 25.5 li +385.901 44.0488 li +f +405.951 424.5 mo +404.949 424.5 li +404.949 405.951 li +405.951 405.951 li +405.951 424.5 li +405.951 404.949 mo +404.949 404.949 li +404.949 385.901 li +405.951 385.901 li +405.951 404.949 li +405.951 384.898 mo +404.949 384.898 li +404.949 365.852 li +405.951 365.852 li +405.951 384.898 li +405.951 364.849 mo +404.949 364.849 li +404.949 345.801 li +405.951 345.801 li +405.951 364.849 li +405.951 344.799 mo +404.949 344.799 li +404.949 325.751 li +405.951 325.751 li +405.951 344.799 li +405.951 324.749 mo +404.949 324.749 li +404.949 305.701 li +405.951 305.701 li +405.951 324.749 li +405.951 304.699 mo +404.949 304.699 li +404.949 285.651 li +405.951 285.651 li +405.951 304.699 li +405.951 284.648 mo +404.949 284.648 li +404.949 265.602 li +405.951 265.602 li +405.951 284.648 li +405.951 264.599 mo +404.949 264.599 li +404.949 245.551 li +405.951 245.551 li +405.951 264.599 li +405.951 244.549 mo +404.949 244.549 li +404.949 225.501 li +405.951 225.501 li +405.951 244.549 li +405.951 224.499 mo +404.949 224.499 li +404.949 205.451 li +405.951 205.451 li +405.951 224.499 li +405.951 204.449 mo +404.949 204.449 li +404.949 185.401 li +405.951 185.401 li +405.951 204.449 li +405.951 184.399 mo +404.949 184.399 li +404.949 165.351 li +405.951 165.351 li +405.951 184.399 li +405.951 164.349 mo +404.949 164.349 li +404.949 145.301 li +405.951 145.301 li +405.951 164.349 li +405.951 144.299 mo +404.949 144.299 li +404.949 125.251 li +405.951 125.251 li +405.951 144.299 li +405.951 124.248 mo +404.949 124.248 li +404.949 105.201 li +405.951 105.201 li +405.951 124.248 li +405.951 104.199 mo +404.949 104.199 li +404.949 85.1513 li +405.951 85.1513 li +405.951 104.199 li +405.951 84.1489 mo +404.949 84.1489 li +404.949 65.101 li +405.951 65.101 li +405.951 84.1489 li +405.951 64.0986 mo +404.949 64.0986 li +404.949 45.0513 li +405.951 45.0513 li +405.951 64.0986 li +405.951 44.0488 mo +404.949 44.0488 li +404.949 25.5 li +405.951 25.5 li +405.951 44.0488 li +f +425.5 425 mo +425 425 li +425 424.5 li +424.5 424.5 li +424.5 405.951 li +425.5 405.951 li +425.5 425 li +425.5 404.949 mo +424.5 404.949 li +424.5 385.901 li +425.5 385.901 li +425.5 404.949 li +425.5 384.898 mo +424.5 384.898 li +424.5 365.852 li +425.5 365.852 li +425.5 384.898 li +425.5 364.849 mo +424.5 364.849 li +424.5 345.801 li +425.5 345.801 li +425.5 364.849 li +425.5 344.799 mo +424.5 344.799 li +424.5 325.751 li +425.5 325.751 li +425.5 344.799 li +425.5 324.749 mo +424.5 324.749 li +424.5 305.701 li +425.5 305.701 li +425.5 324.749 li +425.5 304.699 mo +424.5 304.699 li +424.5 285.651 li +425.5 285.651 li +425.5 304.699 li +425.5 284.648 mo +424.5 284.648 li +424.5 265.602 li +425.5 265.602 li +425.5 284.648 li +425.5 264.599 mo +424.5 264.599 li +424.5 245.551 li +425.5 245.551 li +425.5 264.599 li +425.5 244.549 mo +424.5 244.549 li +424.5 225.501 li +425.5 225.501 li +425.5 244.549 li +425.5 224.499 mo +424.5 224.499 li +424.5 205.451 li +425.5 205.451 li +425.5 224.499 li +425.5 204.449 mo +424.5 204.449 li +424.5 185.401 li +425.5 185.401 li +425.5 204.449 li +425.5 184.399 mo +424.5 184.399 li +424.5 165.351 li +425.5 165.351 li +425.5 184.399 li +425.5 164.349 mo +424.5 164.349 li +424.5 145.301 li +425.5 145.301 li +425.5 164.349 li +425.5 144.299 mo +424.5 144.299 li +424.5 125.251 li +425.5 125.251 li +425.5 144.299 li +425.5 124.248 mo +424.5 124.248 li +424.5 105.201 li +425.5 105.201 li +425.5 124.248 li +425.5 104.199 mo +424.5 104.199 li +424.5 85.1513 li +425.5 85.1513 li +425.5 104.199 li +425.5 84.1489 mo +424.5 84.1489 li +424.5 65.101 li +425.5 65.101 li +425.5 84.1489 li +425.5 64.0986 mo +424.5 64.0986 li +424.5 45.0513 li +425.5 45.0513 li +425.5 64.0986 li +425.5 44.0488 mo +424.5 44.0488 li +424.5 25.5 li +425 25.5 li +425 25 li +425.5 25 li +425.5 44.0488 li +.552941 .552941 .552941 rgb +f +424.5 25.5 mo +405.951 25.5 li +405.951 24.5 li +425 24.5 li +425 25 li +424.5 25 li +424.5 25.5 li +404.949 25.5 mo +385.901 25.5 li +385.901 24.5 li +404.949 24.5 li +404.949 25.5 li +384.898 25.5 mo +365.852 25.5 li +365.852 24.5 li +384.898 24.5 li +384.898 25.5 li +364.849 25.5 mo +345.801 25.5 li +345.801 24.5 li +364.849 24.5 li +364.849 25.5 li +344.799 25.5 mo +325.751 25.5 li +325.751 24.5 li +344.799 24.5 li +344.799 25.5 li +324.749 25.5 mo +305.701 25.5 li +305.701 24.5 li +324.749 24.5 li +324.749 25.5 li +304.699 25.5 mo +285.651 25.5 li +285.651 24.5 li +304.699 24.5 li +304.699 25.5 li +284.648 25.5 mo +265.602 25.5 li +265.602 24.5 li +284.648 24.5 li +284.648 25.5 li +264.599 25.5 mo +245.551 25.5 li +245.551 24.5 li +264.599 24.5 li +264.599 25.5 li +244.549 25.5 mo +225.501 25.5 li +225.501 24.5 li +244.549 24.5 li +244.549 25.5 li +224.499 25.5 mo +205.451 25.5 li +205.451 24.5 li +224.499 24.5 li +224.499 25.5 li +204.449 25.5 mo +185.401 25.5 li +185.401 24.5 li +204.449 24.5 li +204.449 25.5 li +184.399 25.5 mo +165.351 25.5 li +165.351 24.5 li +184.399 24.5 li +184.399 25.5 li +164.349 25.5 mo +145.301 25.5 li +145.301 24.5 li +164.349 24.5 li +164.349 25.5 li +144.299 25.5 mo +125.251 25.5 li +125.251 24.5 li +144.299 24.5 li +144.299 25.5 li +124.248 25.5 mo +105.201 25.5 li +105.201 24.5 li +124.248 24.5 li +124.248 25.5 li +104.199 25.5 mo +85.1513 25.5 li +85.1513 24.5 li +104.199 24.5 li +104.199 25.5 li +84.1489 25.5 mo +65.101 25.5 li +65.101 24.5 li +84.1489 24.5 li +84.1489 25.5 li +64.0986 25.5 mo +45.0513 25.5 li +45.0513 24.5 li +64.0986 24.5 li +64.0986 25.5 li +44.0488 25.5 mo +25.5 25.5 li +25.5 25 li +25 25 li +25 24.5 li +44.0488 24.5 li +44.0488 25.5 li +f +25.5 25.5 mo +25 25.5 li +25 25 li +25.5 25 li +25.5 25.5 li +.776471 .776471 .776471 rgb +f +45.0513 25.5 mo +44.0488 25.5 li +44.0488 24.5 li +45.0513 24.5 li +45.0513 25.5 li +.643137 .643137 .643137 rgb +f +65.101 25.5 mo +64.0986 25.5 li +64.0986 24.5 li +65.101 24.5 li +65.101 25.5 li +f +85.1513 25.5 mo +84.1489 25.5 li +84.1489 24.5 li +85.1513 24.5 li +85.1513 25.5 li +f +105.201 25.5 mo +104.199 25.5 li +104.199 24.5 li +105.201 24.5 li +105.201 25.5 li +f +125.251 25.5 mo +124.248 25.5 li +124.248 24.5 li +125.251 24.5 li +125.251 25.5 li +.776471 .776471 .776471 rgb +f +145.301 25.5 mo +144.299 25.5 li +144.299 24.5 li +145.301 24.5 li +145.301 25.5 li +.643137 .643137 .643137 rgb +f +165.351 25.5 mo +164.349 25.5 li +164.349 24.5 li +165.351 24.5 li +165.351 25.5 li +f +185.401 25.5 mo +184.399 25.5 li +184.399 24.5 li +185.401 24.5 li +185.401 25.5 li +f +205.451 25.5 mo +204.449 25.5 li +204.449 24.5 li +205.451 24.5 li +205.451 25.5 li +f +225.501 25.5 mo +224.499 25.5 li +224.499 24.5 li +225.501 24.5 li +225.501 25.5 li +.776471 .776471 .776471 rgb +f +245.551 25.5 mo +244.549 25.5 li +244.549 24.5 li +245.551 24.5 li +245.551 25.5 li +.643137 .643137 .643137 rgb +f +265.602 25.5 mo +264.599 25.5 li +264.599 24.5 li +265.602 24.5 li +265.602 25.5 li +f +285.651 25.5 mo +284.648 25.5 li +284.648 24.5 li +285.651 24.5 li +285.651 25.5 li +f +305.701 25.5 mo +304.699 25.5 li +304.699 24.5 li +305.701 24.5 li +305.701 25.5 li +f +325.751 25.5 mo +324.749 25.5 li +324.749 24.5 li +325.751 24.5 li +325.751 25.5 li +.776471 .776471 .776471 rgb +f +345.801 25.5 mo +344.799 25.5 li +344.799 24.5 li +345.801 24.5 li +345.801 25.5 li +.643137 .643137 .643137 rgb +f +365.852 25.5 mo +364.849 25.5 li +364.849 24.5 li +365.852 24.5 li +365.852 25.5 li +f +385.901 25.5 mo +384.898 25.5 li +384.898 24.5 li +385.901 24.5 li +385.901 25.5 li +f +405.951 25.5 mo +404.949 25.5 li +404.949 24.5 li +405.951 24.5 li +405.951 25.5 li +f +425 25.5 mo +424.5 25.5 li +424.5 25 li +425 25 li +425 25.5 li +.776471 .776471 .776471 rgb +f +424.5 45.0513 mo +405.951 45.0513 li +405.951 44.0488 li +424.5 44.0488 li +424.5 45.0513 li +404.949 45.0513 mo +385.901 45.0513 li +385.901 44.0488 li +404.949 44.0488 li +404.949 45.0513 li +384.898 45.0513 mo +365.852 45.0513 li +365.852 44.0488 li +384.898 44.0488 li +384.898 45.0513 li +364.849 45.0513 mo +345.801 45.0513 li +345.801 44.0488 li +364.849 44.0488 li +364.849 45.0513 li +344.799 45.0513 mo +325.751 45.0513 li +325.751 44.0488 li +344.799 44.0488 li +344.799 45.0513 li +324.749 45.0513 mo +305.701 45.0513 li +305.701 44.0488 li +324.749 44.0488 li +324.749 45.0513 li +304.699 45.0513 mo +285.651 45.0513 li +285.651 44.0488 li +304.699 44.0488 li +304.699 45.0513 li +284.648 45.0513 mo +265.602 45.0513 li +265.602 44.0488 li +284.648 44.0488 li +284.648 45.0513 li +264.599 45.0513 mo +245.551 45.0513 li +245.551 44.0488 li +264.599 44.0488 li +264.599 45.0513 li +244.549 45.0513 mo +225.501 45.0513 li +225.501 44.0488 li +244.549 44.0488 li +244.549 45.0513 li +224.499 45.0513 mo +205.451 45.0513 li +205.451 44.0488 li +224.499 44.0488 li +224.499 45.0513 li +204.449 45.0513 mo +185.401 45.0513 li +185.401 44.0488 li +204.449 44.0488 li +204.449 45.0513 li +184.399 45.0513 mo +165.351 45.0513 li +165.351 44.0488 li +184.399 44.0488 li +184.399 45.0513 li +164.349 45.0513 mo +145.301 45.0513 li +145.301 44.0488 li +164.349 44.0488 li +164.349 45.0513 li +144.299 45.0513 mo +125.251 45.0513 li +125.251 44.0488 li +144.299 44.0488 li +144.299 45.0513 li +124.248 45.0513 mo +105.201 45.0513 li +105.201 44.0488 li +124.248 44.0488 li +124.248 45.0513 li +104.199 45.0513 mo +85.1513 45.0513 li +85.1513 44.0488 li +104.199 44.0488 li +104.199 45.0513 li +84.1489 45.0513 mo +65.101 45.0513 li +65.101 44.0488 li +84.1489 44.0488 li +84.1489 45.0513 li +64.0986 45.0513 mo +45.0513 45.0513 li +45.0513 44.0488 li +64.0986 44.0488 li +64.0986 45.0513 li +44.0488 45.0513 mo +25.5 45.0513 li +25.5 44.0488 li +44.0488 44.0488 li +44.0488 45.0513 li +.282353 .282353 .282353 rgb +f +25.5 45.0513 mo +24.5 45.0513 li +24.5 44.0488 li +25.5 44.0488 li +25.5 45.0513 li +.643137 .643137 .643137 rgb +f +45.0513 45.0513 mo +44.0488 45.0513 li +44.0488 44.0488 li +45.0513 44.0488 li +45.0513 45.0513 li +.427451 .427451 .427451 rgb +f +65.101 45.0513 mo +64.0986 45.0513 li +64.0986 44.0488 li +65.101 44.0488 li +65.101 45.0513 li +f +85.1513 45.0513 mo +84.1489 45.0513 li +84.1489 44.0488 li +85.1513 44.0488 li +85.1513 45.0513 li +f +105.201 45.0513 mo +104.199 45.0513 li +104.199 44.0488 li +105.201 44.0488 li +105.201 45.0513 li +f +125.251 45.0513 mo +124.248 45.0513 li +124.248 44.0488 li +125.251 44.0488 li +125.251 45.0513 li +.643137 .643137 .643137 rgb +f +145.301 45.0513 mo +144.299 45.0513 li +144.299 44.0488 li +145.301 44.0488 li +145.301 45.0513 li +.427451 .427451 .427451 rgb +f +165.351 45.0513 mo +164.349 45.0513 li +164.349 44.0488 li +165.351 44.0488 li +165.351 45.0513 li +f +185.401 45.0513 mo +184.399 45.0513 li +184.399 44.0488 li +185.401 44.0488 li +185.401 45.0513 li +f +205.451 45.0513 mo +204.449 45.0513 li +204.449 44.0488 li +205.451 44.0488 li +205.451 45.0513 li +f +225.501 45.0513 mo +224.499 45.0513 li +224.499 44.0488 li +225.501 44.0488 li +225.501 45.0513 li +.643137 .643137 .643137 rgb +f +245.551 45.0513 mo +244.549 45.0513 li +244.549 44.0488 li +245.551 44.0488 li +245.551 45.0513 li +.427451 .427451 .427451 rgb +f +265.602 45.0513 mo +264.599 45.0513 li +264.599 44.0488 li +265.602 44.0488 li +265.602 45.0513 li +f +285.651 45.0513 mo +284.648 45.0513 li +284.648 44.0488 li +285.651 44.0488 li +285.651 45.0513 li +f +305.701 45.0513 mo +304.699 45.0513 li +304.699 44.0488 li +305.701 44.0488 li +305.701 45.0513 li +f +325.751 45.0513 mo +324.749 45.0513 li +324.749 44.0488 li +325.751 44.0488 li +325.751 45.0513 li +.643137 .643137 .643137 rgb +f +345.801 45.0513 mo +344.799 45.0513 li +344.799 44.0488 li +345.801 44.0488 li +345.801 45.0513 li +.427451 .427451 .427451 rgb +f +365.852 45.0513 mo +364.849 45.0513 li +364.849 44.0488 li +365.852 44.0488 li +365.852 45.0513 li +f +385.901 45.0513 mo +384.898 45.0513 li +384.898 44.0488 li +385.901 44.0488 li +385.901 45.0513 li +f +405.951 45.0513 mo +404.949 45.0513 li +404.949 44.0488 li +405.951 44.0488 li +405.951 45.0513 li +f +425.5 45.0513 mo +424.5 45.0513 li +424.5 44.0488 li +425.5 44.0488 li +425.5 45.0513 li +.643137 .643137 .643137 rgb +f +424.5 65.101 mo +405.951 65.101 li +405.951 64.0986 li +424.5 64.0986 li +424.5 65.101 li +404.949 65.101 mo +385.901 65.101 li +385.901 64.0986 li +404.949 64.0986 li +404.949 65.101 li +384.898 65.101 mo +365.852 65.101 li +365.852 64.0986 li +384.898 64.0986 li +384.898 65.101 li +364.849 65.101 mo +345.801 65.101 li +345.801 64.0986 li +364.849 64.0986 li +364.849 65.101 li +344.799 65.101 mo +325.751 65.101 li +325.751 64.0986 li +344.799 64.0986 li +344.799 65.101 li +324.749 65.101 mo +305.701 65.101 li +305.701 64.0986 li +324.749 64.0986 li +324.749 65.101 li +304.699 65.101 mo +285.651 65.101 li +285.651 64.0986 li +304.699 64.0986 li +304.699 65.101 li +284.648 65.101 mo +265.602 65.101 li +265.602 64.0986 li +284.648 64.0986 li +284.648 65.101 li +264.599 65.101 mo +245.551 65.101 li +245.551 64.0986 li +264.599 64.0986 li +264.599 65.101 li +244.549 65.101 mo +225.501 65.101 li +225.501 64.0986 li +244.549 64.0986 li +244.549 65.101 li +224.499 65.101 mo +205.451 65.101 li +205.451 64.0986 li +224.499 64.0986 li +224.499 65.101 li +204.449 65.101 mo +185.401 65.101 li +185.401 64.0986 li +204.449 64.0986 li +204.449 65.101 li +184.399 65.101 mo +165.351 65.101 li +165.351 64.0986 li +184.399 64.0986 li +184.399 65.101 li +164.349 65.101 mo +145.301 65.101 li +145.301 64.0986 li +164.349 64.0986 li +164.349 65.101 li +144.299 65.101 mo +125.251 65.101 li +125.251 64.0986 li +144.299 64.0986 li +144.299 65.101 li +124.248 65.101 mo +105.201 65.101 li +105.201 64.0986 li +124.248 64.0986 li +124.248 65.101 li +104.199 65.101 mo +85.1513 65.101 li +85.1513 64.0986 li +104.199 64.0986 li +104.199 65.101 li +84.1489 65.101 mo +65.101 65.101 li +65.101 64.0986 li +84.1489 64.0986 li +84.1489 65.101 li +64.0986 65.101 mo +45.0513 65.101 li +45.0513 64.0986 li +64.0986 64.0986 li +64.0986 65.101 li +44.0488 65.101 mo +25.5 65.101 li +25.5 64.0986 li +44.0488 64.0986 li +44.0488 65.101 li +.282353 .282353 .282353 rgb +f +25.5 65.101 mo +24.5 65.101 li +24.5 64.0986 li +25.5 64.0986 li +25.5 65.101 li +.643137 .643137 .643137 rgb +f +45.0513 65.101 mo +44.0488 65.101 li +44.0488 64.0986 li +45.0513 64.0986 li +45.0513 65.101 li +.427451 .427451 .427451 rgb +f +65.101 65.101 mo +64.0986 65.101 li +64.0986 64.0986 li +65.101 64.0986 li +65.101 65.101 li +f +85.1513 65.101 mo +84.1489 65.101 li +84.1489 64.0986 li +85.1513 64.0986 li +85.1513 65.101 li +f +105.201 65.101 mo +104.199 65.101 li +104.199 64.0986 li +105.201 64.0986 li +105.201 65.101 li +f +125.251 65.101 mo +124.248 65.101 li +124.248 64.0986 li +125.251 64.0986 li +125.251 65.101 li +.643137 .643137 .643137 rgb +f +145.301 65.101 mo +144.299 65.101 li +144.299 64.0986 li +145.301 64.0986 li +145.301 65.101 li +.427451 .427451 .427451 rgb +f +165.351 65.101 mo +164.349 65.101 li +164.349 64.0986 li +165.351 64.0986 li +165.351 65.101 li +f +185.401 65.101 mo +184.399 65.101 li +184.399 64.0986 li +185.401 64.0986 li +185.401 65.101 li +f +205.451 65.101 mo +204.449 65.101 li +204.449 64.0986 li +205.451 64.0986 li +205.451 65.101 li +f +225.501 65.101 mo +224.499 65.101 li +224.499 64.0986 li +225.501 64.0986 li +225.501 65.101 li +.643137 .643137 .643137 rgb +f +245.551 65.101 mo +244.549 65.101 li +244.549 64.0986 li +245.551 64.0986 li +245.551 65.101 li +.427451 .427451 .427451 rgb +f +265.602 65.101 mo +264.599 65.101 li +264.599 64.0986 li +265.602 64.0986 li +265.602 65.101 li +f +285.651 65.101 mo +284.648 65.101 li +284.648 64.0986 li +285.651 64.0986 li +285.651 65.101 li +f +305.701 65.101 mo +304.699 65.101 li +304.699 64.0986 li +305.701 64.0986 li +305.701 65.101 li +f +325.751 65.101 mo +324.749 65.101 li +324.749 64.0986 li +325.751 64.0986 li +325.751 65.101 li +.643137 .643137 .643137 rgb +f +345.801 65.101 mo +344.799 65.101 li +344.799 64.0986 li +345.801 64.0986 li +345.801 65.101 li +.427451 .427451 .427451 rgb +f +365.852 65.101 mo +364.849 65.101 li +364.849 64.0986 li +365.852 64.0986 li +365.852 65.101 li +f +385.901 65.101 mo +384.898 65.101 li +384.898 64.0986 li +385.901 64.0986 li +385.901 65.101 li +f +405.951 65.101 mo +404.949 65.101 li +404.949 64.0986 li +405.951 64.0986 li +405.951 65.101 li +f +425.5 65.101 mo +424.5 65.101 li +424.5 64.0986 li +425.5 64.0986 li +425.5 65.101 li +.643137 .643137 .643137 rgb +f +424.5 85.1513 mo +405.951 85.1513 li +405.951 84.1489 li +424.5 84.1489 li +424.5 85.1513 li +404.949 85.1513 mo +385.901 85.1513 li +385.901 84.1489 li +404.949 84.1489 li +404.949 85.1513 li +384.898 85.1513 mo +365.852 85.1513 li +365.852 84.1489 li +384.898 84.1489 li +384.898 85.1513 li +364.849 85.1513 mo +345.801 85.1513 li +345.801 84.1489 li +364.849 84.1489 li +364.849 85.1513 li +344.799 85.1513 mo +325.751 85.1513 li +325.751 84.1489 li +344.799 84.1489 li +344.799 85.1513 li +324.749 85.1513 mo +305.701 85.1513 li +305.701 84.1489 li +324.749 84.1489 li +324.749 85.1513 li +304.699 85.1513 mo +285.651 85.1513 li +285.651 84.1489 li +304.699 84.1489 li +304.699 85.1513 li +284.648 85.1513 mo +265.602 85.1513 li +265.602 84.1489 li +284.648 84.1489 li +284.648 85.1513 li +264.599 85.1513 mo +245.551 85.1513 li +245.551 84.1489 li +264.599 84.1489 li +264.599 85.1513 li +244.549 85.1513 mo +225.501 85.1513 li +225.501 84.1489 li +244.549 84.1489 li +244.549 85.1513 li +224.499 85.1513 mo +205.451 85.1513 li +205.451 84.1489 li +224.499 84.1489 li +224.499 85.1513 li +204.449 85.1513 mo +185.401 85.1513 li +185.401 84.1489 li +204.449 84.1489 li +204.449 85.1513 li +184.399 85.1513 mo +165.351 85.1513 li +165.351 84.1489 li +184.399 84.1489 li +184.399 85.1513 li +164.349 85.1513 mo +145.301 85.1513 li +145.301 84.1489 li +164.349 84.1489 li +164.349 85.1513 li +144.299 85.1513 mo +125.251 85.1513 li +125.251 84.1489 li +144.299 84.1489 li +144.299 85.1513 li +124.248 85.1513 mo +105.201 85.1513 li +105.201 84.1489 li +124.248 84.1489 li +124.248 85.1513 li +104.199 85.1513 mo +85.1513 85.1513 li +85.1513 84.1489 li +104.199 84.1489 li +104.199 85.1513 li +84.1489 85.1513 mo +65.101 85.1513 li +65.101 84.1489 li +84.1489 84.1489 li +84.1489 85.1513 li +64.0986 85.1513 mo +45.0513 85.1513 li +45.0513 84.1489 li +64.0986 84.1489 li +64.0986 85.1513 li +44.0488 85.1513 mo +25.5 85.1513 li +25.5 84.1489 li +44.0488 84.1489 li +44.0488 85.1513 li +.282353 .282353 .282353 rgb +f +25.5 85.1513 mo +24.5 85.1513 li +24.5 84.1489 li +25.5 84.1489 li +25.5 85.1513 li +.643137 .643137 .643137 rgb +f +45.0513 85.1513 mo +44.0488 85.1513 li +44.0488 84.1489 li +45.0513 84.1489 li +45.0513 85.1513 li +.427451 .427451 .427451 rgb +f +65.101 85.1513 mo +64.0986 85.1513 li +64.0986 84.1489 li +65.101 84.1489 li +65.101 85.1513 li +f +85.1513 85.1513 mo +84.1489 85.1513 li +84.1489 84.1489 li +85.1513 84.1489 li +85.1513 85.1513 li +f +105.201 85.1513 mo +104.199 85.1513 li +104.199 84.1489 li +105.201 84.1489 li +105.201 85.1513 li +f +125.251 85.1513 mo +124.248 85.1513 li +124.248 84.1489 li +125.251 84.1489 li +125.251 85.1513 li +.643137 .643137 .643137 rgb +f +145.301 85.1513 mo +144.299 85.1513 li +144.299 84.1489 li +145.301 84.1489 li +145.301 85.1513 li +.427451 .427451 .427451 rgb +f +165.351 85.1513 mo +164.349 85.1513 li +164.349 84.1489 li +165.351 84.1489 li +165.351 85.1513 li +f +185.401 85.1513 mo +184.399 85.1513 li +184.399 84.1489 li +185.401 84.1489 li +185.401 85.1513 li +f +205.451 85.1513 mo +204.449 85.1513 li +204.449 84.1489 li +205.451 84.1489 li +205.451 85.1513 li +f +225.501 85.1513 mo +224.499 85.1513 li +224.499 84.1489 li +225.501 84.1489 li +225.501 85.1513 li +.643137 .643137 .643137 rgb +f +245.551 85.1513 mo +244.549 85.1513 li +244.549 84.1489 li +245.551 84.1489 li +245.551 85.1513 li +.427451 .427451 .427451 rgb +f +265.602 85.1513 mo +264.599 85.1513 li +264.599 84.1489 li +265.602 84.1489 li +265.602 85.1513 li +f +285.651 85.1513 mo +284.648 85.1513 li +284.648 84.1489 li +285.651 84.1489 li +285.651 85.1513 li +f +305.701 85.1513 mo +304.699 85.1513 li +304.699 84.1489 li +305.701 84.1489 li +305.701 85.1513 li +f +325.751 85.1513 mo +324.749 85.1513 li +324.749 84.1489 li +325.751 84.1489 li +325.751 85.1513 li +.643137 .643137 .643137 rgb +f +345.801 85.1513 mo +344.799 85.1513 li +344.799 84.1489 li +345.801 84.1489 li +345.801 85.1513 li +.427451 .427451 .427451 rgb +f +365.852 85.1513 mo +364.849 85.1513 li +364.849 84.1489 li +365.852 84.1489 li +365.852 85.1513 li +f +385.901 85.1513 mo +384.898 85.1513 li +384.898 84.1489 li +385.901 84.1489 li +385.901 85.1513 li +f +405.951 85.1513 mo +404.949 85.1513 li +404.949 84.1489 li +405.951 84.1489 li +405.951 85.1513 li +f +425.5 85.1513 mo +424.5 85.1513 li +424.5 84.1489 li +425.5 84.1489 li +425.5 85.1513 li +.643137 .643137 .643137 rgb +f +424.5 105.201 mo +405.951 105.201 li +405.951 104.199 li +424.5 104.199 li +424.5 105.201 li +404.949 105.201 mo +385.901 105.201 li +385.901 104.199 li +404.949 104.199 li +404.949 105.201 li +384.898 105.201 mo +365.852 105.201 li +365.852 104.199 li +384.898 104.199 li +384.898 105.201 li +364.849 105.201 mo +345.801 105.201 li +345.801 104.199 li +364.849 104.199 li +364.849 105.201 li +344.799 105.201 mo +325.751 105.201 li +325.751 104.199 li +344.799 104.199 li +344.799 105.201 li +324.749 105.201 mo +305.701 105.201 li +305.701 104.199 li +324.749 104.199 li +324.749 105.201 li +304.699 105.201 mo +285.651 105.201 li +285.651 104.199 li +304.699 104.199 li +304.699 105.201 li +284.648 105.201 mo +265.602 105.201 li +265.602 104.199 li +284.648 104.199 li +284.648 105.201 li +264.599 105.201 mo +245.551 105.201 li +245.551 104.199 li +264.599 104.199 li +264.599 105.201 li +244.549 105.201 mo +225.501 105.201 li +225.501 104.199 li +244.549 104.199 li +244.549 105.201 li +224.499 105.201 mo +205.451 105.201 li +205.451 104.199 li +224.499 104.199 li +224.499 105.201 li +204.449 105.201 mo +185.401 105.201 li +185.401 104.199 li +204.449 104.199 li +204.449 105.201 li +184.399 105.201 mo +165.351 105.201 li +165.351 104.199 li +184.399 104.199 li +184.399 105.201 li +164.349 105.201 mo +145.301 105.201 li +145.301 104.199 li +164.349 104.199 li +164.349 105.201 li +144.299 105.201 mo +125.251 105.201 li +125.251 104.199 li +144.299 104.199 li +144.299 105.201 li +124.248 105.201 mo +105.201 105.201 li +105.201 104.199 li +124.248 104.199 li +124.248 105.201 li +104.199 105.201 mo +85.1513 105.201 li +85.1513 104.199 li +104.199 104.199 li +104.199 105.201 li +84.1489 105.201 mo +65.101 105.201 li +65.101 104.199 li +84.1489 104.199 li +84.1489 105.201 li +64.0986 105.201 mo +45.0513 105.201 li +45.0513 104.199 li +64.0986 104.199 li +64.0986 105.201 li +44.0488 105.201 mo +25.5 105.201 li +25.5 104.199 li +44.0488 104.199 li +44.0488 105.201 li +.282353 .282353 .282353 rgb +f +25.5 105.201 mo +24.5 105.201 li +24.5 104.199 li +25.5 104.199 li +25.5 105.201 li +.643137 .643137 .643137 rgb +f +45.0513 105.201 mo +44.0488 105.201 li +44.0488 104.199 li +45.0513 104.199 li +45.0513 105.201 li +.427451 .427451 .427451 rgb +f +65.101 105.201 mo +64.0986 105.201 li +64.0986 104.199 li +65.101 104.199 li +65.101 105.201 li +f +85.1513 105.201 mo +84.1489 105.201 li +84.1489 104.199 li +85.1513 104.199 li +85.1513 105.201 li +f +105.201 105.201 mo +104.199 105.201 li +104.199 104.199 li +105.201 104.199 li +105.201 105.201 li +f +125.251 105.201 mo +124.248 105.201 li +124.248 104.199 li +125.251 104.199 li +125.251 105.201 li +.643137 .643137 .643137 rgb +f +145.301 105.201 mo +144.299 105.201 li +144.299 104.199 li +145.301 104.199 li +145.301 105.201 li +.427451 .427451 .427451 rgb +f +165.351 105.201 mo +164.349 105.201 li +164.349 104.199 li +165.351 104.199 li +165.351 105.201 li +f +185.401 105.201 mo +184.399 105.201 li +184.399 104.199 li +185.401 104.199 li +185.401 105.201 li +f +205.451 105.201 mo +204.449 105.201 li +204.449 104.199 li +205.451 104.199 li +205.451 105.201 li +f +225.501 105.201 mo +224.499 105.201 li +224.499 104.199 li +225.501 104.199 li +225.501 105.201 li +.643137 .643137 .643137 rgb +f +245.551 105.201 mo +244.549 105.201 li +244.549 104.199 li +245.551 104.199 li +245.551 105.201 li +.427451 .427451 .427451 rgb +f +265.602 105.201 mo +264.599 105.201 li +264.599 104.199 li +265.602 104.199 li +265.602 105.201 li +f +285.651 105.201 mo +284.648 105.201 li +284.648 104.199 li +285.651 104.199 li +285.651 105.201 li +f +305.701 105.201 mo +304.699 105.201 li +304.699 104.199 li +305.701 104.199 li +305.701 105.201 li +f +325.751 105.201 mo +324.749 105.201 li +324.749 104.199 li +325.751 104.199 li +325.751 105.201 li +.643137 .643137 .643137 rgb +f +345.801 105.201 mo +344.799 105.201 li +344.799 104.199 li +345.801 104.199 li +345.801 105.201 li +.427451 .427451 .427451 rgb +f +365.852 105.201 mo +364.849 105.201 li +364.849 104.199 li +365.852 104.199 li +365.852 105.201 li +f +385.901 105.201 mo +384.898 105.201 li +384.898 104.199 li +385.901 104.199 li +385.901 105.201 li +f +405.951 105.201 mo +404.949 105.201 li +404.949 104.199 li +405.951 104.199 li +405.951 105.201 li +f +425.5 105.201 mo +424.5 105.201 li +424.5 104.199 li +425.5 104.199 li +425.5 105.201 li +.643137 .643137 .643137 rgb +f +424.5 125.251 mo +405.951 125.251 li +405.951 124.248 li +424.5 124.248 li +424.5 125.251 li +404.949 125.251 mo +385.901 125.251 li +385.901 124.248 li +404.949 124.248 li +404.949 125.251 li +384.898 125.251 mo +365.852 125.251 li +365.852 124.248 li +384.898 124.248 li +384.898 125.251 li +364.849 125.251 mo +345.801 125.251 li +345.801 124.248 li +364.849 124.248 li +364.849 125.251 li +344.799 125.251 mo +325.751 125.251 li +325.751 124.248 li +344.799 124.248 li +344.799 125.251 li +324.749 125.251 mo +305.701 125.251 li +305.701 124.248 li +324.749 124.248 li +324.749 125.251 li +304.699 125.251 mo +285.651 125.251 li +285.651 124.248 li +304.699 124.248 li +304.699 125.251 li +284.648 125.251 mo +265.602 125.251 li +265.602 124.248 li +284.648 124.248 li +284.648 125.251 li +264.599 125.251 mo +245.551 125.251 li +245.551 124.248 li +264.599 124.248 li +264.599 125.251 li +244.549 125.251 mo +225.501 125.251 li +225.501 124.248 li +244.549 124.248 li +244.549 125.251 li +224.499 125.251 mo +205.451 125.251 li +205.451 124.248 li +224.499 124.248 li +224.499 125.251 li +204.449 125.251 mo +185.401 125.251 li +185.401 124.248 li +204.449 124.248 li +204.449 125.251 li +184.399 125.251 mo +165.351 125.251 li +165.351 124.248 li +184.399 124.248 li +184.399 125.251 li +164.349 125.251 mo +145.301 125.251 li +145.301 124.248 li +164.349 124.248 li +164.349 125.251 li +144.299 125.251 mo +125.251 125.251 li +125.251 124.248 li +144.299 124.248 li +144.299 125.251 li +124.248 125.251 mo +105.201 125.251 li +105.201 124.248 li +124.248 124.248 li +124.248 125.251 li +104.199 125.251 mo +85.1513 125.251 li +85.1513 124.248 li +104.199 124.248 li +104.199 125.251 li +84.1489 125.251 mo +65.101 125.251 li +65.101 124.248 li +84.1489 124.248 li +84.1489 125.251 li +64.0986 125.251 mo +45.0513 125.251 li +45.0513 124.248 li +64.0986 124.248 li +64.0986 125.251 li +44.0488 125.251 mo +25.5 125.251 li +25.5 124.248 li +44.0488 124.248 li +44.0488 125.251 li +.552941 .552941 .552941 rgb +f +25.5 125.251 mo +24.5 125.251 li +24.5 124.248 li +25.5 124.248 li +25.5 125.251 li +.776471 .776471 .776471 rgb +f +45.0513 125.251 mo +44.0488 125.251 li +44.0488 124.248 li +45.0513 124.248 li +45.0513 125.251 li +.643137 .643137 .643137 rgb +f +65.101 125.251 mo +64.0986 125.251 li +64.0986 124.248 li +65.101 124.248 li +65.101 125.251 li +f +85.1513 125.251 mo +84.1489 125.251 li +84.1489 124.248 li +85.1513 124.248 li +85.1513 125.251 li +f +105.201 125.251 mo +104.199 125.251 li +104.199 124.248 li +105.201 124.248 li +105.201 125.251 li +f +125.251 125.251 mo +124.248 125.251 li +124.248 124.248 li +125.251 124.248 li +125.251 125.251 li +.776471 .776471 .776471 rgb +f +145.301 125.251 mo +144.299 125.251 li +144.299 124.248 li +145.301 124.248 li +145.301 125.251 li +.643137 .643137 .643137 rgb +f +165.351 125.251 mo +164.349 125.251 li +164.349 124.248 li +165.351 124.248 li +165.351 125.251 li +f +185.401 125.251 mo +184.399 125.251 li +184.399 124.248 li +185.401 124.248 li +185.401 125.251 li +f +205.451 125.251 mo +204.449 125.251 li +204.449 124.248 li +205.451 124.248 li +205.451 125.251 li +f +225.501 125.251 mo +224.499 125.251 li +224.499 124.248 li +225.501 124.248 li +225.501 125.251 li +.776471 .776471 .776471 rgb +f +245.551 125.251 mo +244.549 125.251 li +244.549 124.248 li +245.551 124.248 li +245.551 125.251 li +.643137 .643137 .643137 rgb +f +265.602 125.251 mo +264.599 125.251 li +264.599 124.248 li +265.602 124.248 li +265.602 125.251 li +f +285.651 125.251 mo +284.648 125.251 li +284.648 124.248 li +285.651 124.248 li +285.651 125.251 li +f +305.701 125.251 mo +304.699 125.251 li +304.699 124.248 li +305.701 124.248 li +305.701 125.251 li +f +325.751 125.251 mo +324.749 125.251 li +324.749 124.248 li +325.751 124.248 li +325.751 125.251 li +.776471 .776471 .776471 rgb +f +345.801 125.251 mo +344.799 125.251 li +344.799 124.248 li +345.801 124.248 li +345.801 125.251 li +.643137 .643137 .643137 rgb +f +365.852 125.251 mo +364.849 125.251 li +364.849 124.248 li +365.852 124.248 li +365.852 125.251 li +f +385.901 125.251 mo +384.898 125.251 li +384.898 124.248 li +385.901 124.248 li +385.901 125.251 li +f +405.951 125.251 mo +404.949 125.251 li +404.949 124.248 li +405.951 124.248 li +405.951 125.251 li +f +425.5 125.251 mo +424.5 125.251 li +424.5 124.248 li +425.5 124.248 li +425.5 125.251 li +.776471 .776471 .776471 rgb +f +424.5 145.301 mo +405.951 145.301 li +405.951 144.299 li +424.5 144.299 li +424.5 145.301 li +404.949 145.301 mo +385.901 145.301 li +385.901 144.299 li +404.949 144.299 li +404.949 145.301 li +384.898 145.301 mo +365.852 145.301 li +365.852 144.299 li +384.898 144.299 li +384.898 145.301 li +364.849 145.301 mo +345.801 145.301 li +345.801 144.299 li +364.849 144.299 li +364.849 145.301 li +344.799 145.301 mo +325.751 145.301 li +325.751 144.299 li +344.799 144.299 li +344.799 145.301 li +324.749 145.301 mo +305.701 145.301 li +305.701 144.299 li +324.749 144.299 li +324.749 145.301 li +304.699 145.301 mo +285.651 145.301 li +285.651 144.299 li +304.699 144.299 li +304.699 145.301 li +284.648 145.301 mo +265.602 145.301 li +265.602 144.299 li +284.648 144.299 li +284.648 145.301 li +264.599 145.301 mo +245.551 145.301 li +245.551 144.299 li +264.599 144.299 li +264.599 145.301 li +244.549 145.301 mo +225.501 145.301 li +225.501 144.299 li +244.549 144.299 li +244.549 145.301 li +224.499 145.301 mo +205.451 145.301 li +205.451 144.299 li +224.499 144.299 li +224.499 145.301 li +204.449 145.301 mo +185.401 145.301 li +185.401 144.299 li +204.449 144.299 li +204.449 145.301 li +184.399 145.301 mo +165.351 145.301 li +165.351 144.299 li +184.399 144.299 li +184.399 145.301 li +164.349 145.301 mo +145.301 145.301 li +145.301 144.299 li +164.349 144.299 li +164.349 145.301 li +144.299 145.301 mo +125.251 145.301 li +125.251 144.299 li +144.299 144.299 li +144.299 145.301 li +124.248 145.301 mo +105.201 145.301 li +105.201 144.299 li +124.248 144.299 li +124.248 145.301 li +104.199 145.301 mo +85.1513 145.301 li +85.1513 144.299 li +104.199 144.299 li +104.199 145.301 li +84.1489 145.301 mo +65.101 145.301 li +65.101 144.299 li +84.1489 144.299 li +84.1489 145.301 li +64.0986 145.301 mo +45.0513 145.301 li +45.0513 144.299 li +64.0986 144.299 li +64.0986 145.301 li +44.0488 145.301 mo +25.5 145.301 li +25.5 144.299 li +44.0488 144.299 li +44.0488 145.301 li +.282353 .282353 .282353 rgb +f +25.5 145.301 mo +24.5 145.301 li +24.5 144.299 li +25.5 144.299 li +25.5 145.301 li +.643137 .643137 .643137 rgb +f +45.0513 145.301 mo +44.0488 145.301 li +44.0488 144.299 li +45.0513 144.299 li +45.0513 145.301 li +.427451 .427451 .427451 rgb +f +65.101 145.301 mo +64.0986 145.301 li +64.0986 144.299 li +65.101 144.299 li +65.101 145.301 li +f +85.1513 145.301 mo +84.1489 145.301 li +84.1489 144.299 li +85.1513 144.299 li +85.1513 145.301 li +f +105.201 145.301 mo +104.199 145.301 li +104.199 144.299 li +105.201 144.299 li +105.201 145.301 li +f +125.251 145.301 mo +124.248 145.301 li +124.248 144.299 li +125.251 144.299 li +125.251 145.301 li +.643137 .643137 .643137 rgb +f +145.301 145.301 mo +144.299 145.301 li +144.299 144.299 li +145.301 144.299 li +145.301 145.301 li +.427451 .427451 .427451 rgb +f +165.351 145.301 mo +164.349 145.301 li +164.349 144.299 li +165.351 144.299 li +165.351 145.301 li +f +185.401 145.301 mo +184.399 145.301 li +184.399 144.299 li +185.401 144.299 li +185.401 145.301 li +f +205.451 145.301 mo +204.449 145.301 li +204.449 144.299 li +205.451 144.299 li +205.451 145.301 li +f +225.501 145.301 mo +224.499 145.301 li +224.499 144.299 li +225.501 144.299 li +225.501 145.301 li +.643137 .643137 .643137 rgb +f +245.551 145.301 mo +244.549 145.301 li +244.549 144.299 li +245.551 144.299 li +245.551 145.301 li +.427451 .427451 .427451 rgb +f +265.602 145.301 mo +264.599 145.301 li +264.599 144.299 li +265.602 144.299 li +265.602 145.301 li +f +285.651 145.301 mo +284.648 145.301 li +284.648 144.299 li +285.651 144.299 li +285.651 145.301 li +f +305.701 145.301 mo +304.699 145.301 li +304.699 144.299 li +305.701 144.299 li +305.701 145.301 li +f +325.751 145.301 mo +324.749 145.301 li +324.749 144.299 li +325.751 144.299 li +325.751 145.301 li +.643137 .643137 .643137 rgb +f +345.801 145.301 mo +344.799 145.301 li +344.799 144.299 li +345.801 144.299 li +345.801 145.301 li +.427451 .427451 .427451 rgb +f +365.852 145.301 mo +364.849 145.301 li +364.849 144.299 li +365.852 144.299 li +365.852 145.301 li +f +385.901 145.301 mo +384.898 145.301 li +384.898 144.299 li +385.901 144.299 li +385.901 145.301 li +f +405.951 145.301 mo +404.949 145.301 li +404.949 144.299 li +405.951 144.299 li +405.951 145.301 li +f +425.5 145.301 mo +424.5 145.301 li +424.5 144.299 li +425.5 144.299 li +425.5 145.301 li +.643137 .643137 .643137 rgb +f +424.5 165.351 mo +405.951 165.351 li +405.951 164.349 li +424.5 164.349 li +424.5 165.351 li +404.949 165.351 mo +385.901 165.351 li +385.901 164.349 li +404.949 164.349 li +404.949 165.351 li +384.898 165.351 mo +365.852 165.351 li +365.852 164.349 li +384.898 164.349 li +384.898 165.351 li +364.849 165.351 mo +345.801 165.351 li +345.801 164.349 li +364.849 164.349 li +364.849 165.351 li +344.799 165.351 mo +325.751 165.351 li +325.751 164.349 li +344.799 164.349 li +344.799 165.351 li +324.749 165.351 mo +305.701 165.351 li +305.701 164.349 li +324.749 164.349 li +324.749 165.351 li +304.699 165.351 mo +285.651 165.351 li +285.651 164.349 li +304.699 164.349 li +304.699 165.351 li +284.648 165.351 mo +265.602 165.351 li +265.602 164.349 li +284.648 164.349 li +284.648 165.351 li +264.599 165.351 mo +245.551 165.351 li +245.551 164.349 li +264.599 164.349 li +264.599 165.351 li +244.549 165.351 mo +225.501 165.351 li +225.501 164.349 li +244.549 164.349 li +244.549 165.351 li +224.499 165.351 mo +205.451 165.351 li +205.451 164.349 li +224.499 164.349 li +224.499 165.351 li +204.449 165.351 mo +185.401 165.351 li +185.401 164.349 li +204.449 164.349 li +204.449 165.351 li +184.399 165.351 mo +165.351 165.351 li +165.351 164.349 li +184.399 164.349 li +184.399 165.351 li +164.349 165.351 mo +145.301 165.351 li +145.301 164.349 li +164.349 164.349 li +164.349 165.351 li +144.299 165.351 mo +125.251 165.351 li +125.251 164.349 li +144.299 164.349 li +144.299 165.351 li +124.248 165.351 mo +105.201 165.351 li +105.201 164.349 li +124.248 164.349 li +124.248 165.351 li +104.199 165.351 mo +85.1513 165.351 li +85.1513 164.349 li +104.199 164.349 li +104.199 165.351 li +84.1489 165.351 mo +65.101 165.351 li +65.101 164.349 li +84.1489 164.349 li +84.1489 165.351 li +64.0986 165.351 mo +45.0513 165.351 li +45.0513 164.349 li +64.0986 164.349 li +64.0986 165.351 li +44.0488 165.351 mo +25.5 165.351 li +25.5 164.349 li +44.0488 164.349 li +44.0488 165.351 li +.282353 .282353 .282353 rgb +f +25.5 165.351 mo +24.5 165.351 li +24.5 164.349 li +25.5 164.349 li +25.5 165.351 li +.643137 .643137 .643137 rgb +f +45.0513 165.351 mo +44.0488 165.351 li +44.0488 164.349 li +45.0513 164.349 li +45.0513 165.351 li +.427451 .427451 .427451 rgb +f +65.101 165.351 mo +64.0986 165.351 li +64.0986 164.349 li +65.101 164.349 li +65.101 165.351 li +f +85.1513 165.351 mo +84.1489 165.351 li +84.1489 164.349 li +85.1513 164.349 li +85.1513 165.351 li +f +105.201 165.351 mo +104.199 165.351 li +104.199 164.349 li +105.201 164.349 li +105.201 165.351 li +f +125.251 165.351 mo +124.248 165.351 li +124.248 164.349 li +125.251 164.349 li +125.251 165.351 li +.643137 .643137 .643137 rgb +f +145.301 165.351 mo +144.299 165.351 li +144.299 164.349 li +145.301 164.349 li +145.301 165.351 li +.427451 .427451 .427451 rgb +f +165.351 165.351 mo +164.349 165.351 li +164.349 164.349 li +165.351 164.349 li +165.351 165.351 li +f +185.401 165.351 mo +184.399 165.351 li +184.399 164.349 li +185.401 164.349 li +185.401 165.351 li +f +205.451 165.351 mo +204.449 165.351 li +204.449 164.349 li +205.451 164.349 li +205.451 165.351 li +f +225.501 165.351 mo +224.499 165.351 li +224.499 164.349 li +225.501 164.349 li +225.501 165.351 li +.643137 .643137 .643137 rgb +f +245.551 165.351 mo +244.549 165.351 li +244.549 164.349 li +245.551 164.349 li +245.551 165.351 li +.427451 .427451 .427451 rgb +f +265.602 165.351 mo +264.599 165.351 li +264.599 164.349 li +265.602 164.349 li +265.602 165.351 li +f +285.651 165.351 mo +284.648 165.351 li +284.648 164.349 li +285.651 164.349 li +285.651 165.351 li +f +305.701 165.351 mo +304.699 165.351 li +304.699 164.349 li +305.701 164.349 li +305.701 165.351 li +f +325.751 165.351 mo +324.749 165.351 li +324.749 164.349 li +325.751 164.349 li +325.751 165.351 li +.643137 .643137 .643137 rgb +f +345.801 165.351 mo +344.799 165.351 li +344.799 164.349 li +345.801 164.349 li +345.801 165.351 li +.427451 .427451 .427451 rgb +f +365.852 165.351 mo +364.849 165.351 li +364.849 164.349 li +365.852 164.349 li +365.852 165.351 li +f +385.901 165.351 mo +384.898 165.351 li +384.898 164.349 li +385.901 164.349 li +385.901 165.351 li +f +405.951 165.351 mo +404.949 165.351 li +404.949 164.349 li +405.951 164.349 li +405.951 165.351 li +f +425.5 165.351 mo +424.5 165.351 li +424.5 164.349 li +425.5 164.349 li +425.5 165.351 li +.643137 .643137 .643137 rgb +f +424.5 185.401 mo +405.951 185.401 li +405.951 184.399 li +424.5 184.399 li +424.5 185.401 li +404.949 185.401 mo +385.901 185.401 li +385.901 184.399 li +404.949 184.399 li +404.949 185.401 li +384.898 185.401 mo +365.852 185.401 li +365.852 184.399 li +384.898 184.399 li +384.898 185.401 li +364.849 185.401 mo +345.801 185.401 li +345.801 184.399 li +364.849 184.399 li +364.849 185.401 li +344.799 185.401 mo +325.751 185.401 li +325.751 184.399 li +344.799 184.399 li +344.799 185.401 li +324.749 185.401 mo +305.701 185.401 li +305.701 184.399 li +324.749 184.399 li +324.749 185.401 li +304.699 185.401 mo +285.651 185.401 li +285.651 184.399 li +304.699 184.399 li +304.699 185.401 li +284.648 185.401 mo +265.602 185.401 li +265.602 184.399 li +284.648 184.399 li +284.648 185.401 li +264.599 185.401 mo +245.551 185.401 li +245.551 184.399 li +264.599 184.399 li +264.599 185.401 li +244.549 185.401 mo +225.501 185.401 li +225.501 184.399 li +244.549 184.399 li +244.549 185.401 li +224.499 185.401 mo +205.451 185.401 li +205.451 184.399 li +224.499 184.399 li +224.499 185.401 li +204.449 185.401 mo +185.401 185.401 li +185.401 184.399 li +204.449 184.399 li +204.449 185.401 li +184.399 185.401 mo +165.351 185.401 li +165.351 184.399 li +184.399 184.399 li +184.399 185.401 li +164.349 185.401 mo +145.301 185.401 li +145.301 184.399 li +164.349 184.399 li +164.349 185.401 li +144.299 185.401 mo +125.251 185.401 li +125.251 184.399 li +144.299 184.399 li +144.299 185.401 li +124.248 185.401 mo +105.201 185.401 li +105.201 184.399 li +124.248 184.399 li +124.248 185.401 li +104.199 185.401 mo +85.1513 185.401 li +85.1513 184.399 li +104.199 184.399 li +104.199 185.401 li +84.1489 185.401 mo +65.101 185.401 li +65.101 184.399 li +84.1489 184.399 li +84.1489 185.401 li +64.0986 185.401 mo +45.0513 185.401 li +45.0513 184.399 li +64.0986 184.399 li +64.0986 185.401 li +44.0488 185.401 mo +25.5 185.401 li +25.5 184.399 li +44.0488 184.399 li +44.0488 185.401 li +.282353 .282353 .282353 rgb +f +25.5 185.401 mo +24.5 185.401 li +24.5 184.399 li +25.5 184.399 li +25.5 185.401 li +.643137 .643137 .643137 rgb +f +45.0513 185.401 mo +44.0488 185.401 li +44.0488 184.399 li +45.0513 184.399 li +45.0513 185.401 li +.427451 .427451 .427451 rgb +f +65.101 185.401 mo +64.0986 185.401 li +64.0986 184.399 li +65.101 184.399 li +65.101 185.401 li +f +85.1513 185.401 mo +84.1489 185.401 li +84.1489 184.399 li +85.1513 184.399 li +85.1513 185.401 li +f +105.201 185.401 mo +104.199 185.401 li +104.199 184.399 li +105.201 184.399 li +105.201 185.401 li +f +125.251 185.401 mo +124.248 185.401 li +124.248 184.399 li +125.251 184.399 li +125.251 185.401 li +.643137 .643137 .643137 rgb +f +145.301 185.401 mo +144.299 185.401 li +144.299 184.399 li +145.301 184.399 li +145.301 185.401 li +.427451 .427451 .427451 rgb +f +165.351 185.401 mo +164.349 185.401 li +164.349 184.399 li +165.351 184.399 li +165.351 185.401 li +f +185.401 185.401 mo +184.399 185.401 li +184.399 184.399 li +185.401 184.399 li +185.401 185.401 li +f +205.451 185.401 mo +204.449 185.401 li +204.449 184.399 li +205.451 184.399 li +205.451 185.401 li +f +225.501 185.401 mo +224.499 185.401 li +224.499 184.399 li +225.501 184.399 li +225.501 185.401 li +.643137 .643137 .643137 rgb +f +245.551 185.401 mo +244.549 185.401 li +244.549 184.399 li +245.551 184.399 li +245.551 185.401 li +.427451 .427451 .427451 rgb +f +265.602 185.401 mo +264.599 185.401 li +264.599 184.399 li +265.602 184.399 li +265.602 185.401 li +f +285.651 185.401 mo +284.648 185.401 li +284.648 184.399 li +285.651 184.399 li +285.651 185.401 li +f +305.701 185.401 mo +304.699 185.401 li +304.699 184.399 li +305.701 184.399 li +305.701 185.401 li +f +325.751 185.401 mo +324.749 185.401 li +324.749 184.399 li +325.751 184.399 li +325.751 185.401 li +.643137 .643137 .643137 rgb +f +345.801 185.401 mo +344.799 185.401 li +344.799 184.399 li +345.801 184.399 li +345.801 185.401 li +.427451 .427451 .427451 rgb +f +365.852 185.401 mo +364.849 185.401 li +364.849 184.399 li +365.852 184.399 li +365.852 185.401 li +f +385.901 185.401 mo +384.898 185.401 li +384.898 184.399 li +385.901 184.399 li +385.901 185.401 li +f +405.951 185.401 mo +404.949 185.401 li +404.949 184.399 li +405.951 184.399 li +405.951 185.401 li +f +425.5 185.401 mo +424.5 185.401 li +424.5 184.399 li +425.5 184.399 li +425.5 185.401 li +.643137 .643137 .643137 rgb +f +424.5 205.451 mo +405.951 205.451 li +405.951 204.449 li +424.5 204.449 li +424.5 205.451 li +404.949 205.451 mo +385.901 205.451 li +385.901 204.449 li +404.949 204.449 li +404.949 205.451 li +384.898 205.451 mo +365.852 205.451 li +365.852 204.449 li +384.898 204.449 li +384.898 205.451 li +364.849 205.451 mo +345.801 205.451 li +345.801 204.449 li +364.849 204.449 li +364.849 205.451 li +344.799 205.451 mo +325.751 205.451 li +325.751 204.449 li +344.799 204.449 li +344.799 205.451 li +324.749 205.451 mo +305.701 205.451 li +305.701 204.449 li +324.749 204.449 li +324.749 205.451 li +304.699 205.451 mo +285.651 205.451 li +285.651 204.449 li +304.699 204.449 li +304.699 205.451 li +284.648 205.451 mo +265.602 205.451 li +265.602 204.449 li +284.648 204.449 li +284.648 205.451 li +264.599 205.451 mo +245.551 205.451 li +245.551 204.449 li +264.599 204.449 li +264.599 205.451 li +244.549 205.451 mo +225.501 205.451 li +225.501 204.449 li +244.549 204.449 li +244.549 205.451 li +224.499 205.451 mo +205.451 205.451 li +205.451 204.449 li +224.499 204.449 li +224.499 205.451 li +204.449 205.451 mo +185.401 205.451 li +185.401 204.449 li +204.449 204.449 li +204.449 205.451 li +184.399 205.451 mo +165.351 205.451 li +165.351 204.449 li +184.399 204.449 li +184.399 205.451 li +164.349 205.451 mo +145.301 205.451 li +145.301 204.449 li +164.349 204.449 li +164.349 205.451 li +144.299 205.451 mo +125.251 205.451 li +125.251 204.449 li +144.299 204.449 li +144.299 205.451 li +124.248 205.451 mo +105.201 205.451 li +105.201 204.449 li +124.248 204.449 li +124.248 205.451 li +104.199 205.451 mo +85.1513 205.451 li +85.1513 204.449 li +104.199 204.449 li +104.199 205.451 li +84.1489 205.451 mo +65.101 205.451 li +65.101 204.449 li +84.1489 204.449 li +84.1489 205.451 li +64.0986 205.451 mo +45.0513 205.451 li +45.0513 204.449 li +64.0986 204.449 li +64.0986 205.451 li +44.0488 205.451 mo +25.5 205.451 li +25.5 204.449 li +44.0488 204.449 li +44.0488 205.451 li +.282353 .282353 .282353 rgb +f +25.5 205.451 mo +24.5 205.451 li +24.5 204.449 li +25.5 204.449 li +25.5 205.451 li +.643137 .643137 .643137 rgb +f +45.0513 205.451 mo +44.0488 205.451 li +44.0488 204.449 li +45.0513 204.449 li +45.0513 205.451 li +.427451 .427451 .427451 rgb +f +65.101 205.451 mo +64.0986 205.451 li +64.0986 204.449 li +65.101 204.449 li +65.101 205.451 li +f +85.1513 205.451 mo +84.1489 205.451 li +84.1489 204.449 li +85.1513 204.449 li +85.1513 205.451 li +f +105.201 205.451 mo +104.199 205.451 li +104.199 204.449 li +105.201 204.449 li +105.201 205.451 li +f +125.251 205.451 mo +124.248 205.451 li +124.248 204.449 li +125.251 204.449 li +125.251 205.451 li +.643137 .643137 .643137 rgb +f +145.301 205.451 mo +144.299 205.451 li +144.299 204.449 li +145.301 204.449 li +145.301 205.451 li +.427451 .427451 .427451 rgb +f +165.351 205.451 mo +164.349 205.451 li +164.349 204.449 li +165.351 204.449 li +165.351 205.451 li +f +185.401 205.451 mo +184.399 205.451 li +184.399 204.449 li +185.401 204.449 li +185.401 205.451 li +f +205.451 205.451 mo +204.449 205.451 li +204.449 204.449 li +205.451 204.449 li +205.451 205.451 li +f +225.501 205.451 mo +224.499 205.451 li +224.499 204.449 li +225.501 204.449 li +225.501 205.451 li +.643137 .643137 .643137 rgb +f +245.551 205.451 mo +244.549 205.451 li +244.549 204.449 li +245.551 204.449 li +245.551 205.451 li +.427451 .427451 .427451 rgb +f +265.602 205.451 mo +264.599 205.451 li +264.599 204.449 li +265.602 204.449 li +265.602 205.451 li +f +285.651 205.451 mo +284.648 205.451 li +284.648 204.449 li +285.651 204.449 li +285.651 205.451 li +f +305.701 205.451 mo +304.699 205.451 li +304.699 204.449 li +305.701 204.449 li +305.701 205.451 li +f +325.751 205.451 mo +324.749 205.451 li +324.749 204.449 li +325.751 204.449 li +325.751 205.451 li +.643137 .643137 .643137 rgb +f +345.801 205.451 mo +344.799 205.451 li +344.799 204.449 li +345.801 204.449 li +345.801 205.451 li +.427451 .427451 .427451 rgb +f +365.852 205.451 mo +364.849 205.451 li +364.849 204.449 li +365.852 204.449 li +365.852 205.451 li +f +385.901 205.451 mo +384.898 205.451 li +384.898 204.449 li +385.901 204.449 li +385.901 205.451 li +f +405.951 205.451 mo +404.949 205.451 li +404.949 204.449 li +405.951 204.449 li +405.951 205.451 li +f +425.5 205.451 mo +424.5 205.451 li +424.5 204.449 li +425.5 204.449 li +425.5 205.451 li +.643137 .643137 .643137 rgb +f +424.5 225.501 mo +405.951 225.501 li +405.951 224.499 li +424.5 224.499 li +424.5 225.501 li +404.949 225.501 mo +385.901 225.501 li +385.901 224.499 li +404.949 224.499 li +404.949 225.501 li +384.898 225.501 mo +365.852 225.501 li +365.852 224.499 li +384.898 224.499 li +384.898 225.501 li +364.849 225.501 mo +345.801 225.501 li +345.801 224.499 li +364.849 224.499 li +364.849 225.501 li +344.799 225.501 mo +325.751 225.501 li +325.751 224.499 li +344.799 224.499 li +344.799 225.501 li +324.749 225.501 mo +305.701 225.501 li +305.701 224.499 li +324.749 224.499 li +324.749 225.501 li +304.699 225.501 mo +285.651 225.501 li +285.651 224.499 li +304.699 224.499 li +304.699 225.501 li +284.648 225.501 mo +265.602 225.501 li +265.602 224.499 li +284.648 224.499 li +284.648 225.501 li +264.599 225.501 mo +245.551 225.501 li +245.551 224.499 li +264.599 224.499 li +264.599 225.501 li +244.549 225.501 mo +225.501 225.501 li +225.501 224.499 li +244.549 224.499 li +244.549 225.501 li +224.499 225.501 mo +205.451 225.501 li +205.451 224.499 li +224.499 224.499 li +224.499 225.501 li +204.449 225.501 mo +185.401 225.501 li +185.401 224.499 li +204.449 224.499 li +204.449 225.501 li +184.399 225.501 mo +165.351 225.501 li +165.351 224.499 li +184.399 224.499 li +184.399 225.501 li +164.349 225.501 mo +145.301 225.501 li +145.301 224.499 li +164.349 224.499 li +164.349 225.501 li +144.299 225.501 mo +125.251 225.501 li +125.251 224.499 li +144.299 224.499 li +144.299 225.501 li +124.248 225.501 mo +105.201 225.501 li +105.201 224.499 li +124.248 224.499 li +124.248 225.501 li +104.199 225.501 mo +85.1513 225.501 li +85.1513 224.499 li +104.199 224.499 li +104.199 225.501 li +84.1489 225.501 mo +65.101 225.501 li +65.101 224.499 li +84.1489 224.499 li +84.1489 225.501 li +64.0986 225.501 mo +45.0513 225.501 li +45.0513 224.499 li +64.0986 224.499 li +64.0986 225.501 li +44.0488 225.501 mo +25.5 225.501 li +25.5 224.499 li +44.0488 224.499 li +44.0488 225.501 li +.552941 .552941 .552941 rgb +f +25.5 225.501 mo +24.5 225.501 li +24.5 224.499 li +25.5 224.499 li +25.5 225.501 li +.776471 .776471 .776471 rgb +f +45.0513 225.501 mo +44.0488 225.501 li +44.0488 224.499 li +45.0513 224.499 li +45.0513 225.501 li +.643137 .643137 .643137 rgb +f +65.101 225.501 mo +64.0986 225.501 li +64.0986 224.499 li +65.101 224.499 li +65.101 225.501 li +f +85.1513 225.501 mo +84.1489 225.501 li +84.1489 224.499 li +85.1513 224.499 li +85.1513 225.501 li +f +105.201 225.501 mo +104.199 225.501 li +104.199 224.499 li +105.201 224.499 li +105.201 225.501 li +f +125.251 225.501 mo +124.248 225.501 li +124.248 224.499 li +125.251 224.499 li +125.251 225.501 li +.776471 .776471 .776471 rgb +f +145.301 225.501 mo +144.299 225.501 li +144.299 224.499 li +145.301 224.499 li +145.301 225.501 li +.643137 .643137 .643137 rgb +f +165.351 225.501 mo +164.349 225.501 li +164.349 224.499 li +165.351 224.499 li +165.351 225.501 li +f +185.401 225.501 mo +184.399 225.501 li +184.399 224.499 li +185.401 224.499 li +185.401 225.501 li +f +205.451 225.501 mo +204.449 225.501 li +204.449 224.499 li +205.451 224.499 li +205.451 225.501 li +f +225.501 225.501 mo +224.499 225.501 li +224.499 224.499 li +225.501 224.499 li +225.501 225.501 li +.776471 .776471 .776471 rgb +f +245.551 225.501 mo +244.549 225.501 li +244.549 224.499 li +245.551 224.499 li +245.551 225.501 li +.643137 .643137 .643137 rgb +f +265.602 225.501 mo +264.599 225.501 li +264.599 224.499 li +265.602 224.499 li +265.602 225.501 li +f +285.651 225.501 mo +284.648 225.501 li +284.648 224.499 li +285.651 224.499 li +285.651 225.501 li +f +305.701 225.501 mo +304.699 225.501 li +304.699 224.499 li +305.701 224.499 li +305.701 225.501 li +f +325.751 225.501 mo +324.749 225.501 li +324.749 224.499 li +325.751 224.499 li +325.751 225.501 li +.776471 .776471 .776471 rgb +f +345.801 225.501 mo +344.799 225.501 li +344.799 224.499 li +345.801 224.499 li +345.801 225.501 li +.643137 .643137 .643137 rgb +f +365.852 225.501 mo +364.849 225.501 li +364.849 224.499 li +365.852 224.499 li +365.852 225.501 li +f +385.901 225.501 mo +384.898 225.501 li +384.898 224.499 li +385.901 224.499 li +385.901 225.501 li +f +405.951 225.501 mo +404.949 225.501 li +404.949 224.499 li +405.951 224.499 li +405.951 225.501 li +f +425.5 225.501 mo +424.5 225.501 li +424.5 224.499 li +425.5 224.499 li +425.5 225.501 li +.776471 .776471 .776471 rgb +f +424.5 245.551 mo +405.951 245.551 li +405.951 244.549 li +424.5 244.549 li +424.5 245.551 li +404.949 245.551 mo +385.901 245.551 li +385.901 244.549 li +404.949 244.549 li +404.949 245.551 li +384.898 245.551 mo +365.852 245.551 li +365.852 244.549 li +384.898 244.549 li +384.898 245.551 li +364.849 245.551 mo +345.801 245.551 li +345.801 244.549 li +364.849 244.549 li +364.849 245.551 li +344.799 245.551 mo +325.751 245.551 li +325.751 244.549 li +344.799 244.549 li +344.799 245.551 li +324.749 245.551 mo +305.701 245.551 li +305.701 244.549 li +324.749 244.549 li +324.749 245.551 li +304.699 245.551 mo +285.651 245.551 li +285.651 244.549 li +304.699 244.549 li +304.699 245.551 li +284.648 245.551 mo +265.602 245.551 li +265.602 244.549 li +284.648 244.549 li +284.648 245.551 li +264.599 245.551 mo +245.551 245.551 li +245.551 244.549 li +264.599 244.549 li +264.599 245.551 li +244.549 245.551 mo +225.501 245.551 li +225.501 244.549 li +244.549 244.549 li +244.549 245.551 li +224.499 245.551 mo +205.451 245.551 li +205.451 244.549 li +224.499 244.549 li +224.499 245.551 li +204.449 245.551 mo +185.401 245.551 li +185.401 244.549 li +204.449 244.549 li +204.449 245.551 li +184.399 245.551 mo +165.351 245.551 li +165.351 244.549 li +184.399 244.549 li +184.399 245.551 li +164.349 245.551 mo +145.301 245.551 li +145.301 244.549 li +164.349 244.549 li +164.349 245.551 li +144.299 245.551 mo +125.251 245.551 li +125.251 244.549 li +144.299 244.549 li +144.299 245.551 li +124.248 245.551 mo +105.201 245.551 li +105.201 244.549 li +124.248 244.549 li +124.248 245.551 li +104.199 245.551 mo +85.1513 245.551 li +85.1513 244.549 li +104.199 244.549 li +104.199 245.551 li +84.1489 245.551 mo +65.101 245.551 li +65.101 244.549 li +84.1489 244.549 li +84.1489 245.551 li +64.0986 245.551 mo +45.0513 245.551 li +45.0513 244.549 li +64.0986 244.549 li +64.0986 245.551 li +44.0488 245.551 mo +25.5 245.551 li +25.5 244.549 li +44.0488 244.549 li +44.0488 245.551 li +.282353 .282353 .282353 rgb +f +25.5 245.551 mo +24.5 245.551 li +24.5 244.549 li +25.5 244.549 li +25.5 245.551 li +.643137 .643137 .643137 rgb +f +45.0513 245.551 mo +44.0488 245.551 li +44.0488 244.549 li +45.0513 244.549 li +45.0513 245.551 li +.427451 .427451 .427451 rgb +f +65.101 245.551 mo +64.0986 245.551 li +64.0986 244.549 li +65.101 244.549 li +65.101 245.551 li +f +85.1513 245.551 mo +84.1489 245.551 li +84.1489 244.549 li +85.1513 244.549 li +85.1513 245.551 li +f +105.201 245.551 mo +104.199 245.551 li +104.199 244.549 li +105.201 244.549 li +105.201 245.551 li +f +125.251 245.551 mo +124.248 245.551 li +124.248 244.549 li +125.251 244.549 li +125.251 245.551 li +.643137 .643137 .643137 rgb +f +145.301 245.551 mo +144.299 245.551 li +144.299 244.549 li +145.301 244.549 li +145.301 245.551 li +.427451 .427451 .427451 rgb +f +165.351 245.551 mo +164.349 245.551 li +164.349 244.549 li +165.351 244.549 li +165.351 245.551 li +f +185.401 245.551 mo +184.399 245.551 li +184.399 244.549 li +185.401 244.549 li +185.401 245.551 li +f +205.451 245.551 mo +204.449 245.551 li +204.449 244.549 li +205.451 244.549 li +205.451 245.551 li +f +225.501 245.551 mo +224.499 245.551 li +224.499 244.549 li +225.501 244.549 li +225.501 245.551 li +.643137 .643137 .643137 rgb +f +245.551 245.551 mo +244.549 245.551 li +244.549 244.549 li +245.551 244.549 li +245.551 245.551 li +.427451 .427451 .427451 rgb +f +265.602 245.551 mo +264.599 245.551 li +264.599 244.549 li +265.602 244.549 li +265.602 245.551 li +f +285.651 245.551 mo +284.648 245.551 li +284.648 244.549 li +285.651 244.549 li +285.651 245.551 li +f +305.701 245.551 mo +304.699 245.551 li +304.699 244.549 li +305.701 244.549 li +305.701 245.551 li +f +325.751 245.551 mo +324.749 245.551 li +324.749 244.549 li +325.751 244.549 li +325.751 245.551 li +.643137 .643137 .643137 rgb +f +345.801 245.551 mo +344.799 245.551 li +344.799 244.549 li +345.801 244.549 li +345.801 245.551 li +.427451 .427451 .427451 rgb +f +365.852 245.551 mo +364.849 245.551 li +364.849 244.549 li +365.852 244.549 li +365.852 245.551 li +f +385.901 245.551 mo +384.898 245.551 li +384.898 244.549 li +385.901 244.549 li +385.901 245.551 li +f +405.951 245.551 mo +404.949 245.551 li +404.949 244.549 li +405.951 244.549 li +405.951 245.551 li +f +425.5 245.551 mo +424.5 245.551 li +424.5 244.549 li +425.5 244.549 li +425.5 245.551 li +.643137 .643137 .643137 rgb +f +424.5 265.602 mo +405.951 265.602 li +405.951 264.599 li +424.5 264.599 li +424.5 265.602 li +404.949 265.602 mo +385.901 265.602 li +385.901 264.599 li +404.949 264.599 li +404.949 265.602 li +384.898 265.602 mo +365.852 265.602 li +365.852 264.599 li +384.898 264.599 li +384.898 265.602 li +364.849 265.602 mo +345.801 265.602 li +345.801 264.599 li +364.849 264.599 li +364.849 265.602 li +344.799 265.602 mo +325.751 265.602 li +325.751 264.599 li +344.799 264.599 li +344.799 265.602 li +324.749 265.602 mo +305.701 265.602 li +305.701 264.599 li +324.749 264.599 li +324.749 265.602 li +304.699 265.602 mo +285.651 265.602 li +285.651 264.599 li +304.699 264.599 li +304.699 265.602 li +284.648 265.602 mo +265.602 265.602 li +265.602 264.599 li +284.648 264.599 li +284.648 265.602 li +264.599 265.602 mo +245.551 265.602 li +245.551 264.599 li +264.599 264.599 li +264.599 265.602 li +244.549 265.602 mo +225.501 265.602 li +225.501 264.599 li +244.549 264.599 li +244.549 265.602 li +224.499 265.602 mo +205.451 265.602 li +205.451 264.599 li +224.499 264.599 li +224.499 265.602 li +204.449 265.602 mo +185.401 265.602 li +185.401 264.599 li +204.449 264.599 li +204.449 265.602 li +184.399 265.602 mo +165.351 265.602 li +165.351 264.599 li +184.399 264.599 li +184.399 265.602 li +164.349 265.602 mo +145.301 265.602 li +145.301 264.599 li +164.349 264.599 li +164.349 265.602 li +144.299 265.602 mo +125.251 265.602 li +125.251 264.599 li +144.299 264.599 li +144.299 265.602 li +124.248 265.602 mo +105.201 265.602 li +105.201 264.599 li +124.248 264.599 li +124.248 265.602 li +104.199 265.602 mo +85.1513 265.602 li +85.1513 264.599 li +104.199 264.599 li +104.199 265.602 li +84.1489 265.602 mo +65.101 265.602 li +65.101 264.599 li +84.1489 264.599 li +84.1489 265.602 li +64.0986 265.602 mo +45.0513 265.602 li +45.0513 264.599 li +64.0986 264.599 li +64.0986 265.602 li +44.0488 265.602 mo +25.5 265.602 li +25.5 264.599 li +44.0488 264.599 li +44.0488 265.602 li +.282353 .282353 .282353 rgb +f +25.5 265.602 mo +24.5 265.602 li +24.5 264.599 li +25.5 264.599 li +25.5 265.602 li +.643137 .643137 .643137 rgb +f +45.0513 265.602 mo +44.0488 265.602 li +44.0488 264.599 li +45.0513 264.599 li +45.0513 265.602 li +.427451 .427451 .427451 rgb +f +65.101 265.602 mo +64.0986 265.602 li +64.0986 264.599 li +65.101 264.599 li +65.101 265.602 li +f +85.1513 265.602 mo +84.1489 265.602 li +84.1489 264.599 li +85.1513 264.599 li +85.1513 265.602 li +f +105.201 265.602 mo +104.199 265.602 li +104.199 264.599 li +105.201 264.599 li +105.201 265.602 li +f +125.251 265.602 mo +124.248 265.602 li +124.248 264.599 li +125.251 264.599 li +125.251 265.602 li +.643137 .643137 .643137 rgb +f +145.301 265.602 mo +144.299 265.602 li +144.299 264.599 li +145.301 264.599 li +145.301 265.602 li +.427451 .427451 .427451 rgb +f +165.351 265.602 mo +164.349 265.602 li +164.349 264.599 li +165.351 264.599 li +165.351 265.602 li +f +185.401 265.602 mo +184.399 265.602 li +184.399 264.599 li +185.401 264.599 li +185.401 265.602 li +f +205.451 265.602 mo +204.449 265.602 li +204.449 264.599 li +205.451 264.599 li +205.451 265.602 li +f +225.501 265.602 mo +224.499 265.602 li +224.499 264.599 li +225.501 264.599 li +225.501 265.602 li +.643137 .643137 .643137 rgb +f +245.551 265.602 mo +244.549 265.602 li +244.549 264.599 li +245.551 264.599 li +245.551 265.602 li +.427451 .427451 .427451 rgb +f +265.602 265.602 mo +264.599 265.602 li +264.599 264.599 li +265.602 264.599 li +265.602 265.602 li +f +285.651 265.602 mo +284.648 265.602 li +284.648 264.599 li +285.651 264.599 li +285.651 265.602 li +f +305.701 265.602 mo +304.699 265.602 li +304.699 264.599 li +305.701 264.599 li +305.701 265.602 li +f +325.751 265.602 mo +324.749 265.602 li +324.749 264.599 li +325.751 264.599 li +325.751 265.602 li +.643137 .643137 .643137 rgb +f +345.801 265.602 mo +344.799 265.602 li +344.799 264.599 li +345.801 264.599 li +345.801 265.602 li +.427451 .427451 .427451 rgb +f +365.852 265.602 mo +364.849 265.602 li +364.849 264.599 li +365.852 264.599 li +365.852 265.602 li +f +385.901 265.602 mo +384.898 265.602 li +384.898 264.599 li +385.901 264.599 li +385.901 265.602 li +f +405.951 265.602 mo +404.949 265.602 li +404.949 264.599 li +405.951 264.599 li +405.951 265.602 li +f +425.5 265.602 mo +424.5 265.602 li +424.5 264.599 li +425.5 264.599 li +425.5 265.602 li +.643137 .643137 .643137 rgb +f +424.5 285.651 mo +405.951 285.651 li +405.951 284.648 li +424.5 284.648 li +424.5 285.651 li +404.949 285.651 mo +385.901 285.651 li +385.901 284.648 li +404.949 284.648 li +404.949 285.651 li +384.898 285.651 mo +365.852 285.651 li +365.852 284.648 li +384.898 284.648 li +384.898 285.651 li +364.849 285.651 mo +345.801 285.651 li +345.801 284.648 li +364.849 284.648 li +364.849 285.651 li +344.799 285.651 mo +325.751 285.651 li +325.751 284.648 li +344.799 284.648 li +344.799 285.651 li +324.749 285.651 mo +305.701 285.651 li +305.701 284.648 li +324.749 284.648 li +324.749 285.651 li +304.699 285.651 mo +285.651 285.651 li +285.651 284.648 li +304.699 284.648 li +304.699 285.651 li +284.648 285.651 mo +265.602 285.651 li +265.602 284.648 li +284.648 284.648 li +284.648 285.651 li +264.599 285.651 mo +245.551 285.651 li +245.551 284.648 li +264.599 284.648 li +264.599 285.651 li +244.549 285.651 mo +225.501 285.651 li +225.501 284.648 li +244.549 284.648 li +244.549 285.651 li +224.499 285.651 mo +205.451 285.651 li +205.451 284.648 li +224.499 284.648 li +224.499 285.651 li +204.449 285.651 mo +185.401 285.651 li +185.401 284.648 li +204.449 284.648 li +204.449 285.651 li +184.399 285.651 mo +165.351 285.651 li +165.351 284.648 li +184.399 284.648 li +184.399 285.651 li +164.349 285.651 mo +145.301 285.651 li +145.301 284.648 li +164.349 284.648 li +164.349 285.651 li +144.299 285.651 mo +125.251 285.651 li +125.251 284.648 li +144.299 284.648 li +144.299 285.651 li +124.248 285.651 mo +105.201 285.651 li +105.201 284.648 li +124.248 284.648 li +124.248 285.651 li +104.199 285.651 mo +85.1513 285.651 li +85.1513 284.648 li +104.199 284.648 li +104.199 285.651 li +84.1489 285.651 mo +65.101 285.651 li +65.101 284.648 li +84.1489 284.648 li +84.1489 285.651 li +64.0986 285.651 mo +45.0513 285.651 li +45.0513 284.648 li +64.0986 284.648 li +64.0986 285.651 li +44.0488 285.651 mo +25.5 285.651 li +25.5 284.648 li +44.0488 284.648 li +44.0488 285.651 li +.282353 .282353 .282353 rgb +f +25.5 285.651 mo +24.5 285.651 li +24.5 284.648 li +25.5 284.648 li +25.5 285.651 li +.643137 .643137 .643137 rgb +f +45.0513 285.651 mo +44.0488 285.651 li +44.0488 284.648 li +45.0513 284.648 li +45.0513 285.651 li +.427451 .427451 .427451 rgb +f +65.101 285.651 mo +64.0986 285.651 li +64.0986 284.648 li +65.101 284.648 li +65.101 285.651 li +f +85.1513 285.651 mo +84.1489 285.651 li +84.1489 284.648 li +85.1513 284.648 li +85.1513 285.651 li +f +105.201 285.651 mo +104.199 285.651 li +104.199 284.648 li +105.201 284.648 li +105.201 285.651 li +f +125.251 285.651 mo +124.248 285.651 li +124.248 284.648 li +125.251 284.648 li +125.251 285.651 li +.643137 .643137 .643137 rgb +f +145.301 285.651 mo +144.299 285.651 li +144.299 284.648 li +145.301 284.648 li +145.301 285.651 li +.427451 .427451 .427451 rgb +f +165.351 285.651 mo +164.349 285.651 li +164.349 284.648 li +165.351 284.648 li +165.351 285.651 li +f +185.401 285.651 mo +184.399 285.651 li +184.399 284.648 li +185.401 284.648 li +185.401 285.651 li +f +205.451 285.651 mo +204.449 285.651 li +204.449 284.648 li +205.451 284.648 li +205.451 285.651 li +f +225.501 285.651 mo +224.499 285.651 li +224.499 284.648 li +225.501 284.648 li +225.501 285.651 li +.643137 .643137 .643137 rgb +f +245.551 285.651 mo +244.549 285.651 li +244.549 284.648 li +245.551 284.648 li +245.551 285.651 li +.427451 .427451 .427451 rgb +f +265.602 285.651 mo +264.599 285.651 li +264.599 284.648 li +265.602 284.648 li +265.602 285.651 li +f +285.651 285.651 mo +284.648 285.651 li +284.648 284.648 li +285.651 284.648 li +285.651 285.651 li +f +305.701 285.651 mo +304.699 285.651 li +304.699 284.648 li +305.701 284.648 li +305.701 285.651 li +f +325.751 285.651 mo +324.749 285.651 li +324.749 284.648 li +325.751 284.648 li +325.751 285.651 li +.643137 .643137 .643137 rgb +f +345.801 285.651 mo +344.799 285.651 li +344.799 284.648 li +345.801 284.648 li +345.801 285.651 li +.427451 .427451 .427451 rgb +f +365.852 285.651 mo +364.849 285.651 li +364.849 284.648 li +365.852 284.648 li +365.852 285.651 li +f +385.901 285.651 mo +384.898 285.651 li +384.898 284.648 li +385.901 284.648 li +385.901 285.651 li +f +405.951 285.651 mo +404.949 285.651 li +404.949 284.648 li +405.951 284.648 li +405.951 285.651 li +f +425.5 285.651 mo +424.5 285.651 li +424.5 284.648 li +425.5 284.648 li +425.5 285.651 li +.643137 .643137 .643137 rgb +f +424.5 305.701 mo +405.951 305.701 li +405.951 304.699 li +424.5 304.699 li +424.5 305.701 li +404.949 305.701 mo +385.901 305.701 li +385.901 304.699 li +404.949 304.699 li +404.949 305.701 li +384.898 305.701 mo +365.852 305.701 li +365.852 304.699 li +384.898 304.699 li +384.898 305.701 li +364.849 305.701 mo +345.801 305.701 li +345.801 304.699 li +364.849 304.699 li +364.849 305.701 li +344.799 305.701 mo +325.751 305.701 li +325.751 304.699 li +344.799 304.699 li +344.799 305.701 li +324.749 305.701 mo +305.701 305.701 li +305.701 304.699 li +324.749 304.699 li +324.749 305.701 li +304.699 305.701 mo +285.651 305.701 li +285.651 304.699 li +304.699 304.699 li +304.699 305.701 li +284.648 305.701 mo +265.602 305.701 li +265.602 304.699 li +284.648 304.699 li +284.648 305.701 li +264.599 305.701 mo +245.551 305.701 li +245.551 304.699 li +264.599 304.699 li +264.599 305.701 li +244.549 305.701 mo +225.501 305.701 li +225.501 304.699 li +244.549 304.699 li +244.549 305.701 li +224.499 305.701 mo +205.451 305.701 li +205.451 304.699 li +224.499 304.699 li +224.499 305.701 li +204.449 305.701 mo +185.401 305.701 li +185.401 304.699 li +204.449 304.699 li +204.449 305.701 li +184.399 305.701 mo +165.351 305.701 li +165.351 304.699 li +184.399 304.699 li +184.399 305.701 li +164.349 305.701 mo +145.301 305.701 li +145.301 304.699 li +164.349 304.699 li +164.349 305.701 li +144.299 305.701 mo +125.251 305.701 li +125.251 304.699 li +144.299 304.699 li +144.299 305.701 li +124.248 305.701 mo +105.201 305.701 li +105.201 304.699 li +124.248 304.699 li +124.248 305.701 li +104.199 305.701 mo +85.1513 305.701 li +85.1513 304.699 li +104.199 304.699 li +104.199 305.701 li +84.1489 305.701 mo +65.101 305.701 li +65.101 304.699 li +84.1489 304.699 li +84.1489 305.701 li +64.0986 305.701 mo +45.0513 305.701 li +45.0513 304.699 li +64.0986 304.699 li +64.0986 305.701 li +44.0488 305.701 mo +25.5 305.701 li +25.5 304.699 li +44.0488 304.699 li +44.0488 305.701 li +.282353 .282353 .282353 rgb +f +25.5 305.701 mo +24.5 305.701 li +24.5 304.699 li +25.5 304.699 li +25.5 305.701 li +.643137 .643137 .643137 rgb +f +45.0513 305.701 mo +44.0488 305.701 li +44.0488 304.699 li +45.0513 304.699 li +45.0513 305.701 li +.427451 .427451 .427451 rgb +f +65.101 305.701 mo +64.0986 305.701 li +64.0986 304.699 li +65.101 304.699 li +65.101 305.701 li +f +85.1513 305.701 mo +84.1489 305.701 li +84.1489 304.699 li +85.1513 304.699 li +85.1513 305.701 li +f +105.201 305.701 mo +104.199 305.701 li +104.199 304.699 li +105.201 304.699 li +105.201 305.701 li +f +125.251 305.701 mo +124.248 305.701 li +124.248 304.699 li +125.251 304.699 li +125.251 305.701 li +.643137 .643137 .643137 rgb +f +145.301 305.701 mo +144.299 305.701 li +144.299 304.699 li +145.301 304.699 li +145.301 305.701 li +.427451 .427451 .427451 rgb +f +165.351 305.701 mo +164.349 305.701 li +164.349 304.699 li +165.351 304.699 li +165.351 305.701 li +f +185.401 305.701 mo +184.399 305.701 li +184.399 304.699 li +185.401 304.699 li +185.401 305.701 li +f +205.451 305.701 mo +204.449 305.701 li +204.449 304.699 li +205.451 304.699 li +205.451 305.701 li +f +225.501 305.701 mo +224.499 305.701 li +224.499 304.699 li +225.501 304.699 li +225.501 305.701 li +.643137 .643137 .643137 rgb +f +245.551 305.701 mo +244.549 305.701 li +244.549 304.699 li +245.551 304.699 li +245.551 305.701 li +.427451 .427451 .427451 rgb +f +265.602 305.701 mo +264.599 305.701 li +264.599 304.699 li +265.602 304.699 li +265.602 305.701 li +f +285.651 305.701 mo +284.648 305.701 li +284.648 304.699 li +285.651 304.699 li +285.651 305.701 li +f +305.701 305.701 mo +304.699 305.701 li +304.699 304.699 li +305.701 304.699 li +305.701 305.701 li +f +325.751 305.701 mo +324.749 305.701 li +324.749 304.699 li +325.751 304.699 li +325.751 305.701 li +.643137 .643137 .643137 rgb +f +345.801 305.701 mo +344.799 305.701 li +344.799 304.699 li +345.801 304.699 li +345.801 305.701 li +.427451 .427451 .427451 rgb +f +365.852 305.701 mo +364.849 305.701 li +364.849 304.699 li +365.852 304.699 li +365.852 305.701 li +f +385.901 305.701 mo +384.898 305.701 li +384.898 304.699 li +385.901 304.699 li +385.901 305.701 li +f +405.951 305.701 mo +404.949 305.701 li +404.949 304.699 li +405.951 304.699 li +405.951 305.701 li +f +425.5 305.701 mo +424.5 305.701 li +424.5 304.699 li +425.5 304.699 li +425.5 305.701 li +.643137 .643137 .643137 rgb +f +424.5 325.751 mo +405.951 325.751 li +405.951 324.749 li +424.5 324.749 li +424.5 325.751 li +404.949 325.751 mo +385.901 325.751 li +385.901 324.749 li +404.949 324.749 li +404.949 325.751 li +384.898 325.751 mo +365.852 325.751 li +365.852 324.749 li +384.898 324.749 li +384.898 325.751 li +364.849 325.751 mo +345.801 325.751 li +345.801 324.749 li +364.849 324.749 li +364.849 325.751 li +344.799 325.751 mo +325.751 325.751 li +325.751 324.749 li +344.799 324.749 li +344.799 325.751 li +324.749 325.751 mo +305.701 325.751 li +305.701 324.749 li +324.749 324.749 li +324.749 325.751 li +304.699 325.751 mo +285.651 325.751 li +285.651 324.749 li +304.699 324.749 li +304.699 325.751 li +284.648 325.751 mo +265.602 325.751 li +265.602 324.749 li +284.648 324.749 li +284.648 325.751 li +264.599 325.751 mo +245.551 325.751 li +245.551 324.749 li +264.599 324.749 li +264.599 325.751 li +244.549 325.751 mo +225.501 325.751 li +225.501 324.749 li +244.549 324.749 li +244.549 325.751 li +224.499 325.751 mo +205.451 325.751 li +205.451 324.749 li +224.499 324.749 li +224.499 325.751 li +204.449 325.751 mo +185.401 325.751 li +185.401 324.749 li +204.449 324.749 li +204.449 325.751 li +184.399 325.751 mo +165.351 325.751 li +165.351 324.749 li +184.399 324.749 li +184.399 325.751 li +164.349 325.751 mo +145.301 325.751 li +145.301 324.749 li +164.349 324.749 li +164.349 325.751 li +144.299 325.751 mo +125.251 325.751 li +125.251 324.749 li +144.299 324.749 li +144.299 325.751 li +124.248 325.751 mo +105.201 325.751 li +105.201 324.749 li +124.248 324.749 li +124.248 325.751 li +104.199 325.751 mo +85.1513 325.751 li +85.1513 324.749 li +104.199 324.749 li +104.199 325.751 li +84.1489 325.751 mo +65.101 325.751 li +65.101 324.749 li +84.1489 324.749 li +84.1489 325.751 li +64.0986 325.751 mo +45.0513 325.751 li +45.0513 324.749 li +64.0986 324.749 li +64.0986 325.751 li +44.0488 325.751 mo +25.5 325.751 li +25.5 324.749 li +44.0488 324.749 li +44.0488 325.751 li +.552941 .552941 .552941 rgb +f +25.5 325.751 mo +24.5 325.751 li +24.5 324.749 li +25.5 324.749 li +25.5 325.751 li +.776471 .776471 .776471 rgb +f +45.0513 325.751 mo +44.0488 325.751 li +44.0488 324.749 li +45.0513 324.749 li +45.0513 325.751 li +.643137 .643137 .643137 rgb +f +65.101 325.751 mo +64.0986 325.751 li +64.0986 324.749 li +65.101 324.749 li +65.101 325.751 li +f +85.1513 325.751 mo +84.1489 325.751 li +84.1489 324.749 li +85.1513 324.749 li +85.1513 325.751 li +f +105.201 325.751 mo +104.199 325.751 li +104.199 324.749 li +105.201 324.749 li +105.201 325.751 li +f +125.251 325.751 mo +124.248 325.751 li +124.248 324.749 li +125.251 324.749 li +125.251 325.751 li +.776471 .776471 .776471 rgb +f +145.301 325.751 mo +144.299 325.751 li +144.299 324.749 li +145.301 324.749 li +145.301 325.751 li +.643137 .643137 .643137 rgb +f +165.351 325.751 mo +164.349 325.751 li +164.349 324.749 li +165.351 324.749 li +165.351 325.751 li +f +185.401 325.751 mo +184.399 325.751 li +184.399 324.749 li +185.401 324.749 li +185.401 325.751 li +f +205.451 325.751 mo +204.449 325.751 li +204.449 324.749 li +205.451 324.749 li +205.451 325.751 li +f +225.501 325.751 mo +224.499 325.751 li +224.499 324.749 li +225.501 324.749 li +225.501 325.751 li +.776471 .776471 .776471 rgb +f +245.551 325.751 mo +244.549 325.751 li +244.549 324.749 li +245.551 324.749 li +245.551 325.751 li +.643137 .643137 .643137 rgb +f +265.602 325.751 mo +264.599 325.751 li +264.599 324.749 li +265.602 324.749 li +265.602 325.751 li +f +285.651 325.751 mo +284.648 325.751 li +284.648 324.749 li +285.651 324.749 li +285.651 325.751 li +f +305.701 325.751 mo +304.699 325.751 li +304.699 324.749 li +305.701 324.749 li +305.701 325.751 li +f +325.751 325.751 mo +324.749 325.751 li +324.749 324.749 li +325.751 324.749 li +325.751 325.751 li +.776471 .776471 .776471 rgb +f +345.801 325.751 mo +344.799 325.751 li +344.799 324.749 li +345.801 324.749 li +345.801 325.751 li +.643137 .643137 .643137 rgb +f +365.852 325.751 mo +364.849 325.751 li +364.849 324.749 li +365.852 324.749 li +365.852 325.751 li +f +385.901 325.751 mo +384.898 325.751 li +384.898 324.749 li +385.901 324.749 li +385.901 325.751 li +f +405.951 325.751 mo +404.949 325.751 li +404.949 324.749 li +405.951 324.749 li +405.951 325.751 li +f +425.5 325.751 mo +424.5 325.751 li +424.5 324.749 li +425.5 324.749 li +425.5 325.751 li +.776471 .776471 .776471 rgb +f +424.5 345.801 mo +405.951 345.801 li +405.951 344.799 li +424.5 344.799 li +424.5 345.801 li +404.949 345.801 mo +385.901 345.801 li +385.901 344.799 li +404.949 344.799 li +404.949 345.801 li +384.898 345.801 mo +365.852 345.801 li +365.852 344.799 li +384.898 344.799 li +384.898 345.801 li +364.849 345.801 mo +345.801 345.801 li +345.801 344.799 li +364.849 344.799 li +364.849 345.801 li +344.799 345.801 mo +325.751 345.801 li +325.751 344.799 li +344.799 344.799 li +344.799 345.801 li +324.749 345.801 mo +305.701 345.801 li +305.701 344.799 li +324.749 344.799 li +324.749 345.801 li +304.699 345.801 mo +285.651 345.801 li +285.651 344.799 li +304.699 344.799 li +304.699 345.801 li +284.648 345.801 mo +265.602 345.801 li +265.602 344.799 li +284.648 344.799 li +284.648 345.801 li +264.599 345.801 mo +245.551 345.801 li +245.551 344.799 li +264.599 344.799 li +264.599 345.801 li +244.549 345.801 mo +225.501 345.801 li +225.501 344.799 li +244.549 344.799 li +244.549 345.801 li +224.499 345.801 mo +205.451 345.801 li +205.451 344.799 li +224.499 344.799 li +224.499 345.801 li +204.449 345.801 mo +185.401 345.801 li +185.401 344.799 li +204.449 344.799 li +204.449 345.801 li +184.399 345.801 mo +165.351 345.801 li +165.351 344.799 li +184.399 344.799 li +184.399 345.801 li +164.349 345.801 mo +145.301 345.801 li +145.301 344.799 li +164.349 344.799 li +164.349 345.801 li +144.299 345.801 mo +125.251 345.801 li +125.251 344.799 li +144.299 344.799 li +144.299 345.801 li +124.248 345.801 mo +105.201 345.801 li +105.201 344.799 li +124.248 344.799 li +124.248 345.801 li +104.199 345.801 mo +85.1513 345.801 li +85.1513 344.799 li +104.199 344.799 li +104.199 345.801 li +84.1489 345.801 mo +65.101 345.801 li +65.101 344.799 li +84.1489 344.799 li +84.1489 345.801 li +64.0986 345.801 mo +45.0513 345.801 li +45.0513 344.799 li +64.0986 344.799 li +64.0986 345.801 li +44.0488 345.801 mo +25.5 345.801 li +25.5 344.799 li +44.0488 344.799 li +44.0488 345.801 li +.282353 .282353 .282353 rgb +f +25.5 345.801 mo +24.5 345.801 li +24.5 344.799 li +25.5 344.799 li +25.5 345.801 li +.643137 .643137 .643137 rgb +f +45.0513 345.801 mo +44.0488 345.801 li +44.0488 344.799 li +45.0513 344.799 li +45.0513 345.801 li +.427451 .427451 .427451 rgb +f +65.101 345.801 mo +64.0986 345.801 li +64.0986 344.799 li +65.101 344.799 li +65.101 345.801 li +f +85.1513 345.801 mo +84.1489 345.801 li +84.1489 344.799 li +85.1513 344.799 li +85.1513 345.801 li +f +105.201 345.801 mo +104.199 345.801 li +104.199 344.799 li +105.201 344.799 li +105.201 345.801 li +f +125.251 345.801 mo +124.248 345.801 li +124.248 344.799 li +125.251 344.799 li +125.251 345.801 li +.643137 .643137 .643137 rgb +f +145.301 345.801 mo +144.299 345.801 li +144.299 344.799 li +145.301 344.799 li +145.301 345.801 li +.427451 .427451 .427451 rgb +f +165.351 345.801 mo +164.349 345.801 li +164.349 344.799 li +165.351 344.799 li +165.351 345.801 li +f +185.401 345.801 mo +184.399 345.801 li +184.399 344.799 li +185.401 344.799 li +185.401 345.801 li +f +205.451 345.801 mo +204.449 345.801 li +204.449 344.799 li +205.451 344.799 li +205.451 345.801 li +f +225.501 345.801 mo +224.499 345.801 li +224.499 344.799 li +225.501 344.799 li +225.501 345.801 li +.643137 .643137 .643137 rgb +f +245.551 345.801 mo +244.549 345.801 li +244.549 344.799 li +245.551 344.799 li +245.551 345.801 li +.427451 .427451 .427451 rgb +f +265.602 345.801 mo +264.599 345.801 li +264.599 344.799 li +265.602 344.799 li +265.602 345.801 li +f +285.651 345.801 mo +284.648 345.801 li +284.648 344.799 li +285.651 344.799 li +285.651 345.801 li +f +305.701 345.801 mo +304.699 345.801 li +304.699 344.799 li +305.701 344.799 li +305.701 345.801 li +f +325.751 345.801 mo +324.749 345.801 li +324.749 344.799 li +325.751 344.799 li +325.751 345.801 li +.643137 .643137 .643137 rgb +f +345.801 345.801 mo +344.799 345.801 li +344.799 344.799 li +345.801 344.799 li +345.801 345.801 li +.427451 .427451 .427451 rgb +f +365.852 345.801 mo +364.849 345.801 li +364.849 344.799 li +365.852 344.799 li +365.852 345.801 li +f +385.901 345.801 mo +384.898 345.801 li +384.898 344.799 li +385.901 344.799 li +385.901 345.801 li +f +405.951 345.801 mo +404.949 345.801 li +404.949 344.799 li +405.951 344.799 li +405.951 345.801 li +f +425.5 345.801 mo +424.5 345.801 li +424.5 344.799 li +425.5 344.799 li +425.5 345.801 li +.643137 .643137 .643137 rgb +f +424.5 365.852 mo +405.951 365.852 li +405.951 364.849 li +424.5 364.849 li +424.5 365.852 li +404.949 365.852 mo +385.901 365.852 li +385.901 364.849 li +404.949 364.849 li +404.949 365.852 li +384.898 365.852 mo +365.852 365.852 li +365.852 364.849 li +384.898 364.849 li +384.898 365.852 li +364.849 365.852 mo +345.801 365.852 li +345.801 364.849 li +364.849 364.849 li +364.849 365.852 li +344.799 365.852 mo +325.751 365.852 li +325.751 364.849 li +344.799 364.849 li +344.799 365.852 li +324.749 365.852 mo +305.701 365.852 li +305.701 364.849 li +324.749 364.849 li +324.749 365.852 li +304.699 365.852 mo +285.651 365.852 li +285.651 364.849 li +304.699 364.849 li +304.699 365.852 li +284.648 365.852 mo +265.602 365.852 li +265.602 364.849 li +284.648 364.849 li +284.648 365.852 li +264.599 365.852 mo +245.551 365.852 li +245.551 364.849 li +264.599 364.849 li +264.599 365.852 li +244.549 365.852 mo +225.501 365.852 li +225.501 364.849 li +244.549 364.849 li +244.549 365.852 li +224.499 365.852 mo +205.451 365.852 li +205.451 364.849 li +224.499 364.849 li +224.499 365.852 li +204.449 365.852 mo +185.401 365.852 li +185.401 364.849 li +204.449 364.849 li +204.449 365.852 li +184.399 365.852 mo +165.351 365.852 li +165.351 364.849 li +184.399 364.849 li +184.399 365.852 li +164.349 365.852 mo +145.301 365.852 li +145.301 364.849 li +164.349 364.849 li +164.349 365.852 li +144.299 365.852 mo +125.251 365.852 li +125.251 364.849 li +144.299 364.849 li +144.299 365.852 li +124.248 365.852 mo +105.201 365.852 li +105.201 364.849 li +124.248 364.849 li +124.248 365.852 li +104.199 365.852 mo +85.1513 365.852 li +85.1513 364.849 li +104.199 364.849 li +104.199 365.852 li +84.1489 365.852 mo +65.101 365.852 li +65.101 364.849 li +84.1489 364.849 li +84.1489 365.852 li +64.0986 365.852 mo +45.0513 365.852 li +45.0513 364.849 li +64.0986 364.849 li +64.0986 365.852 li +44.0488 365.852 mo +25.5 365.852 li +25.5 364.849 li +44.0488 364.849 li +44.0488 365.852 li +.282353 .282353 .282353 rgb +f +25.5 365.852 mo +24.5 365.852 li +24.5 364.849 li +25.5 364.849 li +25.5 365.852 li +.643137 .643137 .643137 rgb +f +45.0513 365.852 mo +44.0488 365.852 li +44.0488 364.849 li +45.0513 364.849 li +45.0513 365.852 li +.427451 .427451 .427451 rgb +f +65.101 365.852 mo +64.0986 365.852 li +64.0986 364.849 li +65.101 364.849 li +65.101 365.852 li +f +85.1513 365.852 mo +84.1489 365.852 li +84.1489 364.849 li +85.1513 364.849 li +85.1513 365.852 li +f +105.201 365.852 mo +104.199 365.852 li +104.199 364.849 li +105.201 364.849 li +105.201 365.852 li +f +125.251 365.852 mo +124.248 365.852 li +124.248 364.849 li +125.251 364.849 li +125.251 365.852 li +.643137 .643137 .643137 rgb +f +145.301 365.852 mo +144.299 365.852 li +144.299 364.849 li +145.301 364.849 li +145.301 365.852 li +.427451 .427451 .427451 rgb +f +165.351 365.852 mo +164.349 365.852 li +164.349 364.849 li +165.351 364.849 li +165.351 365.852 li +f +185.401 365.852 mo +184.399 365.852 li +184.399 364.849 li +185.401 364.849 li +185.401 365.852 li +f +205.451 365.852 mo +204.449 365.852 li +204.449 364.849 li +205.451 364.849 li +205.451 365.852 li +f +225.501 365.852 mo +224.499 365.852 li +224.499 364.849 li +225.501 364.849 li +225.501 365.852 li +.643137 .643137 .643137 rgb +f +245.551 365.852 mo +244.549 365.852 li +244.549 364.849 li +245.551 364.849 li +245.551 365.852 li +.427451 .427451 .427451 rgb +f +265.602 365.852 mo +264.599 365.852 li +264.599 364.849 li +265.602 364.849 li +265.602 365.852 li +f +285.651 365.852 mo +284.648 365.852 li +284.648 364.849 li +285.651 364.849 li +285.651 365.852 li +f +305.701 365.852 mo +304.699 365.852 li +304.699 364.849 li +305.701 364.849 li +305.701 365.852 li +f +325.751 365.852 mo +324.749 365.852 li +324.749 364.849 li +325.751 364.849 li +325.751 365.852 li +.643137 .643137 .643137 rgb +f +345.801 365.852 mo +344.799 365.852 li +344.799 364.849 li +345.801 364.849 li +345.801 365.852 li +.427451 .427451 .427451 rgb +f +365.852 365.852 mo +364.849 365.852 li +364.849 364.849 li +365.852 364.849 li +365.852 365.852 li +f +385.901 365.852 mo +384.898 365.852 li +384.898 364.849 li +385.901 364.849 li +385.901 365.852 li +f +405.951 365.852 mo +404.949 365.852 li +404.949 364.849 li +405.951 364.849 li +405.951 365.852 li +f +425.5 365.852 mo +424.5 365.852 li +424.5 364.849 li +425.5 364.849 li +425.5 365.852 li +.643137 .643137 .643137 rgb +f +424.5 385.901 mo +405.951 385.901 li +405.951 384.898 li +424.5 384.898 li +424.5 385.901 li +404.949 385.901 mo +385.901 385.901 li +385.901 384.898 li +404.949 384.898 li +404.949 385.901 li +384.898 385.901 mo +365.852 385.901 li +365.852 384.898 li +384.898 384.898 li +384.898 385.901 li +364.849 385.901 mo +345.801 385.901 li +345.801 384.898 li +364.849 384.898 li +364.849 385.901 li +344.799 385.901 mo +325.751 385.901 li +325.751 384.898 li +344.799 384.898 li +344.799 385.901 li +324.749 385.901 mo +305.701 385.901 li +305.701 384.898 li +324.749 384.898 li +324.749 385.901 li +304.699 385.901 mo +285.651 385.901 li +285.651 384.898 li +304.699 384.898 li +304.699 385.901 li +284.648 385.901 mo +265.602 385.901 li +265.602 384.898 li +284.648 384.898 li +284.648 385.901 li +264.599 385.901 mo +245.551 385.901 li +245.551 384.898 li +264.599 384.898 li +264.599 385.901 li +244.549 385.901 mo +225.501 385.901 li +225.501 384.898 li +244.549 384.898 li +244.549 385.901 li +224.499 385.901 mo +205.451 385.901 li +205.451 384.898 li +224.499 384.898 li +224.499 385.901 li +204.449 385.901 mo +185.401 385.901 li +185.401 384.898 li +204.449 384.898 li +204.449 385.901 li +184.399 385.901 mo +165.351 385.901 li +165.351 384.898 li +184.399 384.898 li +184.399 385.901 li +164.349 385.901 mo +145.301 385.901 li +145.301 384.898 li +164.349 384.898 li +164.349 385.901 li +144.299 385.901 mo +125.251 385.901 li +125.251 384.898 li +144.299 384.898 li +144.299 385.901 li +124.248 385.901 mo +105.201 385.901 li +105.201 384.898 li +124.248 384.898 li +124.248 385.901 li +104.199 385.901 mo +85.1513 385.901 li +85.1513 384.898 li +104.199 384.898 li +104.199 385.901 li +84.1489 385.901 mo +65.101 385.901 li +65.101 384.898 li +84.1489 384.898 li +84.1489 385.901 li +64.0986 385.901 mo +45.0513 385.901 li +45.0513 384.898 li +64.0986 384.898 li +64.0986 385.901 li +44.0488 385.901 mo +25.5 385.901 li +25.5 384.898 li +44.0488 384.898 li +44.0488 385.901 li +.282353 .282353 .282353 rgb +f +25.5 385.901 mo +24.5 385.901 li +24.5 384.898 li +25.5 384.898 li +25.5 385.901 li +.643137 .643137 .643137 rgb +f +45.0513 385.901 mo +44.0488 385.901 li +44.0488 384.898 li +45.0513 384.898 li +45.0513 385.901 li +.427451 .427451 .427451 rgb +f +65.101 385.901 mo +64.0986 385.901 li +64.0986 384.898 li +65.101 384.898 li +65.101 385.901 li +f +85.1513 385.901 mo +84.1489 385.901 li +84.1489 384.898 li +85.1513 384.898 li +85.1513 385.901 li +f +105.201 385.901 mo +104.199 385.901 li +104.199 384.898 li +105.201 384.898 li +105.201 385.901 li +f +125.251 385.901 mo +124.248 385.901 li +124.248 384.898 li +125.251 384.898 li +125.251 385.901 li +.643137 .643137 .643137 rgb +f +145.301 385.901 mo +144.299 385.901 li +144.299 384.898 li +145.301 384.898 li +145.301 385.901 li +.427451 .427451 .427451 rgb +f +165.351 385.901 mo +164.349 385.901 li +164.349 384.898 li +165.351 384.898 li +165.351 385.901 li +f +185.401 385.901 mo +184.399 385.901 li +184.399 384.898 li +185.401 384.898 li +185.401 385.901 li +f +205.451 385.901 mo +204.449 385.901 li +204.449 384.898 li +205.451 384.898 li +205.451 385.901 li +f +225.501 385.901 mo +224.499 385.901 li +224.499 384.898 li +225.501 384.898 li +225.501 385.901 li +.643137 .643137 .643137 rgb +f +245.551 385.901 mo +244.549 385.901 li +244.549 384.898 li +245.551 384.898 li +245.551 385.901 li +.427451 .427451 .427451 rgb +f +265.602 385.901 mo +264.599 385.901 li +264.599 384.898 li +265.602 384.898 li +265.602 385.901 li +f +285.651 385.901 mo +284.648 385.901 li +284.648 384.898 li +285.651 384.898 li +285.651 385.901 li +f +305.701 385.901 mo +304.699 385.901 li +304.699 384.898 li +305.701 384.898 li +305.701 385.901 li +f +325.751 385.901 mo +324.749 385.901 li +324.749 384.898 li +325.751 384.898 li +325.751 385.901 li +.643137 .643137 .643137 rgb +f +345.801 385.901 mo +344.799 385.901 li +344.799 384.898 li +345.801 384.898 li +345.801 385.901 li +.427451 .427451 .427451 rgb +f +365.852 385.901 mo +364.849 385.901 li +364.849 384.898 li +365.852 384.898 li +365.852 385.901 li +f +385.901 385.901 mo +384.898 385.901 li +384.898 384.898 li +385.901 384.898 li +385.901 385.901 li +f +405.951 385.901 mo +404.949 385.901 li +404.949 384.898 li +405.951 384.898 li +405.951 385.901 li +f +425.5 385.901 mo +424.5 385.901 li +424.5 384.898 li +425.5 384.898 li +425.5 385.901 li +.643137 .643137 .643137 rgb +f +424.5 405.951 mo +405.951 405.951 li +405.951 404.949 li +424.5 404.949 li +424.5 405.951 li +404.949 405.951 mo +385.901 405.951 li +385.901 404.949 li +404.949 404.949 li +404.949 405.951 li +384.898 405.951 mo +365.852 405.951 li +365.852 404.949 li +384.898 404.949 li +384.898 405.951 li +364.849 405.951 mo +345.801 405.951 li +345.801 404.949 li +364.849 404.949 li +364.849 405.951 li +344.799 405.951 mo +325.751 405.951 li +325.751 404.949 li +344.799 404.949 li +344.799 405.951 li +324.749 405.951 mo +305.701 405.951 li +305.701 404.949 li +324.749 404.949 li +324.749 405.951 li +304.699 405.951 mo +285.651 405.951 li +285.651 404.949 li +304.699 404.949 li +304.699 405.951 li +284.648 405.951 mo +265.602 405.951 li +265.602 404.949 li +284.648 404.949 li +284.648 405.951 li +264.599 405.951 mo +245.551 405.951 li +245.551 404.949 li +264.599 404.949 li +264.599 405.951 li +244.549 405.951 mo +225.501 405.951 li +225.501 404.949 li +244.549 404.949 li +244.549 405.951 li +224.499 405.951 mo +205.451 405.951 li +205.451 404.949 li +224.499 404.949 li +224.499 405.951 li +204.449 405.951 mo +185.401 405.951 li +185.401 404.949 li +204.449 404.949 li +204.449 405.951 li +184.399 405.951 mo +165.351 405.951 li +165.351 404.949 li +184.399 404.949 li +184.399 405.951 li +164.349 405.951 mo +145.301 405.951 li +145.301 404.949 li +164.349 404.949 li +164.349 405.951 li +144.299 405.951 mo +125.251 405.951 li +125.251 404.949 li +144.299 404.949 li +144.299 405.951 li +124.248 405.951 mo +105.201 405.951 li +105.201 404.949 li +124.248 404.949 li +124.248 405.951 li +104.199 405.951 mo +85.1513 405.951 li +85.1513 404.949 li +104.199 404.949 li +104.199 405.951 li +84.1489 405.951 mo +65.101 405.951 li +65.101 404.949 li +84.1489 404.949 li +84.1489 405.951 li +64.0986 405.951 mo +45.0513 405.951 li +45.0513 404.949 li +64.0986 404.949 li +64.0986 405.951 li +44.0488 405.951 mo +25.5 405.951 li +25.5 404.949 li +44.0488 404.949 li +44.0488 405.951 li +.282353 .282353 .282353 rgb +f +25.5 405.951 mo +24.5 405.951 li +24.5 404.949 li +25.5 404.949 li +25.5 405.951 li +.643137 .643137 .643137 rgb +f +45.0513 405.951 mo +44.0488 405.951 li +44.0488 404.949 li +45.0513 404.949 li +45.0513 405.951 li +.427451 .427451 .427451 rgb +f +65.101 405.951 mo +64.0986 405.951 li +64.0986 404.949 li +65.101 404.949 li +65.101 405.951 li +f +85.1513 405.951 mo +84.1489 405.951 li +84.1489 404.949 li +85.1513 404.949 li +85.1513 405.951 li +f +105.201 405.951 mo +104.199 405.951 li +104.199 404.949 li +105.201 404.949 li +105.201 405.951 li +f +125.251 405.951 mo +124.248 405.951 li +124.248 404.949 li +125.251 404.949 li +125.251 405.951 li +.643137 .643137 .643137 rgb +f +145.301 405.951 mo +144.299 405.951 li +144.299 404.949 li +145.301 404.949 li +145.301 405.951 li +.427451 .427451 .427451 rgb +f +165.351 405.951 mo +164.349 405.951 li +164.349 404.949 li +165.351 404.949 li +165.351 405.951 li +f +185.401 405.951 mo +184.399 405.951 li +184.399 404.949 li +185.401 404.949 li +185.401 405.951 li +f +205.451 405.951 mo +204.449 405.951 li +204.449 404.949 li +205.451 404.949 li +205.451 405.951 li +f +225.501 405.951 mo +224.499 405.951 li +224.499 404.949 li +225.501 404.949 li +225.501 405.951 li +.643137 .643137 .643137 rgb +f +245.551 405.951 mo +244.549 405.951 li +244.549 404.949 li +245.551 404.949 li +245.551 405.951 li +.427451 .427451 .427451 rgb +f +265.602 405.951 mo +264.599 405.951 li +264.599 404.949 li +265.602 404.949 li +265.602 405.951 li +f +285.651 405.951 mo +284.648 405.951 li +284.648 404.949 li +285.651 404.949 li +285.651 405.951 li +f +305.701 405.951 mo +304.699 405.951 li +304.699 404.949 li +305.701 404.949 li +305.701 405.951 li +f +325.751 405.951 mo +324.749 405.951 li +324.749 404.949 li +325.751 404.949 li +325.751 405.951 li +.643137 .643137 .643137 rgb +f +345.801 405.951 mo +344.799 405.951 li +344.799 404.949 li +345.801 404.949 li +345.801 405.951 li +.427451 .427451 .427451 rgb +f +365.852 405.951 mo +364.849 405.951 li +364.849 404.949 li +365.852 404.949 li +365.852 405.951 li +f +385.901 405.951 mo +384.898 405.951 li +384.898 404.949 li +385.901 404.949 li +385.901 405.951 li +f +405.951 405.951 mo +404.949 405.951 li +404.949 404.949 li +405.951 404.949 li +405.951 405.951 li +f +425.5 405.951 mo +424.5 405.951 li +424.5 404.949 li +425.5 404.949 li +425.5 405.951 li +.643137 .643137 .643137 rgb +f +425 425.5 mo +25 425.5 li +25 425 li +25.5 425 li +25.5 424.5 li +44.0488 424.5 li +44.0488 425.5 li +45.0513 425.5 li +45.0513 424.5 li +64.0986 424.5 li +64.0986 425.5 li +65.101 425.5 li +65.101 424.5 li +84.1489 424.5 li +84.1489 425.5 li +85.1513 425.5 li +85.1513 424.5 li +104.199 424.5 li +104.199 425.5 li +105.201 425.5 li +105.201 424.5 li +124.248 424.5 li +124.248 425.5 li +125.251 425.5 li +125.251 424.5 li +144.299 424.5 li +144.299 425.5 li +145.301 425.5 li +145.301 424.5 li +164.349 424.5 li +164.349 425.5 li +165.351 425.5 li +165.351 424.5 li +184.399 424.5 li +184.399 425.5 li +185.401 425.5 li +185.401 424.5 li +204.449 424.5 li +204.449 425.5 li +205.451 425.5 li +205.451 424.5 li +224.499 424.5 li +224.499 425.5 li +225.501 425.5 li +225.501 424.5 li +244.549 424.5 li +244.549 425.5 li +245.551 425.5 li +245.551 424.5 li +264.599 424.5 li +264.599 425.5 li +265.602 425.5 li +265.602 424.5 li +284.648 424.5 li +284.648 425.5 li +285.651 425.5 li +285.651 424.5 li +304.699 424.5 li +304.699 425.5 li +305.701 425.5 li +305.701 424.5 li +324.749 424.5 li +324.749 425.5 li +325.751 425.5 li +325.751 424.5 li +344.799 424.5 li +344.799 425.5 li +345.801 425.5 li +345.801 424.5 li +364.849 424.5 li +364.849 425.5 li +365.852 425.5 li +365.852 424.5 li +384.898 424.5 li +384.898 425.5 li +385.901 425.5 li +385.901 424.5 li +404.949 424.5 li +404.949 425.5 li +405.951 425.5 li +405.951 424.5 li +424.5 424.5 li +424.5 425 li +425 425 li +425 425.5 li +.552941 .552941 .552941 rgb +f +25.5 425 mo +25 425 li +25 424.5 li +25.5 424.5 li +25.5 425 li +.776471 .776471 .776471 rgb +f +45.0513 425.5 mo +44.0488 425.5 li +44.0488 424.5 li +45.0513 424.5 li +45.0513 425.5 li +.643137 .643137 .643137 rgb +f +65.101 425.5 mo +64.0986 425.5 li +64.0986 424.5 li +65.101 424.5 li +65.101 425.5 li +f +85.1513 425.5 mo +84.1489 425.5 li +84.1489 424.5 li +85.1513 424.5 li +85.1513 425.5 li +f +105.201 425.5 mo +104.199 425.5 li +104.199 424.5 li +105.201 424.5 li +105.201 425.5 li +f +125.251 425.5 mo +124.248 425.5 li +124.248 424.5 li +125.251 424.5 li +125.251 425.5 li +.776471 .776471 .776471 rgb +f +145.301 425.5 mo +144.299 425.5 li +144.299 424.5 li +145.301 424.5 li +145.301 425.5 li +.643137 .643137 .643137 rgb +f +165.351 425.5 mo +164.349 425.5 li +164.349 424.5 li +165.351 424.5 li +165.351 425.5 li +f +185.401 425.5 mo +184.399 425.5 li +184.399 424.5 li +185.401 424.5 li +185.401 425.5 li +f +205.451 425.5 mo +204.449 425.5 li +204.449 424.5 li +205.451 424.5 li +205.451 425.5 li +f +225.501 425.5 mo +224.499 425.5 li +224.499 424.5 li +225.501 424.5 li +225.501 425.5 li +.776471 .776471 .776471 rgb +f +245.551 425.5 mo +244.549 425.5 li +244.549 424.5 li +245.551 424.5 li +245.551 425.5 li +.643137 .643137 .643137 rgb +f +265.602 425.5 mo +264.599 425.5 li +264.599 424.5 li +265.602 424.5 li +265.602 425.5 li +f +285.651 425.5 mo +284.648 425.5 li +284.648 424.5 li +285.651 424.5 li +285.651 425.5 li +f +305.701 425.5 mo +304.699 425.5 li +304.699 424.5 li +305.701 424.5 li +305.701 425.5 li +f +325.751 425.5 mo +324.749 425.5 li +324.749 424.5 li +325.751 424.5 li +325.751 425.5 li +.776471 .776471 .776471 rgb +f +345.801 425.5 mo +344.799 425.5 li +344.799 424.5 li +345.801 424.5 li +345.801 425.5 li +.643137 .643137 .643137 rgb +f +365.852 425.5 mo +364.849 425.5 li +364.849 424.5 li +365.852 424.5 li +365.852 425.5 li +f +385.901 425.5 mo +384.898 425.5 li +384.898 424.5 li +385.901 424.5 li +385.901 425.5 li +f +405.951 425.5 mo +404.949 425.5 li +404.949 424.5 li +405.951 424.5 li +405.951 425.5 li +f +425 425 mo +424.5 425 li +424.5 424.5 li +425 424.5 li +425 425 li +.776471 .776471 .776471 rgb +f +25.5 28.5 mo +24.5 28.5 li +24.5 21.5 li +25.5 21.5 li +25.5 28.5 li +cp +1 1 1 rgb +f +21.5 25.5 mo +21.5 24.5 li +28.5 24.5 li +28.5 25.5 li +21.5 25.5 li +cp +f +425.5 28.5 mo +424.5 28.5 li +424.5 21.5 li +425.5 21.5 li +425.5 28.5 li +cp +f +421.5 25.5 mo +421.5 24.5 li +428.5 24.5 li +428.5 25.5 li +421.5 25.5 li +cp +f +25.5 128.5 mo +24.5 128.5 li +24.5 121.5 li +25.5 121.5 li +25.5 128.5 li +cp +f +21.5 125.5 mo +21.5 124.5 li +28.5 124.5 li +28.5 125.5 li +21.5 125.5 li +cp +f +425.5 128.5 mo +424.5 128.5 li +424.5 121.5 li +425.5 121.5 li +425.5 128.5 li +cp +f +421.5 125.5 mo +421.5 124.5 li +428.5 124.5 li +428.5 125.5 li +421.5 125.5 li +cp +f +25.5 228.5 mo +24.5 228.5 li +24.5 221.5 li +25.5 221.5 li +25.5 228.5 li +cp +f +21.5 225.5 mo +21.5 224.5 li +28.5 224.5 li +28.5 225.5 li +21.5 225.5 li +cp +f +425.5 228.5 mo +424.5 228.5 li +424.5 221.5 li +425.5 221.5 li +425.5 228.5 li +cp +f +421.5 225.5 mo +421.5 224.5 li +428.5 224.5 li +428.5 225.5 li +421.5 225.5 li +cp +f +25.5 328.5 mo +24.5 328.5 li +24.5 321.5 li +25.5 321.5 li +25.5 328.5 li +cp +f +21.5 325.5 mo +21.5 324.5 li +28.5 324.5 li +28.5 325.5 li +21.5 325.5 li +cp +f +425.5 328.5 mo +424.5 328.5 li +424.5 321.5 li +425.5 321.5 li +425.5 328.5 li +cp +f +421.5 325.5 mo +421.5 324.5 li +428.5 324.5 li +428.5 325.5 li +421.5 325.5 li +cp +f +25.5 428.5 mo +24.5 428.5 li +24.5 421.5 li +25.5 421.5 li +25.5 428.5 li +cp +f +21.5 425.5 mo +21.5 424.5 li +28.5 424.5 li +28.5 425.5 li +21.5 425.5 li +cp +f +125.5 28.5 mo +124.5 28.5 li +124.5 21.5 li +125.5 21.5 li +125.5 28.5 li +cp +f +121.5 25.5 mo +121.5 24.5 li +128.5 24.5 li +128.5 25.5 li +121.5 25.5 li +cp +f +125.5 128.5 mo +124.5 128.5 li +124.5 121.5 li +125.5 121.5 li +125.5 128.5 li +cp +f +121.5 125.5 mo +121.5 124.5 li +128.5 124.5 li +128.5 125.5 li +121.5 125.5 li +cp +f +125.5 228.5 mo +124.5 228.5 li +124.5 221.5 li +125.5 221.5 li +125.5 228.5 li +cp +f +121.5 225.5 mo +121.5 224.5 li +128.5 224.5 li +128.5 225.5 li +121.5 225.5 li +cp +f +125.5 328.5 mo +124.5 328.5 li +124.5 321.5 li +125.5 321.5 li +125.5 328.5 li +cp +f +121.5 325.5 mo +121.5 324.5 li +128.5 324.5 li +128.5 325.5 li +121.5 325.5 li +cp +f +125.5 428.5 mo +124.5 428.5 li +124.5 421.5 li +125.5 421.5 li +125.5 428.5 li +cp +f +121.5 425.5 mo +121.5 424.5 li +128.5 424.5 li +128.5 425.5 li +121.5 425.5 li +cp +f +225.5 28.5 mo +224.5 28.5 li +224.5 21.5 li +225.5 21.5 li +225.5 28.5 li +cp +f +221.5 25.5 mo +221.5 24.5 li +228.5 24.5 li +228.5 25.5 li +221.5 25.5 li +cp +f +225.5 128.5 mo +224.5 128.5 li +224.5 121.5 li +225.5 121.5 li +225.5 128.5 li +cp +f +221.5 125.5 mo +221.5 124.5 li +228.5 124.5 li +228.5 125.5 li +221.5 125.5 li +cp +f +225.5 228.5 mo +224.5 228.5 li +224.5 221.5 li +225.5 221.5 li +225.5 228.5 li +cp +f +221.5 225.5 mo +221.5 224.5 li +228.5 224.5 li +228.5 225.5 li +221.5 225.5 li +cp +f +225.5 328.5 mo +224.5 328.5 li +224.5 321.5 li +225.5 321.5 li +225.5 328.5 li +cp +f +221.5 325.5 mo +221.5 324.5 li +228.5 324.5 li +228.5 325.5 li +221.5 325.5 li +cp +f +225.5 428.5 mo +224.5 428.5 li +224.5 421.5 li +225.5 421.5 li +225.5 428.5 li +cp +f +221.5 425.5 mo +221.5 424.5 li +228.5 424.5 li +228.5 425.5 li +221.5 425.5 li +cp +f +325.5 28.5 mo +324.5 28.5 li +324.5 21.5 li +325.5 21.5 li +325.5 28.5 li +cp +f +321.5 25.5 mo +321.5 24.5 li +328.5 24.5 li +328.5 25.5 li +321.5 25.5 li +cp +f +325.5 128.5 mo +324.5 128.5 li +324.5 121.5 li +325.5 121.5 li +325.5 128.5 li +cp +f +321.5 125.5 mo +321.5 124.5 li +328.5 124.5 li +328.5 125.5 li +321.5 125.5 li +cp +f +325.5 228.5 mo +324.5 228.5 li +324.5 221.5 li +325.5 221.5 li +325.5 228.5 li +cp +f +321.5 225.5 mo +321.5 224.5 li +328.5 224.5 li +328.5 225.5 li +321.5 225.5 li +cp +f +325.5 328.5 mo +324.5 328.5 li +324.5 321.5 li +325.5 321.5 li +325.5 328.5 li +cp +f +321.5 325.5 mo +321.5 324.5 li +328.5 324.5 li +328.5 325.5 li +321.5 325.5 li +cp +f +325.5 428.5 mo +324.5 428.5 li +324.5 421.5 li +325.5 421.5 li +325.5 428.5 li +cp +f +321.5 425.5 mo +321.5 424.5 li +328.5 424.5 li +328.5 425.5 li +321.5 425.5 li +cp +f +425.5 428.5 mo +424.5 428.5 li +424.5 421.5 li +425.5 421.5 li +425.5 428.5 li +cp +f +421.5 425.5 mo +421.5 424.5 li +428.5 424.5 li +428.5 425.5 li +421.5 425.5 li +cp +f +75.5 75.5 mo +74.5 75.5 li +74.5 74.5 li +75.5 74.5 li +75.5 75.5 li +cp +f +175.5 75.5 mo +174.5 75.5 li +174.5 74.5 li +175.5 74.5 li +175.5 75.5 li +cp +f +275.5 75.5 mo +274.5 75.5 li +274.5 74.5 li +275.5 74.5 li +275.5 75.5 li +cp +f +375.5 75.5 mo +374.5 75.5 li +374.5 74.5 li +375.5 74.5 li +375.5 75.5 li +cp +f +75.5 175.5 mo +74.5 175.5 li +74.5 174.5 li +75.5 174.5 li +75.5 175.5 li +cp +f +175.5 175.5 mo +174.5 175.5 li +174.5 174.5 li +175.5 174.5 li +175.5 175.5 li +cp +f +275.5 175.5 mo +274.5 175.5 li +274.5 174.5 li +275.5 174.5 li +275.5 175.5 li +cp +f +375.5 175.5 mo +374.5 175.5 li +374.5 174.5 li +375.5 174.5 li +375.5 175.5 li +cp +f +75.5 275.5 mo +74.5 275.5 li +74.5 274.5 li +75.5 274.5 li +75.5 275.5 li +cp +f +175.5 275.5 mo +174.5 275.5 li +174.5 274.5 li +175.5 274.5 li +175.5 275.5 li +cp +f +275.5 275.5 mo +274.5 275.5 li +274.5 274.5 li +275.5 274.5 li +275.5 275.5 li +cp +f +375.5 275.5 mo +374.5 275.5 li +374.5 274.5 li +375.5 274.5 li +375.5 275.5 li +cp +f +75.5 375.5 mo +74.5 375.5 li +74.5 374.5 li +75.5 374.5 li +75.5 375.5 li +cp +f +175.5 375.5 mo +174.5 375.5 li +174.5 374.5 li +175.5 374.5 li +175.5 375.5 li +cp +f +275.5 375.5 mo +274.5 375.5 li +274.5 374.5 li +275.5 374.5 li +275.5 375.5 li +cp +f +375.5 375.5 mo +374.5 375.5 li +374.5 374.5 li +375.5 374.5 li +375.5 375.5 li +cp +f +%ADOBeginClientInjection: EndPageContent "AI11EPS" +userdict /annotatepage 2 copy known {get exec}{pop pop} ifelse +%ADOEndClientInjection: EndPageContent "AI11EPS" +grestore +grestore +pgrs +%%PageTrailer +%ADOBeginClientInjection: PageTrailer Start "AI11EPS" +[/EMC AI11_PDFMark5 [/NamespacePop AI11_PDFMark5 +%ADOEndClientInjection: PageTrailer Start "AI11EPS" +[ +[/CSA [/0 ]] +] del_res +Adobe_AGM_Image/pt gx +Adobe_CoolType_Core/pt get exec Adobe_AGM_Core/pt gx +currentdict Adobe_AGM_Utils eq {end} if +%%Trailer +Adobe_AGM_Image/dt get exec +Adobe_CoolType_Core/dt get exec Adobe_AGM_Core/dt get exec +%%EOF +%AI9_PrintingDataEnd userdict /AI9_read_buffer 256 string put userdict begin /ai9_skip_data { mark { currentfile AI9_read_buffer { readline } stopped { } { not { exit } if (%AI9_PrivateDataEnd) eq { exit } if } ifelse } loop cleartomark } def end userdict /ai9_skip_data get exec %AI9_PrivateDataBegin %!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Illustrator(R) 10.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Max) () %%Title: (1601.m10.i307.n008.F.c05.205439527 Vector grid marking for user HUD interface.eps) %%CreationDate: 28.01.16 22:22 %%Canvassize: 16383 %AI9_DataStream %Gb"/LH!f:Jp[IbYHk3It`<@LnX15AaMMd!Y[7UN(8-oSLTtS-hr*K7V1Kc(VM>&M5BKj,s-'L,tc9CF89ThX`-]Wj<-ZjFh56jT0 %#Xr58!re1\"Ti>l/M#-K.#>"QJ/+W(&Fj]B[a>Q6ohG^> %5^2uB2CBF)!GJI;M?4%`LuF`1V`F'^O='`MpjC8.3E_I]KbK0,D#ftUa&Tc0G0$WL!7_*9Jj2P?P:3XUB#H4bJ:n44IOa(T^p$I: %%q1*L3lSoh,l/2%rhrn/dV.#-KLkm1#r_bjrh]siLn\=XeH-_B;X_Z"KY^qdK.!ST%mhJ6o]kdNa>40]F@9!2E/Y(%s0H$FYX&$j %/sHK0iaBhE%9Irln=CtI6a=-9Uh;Hc"/2t`r-9EU`"a;H9:+hkt^.N+Jq,78uZ:7'\b/LfJ<;hGQqm0_A)iJ"fO4TQW8RT %M>RVdrI@F.Zs-V,6&#-P6JJ6a!Nq3Z:`&R4Kcq?i5grOE1_W]^kr;'i4R]Bmhrmf*RK3k<-^a\N@PT+Ers:jG(o?0)c_=i %DOjDZBNQ$2i`\%j(7QjpcaFNb!r?[Gf?KrG@[dWI#:&LHdfKfj[/gqQ\Dd-TFFZB.-.JEW-b@h-n(\lW*XDdYGI=h,r*jqkBL-F@ %0LD7R@&0JPl71*cN's=^"*91n"n"'0;C6:fblq!Q-UT!re-1EU#+,F!\`I9C7d5J;aU2n<^o^r&KWAt8phDBoK+a<17WOQgM^!)4 %`GZXH[:[nqiOps8'm1(j"][hJ,A@/OO[.^lgaE/Kq?Z#VQa,]kT'*Zt1[K+`8HVYrDiCLKH]MV6))OdRP6[sJ=^%haUi7oWXo4@s %G2QQ77'Y!f+?.9!B>W/I1J4]LiL1B(EU6BfK*pg]!gl'+g5&[0;aB>M#]hJiemjFc@RKCF&7j$N(i+ZKD[l-.d-R],7atYMqbrS` %!>a8[NM"/*gA^,DjU05Pn7R;f_>0@Yrlhs9-A)7+GQHS,!KfoXF/6#_,42N"B-iD>6*tqXhj.@FhPZ2.15N6U4nt*/#BIDb(5rC) %M>\>X-Zj?a?OT.s62m8R+YX!$!/F!bG`M>ZcBS?3!9Ib0"ms(8[aK5o?N]mH%m?6Ep(V-dFLY-06:>OSV4r!@WIl0--.gFi@DJM\ %>diG/o"uNt+:M&p*-,aiJ9i@c'Y*?PcSc#6*jL6/=Nk,dHorG7cu[\529S %&8MUXdLSiCA-<)EI2>0O"9*D6-q@m&dGVU40YcE4@YJq<4/PhJcCifE@'b!R5[Y3e6en<8LRL2c>3r5W[QDNJ_+"8;(19m9#r?93 %LTJFEeD?Sq'@N?NM\Dt5&#KPGJ\HYL*>qjANik&H!`25E3;.fPm1=!H@.F[P^L6U?VU$o_U46aje<(T0X7978-SKnijBV9P'pDuZ %I0`Wo_8W@s\g:UC5LU9TJL/b`8i"hm7;nluZc=R:5;Pke>Z)V^6@g*i9V?-s-itI/i#l %?6r_:LHiG0Pqrm9dgaLrW.@'o3_YI6[2;tm@*lWS^PdD_8GRQgbpAZhh9S+AKrg;Z7`pX@X>#56B#]0K?r+g#?c@MLU;4Ku0=/\S %Abi$%,iU?iY?(O2`!uA\XnP2I/*d.WVZ,HVAcYno'9nBTJpolkDJW$g^kt%`02Y3uG/Eb8N41:;hsXe9E5)\H;0uK8)WNu]q-J&U %kN&W2_LVK@YTF[Wdk41h(I5S'7,"9AqI([5l:o^).E4t@\ZiTSoUE@L`$rA#X17(r.AeoqH%fn/17hFkPK!N+p.f%CAK#s:P,J2e %YTVJ%Z;R$CZ1&:Rq"q4,C/s#TVGXl;Va(FqtX\c-FF$9LI:.PYdX %jMD=J3019!H*dWiF7B-GhcS0rUNAH"4,EVfcNYnM^2L:lFKIMeNSr'0c-oVWLS970WXH,G[NP?Afr?+T'Y %X7JGndlE9SCufRL28/:h&Js-TP!-kQ_N[04RWB49ic[N[lp&Jf.K2'h4NJ.g>%c8pQ\X]>F]s6Nk6a.h[!,:n\1i9U:CFYW]5m]g %,7#i-@sR]MHP`/n@m*#*6c+,dmbM]=pK6'!;;gLYca6gL]n8si\3s97J,uU=pV+:G=a];2VER('2nj`-N;Y$,T8l%.?S:n!*R9T5 %ft0&8Z]-Q],)H(9Rotd?`CSO$XtDj&j_c9,="W=K@u!_M[K^A#RYN,7`JZeFNeDL6Sp,=uKjT?;Gtq`bk6%fYrbK?RFZK&%6@SpB %,laA01MtR[9N#:EG;cE%H>rCE&RD2oU*i<57hQ%ZquK*33r'DHM@W3(R!+sOTBgN0`.\&91NIYn[Ym)nW'C_meJ2?QU"(%j7Pjc1 %XdZK0If:!2c4dgD.t-2'7(jgT3;DYQ?I!`FA@l`b1(A%ckr^20"#lN&Vc3@`qRWWV1*;->qSs]o5e7>e=dg'*rtr\k(+WT^Hjmkd %eF]dhG5&2nW2]*/'5O>58CH5/fgRp`P62QKRdj&Bd1?\='2,HP"&JfmA0Sn..k\#9c900ro7)U:!Su+ir1s#iR*^na+K` %+,!a<;S0jP+l#I6Y?Lp_*JAB?7SDd_+12K]4Qe]Z"9I,7ZllJ&isWNTS3li/rpb%/aN+%A5j\(e?pTDuru9Fmj[K9aLnX@$Mi,\6 %j1&2io(kF5>%i:mTb[F_aU_12_ip]Vq;KF+:O[QZ>^3Pl %F#6($YCChle@`O:^Dn1p^5'5gOMkMj+jO?i*qHddaJsa^U<-n#dlc[*!5a*a`+SrR6)LUe6,p^T&H_l)KAYVeBlJ]l %_^YD8AH)#SDrHtoVYj72(%iAO6nV$& %G3["<3k^@AgR7\JHTbEXUY[8ERUW@oP?s;2St4(BM,S^&QN$%Kr#JF[a3rkMSA:<&A%@+X!Ua)gOgM`r_;D*]G:ERT'bcW\A,3a$*a\MBdTt!RfBJ6!]Hc=?T'^^[ %YibB8`u+!JuDsl;t>P]0p6?6H]_ep3n%KTfQ9sZ7V168Fnhfror15cDIH.l[If+]S@k?7\d9acOaX- %n);IViNHP^CD[!(KthfiY?gp=(]N.-.]coh.i%@'Ksm(oQ8&6E$dW?=r/B?S)>;PXV&+XGAJu"8Xi=J[[?pV%`h'=#=6lj`V14#8 %^5FQNMDNHN8A:!0XM+I$^'iBf8+Jl.bAelbX,l>Fa@ki#m?r@R#ALk5Sai4JA[n^Tc2Lu1Q-eUB\]fQ:N;n3lq*Z3P)Y7?.ZNO3p %s&th%IBAHT%Jm8mECIZp#5;IRj*Xs;Z*0CkopE2_qa8,KYrlH,,p!J0]"X7 %cc.-5dudc:)S3kqh8Rm?ET:iQgY\-?rs(]i<"eU64j7]@IgK*4f0Q"/K0j*"i+RcrEe6`U"KlE^OVB>j-Qo/rBA.iVD)V^*1pGU1*1,<'sfXDGCZs4m72K1=MV8!@;l4o2s6^U$h'r-cjST_r7CR):^_?]pH=8kY9$H_@KO`!MT>t_?9LXi=b/@sDKtZs&1r.ogrpEMe"65=m1j`^ %.8a93p%(^6Z>p>`:cJAOmUUJV]9MW/;J2RO\UMNi/e@Jf-GO0`CF5*B*e)B+_3FgSPDom`At"4ojIC7o@a28@ViDs0kGQZ)U<,'W %53YK@IaR3o&+PQ)^M*1rVU%)T&@oGbP:PA#=uaK%TQ"qhK3pSi\8Za*`HGg-TV=>dX97+A9`33:2Jm%&3:s+u+&M>MLOm9*4% %07dp9mgf!I)"?F!hLB$c-N[,"#Dn`B&^Z.Wca[?j9T)jK*4T/6Pa+J955243IJuT^Y!-jjfbj%8r2"Cq&i?dlr`pZL0r\0aAUQjMO\C=]@RsY;?rcDb$pY7mjm-6\!(7sm^*n6g,l2L>S_(DP&)3>`i&f7T:`RI3G@jj[uG<43f5OZp0Mk%sqKI3nJAM-OJkH[O>FU %qXYq>M,_5ND^\bFn(b)(]."cXI'H'Y]W:h5Pm)YRBJ*/,.GqQh?iV\>-eUX'KLmA^rL*<$BQ7PqrGl=`3h2P3RV+";;p\O9EQ2]A %$Rf>G/n[2-(Hm6o;O8,F@DHVAkd.'<%L=ZVPP66`N8Cn%hTonMk**?c?K!:+QL5?4pIU-Qm:fQ1B`/1NnF1;q>W[_ReE?F,f4EeN %n?OB'lfFq#O-2+q7Vc#I4?i]1VmLs,49uD]Z,90[:0PjSJld&n0MN@0o^p!@75uq&,<#!rY0:=iMgPEJ88-g3;,gWu9+!&&#dLD< %FR%W/VqMco\m[%sW$;YJUk"M2eg3eI4"aiomN%dG=3BLT`+`3e&Dm;KJu@31<+Zo3bPJ7ERP)qnW[uKreJ6%b%FRJ-pJL,EjtZYC %^,QbHQH;[m.("seO2.V0Ch[.265?.YDbg\=brN5U$.^&2=2Y'f+f4&;8kKQ,\5lqj^C\?@!kJA4&UXfD0u/iV!$bQqBP9.YDD:-S %*@*sVYF0#ei1ELD1u,6&_XUSL:4]u!*)FL$o`q%H-">e&Jkj9o.I_tc'3#CKO;&RjUD>2=h6uiu`5[%Y"p4XO21iiq.eR$J]8gHK^naM@[Ke,sheSZR3%E,If2DNF.ViVk%EU!"7PPME-;%)7s'Mkm3q+F!2B, %D"Ur/\&ogCFND/7o$ue(pk^'4'7Tur(e9QcXq28lr)o^X8H&R`,\H-DJVG]S3Oh-/`pb"V\kJ-5nB85?6dQ!@1hb].%$23+M5X%JbUS9K=coS>B?Ma`P*LC4/L)dI`;PTpZRj"m4m31&j*IL07uB[+ %LaK;s`)RYJ4(>cP;&+k]Tl"PfnLWFLNcf84&&26`LK!Zt_MD^4)q48Inm[gADqX**Q`WZUT`MGVA;3?S1,g'?N6)<=n<"n38SO'@ %e0^,U?(8)(hH/V>m#[@fPIX(_in=Ce^H*N;PY+]i78QD$UtH']/$ZZg3l4McU-UmWULVar8IGQZTG@SK@1<:Z31ZiS8DPQ^N:;af %CPJ?M;^K4uORYrX=JF+?UCbC&V_Ci*k7i@(\'6.>>Z^Z]Bt%q?*\_Wl2MO=.'cRk)F0`dM&[h!L(Y5HRXT^C+);^f6'A8Kl)@jTD %)&M4!pLp9SLonAsr22'%(?;"iaoRi<'GbA:7B8%#%8bcIS&6q!1Ld"bL^O$;ji:pM+Z`(`!2K.U^_3psM1&lcZ=g`#KN2OX1I_C; %"%0Cm\KIZZPGU5?Z6H^o*ek[cX;.B<9.r9)(?NVN3"iZk&*[`MV%M&>VK1!Tcum1\EN-o/lnO+/&O71l4:X;A$js3j]@TX$3[E9B63\A)"U5(3$,Rj`#]0Q?b70r*qM,Kg[O4t2MIjHSsD/@cH.0;KRWPl/(B]k?$eu#-D'9CkH!]?:/e4qDAfK8%:O[QHXHhU?O0B]Us %43Qjmf,R,EK."K6J!2`&YUT40U8'[Q9]*dD7d1-;uK_Lj,?&?do0'#ZaHII%9#*D@Okb^Ebei$"2;"ji+(fhc^])`E6V %pFVLEbo(K,n6BdqKoS]kn\mf.e&9VoPQ:klc)u6@Te5SZl9ABX?c!n,Xd,ANTZ4NcF,)R0D`-@Z.<8M3]1<8b.Z5 %A<@!G\_r-lA;(Q'UCF4P%7H^XC'/F@>!8":$>$>h-QQH>6d#g@(;DJKL6)+d&2813;,7sY(7.UpdOMIqC9ee'Kh:1IQ\m%($9a>^'Q&836jL>:I)q^O\&JRjhB?.eG.s#"4 %;@ZO0,$%Vm\fF/-f\q'up;gtSPh#!X'NQq?N&/XMiIR-/9S7#8!`69+;rSZ]JWN@4JNgV,"'0/l70u`$bkR-2#OHt/UF/\6)J.Yk %.!5<&Fq@\Em=o7WS-GbU5*:u,;!=#_*LA#+YLu%\XWcTu1Yk5oR$Jl@Z`;oGq5CoGY=E]9q=mBn:pa$*c>T6UCJt08K9dA^iY;5=b[$GA2u.#1ajn7RZ&NGf;Ajpr9m %Mb/X2?uls%L:**ta_*Yd&oR(]&GOsgu?<-kWge^:=Umg9iPZ`QY08.eaIs=';N?[`2C8;M60] %Mb+%!TTpVdJHH^SUp&1ifR1Kdm,6#8>cc+X/n&%D6MU+j&Lst96JYf]TuK@$[5GXdF_NWe%B=-Jof4'?I%WYH%\eC;8lR42%CpL!=(jE:6nC`KVYUU<60(\uH,u4O6#H_r1`Dm;B7SRW9 %1=LYT+29E__k@/T)BCCskDZK]b30,\OKUI=aqH/HLd!k5$"t0oaa9'HXk@s4#>CFk,aJF-M9sgJ#[kX@bdC.Bm]cg:1V]TC(kI30 %gkOX,9u70.0J^;-D2V,S!2CAM+(=/(7X2ba1?sUfr?I>Y+g<[f'FNKd=CVC!6&EfUkY(iOjJjo?A,6/XDSCGED,;G%`L#s]%bo+Z"Z=8)OZk&Pa+9`#TB$` %o6*bocE_EM$sfK*;h44>Tt2'KL>;T'CbTATA!U'65N/@]Ll5"1A3269U_s[Y$:ZAuM3f %E#28GWbNj^K3_I[`qj=[G40bCI[1u4CJOG4?(u0sc7%h6\:doD8q:nhLVH9WT6"-'G-bgA92M'rb!HJL*0=p#cn#YS.Hl?soM+\/ %70aU+VsAJ'7;;EmTFU;U[Z_aZdPoYMC7r-A8c\PD/QBEL_T(RF"2S&Af<"l';hY_@2G-R,p^5RDGt$8%h/[JO"n0e\5e^RnN^&l%f=@(iXFNJJPiCa4b5Lk@`W*NW5>oGl21D#9MT1q1tm"dJ$'c7CFg,4#a:5EXNJu-b0B9MeA)4Jd'g+G:0Htj %a8ZCfhEc7\K0n`Zh51VT5-doQf5.T:\[F(69THP6N`Nig2RiJj\?D2-VH.:hJ7`F-4CE>'_ZPnAWP[HtJp1?c\IBlJY/BK=nGA`n %FfL*&$(Kd"C._ed5u)UHMRo6q-EG0Uq2CG_Mksh@VRENgA3r?G4m$S4nMbdVm+pdV8DNd#:7@XGV %EL\TV=To,'L1ENhl.'OWQ7nSgYl^k+g[GO75kO,`o6L*"iFjad4RSchS(F?=7QMR^%_BORH"h[[\O>khIcmR=j%d]_W#bi.DTcH$gOr`UG.Y,k8Wd(,>*T&!@$LJbLGkDkR,KlD:;4#U'7r=+^P.$Oc< %M5O:KnFIqBI1#@Q#@^-IQ>9*2pGflA.M\[b+*'UAXbX;LTbBG):.4e5Om44[Dk=^VlhU&KoKfTu#;;L_Id&/"+GU36KtY:#'Kg5V %ecJBEV'!K6$D!N=7#oU_NsD4\:W`>D:F%9I+.Is"=aA11SnpQgGQ>j+rjDVQJmY!cKlXfI7eW7'`-qT(^qH>KF*unV.jXM2+(Zt1br82nFs_XoUXoS; %o_hE0/$u_h]184PrP[Xk&XQ&Tb8iVo[E@QJs*up[[L23g4V1h,MbQ=\OnJgBhe.IgaigGeBTLF.M<[@fi*.Lhad3Ms*f>c,VrM$34!)gDo=eLeO=qQ>Kmi*&Za@ID,f*@;nAZuqJj@lgOli!N'`HlO %/fe]A%NgQE.X6EGpd7J>IA=s#F<;a>a2c.^Wc6BLddT@=*N%RUY?m><%>"VplWd+&"T[Z0%0Bj0!m'$k]I>Mj`gFhaEdk_pXsUY]"!E;_,;= %498VtHhVb0rLdm2@U9EV)s$F80)Bg!b",G!/p_L4E.Tp2N,_`8-uWa:2^bJ/m@qN:\&r!CPH%`@C+YP(4W4Js"eNq,c=7+;T@4(D %i]3#X`D!kGI*'scQ-m)iD47iQ?!$s!ZjtjU+HF-h\ZB(3UY?Je$>p?_o=aqd;m@3#gaTIjZkm/O7qmSe3Jjj)0_D+C %4nU"(./uspWpctq:"J/*(YS-+ggqql3DW,cMe9ScD\'RUi&O(.V`?qioO-[=/!Zm-gf]'ca@='N!)UL<(Jai.((>>,#U9`uko;gA %j4)fA>2\#(E]X-H9Vlp]d4:\SdUcSJj>iWd_e9p6Y#=!njYN+$1jcGe!1nSM%F+3ZpZVP>>T^?M*Q0ZNg^R5+:6e:qOKJI@0C3aM %_30\KZZR&0eh>![k.Y/69#]l9j'(A[2cBQkLgsQB'eT&GX`.dS'P:R&0?n@ZFBaN`sR%.S:U1='i!KW %G/DpjD`(rT?jYfgrC3ZUfY#L2hWc@EAaF4K3n^W:C_!s,PoAEC4i@P\\H3.D.b:u_e[,kUpT^.+dX)3mU8MI?YMM;A;S78TNrA`q %p\6.3UV#45?:N"WgeA`n[LPUgKo:kq;!G2$gI?B10ARX7"g;9F!]g6B&r*uD2Z5Fo4Q1IXRO^rk5m;hTE"m=p[#tZFXE`)?K7Y+tKm9B5H,!Y3 %W)6-<_uVE&'LW:;'4HQ\gUWd,VBJ<3Ti#39]8/;,`s8^d,2'b/&BDcW1.,U$a=AhETWtudfD7/=&7e/i'_qql@(F@t[m95frB.KV8u/(/V(CI&HB.7j %S=s4f+KPa0icueH%./23Ko;/(W-+>0K?`6[[C^6L.1_Z2 %,grg,gMGmHq/,(qgA*H05rNo[;U/T2gjhLiU[0V[5F&ET8PB"3nJmq)^P@g&+[!A[QsD_flp@lr+L4DpmY/>&FDg0n5$*.:- %X8+YJI@HRT7p2;*2 %eRpQ+J>)[SkssbnEPZ6=A^16a%`7K[sK$%S#$1oh(G]KLalDF0:5P7Ja;uJZTl^<&uF3HSW-NE %)#^*/WBjG2ro)_crT@^cJFSb]=8_MoLI/@UiOj&RPhC!c%13+"23cBhq&B^O&$](h6LA( %5_J$R>lSg\V"W?!l*CV6V<'SdViK?Q)ob30jIeZo,JZjl.k'd4F0u*LHkXO!k`OgTVN%^imP'$pHZIHFkl]EKRInJ-0;*^ZXlHpp %ZaJ9U:S=%!M9=VUViVCM#*+9[MM3D/5rV%K46aj3Uu^#7#c_9s>@G]!)&;2HUcY@:cYWQ?q$%$_i$5)e)&c=m %(,DVjI0!h0OQ&oBB:?f$#%V$6?7RdthFh'S'PI;]KSjD$$dC)(F7`cH+jbSJ^lh@FdDJ %ipKRSA!sSq]7Zsps17`dbT&aXETtbOZ^Wt"/6PiL&R2Bn;pD]MR^!Ct^;\D0DTgh;5t6I!:01UaIo#;141q_hF<\FrM/L*eWc1hM %r*g/.\E>Ab0[ZG=/N+fi9;,9;FOgN44n3QWNFfEA`E&8][\ZXNb%*HX#6?^T,pD_ah.Q&=%!9BdBUnk8?q(L"7bR(orlY?:Rd:$6 %5O8B`=OJ.23]bt"(/rle$-N"S;Bt#P[gu(O^C>^V]BbloP87rjJ@ZY1PKdMp9V1)/Bl-,S+Z%;9nS(E!K`0!NOUbZ#_;%[@N_aO<,LkQhQT;RiiK:u.&SB7Ed/Ls\ %lgYiP:#RjS>L0sAgW"uQ3:tq$j/l/ %Lo2o?Aik_7`_/..0F[,13lLEQW)2%MO`ab<)Vt#Dp=DP3>5)I1\c4M)1N/PaA:=&bXjl"UX9&LmdfYLgu.PHH]JI<2iUbZc.5KOh0qWU-EZ#^go&Q'a.87$nR[P6c*0c %8C*<0:aM\)1Pa#g#;B6M6=b-=$9$Mn;U0@2DdVqXNkS#m>]Hd?Go2iTpcBIl?bQU'7o?Yi>s'@Kg$fuaFTQ_roEH]USl-nm"#@E9 %BpHT %q>Kc9Mi5K$2-$DhC8"Ofli]rdg"S0k66Ce%o%3Wr8#>Ql/fkkL$>"r&N5ZmQ\d`3AEXQAk\8Y=EOpBAIGG)je;>"-B'2]Z5kKN.U!Y^ihMUmO;oIU6Z"7?Y4nDp@,AE %g."76rgm[26fIEhUHkKs;n,s-*<6i=E?Es!B;<;u>qm`d?XP!"mD=b%HV[07^i;a!VN+QTjJ_H@I3K#=lb!["k)6=n]ABen::!%t %RCuqsbqsfXnbj?m!^L$g"f?J>rA8KiOp(L,+'F,Z9'HLm5P#Vd,&!#Mk/m/;AKcHW41&,WEI:P5m;2715oLFHJ5RT/UWpe8Rqgbp %>B'-(4"I5[-&<57Phu:H(@YflAt?Acm7o*TELO0_);4<"pC2A"cdnQ&N`n#4nLr_Ri(NX=,u_sV%Gu922!5Z3aod(5,gnX'eSK)E %7u^:m0r[tjE&*fhEW\QM+#!T&%&Bb5!7qI2[m4DhmE3FZFmD%V1*u@tMGRKAB8F"KgFG-2T[4H3B]!/Go-! %A/;p!itP6:SH_pMg!1O-\]\(NN/YX::MK."ZoK&1\`bFH.NM?">AA0]1'f3m":Z1Cgs;VC9VL7U;$uL&?jU_'QIUDY/C+`$C/e.j %bNo#Gk9H(JO!h,r8K"Uq`_%1eBQngVS"0bN+^5&s)NN-68u2B4H>)mTN>I\L[-@ltYK]r/a"'#t2F\XTktb>Y3b!/rn.5J&PsZ\B %Ig2+SA$F>5*,`][$g">:i5>HE.,=,p(MH1m8K>D2f&2#(Y$E^Q[QoIu+Ne5i>?bQoI(7hT-;S1V*ZG(c?(#u^aP2b_$5_kYD[#k( %oo#e'Pk4p2Jgn8e"QAD)[o0Z')'3&*,8"9$N5shse8:nEBDR<&DSMGrUl0'ZWDbDfbEE4-#!BV#Jo_Th9npMli*+2N$M(Y^S0K/hFG.!.&g;S-;nd%mbbmOii:L\oNPi#"3!gKIATQl:l_tZGQ\(mW3d/'DU)!Bl>m"noYk#E %Oef1@;E$lFg='L.Y1h_;SpIkI$BRPM2rEEY(!bDm&M")9n;rUd^NHhq8gjimM$"]7!uTZmC%J;S'KY6s/m:<)\:1Q6qHOZ9%bFKH %iSeSGib:JgC*+JtfIF=!?XArJB66:*n"$@LNP52k)_VDeH;V%DgGkcHq/3CC"a@YD(s)u6@Jhr4^<-9AFN8O_L&8;eh5rR;^qi$P %IqeJ7Q-hN5s1Kt#SH_]!"/@CK"k(/);k89_pV'b1?0@#,jT;TYfOr0j-6S %Q;$:;/9ES8cD4h8EXAFE-OVT`(CJ[h2*S@M,6RJ1g'7Ps*U-ZFN2U)'M%GLX5uL8UIIi)I_:D5"/Vmd@Egs!5CZnK0b(Q*!hj"R7)CfP*^o@f4)?BV/IleAfYd"re %i5]%CJ#hI]#q)ZR+q?gl&s('XkZ]Mk1.B&%M'NrdiC?m=OFtQp#sZeGA6aQf#+k'KmgL8=Bg4*2@k/:98,p>IUU*uU^LMjt_EKV. %8U)MD)A"%dDbP?(4(LjlOW@#(LXSGi'+)_7M1g`eaAA+Y!LZb]rHC^-Xo=:4I]kC"M:'4iD'C8NYqQmnEQ,^c7KA`R112-;O7bsWdW %h3($iFNUUgZUIApF;epK0iL=nd?mqK'[UGKC=TN@U*29RNAXD[0*Q8^XSSbYk@i#jiTHi!6fWV3QQ3KrQ7]`VdJKbbpl^BCd>,0PKK1/I!.ERrW[5:]j&p%?b77Um1)JcQb#"hHqY"Jjc-#f@Hk`_.VBrkaCC89AE1hrRWUQu3DC7.pN4cjraG1E`i?]L0FedUC4fpS@5"@H]ZQA?eaED-"pb@Om#2nTm- %mo.\U$X8-HZtZkPOW\>D\4QU#K@Zf,_sgN6W`\qN?)L=k":R'*)mgY$)hsEM9@"&h](B7E+Ci&MlVXoqpfP+de7)fBB\A2-aJ9TR %;oOdY,Af&F[lGZp0kf)N)O%H5/R#'0*Qq^d_an_T>4nE,UhiAUeu<-!o"drMF!QAt4fpJ2RF%[NWn=S(0QDE-AItbPAgSr?>-q$> %4-kpRcH+K>7Y@#^R1Xg5Mq4k:a"g_?0p4\P<]rZ(.@\\YFfO*!bgg!XI*nTe:GGSd-F@HW.X!?bXE6Ve1l0Ve<0NOQ/R#'0*Qn[$ %Ve<+9EI+?pOtr_"lVt-!q,lX8`-5TGBXtE7b+ofT;oOc.Y3r%IcN^@P^2;:UhOsS@fJ(P";iLA'TMs1h9tD[YBUpVr/0Cs34bG\L %e!#6EPR/pFVhuM<#8=!O!=!Oih-cC$Tge9HZ"*T3if#q88>u40_b?^NZtQ![FtE7U'^PStqJE2rC_p\@@TGr?6.-$Gg=6:/fJ:c! %_j:+V$sV:5Z&>DI'l#TU/G2>:&fAC1p`_:++2cae>)ET''9,ak+W]:;2i3PSGCWTF0""c9Q)2R %/,L'a3YKm^M`0l1\?S\#On7U4:E)"n`'"\+3noqE$#qW:4jS;*3TAgWdH6a&#Y %P>P"tp+*0j5Bbbinjd/q,Dj[*,W7aLOSG*d+,S7&qGgLI9hr3UBijns*D(YP+S"-;`+KS_fQLt=P/OmVEQ6!N0h1=bHfuBQWR@Y: %S,2K13Mg^jBq/*?B5R"``[Qmg9&m"4?"0>L0D^cTp`]2&6fJ-&`$5h-%m_H^K1J*1Oa%QanM!AV3t>,4nUXa` %GklpB+8,a=Y<_Ri"Kt,\,%TP5\h-Xcjls3Ah3P%$V;g"bLZTV4BIjY@=<+'?3(.7rLpk8G)N-s>(5HQS%aeAuU?I)NR6B*f"Dk%afM@U?I)NR6B*f"Dk%afM@U?I %)NR6B*f"Dk%afM@U?I)NR6B*f"Dk%afM@U?X0Pe+VGU6 %fVM;5,VCAU(DDWuB'dqm.2!F3M9Cdp`A;[oMi5Hj7:G2M0EKk1CuV1.EDa6U-sSrGQSrh\\@SJf_YtLRr-sU!k/hRKtce'Nr %/fGB>NJWS5"D#9QM2TBm7H %AI9_PrivateDataEnd \ No newline at end of file diff --git a/vector-grid-marking-user-hud-interface/1601.m10.i307.n008.F.c05.205439527 Vector grid marking for user HUD interface.jpg b/vector-grid-marking-user-hud-interface/1601.m10.i307.n008.F.c05.205439527 Vector grid marking for user HUD interface.jpg new file mode 100644 index 0000000..7d9b06b Binary files /dev/null and b/vector-grid-marking-user-hud-interface/1601.m10.i307.n008.F.c05.205439527 Vector grid marking for user HUD interface.jpg differ diff --git a/vector-grid-marking-user-hud-interface/1601.m10.i307.n008.F.c05.205439527 Vector grid marking for user HUD interface.jpg.import b/vector-grid-marking-user-hud-interface/1601.m10.i307.n008.F.c05.205439527 Vector grid marking for user HUD interface.jpg.import new file mode 100644 index 0000000..25b9d67 --- /dev/null +++ b/vector-grid-marking-user-hud-interface/1601.m10.i307.n008.F.c05.205439527 Vector grid marking for user HUD interface.jpg.import @@ -0,0 +1,41 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://o8c7aqqvsdst" +path.s3tc="res://.godot/imported/1601.m10.i307.n008.F.c05.205439527 Vector grid marking for user HUD interface.jpg-e12299f920fd603fb0314fdd17416881.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://vector-grid-marking-user-hud-interface/1601.m10.i307.n008.F.c05.205439527 Vector grid marking for user HUD interface.jpg" +dest_files=["res://.godot/imported/1601.m10.i307.n008.F.c05.205439527 Vector grid marking for user HUD interface.jpg-e12299f920fd603fb0314fdd17416881.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/vector-grid-marking-user-hud-interface/gridmat.tres b/vector-grid-marking-user-hud-interface/gridmat.tres new file mode 100644 index 0000000..7710d1b --- /dev/null +++ b/vector-grid-marking-user-hud-interface/gridmat.tres @@ -0,0 +1,6 @@ +[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://usdnf043sa8k"] + +[ext_resource type="Texture2D" uid="uid://o8c7aqqvsdst" path="res://vector-grid-marking-user-hud-interface/1601.m10.i307.n008.F.c05.205439527 Vector grid marking for user HUD interface.jpg" id="1_esi1p"] + +[resource] +albedo_texture = ExtResource("1_esi1p") diff --git a/world.gd b/world.gd new file mode 100644 index 0000000..7797d55 --- /dev/null +++ b/world.gd @@ -0,0 +1,122 @@ +@tool +extends Node3D + + +@export var clear_chunks: bool +@export var generate_chunks: bool +@export var chunk_size: int +@export var world_size: Vector3i + +var chunks = {} + +@export var world_seed: int +@export var noise_frequency: float +@export var noise_threshold: float +@export var cave_noise_frequency: float +@export var cave_noise_threshold: float +var noise +var cave_noise + +var chunks_tagged_for_regen = [] + +var chunk_prototype = preload("res://chunk.tscn") + +func _ready() -> void: + generate_chunks = true + +func _process(delta: float) -> void: + if clear_chunks: + clear_chunks = false + clearChunks() + + if generate_chunks: + noise = FastNoiseLite.new() + noise.frequency = noise_frequency + noise.seed = world_seed + cave_noise = FastNoiseLite.new() + cave_noise.frequency = cave_noise_frequency + cave_noise.seed = world_seed + generateChunks() + generate_chunks = false + + for chunk in chunks_tagged_for_regen: + chunk.generate_chunk() + + chunks_tagged_for_regen.clear() + +func clearChunks(): + print("clearing chunk...") + var children = get_children() + for child in children: + child.free() + +func generateChunks(): + for x in range(world_size.x): + for y in range(world_size.y): + for z in range(world_size.z): + generateChunk(Vector3i(x * chunk_size, y * chunk_size, z * chunk_size)) + await Engine.get_main_loop().process_frame + +func generateChunk(pos: Vector3i): + var chunk = chunk_prototype.instantiate() + chunk.position = pos + add_child(chunk) + chunks[pos] = chunk + chunk.init_blocks(chunk_size, pos) + chunk.generate_chunk() + +func SetBlockAtPosition(pos: Vector3i, block_type: Block.BlockType): + var chunk_pos = worldPosToChunkPos(pos) + var local_pos = pos - chunk_pos + if chunks.has(chunk_pos): + chunks[chunk_pos].SetBlockAtPosition(local_pos, block_type) + chunks_tagged_for_regen.append(chunks[chunk_pos]) + var adjacent_chunks_masks = getAdjacentChunksFromBlockPos(local_pos) + for adjacent_chunk_mask in adjacent_chunks_masks: + var adjacent_chunk_pos = chunk_pos + adjacent_chunk_mask * chunk_size + if chunks.has(adjacent_chunk_pos): + chunks_tagged_for_regen.append(chunks[adjacent_chunk_pos]) + +func getAdjacentChunksFromBlockPos(pos: Vector3i): + var chunk_masks = [] + #adjacent to chunk on left + if pos.x == 0: + chunk_masks.append(Vector3i(-1, 0, 0)) + # chunk below + if pos.y == 0: + chunk_masks.append(Vector3i(0, -1, 0)) + # chunk behind + if pos.z == 0: + chunk_masks.append(Vector3i(0, 0, -1)) + # chunk on the right + if pos.x == chunk_size -1: + chunk_masks.append(Vector3i(1, 0, 0)) + # chunk above + if pos.y == chunk_size -1: + chunk_masks.append(Vector3i(0, 1, 0)) + # chunk on the right + if pos.z == chunk_size -1: + chunk_masks.append(Vector3i(0, 0, 1)) + + return chunk_masks + +func worldPosToChunkPos(pos: Vector3i): + return (pos / chunk_size) * chunk_size + + +func GetBlock(pos: Vector3i, from_noise = false): + var chunk_pos = worldPosToChunkPos(pos) + var local_pos = pos - chunk_pos + + # there is air at edges of world + if pos.x < 0 or pos.y < 0 or pos.z < 0 or pos.x >= world_size.x * chunk_size or pos.y >= world_size.y * chunk_size or pos.z >= world_size.z * chunk_size: + return Block.BlockType.Air + + if not from_noise: + if chunks.has(chunk_pos): + return chunks[chunk_pos].GetBlockAtPosition(local_pos) + # + if ((noise.get_noise_2d(pos.x, pos.z) + 1) * chunk_size > pos.y + noise_threshold * 10) and (cave_noise.get_noise_3d(pos.x, pos.y, pos.z) > cave_noise_threshold): + return Block.BlockType.Dirt + else: + return Block.BlockType.Air diff --git a/world.gd.uid b/world.gd.uid new file mode 100644 index 0000000..c2f366a --- /dev/null +++ b/world.gd.uid @@ -0,0 +1 @@ +uid://l6xn27nsln1m diff --git a/world.tscn b/world.tscn new file mode 100644 index 0000000..2364869 --- /dev/null +++ b/world.tscn @@ -0,0 +1,61 @@ +[gd_scene load_steps=9 format=3 uid="uid://dls7ggmf46ia0"] + +[ext_resource type="Script" uid="uid://l6xn27nsln1m" path="res://world.gd" id="1_tlwt5"] +[ext_resource type="Script" uid="uid://c1jlypyykqvfl" path="res://NoclipCamera.gd" id="3_036b0"] + +[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_fj7yv"] +sky_horizon_color = Color(0.662243, 0.671743, 0.686743, 1) +ground_horizon_color = Color(0.662243, 0.671743, 0.686743, 1) + +[sub_resource type="Sky" id="Sky_tlwt5"] +sky_material = SubResource("ProceduralSkyMaterial_fj7yv") + +[sub_resource type="Environment" id="Environment_aqk2v"] +background_mode = 2 +sky = SubResource("Sky_tlwt5") +tonemap_mode = 2 +glow_enabled = true + +[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_fj7yv"] + +[sub_resource type="SphereMesh" id="SphereMesh_fj7yv"] + +[sub_resource type="SphereShape3D" id="SphereShape3D_tlwt5"] + +[node name="Root" type="Node3D"] + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +environment = SubResource("Environment_aqk2v") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(-0.866023, -0.433016, 0.250001, 0, 0.499998, 0.866027, -0.500003, 0.749999, -0.43301, 0, 0, 0) +shadow_enabled = true + +[node name="World" type="Node3D" parent="."] +transform = Transform3D(1, 1.49012e-08, -7.45058e-09, 0, 1, 0, -7.45058e-09, 0, 1, 0, 0, 0) +script = ExtResource("1_tlwt5") +chunk_size = 8 +world_size = Vector3i(8, 16, 8) +world_seed = 1 +noise_frequency = 0.011 +noise_threshold = -4.111 +cave_noise_frequency = 0.01 +cave_noise_threshold = -0.283 + +[node name="MeshInstance3D" type="MeshInstance3D" parent="."] +visible = false + +[node name="Player" type="RigidBody3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20, 50, 20) +physics_material_override = SubResource("PhysicsMaterial_fj7yv") +lock_rotation = true +linear_damp = 1.0 +script = ExtResource("3_036b0") + +[node name="PlayerCamera" type="Camera3D" parent="Player"] + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Player"] +mesh = SubResource("SphereMesh_fj7yv") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Player"] +shape = SubResource("SphereShape3D_tlwt5")