浏览代码

Merge master into hybrid actions staging branch (#4704)

/fix-conflict-base-env
GitHub 4 年前
当前提交
88d3ec3e
共有 82 个文件被更改,包括 4539 次插入306 次删除
  1. 3
      .yamato/com.unity.ml-agents-test.yml
  2. 10
      Project/Assets/ML-Agents/Examples/Match3/Prefabs/Match3Heuristic.prefab
  3. 14
      Project/Assets/ML-Agents/Examples/Match3/Prefabs/Match3VectorObs.prefab
  4. 14
      Project/Assets/ML-Agents/Examples/Match3/Prefabs/Match3VisualObs.prefab
  5. 695
      Project/Assets/ML-Agents/Examples/Match3/Scenes/Match3.unity
  6. 113
      Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3Drawer.cs
  7. 5
      Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Purple.mat
  8. 10
      README.md
  9. 2
      com.unity.ml-agents.extensions/Documentation~/Grid-Sensor.md
  10. 45
      com.unity.ml-agents.extensions/Documentation~/Match3.md
  11. 8
      com.unity.ml-agents.extensions/Documentation~/com.unity.ml-agents.extensions.md
  12. 2
      com.unity.ml-agents.extensions/package.json
  13. 21
      com.unity.ml-agents/CHANGELOG.md
  14. 10
      com.unity.ml-agents/CONTRIBUTING.md
  15. 2
      com.unity.ml-agents/Documentation~/com.unity.ml-agents.md
  16. 6
      com.unity.ml-agents/Runtime/Academy.cs
  17. 2
      com.unity.ml-agents/Runtime/Actuators/IActionReceiver.cs
  18. 2
      com.unity.ml-agents/Runtime/Actuators/IDiscreteActionMask.cs
  19. 45
      com.unity.ml-agents/Runtime/Agent.cs
  20. 4
      com.unity.ml-agents/Runtime/Agent.deprecated.cs
  21. 2
      com.unity.ml-agents/Runtime/Demonstrations/DemonstrationRecorder.cs
  22. 2
      com.unity.ml-agents/Runtime/DiscreteActionMasker.cs
  23. 4
      com.unity.ml-agents/Runtime/Sensors/ObservationWriter.cs
  24. 2
      com.unity.ml-agents/package.json
  25. 2
      config/ppo/SoccerTwos.yaml
  26. 4
      config/ppo/StrikersVsGoalie.yaml
  27. 2
      config/ppo/Tennis.yaml
  28. 4
      docs/Installation-Anaconda-Windows.md
  29. 6
      docs/Installation.md
  30. 4
      docs/Learning-Environment-Design.md
  31. 1
      docs/Learning-Environment-Examples.md
  32. 62
      docs/Training-ML-Agents.md
  33. 2
      docs/Training-on-Amazon-Web-Service.md
  34. 4
      docs/Unity-Inference-Engine.md
  35. 999
      docs/images/match3.png
  36. 2
      gym-unity/gym_unity/__init__.py
  37. 4
      gym-unity/gym_unity/tests/test_gym.py
  38. 2
      ml-agents-envs/mlagents_envs/__init__.py
  39. 2
      ml-agents/mlagents/trainers/__init__.py
  40. 3
      ml-agents/mlagents/trainers/action_info.py
  41. 5
      ml-agents/mlagents/trainers/agent_processor.py
  42. 14
      ml-agents/mlagents/trainers/policy/policy.py
  43. 8
      ml-agents/mlagents/trainers/policy/tf_policy.py
  44. 10
      ml-agents/mlagents/trainers/policy/torch_policy.py
  45. 14
      ml-agents/mlagents/trainers/ppo/optimizer_tf.py
  46. 2
      ml-agents/mlagents/trainers/ppo/trainer.py
  47. 2
      ml-agents/mlagents/trainers/sac/optimizer_torch.py
  48. 2
      ml-agents/mlagents/trainers/simple_env_manager.py
  49. 6
      ml-agents/mlagents/trainers/stats.py
  50. 2
      ml-agents/mlagents/trainers/subprocess_env_manager.py
  51. 3
      ml-agents/mlagents/trainers/tests/mock_brain.py
  52. 20
      ml-agents/mlagents/trainers/tests/tensorflow/test_nn_policy.py
  53. 8
      ml-agents/mlagents/trainers/tests/torch/test_policy.py
  54. 2
      ml-agents/mlagents/trainers/tests/torch/test_reward_providers/test_curiosity.py
  55. 2
      ml-agents/mlagents/trainers/tests/torch/test_simple_rl.py
  56. 8
      ml-agents/mlagents/trainers/tf/models.py
  57. 2
      ml-agents/mlagents/trainers/tf/tensorflow_to_barracuda.py
  58. 6
      ml-agents/mlagents/trainers/torch/action_model.py
  59. 7
      ml-agents/mlagents/trainers/torch/agent_action.py
  60. 2
      ml-agents/mlagents/trainers/torch/components/bc/module.py
  61. 29
      ml-agents/mlagents/trainers/torch/distributions.py
  62. 8
      ml-agents/mlagents/trainers/torch/encoders.py
  63. 12
      ml-agents/mlagents/trainers/torch/layers.py
  64. 10
      ml-agents/mlagents/trainers/torch/model_serialization.py
  65. 5
      ml-agents/mlagents/trainers/torch/networks.py
  66. 4
      ml-agents/mlagents/trainers/trajectory.py
  67. 1
      utils/make_readme_table.py
  68. 8
      Project/Assets/ML-Agents/Examples/Match3/Prefabs/FBX.meta
  69. 8
      Project/Assets/ML-Agents/Examples/Match3/Prefabs/Tiles.meta
  70. 57
      Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3TileSelector.cs
  71. 11
      Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3TileSelector.cs.meta
  72. 81
      Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LightGrey.mat
  73. 8
      Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LightGrey.mat.meta
  74. 1001
      com.unity.ml-agents.extensions/Documentation~/images/match3.png
  75. 45
      Project/Assets/ML-Agents/Examples/Match3/Prefabs/FBX/3.fbx
  76. 97
      Project/Assets/ML-Agents/Examples/Match3/Prefabs/FBX/3.fbx.meta
  77. 104
      Project/Assets/ML-Agents/Examples/Match3/Prefabs/FBX/Match.fbx
  78. 97
      Project/Assets/ML-Agents/Examples/Match3/Prefabs/FBX/Match.fbx.meta
  79. 1001
      Project/Assets/ML-Agents/Examples/Match3/Prefabs/Tiles/TILE_Base.prefab
  80. 7
      Project/Assets/ML-Agents/Examples/Match3/Prefabs/Tiles/TILE_Base.prefab.meta

3
.yamato/com.unity.ml-agents-test.yml


trunk_editor:
- version: trunk
enableCodeCoverage: !!bool true
# Workaround for MLA-1596 - need to make sure we load the right results.
enableCodeCoverage: !!bool false
testProject: DevProject
test_platforms:

10
Project/Assets/ML-Agents/Examples/Match3/Prefabs/Match3Heuristic.prefab


Board: {fileID: 0}
MoveTime: 0.25
MaxMoves: 500
UseSmartHeuristic: 1
HeuristicQuality: 0
--- !u!114 &3508723250470608011
MonoBehaviour:
m_ObjectHideFlags: 0

m_Script: {fileID: 11500000, guid: abebb7ad4a5547d7a3b04373784ff195, type: 3}
m_Name:
m_EditorClassIdentifier:
DebugEdgeIndex: -1
DebugMoveIndex: -1
CubeSpacing: 1.25
Board: {fileID: 0}
TilePrefab: {fileID: 4007900521885639951, guid: faee4e805953b49e688bd00b45c55f2e,
type: 3}
--- !u!114 &3508723250470608009
MonoBehaviour:
m_ObjectHideFlags: 0

m_Script: {fileID: 11500000, guid: 08e4b0da54cb4d56bfcbae22dd49ab8d, type: 3}
m_Name:
m_EditorClassIdentifier:
ActuatorName: Match3 Actuator
ForceHeuristic: 1
--- !u!114 &3508723250470608014
MonoBehaviour:

m_Script: {fileID: 11500000, guid: 530d2f105aa145bd8a00e021bdd925fd, type: 3}
m_Name:
m_EditorClassIdentifier:
SensorName: Match3 Sensor
ObservationType: 0
--- !u!1 &3508723250774301855
GameObject:

14
Project/Assets/ML-Agents/Examples/Match3/Prefabs/Match3VectorObs.prefab


Board: {fileID: 0}
MoveTime: 0.25
MaxMoves: 500
HeuristicQuality: 0
--- !u!114 &2118285884327540685
MonoBehaviour:
m_ObjectHideFlags: 0

m_Script: {fileID: 11500000, guid: abebb7ad4a5547d7a3b04373784ff195, type: 3}
m_Name:
m_EditorClassIdentifier:
DebugEdgeIndex: -1
DebugMoveIndex: -1
CubeSpacing: 1.25
Board: {fileID: 0}
TilePrefab: {fileID: 4007900521885639951, guid: faee4e805953b49e688bd00b45c55f2e,
type: 3}
--- !u!114 &2118285884327540687
MonoBehaviour:
m_ObjectHideFlags: 0

NumCellTypes: 6
NumSpecialTypes: 2
RandomSeed: -1
BasicCellPoints: 1
SpecialCell1Points: 2
SpecialCell2Points: 3
--- !u!114 &2118285884327540683
MonoBehaviour:
m_ObjectHideFlags: 0

m_Script: {fileID: 11500000, guid: 08e4b0da54cb4d56bfcbae22dd49ab8d, type: 3}
m_Name:
m_EditorClassIdentifier:
ForceRandom: 0
ActuatorName: Match3 Actuator
ForceHeuristic: 0
--- !u!114 &2118285884327540680
MonoBehaviour:
m_ObjectHideFlags: 0

m_Script: {fileID: 11500000, guid: 530d2f105aa145bd8a00e021bdd925fd, type: 3}
m_Name:
m_EditorClassIdentifier:
SensorName: Match3 Sensor
ObservationType: 0

14
Project/Assets/ML-Agents/Examples/Match3/Prefabs/Match3VisualObs.prefab


Board: {fileID: 0}
MoveTime: 0.25
MaxMoves: 500
HeuristicQuality: 0
--- !u!114 &3019509692332007778
MonoBehaviour:
m_ObjectHideFlags: 0

m_Script: {fileID: 11500000, guid: abebb7ad4a5547d7a3b04373784ff195, type: 3}
m_Name:
m_EditorClassIdentifier:
DebugEdgeIndex: -1
DebugMoveIndex: -1
CubeSpacing: 1.25
Board: {fileID: 0}
TilePrefab: {fileID: 4007900521885639951, guid: faee4e805953b49e688bd00b45c55f2e,
type: 3}
--- !u!114 &3019509692332007776
MonoBehaviour:
m_ObjectHideFlags: 0

NumCellTypes: 6
NumSpecialTypes: 2
RandomSeed: -1
BasicCellPoints: 1
SpecialCell1Points: 2
SpecialCell2Points: 3
--- !u!114 &3019509692332007780
MonoBehaviour:
m_ObjectHideFlags: 0

m_Script: {fileID: 11500000, guid: 08e4b0da54cb4d56bfcbae22dd49ab8d, type: 3}
m_Name:
m_EditorClassIdentifier:
ForceRandom: 0
ActuatorName: Match3 Actuator
ForceHeuristic: 0
--- !u!114 &3019509692332007783
MonoBehaviour:
m_ObjectHideFlags: 0

m_Script: {fileID: 11500000, guid: 530d2f105aa145bd8a00e021bdd925fd, type: 3}
m_Name:
m_EditorClassIdentifier:
SensorName: Match3 Sensor
ObservationType: 2

695
Project/Assets/ML-Agents/Examples/Match3/Scenes/Match3.unity


m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0.44657898, g: 0.49641287, b: 0.5748173, a: 1}
m_IndirectSpecularColor: {r: 0.43632728, g: 0.4747097, b: 0.51471573, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:

- target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed,
type: 3}
propertyPath: m_LocalPosition.x
value: 30
value: 60
value: 10
value: 20
objectReference: {fileID: 0}
- target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed,
type: 3}

- target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed,
type: 3}
propertyPath: m_RootOrder
value: 9
value: 11
objectReference: {fileID: 0}
- target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed,
type: 3}

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: aaa471bd5e2014848a66917476671aed, type: 3}
--- !u!1 &288081173
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 288081174}
- component: {fileID: 288081177}
- component: {fileID: 288081176}
- component: {fileID: 288081175}
m_Layer: 0
m_Name: Border (1)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &288081174
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 288081173}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0.202, y: 0, z: -0.07999998}
m_LocalScale: {x: 1.0625, y: 0.50279176, z: 1.0649}
m_Children:
- {fileID: 1976481842}
- {fileID: 1670850089}
m_Father: {fileID: 796197232}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!65 &288081175
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 288081173}
m_Material: {fileID: 0}
m_IsTrigger: 0
m_Enabled: 1
serializedVersion: 2
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!23 &288081176
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 288081173}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
--- !u!33 &288081177
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 288081173}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!1 &327661542
GameObject:
m_ObjectHideFlags: 0

m_GameObject: {fileID: 327661542}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_ClearFlags: 2
m_BackGroundColor: {r: 0.58746636, g: 0.71687025, b: 0.78431374, a: 1}
m_projectionMatrixMode: 1
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}

near clip plane: 0.3
far clip plane: 1000
field of view: 60
orthographic: 0
orthographic size: 5
orthographic: 1
orthographic size: 6.5
m_Depth: -1
m_CullingMask:
serializedVersion: 2

m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 327661542}
m_LocalRotation: {x: -0.0071871188, y: -0.003003474, z: -0.000021621252, w: 0.9999697}
m_LocalPosition: {x: 18.701, y: 11.390508, z: -33.193497}
m_LocalRotation: {x: 0, y: 1, z: 0, w: 0}
m_LocalPosition: {x: 4.5, y: 5, z: 3.72}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0}
--- !u!1001 &416139953
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 288081174}
m_Modifications:
- target: {fileID: 100000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3}
propertyPath: m_Name
value: 3
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3}
propertyPath: m_LocalPosition.x
value: 0.31264985
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3}
propertyPath: m_LocalPosition.y
value: 0.32276452
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3}
propertyPath: m_LocalPosition.z
value: 0.33805987
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3}
propertyPath: m_LocalRotation.x
value: 0.000000015454312
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3}
propertyPath: m_LocalRotation.y
value: 0.00000001545431
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3}
propertyPath: m_LocalRotation.z
value: -0.70710677
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3}
propertyPath: m_LocalRotation.w
value: 0.7071069
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3}
propertyPath: m_RootOrder
value: 1
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: -90.00001
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3}
propertyPath: m_LocalScale.x
value: 48.39589
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3}
propertyPath: m_LocalScale.y
value: 26.17337
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3}
propertyPath: m_LocalScale.z
value: 274.20087
objectReference: {fileID: 0}
- target: {fileID: 2300000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3}
propertyPath: m_Materials.Array.data[0]
value:
objectReference: {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 02d33201e78d54a67ac7b0734cd6d8aa, type: 3}
--- !u!1 &448464282
GameObject:
m_ObjectHideFlags: 0

m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 448464282}
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalRotation: {x: 0.99240386, y: -0.0075961384, z: 0.08682413, w: 0.086824216}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 170, y: -10, z: 0}
--- !u!1001 &455966546
PrefabInstance:
m_ObjectHideFlags: 0

propertyPath: m_BehaviorName
value: Match3SimpleHeuristic
objectReference: {fileID: 0}
- target: {fileID: 3508723250470608011, guid: 2fafdcd0587684641b03b11f04454f1b,
type: 3}
propertyPath: cubeSpacing
value: 1.25
objectReference: {fileID: 0}
- target: {fileID: 3508723250470608012, guid: 2fafdcd0587684641b03b11f04454f1b,
type: 3}
propertyPath: UseSmartHeuristic

propertyPath: m_Name
value: Match3SimpleHeuristic (1)
objectReference: {fileID: 0}
- target: {fileID: 3508723250774301855, guid: 2fafdcd0587684641b03b11f04454f1b,
type: 3}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
value: 30
value: 60
value: 20
value: 40
objectReference: {fileID: 0}
- target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b,
type: 3}

- target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b,
type: 3}
propertyPath: m_RootOrder
value: 13
value: 15
objectReference: {fileID: 0}
- target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b,
type: 3}

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 2fafdcd0587684641b03b11f04454f1b, type: 3}
--- !u!1 &519872758
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 519872759}
- component: {fileID: 519872762}
- component: {fileID: 519872761}
- component: {fileID: 519872760}
m_Layer: 0
m_Name: Border
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &519872759
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 519872758}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: -0.07999998}
m_LocalScale: {x: 1.0625, y: 1.0625, z: 1.0649}
m_Children: []
m_Father: {fileID: 796197232}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!65 &519872760
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 519872758}
m_Material: {fileID: 0}
m_IsTrigger: 0
m_Enabled: 1
serializedVersion: 2
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!23 &519872761
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 519872758}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 69fefdd39d2b34b169e921910bed9c0d, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
--- !u!33 &519872762
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 519872758}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!1001 &607493268
PrefabInstance:
m_ObjectHideFlags: 0

m_Modifications:
- target: {fileID: 3508723250470608010, guid: 2fafdcd0587684641b03b11f04454f1b,
- target: {fileID: 3508723250470608011, guid: 2fafdcd0587684641b03b11f04454f1b,
propertyPath: m_BehaviorName
value: Match3GreedyHeuristic
propertyPath: cubeSpacing
value: 1.25
objectReference: {fileID: 0}
- target: {fileID: 3508723250470608012, guid: 2fafdcd0587684641b03b11f04454f1b,
type: 3}

propertyPath: m_Name
value: Match3GreedyHeuristic
objectReference: {fileID: 0}
- target: {fileID: 3508723250774301855, guid: 2fafdcd0587684641b03b11f04454f1b,
type: 3}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b,
type: 3}
propertyPath: m_LocalPosition.x

type: 3}
propertyPath: m_LocalPosition.y
value: 20
value: 40
objectReference: {fileID: 0}
- target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b,
type: 3}

- target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b,
type: 3}
propertyPath: m_RootOrder
value: 10
value: 12
objectReference: {fileID: 0}
- target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b,
type: 3}

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 2fafdcd0587684641b03b11f04454f1b, type: 3}
--- !u!1 &796197228
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 796197232}
- component: {fileID: 796197231}
- component: {fileID: 796197230}
- component: {fileID: 796197229}
m_Layer: 0
m_Name: Background
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!65 &796197229
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 796197228}
m_Material: {fileID: 0}
m_IsTrigger: 0
m_Enabled: 1
serializedVersion: 2
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!23 &796197230
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 796197228}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 5c59bd36def9a4684be49a21cf201a2d, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
--- !u!33 &796197231
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 796197228}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!4 &796197232
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 796197228}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 4.4, y: 5, z: -0.5}
m_LocalScale: {x: 10.5, y: 12, z: 1}
m_Children:
- {fileID: 519872759}
- {fileID: 288081174}
m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &802842869
PrefabInstance:
m_ObjectHideFlags: 0

- target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824,
type: 3}
propertyPath: m_LocalPosition.x
value: 20
value: 40
objectReference: {fileID: 0}
- target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824,
type: 3}

- target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824,
type: 3}
propertyPath: m_RootOrder
value: 4
value: 6
objectReference: {fileID: 0}
- target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824,
type: 3}

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 6944ca02359f5427aa13c8551236a824, type: 3}
--- !u!1001 &822340861
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 288081174}
m_Modifications:
- target: {fileID: 100000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3}
propertyPath: m_Name
value: Match
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3}
propertyPath: m_LocalPosition.x
value: 0.33568624
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3}
propertyPath: m_LocalPosition.y
value: -0.09143946
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3}
propertyPath: m_LocalPosition.z
value: 0.33805987
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3}
propertyPath: m_LocalRotation.x
value: 0.000000015454312
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3}
propertyPath: m_LocalRotation.y
value: 0.00000001545431
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3}
propertyPath: m_LocalRotation.z
value: -0.70710677
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3}
propertyPath: m_LocalRotation.w
value: 0.7071069
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3}
propertyPath: m_RootOrder
value: 0
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: -90.00001
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3}
propertyPath: m_LocalScale.x
value: 37.38769
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3}
propertyPath: m_LocalScale.y
value: 20.219938
objectReference: {fileID: 0}
- target: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3}
propertyPath: m_LocalScale.z
value: 211.83073
objectReference: {fileID: 0}
- target: {fileID: 2300000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3}
propertyPath: m_Materials.Array.data[0]
value:
objectReference: {fileID: 2100000, guid: 66163cf35956a4be08e801b750c26f33, type: 2}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 6cb02a85514f94d7f8266348b5c021cd, type: 3}
--- !u!1001 &906566489
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 1537641056927260, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3}
propertyPath: m_Name
value: Canvas_Watermark
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_RootOrder
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_SizeDelta.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_AnchorMin.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_AnchorMin.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_AnchorMax.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_AnchorMax.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_Pivot.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_Pivot.y
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3}
--- !u!1001 &1218183267
PrefabInstance:
m_ObjectHideFlags: 0

- target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed,
type: 3}
propertyPath: m_LocalPosition.x
value: 10
value: 20
value: 10
value: 20
objectReference: {fileID: 0}
- target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed,
type: 3}

- target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed,
type: 3}
propertyPath: m_RootOrder
value: 7
value: 9
objectReference: {fileID: 0}
- target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed,
type: 3}

- target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824,
type: 3}
propertyPath: m_LocalPosition.x
value: 10
value: 20
objectReference: {fileID: 0}
- target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824,
type: 3}

- target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824,
type: 3}
propertyPath: m_RootOrder
value: 3
value: 5
objectReference: {fileID: 0}
- target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824,
type: 3}

propertyPath: m_BehaviorName
value: Match3SimpleHeuristic
objectReference: {fileID: 0}
- target: {fileID: 3508723250470608011, guid: 2fafdcd0587684641b03b11f04454f1b,
type: 3}
propertyPath: cubeSpacing
value: 1.25
objectReference: {fileID: 0}
- target: {fileID: 3508723250470608012, guid: 2fafdcd0587684641b03b11f04454f1b,
type: 3}
propertyPath: UseSmartHeuristic

propertyPath: m_Name
value: Match3SimpleHeuristic
objectReference: {fileID: 0}
- target: {fileID: 3508723250774301855, guid: 2fafdcd0587684641b03b11f04454f1b,
type: 3}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
value: 20
value: 40
value: 20
value: 40
objectReference: {fileID: 0}
- target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b,
type: 3}

- target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b,
type: 3}
propertyPath: m_RootOrder
value: 12
value: 14
objectReference: {fileID: 0}
- target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b,
type: 3}

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 2fafdcd0587684641b03b11f04454f1b, type: 3}
--- !u!4 &1670850089 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 400000, guid: 02d33201e78d54a67ac7b0734cd6d8aa,
type: 3}
m_PrefabInstance: {fileID: 416139953}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &1765917346
PrefabInstance:
m_ObjectHideFlags: 0

m_Modifications:
- target: {fileID: 3508723250470608010, guid: 2fafdcd0587684641b03b11f04454f1b,
- target: {fileID: 3508723250470608011, guid: 2fafdcd0587684641b03b11f04454f1b,
propertyPath: m_BehaviorName
value: Match3GreedyHeuristic
propertyPath: cubeSpacing
value: 1.25
objectReference: {fileID: 0}
- target: {fileID: 3508723250470608012, guid: 2fafdcd0587684641b03b11f04454f1b,
type: 3}

propertyPath: m_Name
value: Match3GreedyHeuristic (1)
objectReference: {fileID: 0}
- target: {fileID: 3508723250774301855, guid: 2fafdcd0587684641b03b11f04454f1b,
type: 3}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
value: 10
value: 20
value: 20
value: 40
objectReference: {fileID: 0}
- target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b,
type: 3}

- target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b,
type: 3}
propertyPath: m_RootOrder
value: 11
value: 13
objectReference: {fileID: 0}
- target: {fileID: 3508723250774301920, guid: 2fafdcd0587684641b03b11f04454f1b,
type: 3}

- target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824,
type: 3}
propertyPath: m_LocalPosition.x
value: 30
value: 60
objectReference: {fileID: 0}
- target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824,
type: 3}

- target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824,
type: 3}
propertyPath: m_RootOrder
value: 5
value: 7
objectReference: {fileID: 0}
- target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824,
type: 3}

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 6944ca02359f5427aa13c8551236a824, type: 3}
--- !u!4 &1976481842 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 400000, guid: 6cb02a85514f94d7f8266348b5c021cd,
type: 3}
m_PrefabInstance: {fileID: 822340861}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &2112980636
PrefabInstance:
m_ObjectHideFlags: 0

- target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed,
type: 3}
propertyPath: m_LocalPosition.x
value: 20
value: 40
value: 10
value: 20
objectReference: {fileID: 0}
- target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed,
type: 3}

- target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed,
type: 3}
propertyPath: m_RootOrder
value: 8
value: 10
objectReference: {fileID: 0}
- target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed,
type: 3}

- target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824,
type: 3}
propertyPath: m_RootOrder
value: 2
value: 4
objectReference: {fileID: 0}
- target: {fileID: 2118285883905619878, guid: 6944ca02359f5427aa13c8551236a824,
type: 3}

propertyPath: m_Name
value: Match3VectorObs
objectReference: {fileID: 0}
- target: {fileID: 2118285883905619929, guid: 6944ca02359f5427aa13c8551236a824,
type: 3}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
- target: {fileID: 2118285884327540673, guid: 6944ca02359f5427aa13c8551236a824,
type: 3}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
- target: {fileID: 2118285884327540680, guid: 6944ca02359f5427aa13c8551236a824,
type: 3}
propertyPath: UseVectorObservations
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 6944ca02359f5427aa13c8551236a824, type: 3}
--- !u!1001 &8113351836286138288

- target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed,
type: 3}
propertyPath: m_LocalPosition.y
value: 10
value: 20
objectReference: {fileID: 0}
- target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed,
type: 3}

- target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed,
type: 3}
propertyPath: m_RootOrder
value: 6
value: 8
objectReference: {fileID: 0}
- target: {fileID: 3019509691567202569, guid: aaa471bd5e2014848a66917476671aed,
type: 3}

type: 3}
propertyPath: m_Name
value: Match3VisualObs
objectReference: {fileID: 0}
- target: {fileID: 3019509691567202678, guid: aaa471bd5e2014848a66917476671aed,
type: 3}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: aaa471bd5e2014848a66917476671aed, type: 3}

113
Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3Drawer.cs


using System.Collections.Generic;
using UnityEngine;
using Unity.MLAgents.Extensions.Match3;

static Color[] s_Colors = new[]
{
Color.red,
Color.green,
Color.blue,
Color.cyan,
Color.magenta,
Color.yellow,
Color.gray,
Color.black,
Color.red,
Color.green,
Color.blue,
Color.cyan,
Color.magenta,
Color.yellow,
Color.gray,
Color.black,
public Dictionary<(int, int), Match3TileSelector> tilesDict = new Dictionary<(int, int), Match3TileSelector>();
public float CubeSpacing = 1.25f;
public GameObject TilePrefab;
private bool m_Initialized;
private Match3Board m_Board;
void Awake()
{
if (!m_Initialized)
{
InitializeDict();
}
}
void InitializeDict()
{
m_Board = GetComponent<Match3Board>();
foreach (var item in tilesDict)
{
if (item.Value)
{
DestroyImmediate(item.Value.gameObject);
}
}
tilesDict.Clear();
for (var i = 0; i < m_Board.Rows; i++)
{
for (var j = 0; j < m_Board.Columns; j++)
{
var go = Instantiate(TilePrefab, transform.position, Quaternion.identity, transform);
go.name = $"r{i}_c{j}";
tilesDict.Add((i, j), go.GetComponent<Match3TileSelector>());
}
}
m_Initialized = true;
}
void Update()
{
if (!m_Board)
{
m_Board = GetComponent<Match3Board>();
}
if (!m_Initialized)
{
InitializeDict();
}
for (var i = 0; i < m_Board.Rows; i++)
{
for (var j = 0; j < m_Board.Columns; j++)
{
var value = m_Board.Cells != null ? m_Board.GetCellType(i, j) : Match3Board.k_EmptyCell;
var pos = new Vector3(j, i, 0);
pos *= CubeSpacing;
var specialType = m_Board.Cells != null ? m_Board.GetSpecialType(i, j) : 0;
tilesDict[(i, j)].transform.position = transform.TransformPoint(pos);
tilesDict[(i, j)].SetActiveTile(specialType, value);
}
}
}
// TODO replace Gizmos for drawing the game state with proper GameObjects and animations.
var cubeSpacing = .75f;
var matchedWireframeSize = .5f * (cubeSize + cubeSpacing);
var matchedWireframeSize = .5f * (cubeSize + CubeSpacing);
var board = GetComponent<Match3Board>();
if (board == null)
if (!m_Board)
return;
m_Board = GetComponent<Match3Board>();
for (var i = 0; i < board.Rows; i++)
for (var i = 0; i < m_Board.Rows; i++)
for (var j = 0; j < board.Columns; j++)
for (var j = 0; j < m_Board.Columns; j++)
var value = board.Cells != null ? board.GetCellType(i, j) : Match3Board.k_EmptyCell;
var value = m_Board.Cells != null ? m_Board.GetCellType(i, j) : Match3Board.k_EmptyCell;
if (value >= 0 && value < s_Colors.Length)
{
Gizmos.color = s_Colors[value];

}
var pos = new Vector3(j, i, 0);
pos *= cubeSpacing;
pos *= CubeSpacing;
var specialType = board.Cells != null ? board.GetSpecialType(i, j) : 0;
var specialType = m_Board.Cells != null ? m_Board.GetSpecialType(i, j) : 0;
if (specialType == 2)
{
Gizmos.DrawCube(transform.TransformPoint(pos), cubeSize * new Vector3(1f, .5f, .5f));

}
Gizmos.color = Color.yellow;
if (board.Matched != null && board.Matched[j, i])
if (m_Board.Matched != null && m_Board.Matched[j, i])
{
Gizmos.DrawWireCube(transform.TransformPoint(pos), matchedWireframeSize * Vector3.one);
}

// Draw valid moves
foreach (var move in board.AllMoves())
foreach (var move in m_Board.AllMoves())
{
if (DebugMoveIndex >= 0 && move.MoveIndex != DebugMoveIndex)
{

if (!board.IsMoveValid(move))
if (!m_Board.IsMoveValid(move))
var pos = new Vector3(move.Column, move.Row, 0) * cubeSpacing;
var otherPos = new Vector3(otherCol, otherRow, 0) * cubeSpacing;
var pos = new Vector3(move.Column, move.Row, 0) * CubeSpacing;
var otherPos = new Vector3(otherCol, otherRow, 0) * CubeSpacing;
var oneQuarter = Vector3.Lerp(pos, otherPos, .25f);
var threeQuarters = Vector3.Lerp(pos, otherPos, .75f);

5
Project/Assets/ML-Agents/Examples/SharedAssets/Materials/Purple.mat


Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Purple
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF _SPECULARHIGHLIGHTS_OFF

10
README.md


# Unity ML-Agents Toolkit
[![docs badge](https://img.shields.io/badge/docs-reference-blue.svg)](https://github.com/Unity-Technologies/ml-agents/tree/release_9_docs/docs/)
[![docs badge](https://img.shields.io/badge/docs-reference-blue.svg)](https://github.com/Unity-Technologies/ml-agents/tree/release_10_docs/docs/)
[![license badge](https://img.shields.io/badge/license-Apache--2.0-green.svg)](LICENSE)

## Releases & Documentation
**Our latest, stable release is `Release 9`. Click
[here](https://github.com/Unity-Technologies/ml-agents/tree/release_9_docs/docs/Readme.md)
**Our latest, stable release is `Release 10`. Click
[here](https://github.com/Unity-Technologies/ml-agents/tree/release_10_docs/docs/Readme.md)
to get started with the latest release of ML-Agents.**
The table below lists all our releases, including our `master` branch which is

| **Version** | **Release Date** | **Source** | **Documentation** | **Download** |
|:-------:|:------:|:-------------:|:-------:|:------------:|
| **master (unstable)** | -- | [source](https://github.com/Unity-Technologies/ml-agents/tree/master) | [docs](https://github.com/Unity-Technologies/ml-agents/tree/master/docs/Readme.md) | [download](https://github.com/Unity-Technologies/ml-agents/archive/master.zip) |
| **Release 9** | **November 4, 2020** | **[source](https://github.com/Unity-Technologies/ml-agents/tree/release_9)** | **[docs](https://github.com/Unity-Technologies/ml-agents/tree/release_9_docs/docs/Readme.md)** | **[download](https://github.com/Unity-Technologies/ml-agents/archive/release_9.zip)** |
| **Release 10** | **November 18, 2020** | **[source](https://github.com/Unity-Technologies/ml-agents/tree/release_10)** | **[docs](https://github.com/Unity-Technologies/ml-agents/tree/release_10_docs/docs/Readme.md)** | **[download](https://github.com/Unity-Technologies/ml-agents/archive/release_10.zip)** |
| **Release 9** | November 4, 2020 | [source](https://github.com/Unity-Technologies/ml-agents/tree/release_9) | [docs](https://github.com/Unity-Technologies/ml-agents/tree/release_9_docs/docs/Readme.md) | [download](https://github.com/Unity-Technologies/ml-agents/archive/release_9.zip) |
| **Release 3** | June 10, 2020 | [source](https://github.com/Unity-Technologies/ml-agents/tree/release_3) | [docs](https://github.com/Unity-Technologies/ml-agents/tree/release_3_docs/docs/Readme.md) | [download](https://github.com/Unity-Technologies/ml-agents/archive/release_3.zip) |
## Citation

2
com.unity.ml-agents.extensions/Documentation~/Grid-Sensor.md


An image can be thought of as a matrix of a predefined width (W) and a height (H) and each pixel can be thought of as simply an array of length 3 (in the case of RGB), `[Red, Green, Blue]` holding the different channel information of the color (channel) intensities at that pixel location. Thus an image is just a 3 dimensional matrix of size WxHx3. A Grid Observation can be thought of as a generalization of this setup where in place of a pixel there is a "cell" which is an array of length N representing different channel intensities at that cell position. From a Convolutional Neural Network point of view, the introduction of multiple channels in an "image" isn't a new concept. One such example is using an RGB-Depth image which is used in several robotics applications. The distinction of Grid Observations is what the data within the channels represents. Instead of limiting the channels to color intensities, the channels within a cell of a Grid Observation generalize to any data that can be represented by a single number (float or int).
Before jumping into the details of the Grid Sensor, an important thing to note is the agent performance and qualitatively different behavior over raycasts. Unity MLAgent's comes with a suite of example environments. One in particular, the [Food Collector](https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Learning-Environment-Examples.md#food-collector), has been the focus of the Grid Sensor development.
Before jumping into the details of the Grid Sensor, an important thing to note is the agent performance and qualitatively different behavior over raycasts. Unity MLAgent's comes with a suite of example environments. One in particular, the [Food Collector](https://github.com/Unity-Technologies/ml-agents/tree/release_10_docs/docs/Learning-Environment-Examples.md#food-collector), has been the focus of the Grid Sensor development.
The Food Collector environment can be described as:
* Set-up: A multi-agent environment where agents compete to collect food.

45
com.unity.ml-agents.extensions/Documentation~/Match3.md


# Match-3 Game Support
# Match-3 with ML-Agents
<img src="images/match3.png" align="center" width="3000"/>
## Overview
One of the main feedback we get is to illustrate more real game examples using ML-Agents. We are excited to provide an example implementation of Match-3 using ML-Agents and additional utilities to integrate ML-Agents with Match-3 games.
Our aim is to enable Match-3 teams to leverage ML-Agents to create player agents to learn and play different Match-3 levels. This implementation is intended as a starting point and guide for teams to get started (as there are many nuances with Match-3 for training ML-Agents) and for us to iterate both on the C#, hyperparameters, and trainers to improve ML-Agents for Match-3.
This implementation includes:
* C# implementation catered toward a Match-3 setup including concepts around encoding for moves based on [Human Like Playtesting with Deep Learning](https://www.researchgate.net/publication/328307928_Human-Like_Playtesting_with_Deep_Learning)
* An example Match-3 scene with ML-Agents implemented (located under /Project/Assets/ML-Agents/Examples/Match3). More information, on Match-3 example [here](https://github.com/Unity-Technologies/ml-agents/tree/release_10_docs/docs/docs/Learning-Environment-Examples.md#match-3).
### Feedback
If you are a Match-3 developer and are trying to leverage ML-Agents for this scenario, [we want to hear from you](https://forms.gle/TBsB9jc8WshgzViU9). Additionally, we are also looking for interested Match-3 teams to speak with us for 45 minutes. If you are interested, please indicate that in the [form](https://forms.gle/TBsB9jc8WshgzViU9). If selected, we will provide gift cards as a token of appreciation.
### Interested in more game templates?
Do you have a type of game you are interested for ML-Agents? If so, please post a [forum issue](https://forum.unity.com/forums/ml-agents.453/) with [GAME TEMPLATE] in the title.
## Getting started
The C# code for Match-3 exists inside of the extensions package (com.unity.ml-agents.extensions). A good first step would be to familiarize with the extensions package by reading the document [here](com.unity.ml-agents.extensions.md). The second step would be to take a look at how we have implemented the C# code in the example Match-3 scene (located under /Project/Assets/ML-Agents/Examples/match3). Once you have some familiarity, then the next step would be to implement the C# code for Match-3 from the extensions package.
Additionally, see below for additional technical specifications on the C# code for Match-3. Please note the Match-3 game isn't human playable as implemented and can be only played via training.
We provide some utilities to integrate ML-Agents with Match-3 games.
## Technical specifications for Match-3 with ML-Agents
## AbstractBoard class
### AbstractBoard class
The `AbstractBoard` is the bridge between ML-Agents and your game. It allows ML-Agents to
* ask your game what the "color" of a cell is
* ask whether the cell is a "special" piece type or not

The AbstractBoard also tracks the number of rows, columns, and potential piece types that the board can have.
#### `public abstract int GetCellType(int row, int col)`
##### `public abstract int GetCellType(int row, int col)`
#### `public abstract int GetSpecialType(int row, int col)`
##### `public abstract int GetSpecialType(int row, int col)`
#### `public abstract bool IsMoveValid(Move m)`
##### `public abstract bool IsMoveValid(Move m)`
#### `public abstract bool MakeMove(Move m)`
##### `public abstract bool MakeMove(Move m)`
## Move struct
### Move struct
The Move struct encapsulates a swap of two adjacent cells. You can get the number of potential moves
for a board of a given size with. `Move.NumPotentialMoves(NumRows, NumColumns)`. There are two helper
functions to create a new `Move`:

a `Move` from a row, column, and direction (and board size).
## `Match3Sensor` and `Match3SensorComponent` classes
#### `Match3Sensor` and `Match3SensorComponent` classes
The `Match3Sensor` generates observations about the state using the `AbstractBoard` interface. You can
choose whether to use vector or "visual" observations; in theory, visual observations should perform
better because they are 2-dimensional like the board, but we need to experiment more on this.

## `Match3Actuator` and `Match3ActuatorComponent` classes
#### `Match3Actuator` and `Match3ActuatorComponent` classes
The `Match3Actuator` converts actions from training or inference into a `Move` that is sent to` AbstractBoard.MakeMove()`
It also checks `AbstractBoard.IsMoveValid` for each potential move and uses this to set the action mask for Agent.

# Setting up match-3 simulation
### Setting up Match-3 simulation
* Implement the `AbstractBoard` methods to integrate with your game.
* Give the `Agent` rewards when it does what you want it to (match multiple pieces in a row, clears pieces of a certain
type, etc).

8
com.unity.ml-agents.extensions/Documentation~/com.unity.ml-agents.extensions.md


recommended ways to install the package:
### Local Installation
[Clone the repository](../../docs/Installation.md#clone-the-ml-agents-toolkit-repository-optional) and follow the
[Local Installation for Development](../../docs/Installation.md#advanced-local-installation-for-development-1)
[Clone the repository](https://github.com/Unity-Technologies/ml-agents/tree/release_10_docs/docs/Installation.md#clone-the-ml-agents-toolkit-repository-optional) and follow the
[Local Installation for Development](https://github.com/Unity-Technologies/ml-agents/tree/release_10_docs/docs/Installation.md#advanced-local-installation-for-development-1)
![Package Manager git URL](../../docs/images/unity_package_manager_git_url.png)
![Package Manager git URL](https://github.com/Unity-Technologies/ml-agents/tree/release_10_docs/docs/images/unity_package_manager_git_url.png)
In the dialog that appears, enter
```
git+https://github.com/Unity-Technologies/ml-agents.git?path=com.unity.ml-agents.extensions

none
## Need Help?
The main [README](../../README.md) contains links for contacting the team or getting support.
The main [README](https://github.com/Unity-Technologies/ml-agents/tree/release_10_docs/README.md) contains links for contacting the team or getting support.

2
com.unity.ml-agents.extensions/package.json


"unity": "2018.4",
"description": "A source-only package for new features based on ML-Agents",
"dependencies": {
"com.unity.ml-agents": "1.5.0-preview"
"com.unity.ml-agents": "1.6.0-preview"
}
}

21
com.unity.ml-agents/CHANGELOG.md


## [Unreleased]
### Major Changes
#### com.unity.ml-agents (C#)
#### ml-agents / ml-agents-envs / gym-unity (Python)
### Minor Changes
#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#)
#### ml-agents / ml-agents-envs / gym-unity (Python)
### Bug Fixes
#### com.unity.ml-agents (C#)
#### ml-agents / ml-agents-envs / gym-unity (Python)
## [1.6.0-preview] - 2020-11-18
### Major Changes
#### com.unity.ml-agents (C#)
#### ml-agents / ml-agents-envs / gym-unity (Python)

adding `framework: tensorflow` in the configuration YAML. (#4517)
### Minor Changes
#### com.unity.ml-agents (C#)
#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#)
- Utilities were added to `com.unity.ml-agents.extensions` to make it easier to
integrate with match-3 games. See the [readme](https://github.com/Unity-Technologies/ml-agents/blob/master/com.unity.ml-agents.extensions/Documentation~/Match3.md)
for more details. (#4515)
#### ml-agents / ml-agents-envs / gym-unity (Python)
- The `action_probs` node is no longer listed as an output in TensorFlow models (#4613).

Previously, this would result in an infinite loop and cause the editor to hang. (#4573)
#### ml-agents / ml-agents-envs / gym-unity (Python)
- Fixed an issue where runs could not be resumed when using TensorFlow and Ghost Training. (#4593)
- Change the tensor type of step count from int32 to int64 to address the overflow issue when step
goes larger than 2^31. Previous Tensorflow checkpoints will become incompatible and cannot be loaded. (#4607)
- Remove extra period after "Training" in console log. (#4674)
## [1.5.0-preview] - 2020-10-14

10
com.unity.ml-agents/CONTRIBUTING.md


## Environments
We are also actively open to adding community contributed environments as
examples, as long as they are small, simple, demonstrate a unique feature of the
platform, and provide a unique non-trivial challenge to modern machine learning
algorithms. Feel free to submit these environments with a PR explaining the
nature of the environment and task.
We are currently not accepting environment contributions directly into ML-Agents.
However, we believe community created enviornments have a lot of value to the
community. If you have an interesting enviornment and are willing to share,
feel free to showcase it and share any relevant files in the
[ML-Agents forum](https://forum.unity.com/forums/ml-agents.453/).
## Continuous Integration (CI)

2
com.unity.ml-agents/Documentation~/com.unity.ml-agents.md


[unity ML-Agents Toolkit]: https://github.com/Unity-Technologies/ml-agents
[unity inference engine]: https://docs.unity3d.com/Packages/com.unity.barracuda@latest/index.html
[package manager documentation]: https://docs.unity3d.com/Manual/upm-ui-install.html
[installation instructions]: https://github.com/Unity-Technologies/ml-agents/blob/release_9_docs/docs/Installation.md
[installation instructions]: https://github.com/Unity-Technologies/ml-agents/blob/release_10_docs/docs/Installation.md
[github repository]: https://github.com/Unity-Technologies/ml-agents
[python package]: https://github.com/Unity-Technologies/ml-agents
[execution order of event functions]: https://docs.unity3d.com/Manual/ExecutionOrder.html

6
com.unity.ml-agents/Runtime/Academy.cs


* API. For more information on each of these entities, in addition to how to
* set-up a learning environment and train the behavior of characters in a
* Unity scene, please browse our documentation pages on GitHub:
* https://github.com/Unity-Technologies/ml-agents/tree/release_9_docs/docs/
* https://github.com/Unity-Technologies/ml-agents/tree/release_10_docs/docs/
*/
namespace Unity.MLAgents

/// fall back to inference or heuristic decisions. (You can also set agents to always use
/// inference or heuristics.)
/// </remarks>
[HelpURL("https://github.com/Unity-Technologies/ml-agents/tree/release_9_docs/" +
[HelpURL("https://github.com/Unity-Technologies/ml-agents/tree/release_10_docs/" +
"docs/Learning-Environment-Design.md")]
public class Academy : IDisposable
{

/// Unity package version of com.unity.ml-agents.
/// This must match the version string in package.json and is checked in a unit test.
/// </summary>
internal const string k_PackageVersion = "1.5.0-preview";
internal const string k_PackageVersion = "1.6.0-preview";
const int k_EditorTrainingPort = 5004;

2
com.unity.ml-agents/Runtime/Actuators/IActionReceiver.cs


///
/// See [Agents - Actions] for more information on masking actions.
///
/// [Agents - Actions]: https://github.com/Unity-Technologies/ml-agents/blob/release_9_docs/docs/Learning-Environment-Design-Agents.md#actions
/// [Agents - Actions]: https://github.com/Unity-Technologies/ml-agents/blob/release_10_docs/docs/Learning-Environment-Design-Agents.md#actions
/// </remarks>
/// <seealso cref="IActionReceiver.OnActionReceived"/>
void WriteDiscreteActionMask(IDiscreteActionMask actionMask);

2
com.unity.ml-agents/Runtime/Actuators/IDiscreteActionMask.cs


///
/// See [Agents - Actions] for more information on masking actions.
///
/// [Agents - Actions]: https://github.com/Unity-Technologies/ml-agents/blob/release_9_docs/docs/Learning-Environment-Design-Agents.md#actions
/// [Agents - Actions]: https://github.com/Unity-Technologies/ml-agents/blob/release_10_docs/docs/Learning-Environment-Design-Agents.md#actions
/// </remarks>
/// <param name="branch">The branch for which the actions will be masked.</param>
/// <param name="actionIndices">The indices of the masked actions.</param>

45
com.unity.ml-agents/Runtime/Agent.cs


/// * <see cref="BehaviorType.InferenceOnly"/>: decisions are always made using the trained
/// model specified in the <see cref="BehaviorParameters"/> component.
/// * <see cref="BehaviorType.HeuristicOnly"/>: when a decision is needed, the agent's
/// <see cref="Heuristic"/> function is called. Your implementation is responsible for
/// <see cref="Heuristic(in ActionBuffers)"/> function is called. Your implementation is responsible for
/// providing the appropriate action.
///
/// To trigger an agent decision automatically, you can attach a <see cref="DecisionRequester"/>

/// can only take an action when it touches the ground, so several frames might elapse between
/// one decision and the need for the next.
///
/// Use the <see cref="OnActionReceived(float[])"/> function to implement the actions your agent can take,
/// Use the <see cref="OnActionReceived(ActionBuffers)"/> function to implement the actions your agent can take,
/// such as moving to reach a goal or interacting with its environment.
///
/// When you call <see cref="EndEpisode"/> on an agent or the agent reaches its <see cref="MaxStep"/> count,

/// only use the [MonoBehaviour.Update] function for cosmetic purposes. If you override the [MonoBehaviour]
/// methods, [OnEnable()] or [OnDisable()], always call the base Agent class implementations.
///
/// You can implement the <see cref="Heuristic"/> function to specify agent actions using
/// You can implement the <see cref="Heuristic(in ActionBuffers)"/> function to specify agent actions using
/// your own heuristic algorithm. Implementing a heuristic function can be useful
/// for debugging. For example, you can use keyboard input to select agent actions in
/// order to manually control an agent's behavior.

/// [OnDisable()]: https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnDisable.html]
/// [OnBeforeSerialize()]: https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnBeforeSerialize.html
/// [OnAfterSerialize()]: https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnAfterSerialize.html
/// [Agents]: https://github.com/Unity-Technologies/ml-agents/blob/release_9_docs/docs/Learning-Environment-Design-Agents.md
/// [Reinforcement Learning in Unity]: https://github.com/Unity-Technologies/ml-agents/blob/release_9_docs/docs/Learning-Environment-Design.md
/// [Agents]: https://github.com/Unity-Technologies/ml-agents/blob/release_10_docs/docs/Learning-Environment-Design-Agents.md
/// [Reinforcement Learning in Unity]: https://github.com/Unity-Technologies/ml-agents/blob/release_10_docs/docs/Learning-Environment-Design.md
/// [Unity ML-Agents Toolkit manual]: https://github.com/Unity-Technologies/ml-agents/blob/release_9_docs/docs/Readme.md
/// [Unity ML-Agents Toolkit manual]: https://github.com/Unity-Technologies/ml-agents/blob/release_10_docs/docs/Readme.md
[HelpURL("https://github.com/Unity-Technologies/ml-agents/blob/release_9_docs/" +
[HelpURL("https://github.com/Unity-Technologies/ml-agents/blob/release_10_docs/" +
"docs/Learning-Environment-Design-Agents.md")]
[Serializable]
[RequireComponent(typeof(BehaviorParameters))]

/// <summary>
/// VectorActuator which is used by default if no other sensors exist on this Agent. This VectorSensor will
/// delegate its actions to <see cref="OnActionReceived(float[])"/> by default in order to keep backward compatibility
/// delegate its actions to <see cref="OnActionReceived(ActionBuffers)"/> by default in order to keep backward compatibility
/// with the current behavior of Agent.
/// </summary>
IActuator m_VectorActuator;

/// Use <see cref="AddReward(float)"/> to incrementally change the reward rather than
/// overriding it.
///
/// Typically, you assign rewards in the Agent subclass's <see cref="OnActionReceived(float[])"/>
/// Typically, you assign rewards in the Agent subclass's <see cref="OnActionReceived(ActionBuffers)"/>
/// implementation after carrying out the received action and evaluating its success.
///
/// Rewards are used during reinforcement learning; they are ignored during inference.

/// Imitation Learning (GAIL) with rewards supplied through this method.
///
/// [Agents - Rewards]: https://github.com/Unity-Technologies/ml-agents/blob/release_9_docs/docs/Learning-Environment-Design-Agents.md#rewards
/// [Reward Signals]: https://github.com/Unity-Technologies/ml-agents/blob/release_9_docs/docs/ML-Agents-Overview.md#a-quick-note-on-reward-signals
/// [Agents - Rewards]: https://github.com/Unity-Technologies/ml-agents/blob/release_10_docs/docs/Learning-Environment-Design-Agents.md#rewards
/// [Reward Signals]: https://github.com/Unity-Technologies/ml-agents/blob/release_10_docs/docs/ML-Agents-Overview.md#a-quick-note-on-reward-signals
/// </remarks>
/// <param name="reward">The new value of the reward.</param>
public void SetReward(float reward)

/// for information about mixing reward signals from curiosity and Generative Adversarial
/// Imitation Learning (GAIL) with rewards supplied through this method.
///
/// [Agents - Rewards]: https://github.com/Unity-Technologies/ml-agents/blob/release_9_docs/docs/Learning-Environment-Design-Agents.md#rewards
/// [Reward Signals]: https://github.com/Unity-Technologies/ml-agents/blob/release_9_docs/docs/ML-Agents-Overview.md#a-quick-note-on-reward-signals
/// [Agents - Rewards]: https://github.com/Unity-Technologies/ml-agents/blob/release_10_docs/docs/Learning-Environment-Design-Agents.md#rewards
/// [Reward Signals]: https://github.com/Unity-Technologies/ml-agents/blob/release_10_docs/docs/ML-Agents-Overview.md#a-quick-note-on-reward-signals
///</remarks>
/// <param name="increment">Incremental reward value.</param>
public void AddReward(float increment)

/// implementing a simple heuristic function can aid in debugging agent actions and interactions
/// with its environment.
///
/// [Demonstration Recorder]: https://github.com/Unity-Technologies/ml-agents/blob/release_9_docs/docs/Learning-Environment-Design-Agents.md#recording-demonstrations
/// [Actions]: https://github.com/Unity-Technologies/ml-agents/blob/release_9_docs/docs/Learning-Environment-Design-Agents.md#actions
/// [Demonstration Recorder]: https://github.com/Unity-Technologies/ml-agents/blob/release_10_docs/docs/Learning-Environment-Design-Agents.md#recording-demonstrations
/// [Actions]: https://github.com/Unity-Technologies/ml-agents/blob/release_10_docs/docs/Learning-Environment-Design-Agents.md#actions
/// [GameObject]: https://docs.unity3d.com/Manual/GameObjects.html
/// </remarks>
/// <example>

/// You can also use the [Input System package], which provides a more flexible and
/// configurable input system.
/// <code>
/// public override void Heuristic(ActionBuffers actionsOut)
/// public override void Heuristic(in ActionBuffers actionsOut)
/// actionsOut.ContinuousActions[0] = Input.GetAxis("Horizontal");
/// actionsOut.ContinuousActions[1] = Input.GetKey(KeyCode.Space) ? 1.0f : 0.0f;
/// actionsOut.ContinuousActions[2] = Input.GetAxis("Vertical");
/// var continuousActionsOut = actionsOut.ContinuousActions;
/// continuousActionsOut[0] = Input.GetAxis("Horizontal");
/// continuousActionsOut[1] = Input.GetKey(KeyCode.Space) ? 1.0f : 0.0f;
/// continuousActionsOut[2] = Input.GetAxis("Vertical");
/// }
/// </code>
/// [Input Manager]: https://docs.unity3d.com/Manual/class-InputManager.html

/// For more information about observations, see [Observations and Sensors].
///
/// [GameObject]: https://docs.unity3d.com/Manual/GameObjects.html
/// [Observations and Sensors]: https://github.com/Unity-Technologies/ml-agents/blob/release_9_docs/docs/Learning-Environment-Design-Agents.md#observations-and-sensors
/// [Observations and Sensors]: https://github.com/Unity-Technologies/ml-agents/blob/release_10_docs/docs/Learning-Environment-Design-Agents.md#observations-and-sensors
/// </remarks>
public virtual void CollectObservations(VectorSensor sensor)
{

///
/// See [Agents - Actions] for more information on masking actions.
///
/// [Agents - Actions]: https://github.com/Unity-Technologies/ml-agents/blob/release_9_docs/docs/Learning-Environment-Design-Agents.md#actions
/// [Agents - Actions]: https://github.com/Unity-Technologies/ml-agents/blob/release_10_docs/docs/Learning-Environment-Design-Agents.md#actions
/// </remarks>
/// <seealso cref="IActionReceiver.OnActionReceived"/>
public virtual void WriteDiscreteActionMask(IDiscreteActionMask actionMask)

///
/// For more information about implementing agent actions see [Agents - Actions].
///
/// [Agents - Actions]: https://github.com/Unity-Technologies/ml-agents/blob/release_9_docs/docs/Learning-Environment-Design-Agents.md#actions
/// [Agents - Actions]: https://github.com/Unity-Technologies/ml-agents/blob/release_10_docs/docs/Learning-Environment-Design-Agents.md#actions
/// </remarks>
/// <param name="actions">
/// Struct containing the buffers of actions to be executed at this step.

4
com.unity.ml-agents/Runtime/Agent.deprecated.cs


}
/// <summary>
/// This method passes in a float array that is to be populated with actions.
/// Deprecated, use <see cref="Heuristic(in ActionBuffers)"/> instead.
/// </summary>
/// <param name="actionsOut"></param>
public virtual void Heuristic(float[] actionsOut)

/// <returns>
/// The last action that was decided by the Agent (or null if no decision has been made).
/// </returns>
/// <seealso cref="OnActionReceived(float[])"/>
/// <seealso cref="OnActionReceived(ActionBuffers)"/>
// [Obsolete("GetAction has been deprecated, please use GetStoredActionBuffers, Or GetStoredDiscreteActions.")]
public float[] GetAction()
{

2
com.unity.ml-agents/Runtime/Demonstrations/DemonstrationRecorder.cs


/// See [Imitation Learning - Recording Demonstrations] for more information.
///
/// [GameObject]: https://docs.unity3d.com/Manual/GameObjects.html
/// [Imitation Learning - Recording Demonstrations]: https://github.com/Unity-Technologies/ml-agents/blob/release_9_docs/docs//Learning-Environment-Design-Agents.md#recording-demonstrations
/// [Imitation Learning - Recording Demonstrations]: https://github.com/Unity-Technologies/ml-agents/blob/release_10_docs/docs//Learning-Environment-Design-Agents.md#recording-demonstrations
/// </remarks>
[RequireComponent(typeof(Agent))]
[AddComponentMenu("ML Agents/Demonstration Recorder", (int)MenuGroup.Default)]

2
com.unity.ml-agents/Runtime/DiscreteActionMasker.cs


///
/// See [Agents - Actions] for more information on masking actions.
///
/// [Agents - Actions]: https://github.com/Unity-Technologies/ml-agents/blob/release_9_docs/docs/Learning-Environment-Design-Agents.md#actions
/// [Agents - Actions]: https://github.com/Unity-Technologies/ml-agents/blob/release_10_docs/docs/Learning-Environment-Design-Agents.md#actions
/// </remarks>
/// <param name="branch">The branch for which the actions will be masked.</param>
/// <param name="actionIndices">The indices of the masked actions.</param>

4
com.unity.ml-agents/Runtime/Sensors/ObservationWriter.cs


}
}
/// <summary>
/// Provides extension methods for the ObservationWriter.
/// </summary>
/// <summary>
/// Writes a Texture2D into a ObservationWriter.
/// </summary>

2
com.unity.ml-agents/package.json


{
"name": "com.unity.ml-agents",
"displayName": "ML Agents",
"version": "1.5.0-preview",
"version": "1.6.0-preview",
"unity": "2018.4",
"description": "Use state-of-the-art machine learning to create intelligent character behaviors in any Unity environment (games, robotics, film, etc.).",
"dependencies": {

2
config/ppo/SoccerTwos.yaml


max_steps: 50000000
time_horizon: 1000
summary_freq: 10000
threaded: true
threaded: false
self_play:
save_steps: 50000
team_change: 200000

4
config/ppo/StrikersVsGoalie.yaml


max_steps: 30000000
time_horizon: 1000
summary_freq: 10000
threaded: true
threaded: false
self_play:
save_steps: 50000
team_change: 200000

max_steps: 30000000
time_horizon: 1000
summary_freq: 10000
threaded: true
threaded: false
self_play:
save_steps: 50000
team_change: 200000

2
config/ppo/Tennis.yaml


max_steps: 50000000
time_horizon: 1000
summary_freq: 10000
threaded: true
threaded: false
self_play:
save_steps: 50000
team_change: 100000

4
docs/Installation-Anaconda-Windows.md


the ml-agents Conda environment by typing `activate ml-agents`)_:
```sh
git clone --branch release_9 https://github.com/Unity-Technologies/ml-agents.git
git clone --branch release_10 https://github.com/Unity-Technologies/ml-agents.git
The `--branch release_9` option will switch to the tag of the latest stable
The `--branch release_10` option will switch to the tag of the latest stable
release. Omitting that will get the `master` branch which is potentially
unstable.

6
docs/Installation.md


of our tutorials / guides assume you have access to our example environments).
```sh
git clone --branch release_9 https://github.com/Unity-Technologies/ml-agents.git
git clone --branch release_10 https://github.com/Unity-Technologies/ml-agents.git
The `--branch release_9` option will switch to the tag of the latest stable
The `--branch release_10` option will switch to the tag of the latest stable
release. Omitting that will get the `master` branch which is potentially
unstable.

ML-Agents Toolkit for your purposes. If you plan to contribute those changes
back, make sure to clone the `master` branch (by omitting `--branch release_9`
back, make sure to clone the `master` branch (by omitting `--branch release_10`
from the command above). See our
[Contributions Guidelines](../com.unity.ml-agents/CONTRIBUTING.md) for more
information on contributing to the ML-Agents Toolkit.

4
docs/Learning-Environment-Design.md


important to ensure that your environment parameters are updated at each step to
the correct values. To enable this, we expose a `EnvironmentParameters` C# class
that you can use to retrieve the values of the parameters defined in the
training configurations for both of those features.
training configurations for both of those features. Please see our
[documentation](Training-ML-Agents.md#environment-parameters)
for curriculum learning and environment parameter randomization for details.
We recommend modifying the environment from the Agent's `OnEpisodeBegin()`
function by leveraging `Academy.Instance.EnvironmentParameters`. See the

1
docs/Learning-Environment-Examples.md


- Benchmark Mean Reward: 1.75
## Match 3
![Match 3](images/match3.png)
- Set-up: Simple match-3 game. Matched pieces are removed, and remaining pieces

62
docs/Training-ML-Agents.md


where
- `<trainer-config-file>` is the file path of the trainer configuration yaml.
- `<trainer-config-file>` is the file path of the trainer configuration YAML.
This contains all the hyperparameter values. We offer a detailed guide on the
structure of this file and the meaning of the hyperparameters (and advice on
how to set them) in the dedicated

- `<trainer-config-file>`: defines the training hyperparameters for each
Behavior in the scene, and the set-ups for the environment parameters
(Curriculum Learning and Environment Parameter Randomization)
- `--num-envs`: number of concurrent Unity instances to use during training
Reminder that a detailed description of all command-line options can be found by
using the help utility:
```sh
mlagents-learn --help
```
It is important to highlight that successfully training a Behavior in the
ML-Agents Toolkit involves tuning the training hyperparameters and

demonstrations.)
- Use self-play? (Assuming your environment includes multiple agents.)
The trainer config file, `<trainer-config-file>`, determines the features you will
use during training, and the answers to the above questions will dictate its contents.
The rest of this guide breaks down the different sub-sections of the trainer config file

an old set of configuration files (trainer config, curriculum, and sampler files) to the new
format, a script has been provided. Run `python -m mlagents.trainers.upgrade_config -h` in your
console to see the script's usage.
### Adding CLI Arguments to the Training Configuration file
Additionally, within the training configuration YAML file, you can also add the
CLI arguments (such as `--num-envs`).
Reminder that a detailed description of all the CLI arguments can be found by
using the help utility:
```sh
mlagents-learn --help
```
These additional CLI arguments are grouped into environment, engine and checkpoint. The available settings and example values are shown below.
#### Environment settings
```yaml
env_settings:
env_path: FoodCollector
env_args: null
base_port: 5005
num_envs: 1
seed: -1
```
#### Engine settings
```yaml
engine_settings:
width: 84
height: 84
quality_level: 5
time_scale: 20
target_frame_rate: -1
capture_frame_rate: 60
no_graphics: false
```
#### Checkpoint settings
```yaml
checkpoint_settings:
run_id: foodtorch
initialize_from: null
load_model: false
resume: false
force: true
train_model: false
inference: false
```
### Behavior Configurations

2
docs/Training-on-Amazon-Web-Service.md


2. Clone the ML-Agents repo and install the required Python packages
```sh
git clone --branch release_9 https://github.com/Unity-Technologies/ml-agents.git
git clone --branch release_10 https://github.com/Unity-Technologies/ml-agents.git
cd ml-agents/ml-agents/
pip3 install -e .
```

4
docs/Unity-Inference-Engine.md


loading expects certain conventions for constants and tensor names. While it is
possible to construct a model that follows these conventions, we don't provide
any additional help for this. More details can be found in
[TensorNames.cs](https://github.com/Unity-Technologies/ml-agents/blob/release_9_docs/com.unity.ml-agents/Runtime/Inference/TensorNames.cs)
[TensorNames.cs](https://github.com/Unity-Technologies/ml-agents/blob/release_10_docs/com.unity.ml-agents/Runtime/Inference/TensorNames.cs)
[BarracudaModelParamLoader.cs](https://github.com/Unity-Technologies/ml-agents/blob/release_9_docs/com.unity.ml-agents/Runtime/Inference/BarracudaModelParamLoader.cs).
[BarracudaModelParamLoader.cs](https://github.com/Unity-Technologies/ml-agents/blob/release_10_docs/com.unity.ml-agents/Runtime/Inference/BarracudaModelParamLoader.cs).
If you wish to run inference on an externally trained model, you should use
Barracuda directly, instead of trying to run it through ML-Agents.

999
docs/images/match3.png
文件差异内容过多而无法显示
查看文件

2
gym-unity/gym_unity/__init__.py


# Version of the library that will be used to upload to pypi
__version__ = "0.22.0.dev0"
__version__ = "0.23.0.dev0"
# Git tag that will be checked to determine whether to trigger upload to pypi
__release_tag__ = None

4
gym-unity/gym_unity/tests/test_gym.py


assert isinstance(done, (bool, np.bool_))
assert isinstance(info, dict)
# check behaviour for allow_multiple_obs = False
# check behavior for allow_multiple_obs = False
env = UnityToGymWrapper(mock_env, uint8_visual=use_uint8, allow_multiple_obs=False)
assert isinstance(env, UnityToGymWrapper)
assert isinstance(env.observation_space, spaces.Box)

assert isinstance(done, (bool, np.bool_))
assert isinstance(info, dict)
# check behaviour for allow_multiple_obs = False
# check behavior for allow_multiple_obs = False
env = UnityToGymWrapper(mock_env, uint8_visual=use_uint8, allow_multiple_obs=False)
assert isinstance(env, UnityToGymWrapper)
assert isinstance(env.observation_space, spaces.Box)

2
ml-agents-envs/mlagents_envs/__init__.py


# Version of the library that will be used to upload to pypi
__version__ = "0.22.0.dev0"
__version__ = "0.23.0.dev0"
# Git tag that will be checked to determine whether to trigger upload to pypi
__release_tag__ = None

2
ml-agents/mlagents/trainers/__init__.py


# Version of the library that will be used to upload to pypi
__version__ = "0.22.0.dev0"
__version__ = "0.23.0.dev0"
# Git tag that will be checked to determine whether to trigger upload to pypi
__release_tag__ = None

3
ml-agents/mlagents/trainers/action_info.py


class ActionInfo(NamedTuple):
action: Any
env_action: Any
value: Any
outputs: ActionInfoOutputs
agent_ids: List[AgentId]

return ActionInfo([], [], {}, [])
return ActionInfo([], [], [], {}, [])

5
ml-agents/mlagents/trainers/agent_processor.py


continuous=stored_actions.continuous[idx],
discrete=stored_actions.discrete[idx],
)
if self.policy.use_continuous_act:
action_pre = stored_take_action_outputs["pre_action"][idx]
else:
action_pre = None
stored_action_probs = stored_take_action_outputs["log_probs"]
log_probs_tuple = LogProbsTuple(
continuous=stored_action_probs.continuous[idx],

done=done,
action=action_tuple,
action_probs=log_probs_tuple,
action_pre=action_pre,
action_mask=action_mask,
prev_action=prev_action,
interrupted=interrupted,

14
ml-agents/mlagents/trainers/policy/policy.py


) -> ActionInfo:
raise NotImplementedError
@staticmethod
def check_nan_action(action: Optional[ActionTuple]) -> None:
# Fast NaN check on the action
# See https://stackoverflow.com/questions/6736590/fast-check-for-nan-in-numpy for background.
if action is not None:
d = np.sum(action.continuous)
has_nan = np.isnan(d)
if has_nan:
raise RuntimeError("Continuous NaN action detected.")
d = np.sum(action.discrete)
has_nan = np.isnan(d)
if has_nan:
raise RuntimeError("Discrete NaN action detected.")
@abstractmethod
def update_normalization(self, vector_obs: np.ndarray) -> None:
pass

8
ml-agents/mlagents/trainers/policy/tf_policy.py


run_out["log_probs"] = log_probs_tuple
if "action" in run_out:
action_tuple = ActionTuple()
env_action_tuple = ActionTuple()
action_tuple.add_continuous(run_out["action"])
action_tuple.add_continuous(run_out["pre_action"])
env_action_tuple.add_continuous(run_out["action"])
env_action_tuple.add_discrete(run_out["action"])
run_out["env_action"] = env_action_tuple
self.check_nan_action(run_out.get("action"))
env_action=run_out.get("env_action"),
value=run_out.get("value"),
outputs=run_out,
agent_ids=decision_requests.agent_id,

10
ml-agents/mlagents/trainers/policy/torch_policy.py


self.m_size = self.actor_critic.memory_size
self.actor_critic.to(default_device())
self._clip_action = not tanh_squash
@property
def export_memory_size(self) -> int:

)
action_tuple = action.to_action_tuple()
run_out["action"] = action_tuple
run_out["pre_action"] = (
action_tuple.continuous if self.use_continuous_act else None
)
# This is the clipped action which is not saved to the buffer
# but is exclusively sent to the environment.
env_action_tuple = action.to_action_tuple(clip=self._clip_action)
run_out["env_action"] = env_action_tuple
run_out["log_probs"] = log_probs.to_log_probs_tuple()
run_out["entropy"] = ModelUtils.to_numpy(entropy)
run_out["learning_rate"] = 0.0

decision_requests, global_agent_ids
) # pylint: disable=assignment-from-no-return
self.save_memories(global_agent_ids, run_out.get("memory_out"))
self.check_nan_action(run_out.get("action"))
env_action=run_out.get("env_action"),
value=run_out.get("value"),
outputs=run_out,
agent_ids=list(decision_requests.agent_id),

14
ml-agents/mlagents/trainers/ppo/optimizer_tf.py


if self.policy.use_continuous_act: # For hybrid action buffer support
feed_dict[self.all_old_log_probs] = mini_batch["continuous_log_probs"]
feed_dict[self.policy.output_pre] = mini_batch["continuous_action"]
if self.policy.output_pre is not None and "actions_pre" in mini_batch:
feed_dict[self.policy.output_pre] = mini_batch["actions_pre"]
else:
if self.policy.use_continuous_act: # For hybrid action buffer support
feed_dict[self.policy.output] = mini_batch["continuous_action"]
else:
feed_dict[self.policy.output] = mini_batch["discrete_action"]
if self.policy.use_recurrent:
feed_dict[self.policy.prev_action] = mini_batch["prev_action"]
feed_dict[self.policy.output] = mini_batch["discrete_action"]
if self.policy.use_recurrent:
feed_dict[self.policy.prev_action] = mini_batch["prev_action"]
feed_dict[self.policy.action_masks] = mini_batch["action_mask"]
if "vector_obs" in mini_batch:
feed_dict[self.policy.vector_in] = mini_batch["vector_obs"]

2
ml-agents/mlagents/trainers/ppo/trainer.py


behavior_spec,
self.trainer_settings,
condition_sigma_on_obs=False, # Faster training for PPO
separate_critic=behavior_spec.action_spec.continuous_size > 0,
separate_critic=True, # Match network architecture with TF
)
return policy

2
ml-agents/mlagents/trainers/sac/optimizer_torch.py


self.target_network.network_body.copy_normalization(
self.policy.actor_critic.network_body
)
(sampled_actions, log_probs, _, _) = self.policy.sample_actions(
(sampled_actions, _, log_probs, _, _) = self.policy.sample_actions(
vec_obs,
vis_obs,
masks=act_masks,

2
ml-agents/mlagents/trainers/simple_env_manager.py


self.previous_all_action_info = all_action_info
for brain_name, action_info in all_action_info.items():
self.env.set_actions(brain_name, action_info.action)
self.env.set_actions(brain_name, action_info.env_action)
self.env.step()
all_step_result = self._generate_all_results()

6
ml-agents/mlagents/trainers/stats.py


def write_stats(
self, category: str, values: Dict[str, StatsSummary], step: int
) -> None:
is_training = "Not Training."
is_training = "Not Training"
is_training = "Training."
is_training = "Training"
elapsed_time = time.time() - self.training_start_time
log_info: List[str] = [category]

else:
log_info.append("No episode was completed since last summary")
log_info.append(is_training)
logger.info(". ".join(log_info))
logger.info(". ".join(log_info) + ".")
def add_property(
self, category: str, property_type: StatsPropertyType, value: Any

2
ml-agents/mlagents/trainers/subprocess_env_manager.py


all_action_info = req.payload
for brain_name, action_info in all_action_info.items():
if len(action_info.agent_ids) > 0:
env.set_actions(brain_name, action_info.action)
env.set_actions(brain_name, action_info.env_action)
env.step()
all_step_result = _generate_all_results()
# The timers in this process are independent from all the processes and the "main" process

3
ml-agents/mlagents/trainers/tests/mock_brain.py


continuous=np.ones(action_spec.continuous_size, dtype=np.float32),
discrete=np.ones(action_spec.discrete_size, dtype=np.float32),
)
action_pre = np.zeros(action_size, dtype=np.float32)
action_mask = (
[
[False for _ in range(branch)]

done=done,
action=action,
action_probs=action_probs,
action_pre=action_pre,
action_mask=action_mask,
prev_action=prev_action,
interrupted=max_step,

done=not max_step_complete,
action=action,
action_probs=action_probs,
action_pre=action_pre,
action_mask=action_mask,
prev_action=prev_action,
interrupted=max_step_complete,

20
ml-agents/mlagents/trainers/tests/tensorflow/test_nn_policy.py


enc_func(vis_input, 32, ModelUtils.swish, 1, "test", False)
def test_step_overflow():
behavior_spec = mb.setup_test_behavior_specs(
use_discrete=True, use_visual=False, vector_action_space=[2], vector_obs_space=1
)
policy = TFPolicy(
0,
behavior_spec,
TrainerSettings(network_settings=NetworkSettings(normalize=True)),
create_tf_graph=False,
)
policy.create_input_placeholders()
policy.initialize()
policy.set_step(2 ** 31 - 1)
assert policy.get_current_step() == 2 ** 31 - 1
policy.increment_step(3)
assert policy.get_current_step() == 2 ** 31 + 2
if __name__ == "__main__":
pytest.main()

8
ml-agents/mlagents/trainers/tests/torch/test_policy.py


if rnn:
assert memories.shape == (1, 1, policy.m_size)
def test_step_overflow():
policy = create_policy_mock(TrainerSettings())
policy.set_step(2 ** 31 - 1)
assert policy.get_current_step() == 2 ** 31 - 1 # step = 2147483647
policy.increment_step(3)
assert policy.get_current_step() == 2 ** 31 + 2 # step = 2147483650

2
ml-agents/mlagents/trainers/tests/torch/test_reward_providers/test_curiosity.py


buffer = create_agent_buffer(behavior_spec, 5)
curiosity_rp.update(buffer)
reward_old = curiosity_rp.evaluate(buffer)[0]
for _ in range(10):
for _ in range(20):
curiosity_rp.update(buffer)
reward_new = curiosity_rp.evaluate(buffer)[0]
assert reward_new < reward_old

2
ml-agents/mlagents/trainers/tests/torch/test_simple_rl.py


PPO_TORCH_CONFIG,
hyperparameters=new_hyperparams,
network_settings=new_network_settings,
max_steps=5000,
max_steps=6000,
)
check_environment_trains(env, {BRAIN_NAME: config}, success_threshold=0.9)

8
ml-agents/mlagents/trainers/tf/models.py


def create_global_steps():
"""Creates TF ops to track and increment global training step."""
global_step = tf.Variable(
0, name="global_step", trainable=False, dtype=tf.int32
0, name="global_step", trainable=False, dtype=tf.int64
shape=[], dtype=tf.int32, name="steps_to_increment"
shape=[], dtype=tf.int64, name="steps_to_increment"
)
increment_step = tf.assign(global_step, tf.add(global_step, steps_to_increment))
return global_step, increment_step, steps_to_increment

"normalization_steps",
[],
trainable=False,
dtype=tf.int32,
dtype=tf.int64,
initializer=tf.zeros_initializer(),
)
running_mean = tf.get_variable(

# Based on Welford's algorithm for running mean and standard deviation, for batch updates. Discussion here:
# https://stackoverflow.com/questions/56402955/whats-the-formula-for-welfords-algorithm-for-variance-std-with-batch-updates
steps_increment = tf.shape(vector_input)[0]
total_new_steps = tf.add(steps, steps_increment)
total_new_steps = tf.add(steps, tf.cast(steps_increment, dtype=tf.int64))
# Compute the incremental update and divide by the number of new steps.
input_to_old_mean = tf.subtract(vector_input, running_mean)

2
ml-agents/mlagents/trainers/tf/tensorflow_to_barracuda.py


data = tensor.float_val
if tensor.int_val:
data = np.array(tensor.int_val, dtype=float)
if tensor.int64_val:
data = np.array(tensor.int64_val, dtype=float)
if tensor.bool_val:
data = np.array(tensor.bool_val, dtype=float)
return np.array(data).reshape(dims)

6
ml-agents/mlagents/trainers/torch/action_model.py


self.encoding_size, self.action_spec.discrete_branches
)
# During training, clipping is done in TorchPolicy, but we need to clip before ONNX
# export as well.
self._clip_action_on_export = not tanh_squash
def _sample_action(self, dists: DistInstances) -> AgentAction:
"""
Samples actions from a DistInstances tuple

# This checks None because mypy complains otherwise
if dists.continuous is not None:
continuous_action = dists.continuous.sample()
if self._clip_action_on_export:
continuous_action = torch.clamp(continuous_action, -3, 3) / 3
if dists.discrete is not None:
discrete_action = []
for discrete_dist in dists.discrete:

7
ml-agents/mlagents/trainers/torch/agent_action.py


"""
return torch.stack(self.discrete_list, dim=-1)
def to_action_tuple(self) -> ActionTuple:
def to_action_tuple(self, clip: bool = False) -> ActionTuple:
continuous = ModelUtils.to_numpy(self.continuous_tensor)
_continuous_tensor = self.continuous_tensor
if clip:
_continuous_tensor = torch.clamp(_continuous_tensor, -3, 3) / 3
continuous = ModelUtils.to_numpy(_continuous_tensor)
action_tuple.add_continuous(continuous)
if self.discrete_list is not None:
discrete = ModelUtils.to_numpy(self.discrete_tensor[:, 0, :])

2
ml-agents/mlagents/trainers/torch/components/bc/module.py


# Don't continue training if the learning rate has reached 0, to reduce training time.
decay_lr = self.decay_learning_rate.get_value(self.policy.get_current_step())
if self.current_lr <= 0:
if self.current_lr <= 1e-10: # Unlike in TF, this never actually reaches 0.
return {"Losses/Pretraining Loss": 0}
batch_losses = []

29
ml-agents/mlagents/trainers/torch/distributions.py


return torch.exp(log_prob)
def entropy(self):
return 0.5 * torch.log(2 * math.pi * math.e * self.std + EPSILON)
return torch.mean(
0.5 * torch.log(2 * math.pi * math.e * self.std + EPSILON),
dim=1,
keepdim=True,
) # Use equivalent behavior to TF
def exported_model_output(self):
return self.sample()

).squeeze(-1)
def log_prob(self, value):
return torch.log(self.pdf(value))
return torch.log(self.pdf(value) + EPSILON)
return torch.log(self.probs)
return torch.log(self.probs + EPSILON)
return -torch.sum(self.probs * torch.log(self.probs), dim=-1).unsqueeze(-1)
return -torch.sum(
self.probs * torch.log(self.probs + EPSILON), dim=-1
).unsqueeze(-1)
def exported_model_output(self):
return self.all_log_prob()

hidden_size,
num_outputs,
kernel_init=Initialization.KaimingHeNormal,
kernel_gain=0.1,
kernel_gain=0.2,
bias_init=Initialization.Zero,
)
self.tanh_squash = tanh_squash

num_outputs,
kernel_init=Initialization.KaimingHeNormal,
kernel_gain=0.1,
kernel_gain=0.2,
bias_init=Initialization.Zero,
)
else:

return nn.ModuleList(branches)
def _mask_branch(self, logits: torch.Tensor, mask: torch.Tensor) -> torch.Tensor:
raw_probs = torch.nn.functional.softmax(logits, dim=-1) * mask
normalized_probs = raw_probs / torch.sum(raw_probs, dim=-1).unsqueeze(-1)
normalized_logits = torch.log(normalized_probs + EPSILON)
return normalized_logits
# Zero out masked logits, then subtract a large value. Technique mentionend here:
# https://arxiv.org/abs/2006.14171. Our implementation is ONNX and Barrcuda-friendly.
flipped_mask = 1.0 - mask
adj_logits = logits * mask - 1e8 * flipped_mask
probs = torch.nn.functional.softmax(adj_logits, dim=-1)
log_probs = torch.log(probs + EPSILON)
return log_probs
def _split_masks(self, masks: torch.Tensor) -> List[torch.Tensor]:
split_masks = []

8
ml-agents/mlagents/trainers/torch/encoders.py


self.final_flat,
self.h_size,
kernel_init=Initialization.KaimingHeNormal,
kernel_gain=1.0,
kernel_gain=1.41, # Use ReLU gain
),
nn.LeakyReLU(),
)

self.final_flat,
self.h_size,
kernel_init=Initialization.KaimingHeNormal,
kernel_gain=1.0,
kernel_gain=1.41, # Use ReLU gain
),
nn.LeakyReLU(),
)

self.final_flat,
self.h_size,
kernel_init=Initialization.KaimingHeNormal,
kernel_gain=1.0,
kernel_gain=1.41, # Use ReLU gain
),
nn.LeakyReLU(),
)

n_channels[-1] * height * width,
output_size,
kernel_init=Initialization.KaimingHeNormal,
kernel_gain=1.0,
kernel_gain=1.41, # Use ReLU gain
)
self.sequential = nn.Sequential(*layers)

12
ml-agents/mlagents/trainers/torch/layers.py


:param output_size: The size of the output tensor
:param kernel_init: The Initialization to use for the weights of the layer
:param kernel_gain: The multiplier for the weights of the kernel. Note that in
TensorFlow, calling variance_scaling with scale 0.01 is equivalent to calling
KaimingHeNormal with kernel_gain of 0.1
TensorFlow, the gain is square-rooted. Therefore calling with scale 0.01 is equivalent to calling
KaimingHeNormal with kernel_gain of 0.1
_init_methods[kernel_init](layer.weight.data)
if (
kernel_init == Initialization.KaimingHeNormal
or kernel_init == Initialization.KaimingHeUniform
):
_init_methods[kernel_init](layer.weight.data, nonlinearity="linear")
else:
_init_methods[kernel_init](layer.weight.data)
layer.weight.data *= kernel_gain
_init_methods[bias_init](layer.bias.data)
return layer

10
ml-agents/mlagents/trainers/torch/model_serialization.py


import os
import threading
from mlagents.torch_utils import torch

This implementation is thread safe.
"""
# local is_exporting flag for each thread
# global lock shared among all threads, to make sure only one thread is exporting at a time
_lock = threading.Lock()
self._lock.acquire()
self._lock.release()
@staticmethod
def is_exporting():

:param output_filepath: file path to output the model (without file suffix)
"""
if not os.path.exists(output_filepath):
os.makedirs(output_filepath)
onnx_output_path = f"{output_filepath}.onnx"
logger.info(f"Converting to {onnx_output_path}")

5
ml-agents/mlagents/trainers/torch/networks.py


vec_inputs, vis_inputs, memories=memories, sequence_length=1
)
# TODO: How this is written depends on how the inference model is structured
action_out = self.action_model.get_action_out(encoding, masks)
return (
action_out,

class GlobalSteps(nn.Module):
def __init__(self):
super().__init__()
self.__global_step = nn.Parameter(torch.Tensor([0]), requires_grad=False)
self.__global_step = nn.Parameter(
torch.Tensor([0]).to(torch.int64), requires_grad=False
)
@property
def current_step(self):

4
ml-agents/mlagents/trainers/trajectory.py


done: bool
action: ActionTuple
action_probs: LogProbsTuple
action_pre: np.ndarray # TODO: Remove this
action_mask: np.ndarray
prev_action: np.ndarray
interrupted: bool

agent_buffer_trajectory["masks"].append(1.0)
agent_buffer_trajectory["done"].append(exp.done)
# Add the outputs of the last eval
if exp.action_pre is not None:
agent_buffer_trajectory["actions_pre"].append(exp.action_pre)
# Adds the log prob and action of continuous/discrete separately
agent_buffer_trajectory["continuous_action"].append(exp.action.continuous)

1
utils/make_readme_table.py


ReleaseInfo("release_7", "1.4.0", "0.20.0", "September 16, 2020"),
ReleaseInfo("release_8", "1.5.0", "0.21.0", "October 14, 2020"),
ReleaseInfo("release_9", "1.5.0", "0.21.1", "November 4, 2020"),
ReleaseInfo("release_10", "1.6.0", "0.22.0", "November 18, 2020"),
]
MAX_DAYS = 150 # do not print releases older than this many days

8
Project/Assets/ML-Agents/Examples/Match3/Prefabs/FBX.meta


fileFormatVersion: 2
guid: 8efb383f54b1f4f7b96462405d5ae237
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
Project/Assets/ML-Agents/Examples/Match3/Prefabs/Tiles.meta


fileFormatVersion: 2
guid: 60b08aed5b3594e3692ec97dd72c0fdb
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

57
Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3TileSelector.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Match3TileSelector : MonoBehaviour
{
public GameObject emptyTile;
public GameObject[] tileTypes = new GameObject[0];
public Material[] materialTypes = new Material[0];
private Dictionary<int, MeshRenderer> tileDict = new Dictionary<int, MeshRenderer>();
// Start is called before the first frame update
void Awake()
{
for (int i = 0; i < tileTypes.Length; i++)
{
tileDict.Add(i, tileTypes[i].GetComponent<MeshRenderer>());
}
SetActiveTile(0, 0);
}
public void AllTilesOff()
{
foreach (var item in tileTypes)
{
item.SetActive(false);
}
}
public void SetActiveTile(int typeIndex, int matIndex)
{
if (matIndex == -1)
{
AllTilesOff();
emptyTile.SetActive(true);
return;
}
else
{
emptyTile.SetActive(false);
for (int i = 0; i < tileTypes.Length; i++)
{
if (i == typeIndex)
{
tileTypes[i].SetActive(true);
tileDict[i].sharedMaterial = materialTypes[matIndex];
}
else
{
tileTypes[i].SetActive(false);
}
}
}
}
}

11
Project/Assets/ML-Agents/Examples/Match3/Scripts/Match3TileSelector.cs.meta


fileFormatVersion: 2
guid: 52e0f5ebc9d8f4b3a895401959671896
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

81
Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LightGrey.mat


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: LightGrey
m_Shader: {fileID: 47, guid: 0000000000000000f000000000000000, type: 0}
m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF _SPECULARHIGHLIGHTS_OFF
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 1
- _Glossiness: 0.5
- _GlossyReflections: 0
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 0
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 0.6, g: 0.6, b: 0.6, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}

8
Project/Assets/ML-Agents/Examples/SharedAssets/Materials/LightGrey.mat.meta


fileFormatVersion: 2
guid: 6fdf8e49597ff42648c9e99d7ecfc005
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:

1001
com.unity.ml-agents.extensions/Documentation~/images/match3.png
文件差异内容过多而无法显示
查看文件

45
Project/Assets/ML-Agents/Examples/Match3/Prefabs/FBX/3.fbx


Kaydara FBX Binary �_FBXHeaderExtension\FBXHeaderVersionI�x
FBXVersionI��EncryptionTypeI�CreationTimeStamp�VersionI��YearI��MonthI DayI'HourI?MinuteIWSecondIt MillisecondI1�4CreatorS/Blender (stable FBX IO) - 2.79 (sub 0) - 3.7.13R' SceneInfoSGlobalInfoSceneInfoSUserData$ TypeSUserData=VersionId MetaDatakVersionId�TitleS�SubjectS�AuthorS�KeywordsS�RevisionSCommentSE Properties70m9PS DocumentUrlSKStringSUrlSS /foobar.fbx�<PSSrcDocumentUrlSKStringSUrlSS /foobar.fbx�$PSOriginalSCompoundSSCLPSOriginal|ApplicationVendorSKStringSSSBlender Foundation�OPSOriginal|ApplicationNameSKStringSSSBlender (stable FBX IO)�GPSOriginal|ApplicationVersionSKStringSSS 2.79 (sub 0)PMPSOriginal|DateTime_GMTSDateTimeSSS01/01/1970 00:00:00.000�<PSOriginal|FileNameSKStringSSS /foobar.fbx�%PS LastSavedSCompoundSS(MPSLastSaved|ApplicationVendorSKStringSSSBlender Foundation�PPSLastSaved|ApplicationNameSKStringSSSBlender (stable FBX IO)�HPSLastSaved|ApplicationVersionSKStringSSS 2.79 (sub 0)8NPSLastSaved|DateTime_GMTSDateTimeSSS01/01/1970 00:00:00.000�FileIdR(�*��$�¿Ȱ*�+��� CreationTimeS1970-01-01 10:00:00:0004CreatorS/Blender (stable FBX IO) - 2.79 (sub 0) - 3.7.13� GlobalSettings8VersionI�u Properties70�)PSUpAxisSintSIntegerSI�-PS
UpAxisSignSintSIntegerSI�,PS FrontAxisSintSIntegerSI; 0PS FrontAxisSignSintSIntegerSIu ,PS CoordAxisSintSIntegerSI� 0PS CoordAxisSignSintSIntegerSI� 1PSOriginalUpAxisSintSIntegerSI����5
5PSOriginalUpAxisSignSintSIntegerSI{
8PSUnitScaleFactorSdoubleSNumberSD�?�
@PSOriginalUnitScaleFactorSdoubleSNumberSD�? HPS AmbientColorSColorRGBSColorSDDDn APS DefaultCameraSKStringSSSProducer Perspective� %PSTimeModeSenumSSI � 3PS TimeSpanStartSKTimeSTimeSL" 2PS TimeSpanStopSKTimeSTimeSL����
h 8PSCustomFrameRateSdoubleSNumberSD8@� Documents� CountI� DocumentL��$SSceneSScene| Properties70. &PS SourceObjectSobjectSSo 3PSActiveAnimStackNameSKStringSSS�  RootNodeL�
Referencesd$ Definitions VersionId CountIn
ObjectTypeSGlobalSettingsaCountI�
ObjectTypeSGeometry�CountI� PropertyTemplateSFbxMesh� Properties70:APSColorSColorRGBSColorSD�������?D�������?D�������?�DPSBBoxMinSVector3DSVectorSDDD�DPSBBoxMaxSVector3DSVectorSDDD/PSPrimary VisibilitySboolSSIS*PS Casts ShadowsSboolSSI�,PSReceive ShadowsSboolSSIW$
ObjectTypeSModel�CountIJ$ PropertyTemplateSFbxNode=$ Properties70n2PSQuaternionInterpolateSenumSSI�KPSRotationOffsetSVector3DSVectorSDDDJPS RotationPivotSVector3DSVectorSDDDwJPS ScalingOffsetSVector3DSVectorSDDD�IPS ScalingPivotSVector3DSVectorSDDD
.PSTranslationActiveSboolSSIcKPSTranslationMinSVector3DSVectorSDDD�KPSTranslationMaxSVector3DSVectorSDDD�,PSTranslationMinXSboolSSI0,PSTranslationMinYSboolSSIj,PSTranslationMinZSboolSSI�,PSTranslationMaxXSboolSSI�,PSTranslationMaxYSboolSSI,PSTranslationMaxZSboolSSIP*PS RotationOrderSenumSSI�6PSRotationSpaceForLimitOnlySboolSSI�;PSRotationStiffnessXSdoubleSNumberSD&;PSRotationStiffnessYSdoubleSNumberSDo;PSRotationStiffnessZSdoubleSNumberSD�0PSAxisLenSdoubleSNumberSD$@HPS PreRotationSVector3DSVectorSDDDZIPS PostRotationSVector3DSVectorSDDD�+PSRotationActiveSboolSSI�HPS RotationMinSVector3DSVectorSDDD?HPS RotationMaxSVector3DSVectorSDDDv)PS RotationMinXSboolSSI�)PS RotationMinYSboolSSI�)PS RotationMinZSboolSSI)PS RotationMaxXSboolSSIR)PS RotationMaxYSboolSSI�)PS RotationMaxZSboolSSI�(PS InheritTypeSenumSSI�*PS ScalingActiveSboolSSILGPS
ScalingMinSVector3DSVectorSDDD�GPS
ScalingMaxSVector3DSVectorSD�?D�?D�?�(PS ScalingMinXSboolSSI (PS ScalingMinYSboolSSIC(PS ScalingMinZSboolSSIy(PS ScalingMaxXSboolSSI�(PS ScalingMaxYSboolSSI�(PS ScalingMaxZSboolSSIDQPSGeometricTranslationSVector3DSVectorSDDD�NPSGeometricRotationSVector3DSVectorSDDD�MPSGeometricScalingSVector3DSVectorSD�?D�?D�??6PS MinDampRangeXSdoubleSNumberSD�6PS MinDampRangeYSdoubleSNumberSD�6PS MinDampRangeZSdoubleSNumberSD 6PS MaxDampRangeXSdoubleSNumberSDO6PS MaxDampRangeYSdoubleSNumberSD�6PS MaxDampRangeZSdoubleSNumberSD�9PSMinDampStrengthXSdoubleSNumberSD!9PSMinDampStrengthYSdoubleSNumberSDh9PSMinDampStrengthZSdoubleSNumberSD�9PSMaxDampStrengthXSdoubleSNumberSD�9PSMaxDampStrengthYSdoubleSNumberSD= 9PSMaxDampStrengthZSdoubleSNumberSD� 7PSPreferedAngleXSdoubleSNumberSD� 7PSPreferedAngleYSdoubleSNumberSD !7PSPreferedAngleZSdoubleSNumberSDB!(PSLookAtPropertySobjectSSz!*PSUpVectorPropertySobjectSS�!!PSShowSboolSSI�!8PSNegativePercentShapeSupportSboolSSI5"8PSDefaultAttributeIndexSintSIntegerSI����f"#PSFreezeSboolSSI�"#PSLODBoxSboolSSI�"NPSLcl TranslationSLcl TranslationSSADDDI#HPS Lcl RotationS Lcl RotationSSADDD�#FPS Lcl ScalingS Lcl ScalingSSAD�?D�?D�?�#2PS
VisibilityS
VisibilitySSAD�?0$EPSVisibility InheritanceSVisibility InheritanceSSI%wObjects�t+GeometryL��ZSCUTest.000GeometrySMesh�$ Properties70�$GeometryVersionI|�:�Verticesd, �x��{�Us�Ɨ\NcN���9�q�$"M.i!���� gX�\B��KR��rI�D��U�#]�K�BJ$�(���x1a\�������y���|������z��Y߽������|�A�V��;�նu?�O|�?�Ə�<��ķ�����Ñ�!��5H��ne��� �������������w8�x<�����;��������G� 5<�d$�+���n4���'���x��O���;>�z���=o�����A{Ã=�Lf~���#�J����o8k*{v~fx|@�i�9��F��]7ɿ���z��x:{z-6<=�� �d�7�?�y8�������_�Ŀ�GG�=�<������M�ќ��{�/�#���cxЬ�,�F���h�����'l*�d��jϢA�'��W�{�j˿�L����kz����ͧw5<>�7yz�Dãh3����-���Ղ<�|�{����^|]������7i:��g�~�~����gOAozf����x@�I䯵4<�4e<x�����w��0x��}�-O���� ���y<i������F�O���d]ϻ��U���?w}�$�;'�w6���A�'��_6����#��O2<���\W���w�fx0f� ����-������G6�O�z{������Gsó���0?�PÃw���� ϞX<<m��y~���'�'�vó�[�����-�z�T��:��d�����i� >9gx~�}݃I�f�pk��X5 <�}oÓn>
lx�܇������1<����x|?óF����ocxx�o����z�G�l%�}ټ����G>4��`�R��[;Ó�'O���|d���o�d�,5<�y~� �'�����G�?D��릷�B��q��I�_��+���� �=s��?�g��놣���ujM�����o�YO��||ͫ�gLJ����߶������䳎o[��� <j�yk1����[ex��� ��{D^�'�7z��-�v��3̏H �7��<_<�����'������њ���e_Y��� ��� ����]�?���#ϛE/��M�okxz����:կL�G^lx���c�������Mw�dz�[���m�x���S' �ް���KƁg+�z����J~Ad��NM��4������y�G`x�m�^��N�|Fs�,�;o4������~��|�=O�'��5�)x|SW˯���l��/=�9�����o��,c����٥���������f칦�����Vy������� ���ã[ȳ�O0���/�^�z�~i��ђ�A�� φ<V�t��|��^K��e����n��,��|.�ד�����Ki�������ͅ��/�h��e=ƒGS�1<~�7y�EsÃ����o���W��<m���h�����������ɣɯl��W{�fD����>�'�|��+������ɓ9����x�Q��˽ ����}�o?��t��籎�G��,�'o1�z������yF����ű��~��zӳ�?���٥�� ;=�\����G����}��Y�N���cO��uC�@O:��7�׍>k��i��DÃO3�����x��O῏��nx��l�'l���製����o�+^7��3����XÃO��q������y�khx2�-�.ٛ�^�����:����"O^��=����B |��b���L�oa���g�̭ޟ?벶���܃�y0i��"Oﺰ�~�s��"�O&�:hy��ɳ�W�霟������J��Sۑ�c[Y��Oz��6�(���aU��o/y~�d�$odx�x^������q��<�z&�ާ��՞�c����{��!�� M�|��y���=7\�׹�����=���>��첩|~�?������V��k���[��1�����7���O��{�u_;�q�G�#����"O����[t���E��Gs���;�wa��u�Ǫ��1]����&����O&>�^�� Y>�ȳ���> ۜ8���sn�� ��5���/���z�mE^�=��ߓ�_]��n��} 8mu�J��U[����`��=�<�<<<c\�"���ȿ��{��Z��Wm�|�t���?�NV6����������n/��߿�����MtP��_>�_1�\Q��߂=��ȳ �}>X��[��%�/dς�qۺ�מ�����;5��ȃzS���6\�Y�מb����y�䫧��eG�.�`ο>�\���E^��<O����E�/�����N+�������7�����oZ���q�+��I�A/�?�>��"�_?�G��[hx�Eտ/�����֟�?f9z�7���O�g��'O�9��{����%��5������^��e�� Z�󻖏�8�<��X��k<m݆<��=�Ɠ13����M�ȃ���D-�ξ�<nT����l��՞w����W�����[���u:�<���Y���x�E��~~�z���=�W�xi����j>��;W��'����߿���Jm�ѽ���������ly��4�����z����u O���>{����m���YP�|ڵ�t���yݟ�7<���i�����0zy
���|>��w��:<����nx�u�-�`�8�/^k��`��cț>`x�|ב�9���YO6�7<����8�7x��׆�4i[dz��0<�n�����Y�U x��zÃ�C����no������m���#I�����!��f��p�p<�{�a���/l1 <������}R�,i��`�uS���/7�O��~%��i���������q�� .����I�&�>?o�L��iM��b�~�%3N6��t���"��b�wy��=��ƼO������o�������~����;i�����;/��&/�xyz`_~�����[��54߯ҁ#xݨ��+p�Z>�rW�y��"Ϻ}��'�{��"��+����a��d�y$_�<�wM1����=h���|����z��~?������; ϖ��l�'O�8���8��rᕐ��W*��?W^��^�y��ȅW"^ \y%p����WW^�=�+�+��~����WW^ \y%� �����J��+� ������WW^ \y%p����WW^ \y%r���#���J��+1/���J��+� �����J��+1/���Wb^x%p����W"^ \y%r����Wb^x%r����W"^ \y%� �ļ�J�^�y��ȅWW^ \y%r����Wb��J��+�+�����J�^�\x%p����WW^�=�+�Gx%p����Wb��J��+�+���{�Wb^x%� �D.���J��+� ��~����Wb^x%� �D.���J��+�+�ļ�J� �����J��+� �D.���J��+�Gx%��WW^ \y%p��ȅW"^�\x%p啘^ \y%��Wb^x%��Wb^x%��Wb^x%p����Wb^x%��WW^ \y%p���S����Wb��J��+�+�����J��+�+�����J��+�Gx%p����WW^ \y%������J��+�_x%p����WW^ \y%��Wb^x%p����WW^ \y%p���#���J�^ \y%p����WW^ \y%p���/�x ���J��+�+�����WW^�\x%� ��~����WW^�\x%������J��+�+�D.���J� �ļ�J��+� ��~��ȅWW^ \y%p啘^�yᕘ^ \y%����{�WW^ <^���+�+�D.�{�WW^ \y%p����Wb��J��+� ������WW^ \y%p����Wb��J��+1/���+�+�����J��+�+�D.���J��+� �����+�+�����#���+1/���J�^ \y%p���/�x(���J�^ \y%� �D.�{�WτW��WW^ \y%p��ȅWb��J���J�^�=�+�Gx%p����WW^ \y%� �����J��+�+�D�x�2��У<T�������y�O)�����(�~�g μ��g��_���{^Lq�=_�8��GSyϯ)��8ޭ�>�
�����/�/ y���~��)����G^�/�zG����#�yCőw}b��kX*�#����2��Я|%�=_�8���Ty�o*���=G����#�z���*�^��q�j&8��oUy��*�~�ϖ�X������w}n����O��E��G��Š#��b���x�2�+x\�;����e�9�_yj����ľH���/����XO��nő�<��������;�<yק�ؿYA��������\������z��������=�/8����GޛPywN�ľ�
z�\���Ź~o�@p��9�2�^�~5��~onAq��yőW�g�1���3�Pf�-�ռ��y ő��(G^���z�����]����~5��~oNCq�Ǚ�(�_�Q����=GޛQy����s#�w�F��SF���̋��Ǜ?Qyw.��>h����h�_̷`=�|��ȫ����0ȫ}��+μ3'���7?�8��\���{�6��ߙ�)�ﻂ늹��s;%���?s>���|gޛ��yg.��>t�_��?r���z���2�ٹ1��~oIq��9%őw��J����31��~o�Ip��9�2���57�~gn��>}��9+�;sV��ȫ}��sY�w��ʜ�~1��~g��̹�s_����GޛS��ΜX�s ��2� ��Ͱo�Lq��94ő���Gޛ[S��q��ʜ�P����C�7��8��\���{�r�#���)��7_�8��ܝ�Ȼ�x%���G��q=��^.8��\���{�~�#��*��7�8��� �9��Rw]5g�~o�Pq���CŹ~g.��9X��cD�7Ǩ8��|���{s���ߙ�,s�F������'Gޛ�Tyo�Rq��9Lő��3�z��M��w�93��gγ̹"��ǥ�B��ͅ*��7/�8�����{���#�͝*��;��e�?��]Wͯ�ߛ_Uyo�Uq��yWő��`�����2��Tꮫ�iџ8���s�Μm�s]��2�� ��u�w^���0���|/�չ1\���Eޛ�UyoXq��9aőw��K�WSA��7F�7o�8���!�9��)s�b���w����~o�Yp����2��`�j^�޼���{sԊ�ߙ�.s��_���˜�������չ@\���Fޛ�Vyu��GޛWyo>\q��yDX��Ȼ��%�/B.�Ϲg���yG�W������GޛcWyo�]q�Ǚ{/s�R���jN��3'�8���ϗ9� �Q������Gޛ�Wyo>_q佹}Źg�?yo�_q�;��eΛ���b�����#��#Pyo���{�G�ݏP���
z���{�G���P�-�'� ����P��q�G�9� �Q�)�g?E����_�\/�˜��~�_���k(��:���;���w(����Cq��9cX��ȇ�>ő���(��8�Jʜc���}(\��Ep���)e�C�z�~�{�YG����8���ő���(���_���l���5\�����yn�W�q�~g?N����_�\8�G���z�}=�#���Qyo���{�����}CeΩ��]W�3B���Hq���G�#��KR�������>KfPolygonVertexIndexi�
Yx5�S��iE�ضm۶m�c۶��mwl۶m;g֮�s��{���d��s�S�M
Ԍf4�mN��&��{n�+ϵ[♸�<�n�g����|�5���� �6x��+/��⩸���n��ຼ�b�=�����K�x��+/�;≸�����'����r�3�k��+�.x��+���ⱸ������઼�j�;���f�5X��re�l��կ�Yx��i��™}?c�`��79�I��W�����'pF�����}g�������pz�/���}�����y�GpZ�/���}���2��u_g�LJ�MO<�敯��� N��U� �؅�~���\������xN������ ��7E�^��W���{p2�o�^��W��7�����ݛ=��ǻp^�o�^�ĉ}���c�7�%���W?{���Rx;Nȫ�=�K�m��� '��7�}/������y���,ނ���ǵ���Cp^���Ʊy�'�<�╟��@S/=�1��� ��W~a��q4^��=��Qy�W�P�G��_���{���+�����8"��G���#ؽpx^��=���x��8�� ��?ۣ�=ph^� e�G��㐼�7�����?p0�'j���[��o{ �f��]�q��=w�'�N�D�ў�;ؓq{{
ngO�m�i��=��g�V�L�Ҟ�[�����l�̞�������<�Ğ��0P#�w����d�1�g��j?��MC���]~�=���^Ľ�D�.��./���G�_s��p��=������{]ߗ�:8w�-���qm��w���k��������F^�k��W�����F^��qg�.��^��-�;�Ծ���������{��{�?s��q�⟽��оᛛ�tO�]~@ q(���<䞀{H߿q��s���}�������tO�]~L�pp���<��� ��7�O���~�WN����_|��3��=���}�=��qE�o�?����=���_��{J��K����[?�o^���o��_^Y����)�ë{`�����*��
���7A|���_���;2��{0�߳#����?x���������������!}���������p����}�k�?7 ��oR�����˼r{ .�/��i��� ��+���������ގK���r{.����흸>�+g�w��� ���ލ��Ӽr{.�O��Y���>�+g��������ޏ ���r�.����9탸>�+��������>�������K���<�d�a�y��vo<��ؽ�0<�W�o����^�����Cy��vw<������(<�W�mwţ�^�����#y��vg<���{؝�8<�W�nw���^���O�cy��v{<�㕻���$<�W�l�œ�^�.�ۆ���-��mMS�����-K�q^}���2�?<�W��+�ꛍ���[p%�7�^��W�}��%��p���^��W�}����;p5���^��W�}��Eٻ|o�����*<�W�t���ݸ&��Y�{a���}�m/�7��{}o���:��2S�Óy���.��Y�{���}����p}��-�3�M>|O������f��y�!������a��9���� �Mn|O����Ƽ�f����Q���yv3�,��Myu�������΁��x��߳�v6|O��[�Y�)<�Wneg���L^������x�v&|�Έ��y��v|�敛���<�W��N�/⹼rS;-�d����<^���_��y��v*|�N����r#;���� ����� ߴ��[x���N�oۉ���W�o'�w�����߷��v<���C�}��%���K��x�]/�k�v-�Ү�W�5�j�:^cW�k��x�]��+� v%�Ѯ�7��f�<��.���e�V� �f����R8�]����w� ������Y�Ǥ�Ɉ���v ��3p?�{z|��.�9��}�]�����%�{����4�/s�k���.l���+|���\���
_�~�.���]�N�7���w9?��v>;��|s��������~����+�La�7;4�7���&��=��I���~�����랄�m��������o�����{p�q���8w9���&�=!�{|��G
�����$���|��� �O`�s���� �7���(����7�&���|��~�=���$��{�����܃����&6�����.��&��7��Oq0��S�����^���q�o~����8��?�w�LD�lt~��������Fc�ġ|��{T�+��o�4?�{6~O9
~�=����o"��ా�=�-��g�#j����=�=֫�揾���8=gx����啳دq|�W�l��Q�y^9��G�x��� _��3��q |�WNo?�1�e^9����Wx���_���؏q|�WNm?�q�u^9����7x������S��q|�WNn�� �m^9�}'�wx��8+��S6:��'9'��Sl97��l9/��cl9?��#l� �Cl�0�l�(�}l�8�=l�$��]l�4��l�,��ml�<��-l�"U��l�2U��l�*U��l�:U��l�&ՠ�l�6բ�l�.ա�l�>գ�l�!5��l�15��l�)5��l��Cs�r jN��r+jI��rjM3�r;jK��rjOS�r'�H��r�L�r7�J��r�Nc�r/�I��r�M#�r?�K����OC�� ��-��4�-��ԏ-���ԇ-���ԋ-���ԃ-���ԍ-O��ԅ-O��ԉ-O��ԁ-O��Ԏ-Ϡ�Ԇ-Ϣ�Ԋ-Ϧ�[�Ks�[�O��)[^H �1[^L��![^JK�>[^N˨.[^I+�6[^M��&[^Kk�:[^O��*[�H�2[�L��"[�B�Qy����RY����Si���vRI���vSq����RQ�|��Sa�|�RA�|�S~�|��R^�|��Sn�|�NRN�|�NSv�|��RV�|��Sf�|�.RF�|�.Sz�|��RZ�|��Sj�|�nRJ�|�nSr�|��RR����Sb���RB���S|����R\����Sl���^RL���^St����RT����Sd���>RD���>Sx����RX����Sh���~RH���~Sp�@)([�6��l9(���$98�?l9$��_l94��l9,��ol9<��/l9"E�Ol92E�l9*E�wl9:E�7l9&ŠWl96Ţl9.šgl9>ţ'l9!%�Gl91%�l9)%�{l99%�;l9%��[l95��l9-��kl9=��+l9#e�Kl93e� l9+e�sl9;e�3l9'��Sl97��l9/��cl9?��#l� �Cl�0�l�(�}l�8�=l�$��]l�4��l�,��ml�<��-l�"U��l�2U��l�*U��l�:U��l�&ՠ�l�6բ�l�.ա�l�>գ�l�!5��l�15��l�)5��l��Cs�r jN��r+jI��rjM3�r;jK��rjOS�r'�H��r�L�r7�J��r�Nc�r/�I��r�M#�r?�K����OC�� ��-��4�-��ԏ-���ԇ-���ԋ-���ԃ-���ԍ-O��ԅ-O��ԉ-O��ԁ-O��Ԏ-Ϡ�Ԇ-Ϣ�Ԋ-Ϧ�[�Ks�[�O��)[^H �1[^L��![^JK�>[^N˨.[^I+�6[^M��&[^Kk�:[^O��*[�H�2[�L��"[�B�Qy����RY����Si���vRI���vSq����RQ�|��Sa�|�RA�|�S~�|��R^�|��Sn�|�NRN�|�NSv�|��RV�|��Sf�|�.RF�|�.Sz�|��RZ�|��Sj�|�nRJ�|�nSr�|��RR����Sb���RB���S|����R\����Sl���^RL���^St����RT����Sd���>RD���>Sx����RX����Sh���~RH���~Sp�@)([��������L��������~����~��������������>����>����ޱ���ް���^����^�����������儔���Ĕ��夔����䔌��唔�n��Ԕ�n�崔���������匔�.��̔�.�嬔�α�씍ΰ圔�N��ܔ�N�弔�����������T����T����T�����T�����T�v���T�v���T�����T�����T�6���T�6���T�ֳ��T�ֲ��T�V���T�V���T�����T�����Ԁ���Ԉ���Ԅ�����3r��� �=y7V�
Edgesi��
x����pq�vB\��{�B�&;{����;�+d^NGNv��q�3CNvٙߗ^���y����/^��O$1IHJrRD*R���HG0�H&2��ld''��C^�S�B�(�)AIJS�r��"��BU�Q�ϨIm�P�z4��iB3ZВV��-�hOG:љ.t�;=�I�ҏ� d0C�pF0�Q�a,���$&3���`&� e�0�,dKX�r�e%߱�5�cal$�MD���d?��]�f?��(�9�/�0�r�~�'��4g8�y.p�K\�
q�������=��>y�c������+^��w�k|HH �IJ2R�� >$5iIGz��@&>! Y�Fr��<��)D�Q��� e)O*R��|J5jP�ZԦ��Oф�4�-��6����Nt�+��A/zӇ~ �+1�� c8#�h�2��Ld2S��tf2�B����c> X������;V��ul ����l�G"��vv�����g�E4��C�W��qN�;��� �8�.�'q\�*׸�Mn�7w��}��G<�)�x�K^񚷼/��O ID�����ICZ���d ���ld'��C^�Q���0E(F JR�2��<�De�R��|FMj�9u�G}Ҙ&4�9-hEk�Ў�t�K:Ӆ�t���C_�1�� bC�׌d��8&0��La3��lB��1�,b1KYη�`�Y�Z�������̏l%����Nv����#���Aq�#%��8�Ib9�i�r�?��%����\����������y�����x�+��������@��d$'A|Hj��� �c2� ��B6r��\�!�)@!�P�b���)C9*P�JT�S�Q�ϨI-jS��ԣ�hL�т���5miG{:҉�t�=�I/�Џ� ` ��P�3���b ��&1��Lc��Ms��<泐�,a)�Y�JV����c=al$�M�@?��H�����f/?��(�9�/�0�r�~���)�p����E��2q��5�s�[�����y�#��g<�?^��7����J $1IHF
Rć�!-�HO0��'d&+��ANr��|� �)BQ�S�R��,��@%*S�O�N jR��ԡ�i@#Ӕ洠_К����Dg�ҝ��7}�G�b��0�f#��1��Lb
Ә� fB(s��|���,a߲��|�ֲ� ���M�@[�J$���v����c?QDs�_8�~�1���i�p�����$�+\�7��m��.�����Ox�s^��W��-��*  �D$!)�IA�HM>"�|LF2��,d#;9�En����0E(FqJR�2��<�De�R��Ԡ&����ԣ> iL�Ҝ���5mhK{:�%��BW�ӓ^��/��W dC�0�f$��X�3�ILf
Ә�LfB(�0��,`KX�r�e���5�c=��p6�f���m��vv��=��>��?p�C�G��7�s��9��r�?��%.��r���6w��=���y�����x�+���x�z�Hb�����$�T�&-��`2��Ld&+��I.�����E(J1JP�Ҕ��H%��)ը�gԢ6�S��4�!�iJ3�Ӓ/hM�с�|Ig�ҍ���7}�K�b ��0��5#��2��Lb2S�� f2�ل��2��,d�Y�2�����b5kX�z6�F��D���V"��vv����a/��O�� �8��r��s���r�Ӝ����E.q�8�p�k\�&����r��<�!�x�������y�;�%�i@ �HLR������Ԥ!-�HO0�H&2���d'9�M����0E(JqJP�Ҕ�,��@E*S��T�:5�I-jS��ԣ iD�Ҍ���iC[�Ӂ�t�3]�FwzЋ�����@1�� c8#�(�0�qL`"���T�1���"�P�0�y�g!�X�R����d�Y�Zֳ�06�&"����6�����f{��~���9�a�p�c�p��$�S��,�8�.r���q��\�:7��m�p�{��y�c������%�x�[�����H"��d$'%A�"5iHK:�L2���d!+��ANr�����)L�R���4e(Ky*P��T�*ըN jR��ԡ.�h@Cф�4�-iEk�Ж�t�#��L�ѝ��7}�G0�A f(��F2�1�e��$�0�i�`&�!�9�e�Y�"��e,g+Y�jְ��l �����6���D����`'���^���(�9�Aq�#�1�'���9�9�s��\�2q\�*׸�Mnq�;���y�C��'<�9/x�+^��w�1ⓀIDb�����$�T�& iIGz��@F2��,d%;9�In����� �)BQ�S���� e)O*R�*T�թAMjQ�:ԥ hH#�Дf��%�hM�Ҟt���B7�Ӄ^�����2�� e��HF1���c���2��d!�2���c> Y�b�����`%�X�ֲ� ���p6�f���H����d7{��>�E48�!s��#����$���4g9�y.p�K\&�+\�׹�-ns����>x�#��g<�/y�k����^|@ �HLR������Ԥ!-�HO0�H&2���d'9�M����0E(JqJP�Ҕ�,��@E*S��T�:5�I-jS��ԣ iD�Ҍ���iC[�Ӂ�t�3]�FwzЋ�����@1�� c8#�(�0�qL`"���T�1���"�P�0�y�g!�X�R����d�Y�Zֳ�06�&"����6�����f{��~���9�a�p�c�p��$�S��,�8�.r���q��\�:7��m�p�����$�sLayerElementNormalItVVersionIe�VNameS�VMappingInformationTypeSByPolygonVertex�V ReferenceInformationTypeSDirect�s�Normalsd� �x��y�Օ�+uLb̘��C�8��,B#�� ۻj&��$1cF�X�Qd ��"K��ATDEG�.{Y�� ���D�!@KCQ�yu���{߻?�yC�t�a��r�{N��u뾪ץe���'LԲ�O��z�S�����u��[��]�'S=�g;���g.OisۮZ^O\�u�=��/+5�.��]Ᏹ���<�q��k[=�N.�k��<�D_4���?�a:��\J��9_A��}L�p�R���7����]���y��~z7]1д߹ܮ�z�����Ʊ���%� �����V��<\��5���r}�j��˝�#��������o2m�s�G����6���r�e��L�a�?mi��fr��\�>�d�i�����ߘ��Z�������\�\>�4~�<�>/\����R^�W��z��P�vq�����&�g�G����e�3���鎜�u�x���q���|۸n�rw��w��S.Ow���)�sM�Wu�D�0�!�y̿����r���x�r������/6O�� c�R�z\�}\1V���3����yqܼ5a�W|P�{��Կ���֚9����r���d��������I�v� YOm��:rڮ��Sݍ���OVrݮ�z��|U�������%���'�ϲ�:n�����}���L��{����<\��z�g����˃k�h�%�x�r�ם�6�����Om�8��GM����sW��py\���N�G������q������\�<So�i��<������⬸��~�r�� �.���K��ury��sZ�g��� �3ٴ߹<�z2=�~��\��_�P{*=\��]���޸ыM�*����k��L���ܥj=r�����k��a���������2�W���.w�Z��#����+��&��zѴ]\���kױe��ܺ��|�vq�ݾj�i���{<�x��q������rg�����\���r�=l��<3������?�����k[=_�>�g�i����������}j��rq~����.�;��5~�v���#����걟4>��������KM� .�!�3�w.������c�Os�Փ>.���!����3y\�U��;?V��X� ���W'�E�c�,.�L������e��8���ך�&�goVn���q��j��~a��I�UO�>?�[g�w5y�\tZ���g�]\nu*3�C.��a9_�u�����<�����������?�:T��s���񩸜��?�?Q����W��t=\�YPLە���wW��4opyf��3���gv�>ה�..G�/���dxNO�-�.ϵ���Q��������xߜ�G��0��{�M��g����X��S����N�˿���
nj3�6�nP,��;?�x�dm�+�!�goVnDžw۵#L�e.���QO��xLn�_h�N�������=[��~����71���y.�k����z�i>�����w�Z�����UOm��7����'U�\�v9���M�py\��y❯Nv?�V+���G�\W�b�9ƿ�������!jR��xg�����#�nb|?�������Ey��k�z쫲]���&t�w���u�tj���������˳7l2��������?f�9�p�!�q���x����?L���_���jx|�.�k{��k󼬇�������+L�������n��6�.(���.��T�g�s���{g�쭎�Tm�#?������.��E�b������r��㹍[�7��I{_)�C.� �g�������_��/.G��e�v�}mM�������L���G�ϝ Ǐ`r����΅.��?���=d�LW=�s�v��K�\W=��3oQ�Iy�|���U?|C���..w;��z���3�#=l~�C�������<3� ��d�G�����qjd=\��\�'~;�T�s������'��==~���6.�~%����[��ܹ���'�o� X�;�}����;���R�W�ףy��3҆?���;^\����9�y��k�v��K��6\^۶���S{�p�����v=A�3\��{��݋v 2͇\���~����y�Ʌ�>�s�4�qy��ܹTi~L~��_[�r<g�sB�pG�� ����]FkϷ�y�<��t=��pJ����|��C��_���y�������{G��$�,&�&�a�pym���j�n���׶튫��_k�}Jy��L.��~���ܫw��wR�.��?��Y���L���M�ߛ�������Z�G�G·l�]PN��`� ����<\nO�~�\�g.�ެ/���o��m����������xf�`I=�u6.G�{�x��V?�y��OU�0o���|��7��>��`S�֙��y)�]�qoٓ��)�g� d�{|��YO��� �o<�s�{��I��<������[��z�^�x��<��ԏ��S���[4r���dk�=�8���a��xvZT��ǻ���������T��\��]��E�ܮLϗ���'�Gs:ӿ]��<��^ר�Y�.�Ѧ_�Zg�Z���~o���\..-���.���ϝKmF�&���=`�Ǹ���ѫ\�/��~�\�����zR?w������,�9���\~����8��?�A�q���ەk=���/;w�_~���\W�ʵ���g.Ϭ�n��;B�p���M}�����EN���g�h�8���2үr�'��5/r�� &?���5e�_�TOp�*��g.OWQ�"�zj~=�*O��{����'��|����)����t[�i���_���qyr�.��)���3�[ F�e��y�~ɵ?Q��hq����N�~w��U�N+����m����W�Wz<3y0z���c\W�G��1.�o|O�����py\��Ud?w.|��������r�ʆ���\��7�sN�{��r�c��<��\����u�����ƌV�wY��UO������莬���������'�� 6��a9���M��˳�9~?Q������\���y���Cc,.�,(�y5[�[����¢�����q�c����|l�\�c�����ܾjU7S�<��؋���t�sy\��vO��FƆ��Iis��3� ��DM1��T�/{�9Yϵ�1.�6Q��q{S�/y��rw��g.�:��!����[l|N�g֓��u/�5��.����<�<��s�������2�������\0Ÿ��\$�?M�&�0=M�'zz;�O��Oȿ�'!���j^ģz�_B�A��Eq���Ĺ+1pn�J�k~�Q^��W���=�\�#����;���a�5?�(/��& |-�{+�T&R��_�s=AA��B���^Տ8���������~ p����B�]�@��G�E��B���ݪq���sƎ�/���K�#���x�����=�ߩ��z��>����Ƕ�~�a^乤tO�&�ߪ�gzD�Ԋ�/��q �E�����~�dݻ�q��o{�������&Տ8� ���2�۳�����g{V<N~o�k�k~�A^�[�������e��G����o ����T?�(/��Ƒ�m�t��G�������,X��GyQ|��C~��� T?�\��F~+����q��[~�\[��U�L�/�Q=�#�x�ᚉ�q���]��i�q��G�bz����v�
Տ8ʋ�E����&�>���z��ߐ?����qr�"����(�o~b��~�Q^o�C~kꧯ�~Ĺ������h�(��8� <�]����m��Mj����(�94�ο�����~Ĺ���h������G�E�h�cw���G����v�M�i�lW����(^�z*Z6{�ֹr� ��t���E�'�G����7R_��>U'@\0=A�z�"
�8��#������4��Cc�8�~p��i1��pܸ���q,����(�jx/�k�Äh�� g{
�uT����y@�-�A^4��\�wJj~Ĺ?��y�?8�W�#���x����D���_�_�s=����� Y��8� ���sV�~'9G�#��A�n�Oօ~��r͏8�����"��lm�#���xg�\z_,�Џ_�Q= �*��?����GՃ���o�O��ϵ�q�'��]w�/�H��Ԯ�/�Q^/nmL�M���� �\�{������o���T׏8� � �u%��s�<_���\�5w�����f����(/�����nv�� )�O}G���>�����"��(S ���x����߳F��G��%�麭(����GyQ��n�^�O���#����L��� ��M�#���x���yェ��z�aW� �����ZՏ8ʋ�Er�E��U�q��/���j�Տ8ʋ�����-Ϛ���z�ٝi~�{n��x��B���gy�����üȓ�(Z��8'!�O}gz�����o[��Gya|���Q�E���XG-�;�9T?�(/�����m�I㿩~Ĺ{٘h]5�ݨ�GyQ�������g7���G�����[E2�[]�� ��/�Տ�m �oS�G��q�fк��څ�Y�C�������
2����س�u�h1��Y�~�ȋ���ߢuUЧ��Yi?����u�hӀ�Yҏ8�Ży/Һ�-KT��q��Z~��p��K~D�,Y?�(/�_��wB�Ӷ9������ f�������q�ŋ�OD����u��q�'h����?�c>�#�q�x�f�W�~��>͏8ʋ������~/�^�#��X�g��A�?4?�(/���Z�Cx})~�_��zP|�!�CoP���B����6����h�#���x�ѵt�W$'h~Ĺ��M��a�ް+5?�(/����W�?G�ӎ_Ĺ1c"����?�����(>�ׇ�U��G�� p��-���UNI�6�#��A���5ZW9k�/Ĺo�������#��q��ۍ��c^�+w��H~!��xݮ�A�s�m��8� <��s�+zD��d����0��uZW9MZi�Op����fگ�����q�Ż}�~���:nu��z�C���
�oV��(/����� ����r�"���#OѼ�4�A��q��;ÚѼ�X��q��N>�W�~}��G�E�ޱ��o��L�#���O�/�4���GyQ|z�Slݠ�g{ħQ� OI��~G\��2��~bkԟ��e�q�Ż���?o����z�����^P����0~X{�{E�֩~p��_���1a�~�p�y��.��F׿�֏8�c>+Z�}S�#���x{��4?���l����z@��Ԋ�eߤϹ�1�Q=� �������ҏ8��\M�_/����%�Q^o��&�E����/!�����i}���V���8� <^�ki�iO{`�:~GyQ�?�K�~�]��D�����֟^���:�?>����� � z���_ ���x�[Z��*��ˈs=b�y�n��lߥ�_�Q^L������/�V��s=^����K|��Տ8ʋ�E�8z��^W���z�z�n�}��*����#�:������4����8���%����|͏8� <b�4��w�j��;�0/�ط|�Ƨ��6�GeGyQ�5m0���ެ�G���/|��_w��4���GyQ�SЊ�7��ok��z����u+��yN֏8� �S�����7ɾ?e�\O8������<'�G<�?eʋ��O�G���!4�I?�\�spAt\y��q&����(>(@��۶�{�v�/ĹqWZ�D���N�8ʋ��v���̝��Z?�l�r���p�v�E���# �oO>[�~�8ʋ������;��#���A�������罤�GyQ�(G~�� t�A�OĹ�tmT�&+��GyQ|plW�ot�BՏ8��=T�u>?Q�#���xy�ǽ���W_����/�ۉ��f�~�Q^�%�Q����>��Ĺ+q7����/��#���x��;�����+�q�'҇�gZ�v�q�ŋ�i~������=�<:�g�xW��@����ݣ���a��G�E�֢3h� �׮ ����zF�xZ{��8� <n�h�i��k���Q^o�<�֝v�z�T?�\O��Z�u�����"�w���.�?�G�q�G��i](��U�~�Q^/J�������5?��������g��~�Q=(ޙyɛ�Ԥ�nY���z�獄���'�q���E�օ~�hb��G����\�|�����S/� q��[� _���Z���=m>����"j,�Q=(>��yS�͏8���:+��h~�-����gӺ�+}E�#��8M[�뷓i~�Q^�wZ���m4?�\�;i9=��=R�����(�mڎ�9�[�~�Q= ^��h]e~�6"��A�~�N�o� Z����s=V�i�}��G���(/���}N�6Qv��G���ɝi���i���G��x�v��c�>G[�@���ً;h����߿兞^+�4�EyR�2}����(�^8����LP��q�G6�qL�������(�4��+Ѷ�v�q��^�� �����/�Q^,�E���x���p�'�^D��c_ ��/�Q=(�J�C~QP_�8�㕾L~��z����� ��+����?��={���^At5�G���7��G���}du��'HܗH9E��S��� q�x���;�U�#����G~��W�S����(>8ڍ�n˟�Q��s=vdz�ou<�_兞����`J�v�<u���A^o ���_�{j��D��q���q�&�����(>Xr;] ������������^���q������ �b�lS��8���-�z���u 9? ������S����Sp���z�l��>"�� ��=�ڿ�{�R��8��6\I�5X�!���Q^?a&�K���h�J�8�㕼I����G�8�~�Q^o��]���<!��s=�ԋߠ�:��4_J?�(/��J�YO���V�y@&��q.Y�Er��GՃ��|gA��{4?�\O��e���f��Q^�yO�KR��Z��s=V�}.�;��4?�0/�8m�� �^�՚q��{��E�V,��?�\���ѷ������p�y�«��LP�_��z��>�>�\�͟��zP�3��6ڿ�~K�y9�g{��}/��e���8��۳�� ����</�G�azܹ�U_?魭GyQ�ӺpwX�3-c�8�c-�'�[�|�5!�~Ճ���W�~�)�֟��=�F�%���L�y� 6���/�~���˴�?�(/�������|�&�G��qV̉��[i��Gya��<��!�=��:~�\��D~��H�GyQ��\B~/�5_�#����m����Ūq��[���w������{��j�����3�^}�-��z̞�4z�w��{��G�E���/��q�J�#��C��%����O!��7x]v/����*w�(/�?x��g��\��w����O��%�ۮ�q�x܊%�}�����Q^� ܱ5�ۻ���<Y��z�� ����j��r�"���x���`Ň4N�?��I��u2��M�t�I?�(/���_$��92z��P�:�tLayerItVersionId�t LayerElement_tTypeSLayerElementNormal{t
TypedIndexIw&ModelL���2SText.002ModelSMesh�tVersionI��v Properties70huNPSLcl TranslationSLcl TranslationSSAD���^@DD�uHPS Lcl RotationS Lcl RotationSSAD��`S�>D�DvFPS Lcl ScalingS Lcl ScalingSSADY@DY@DY@Xv8PSDefaultAttributeIndexSintSIntegerSI�v(PS InheritTypeSenumSSI�v
MultiLayerI�v MultiTakeI�vShadingC wCullingS
CullingOff�w ConnectionsdwCSOOL���2L�wCSOOL��ZL���2�wTakes�wCurrentS��� ���f�v���&~��Z�j���~�� �u�)

97
Project/Assets/ML-Agents/Examples/Match3/Prefabs/FBX/3.fbx.meta


fileFormatVersion: 2
guid: 02d33201e78d54a67ac7b0734cd6d8aa
ModelImporter:
serializedVersion: 23
fileIDToRecycleName:
100000: //RootNode
400000: //RootNode
2100000: No Name
2300000: //RootNode
3300000: //RootNode
4300000: Text.002
externalObjects: {}
materials:
importMaterials: 1
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
motionNodeName:
rigImportErrors:
rigImportWarnings:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 1
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
optimizeMeshForGPU: 1
keepQuads: 0
weldVertices: 1
preserveHierarchy: 0
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVPackMargin: 4
useFileScale: 1
previousCalculatedGlobalScale: 1
hasPreviousCalculatedGlobalScale: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
importAnimation: 1
copyAvatar: 0
humanDescription:
serializedVersion: 2
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
animationType: 0
humanoidOversampling: 1
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:

104
Project/Assets/ML-Agents/Examples/Match3/Prefabs/FBX/Match.fbx


Kaydara FBX Binary �_FBXHeaderExtension\FBXHeaderVersionI�x
FBXVersionI��EncryptionTypeI�CreationTimeStamp�VersionI��YearI��MonthI DayI'HourI?MinuteIWSecondI&t MillisecondI��4CreatorS/Blender (stable FBX IO) - 2.79 (sub 0) - 3.7.13R' SceneInfoSGlobalInfoSceneInfoSUserData$ TypeSUserData=VersionId MetaDatakVersionId�TitleS�SubjectS�AuthorS�KeywordsS�RevisionSCommentSE Properties70m9PS DocumentUrlSKStringSUrlSS /foobar.fbx�<PSSrcDocumentUrlSKStringSUrlSS /foobar.fbx�$PSOriginalSCompoundSSCLPSOriginal|ApplicationVendorSKStringSSSBlender Foundation�OPSOriginal|ApplicationNameSKStringSSSBlender (stable FBX IO)�GPSOriginal|ApplicationVersionSKStringSSS 2.79 (sub 0)PMPSOriginal|DateTime_GMTSDateTimeSSS01/01/1970 00:00:00.000�<PSOriginal|FileNameSKStringSSS /foobar.fbx�%PS LastSavedSCompoundSS(MPSLastSaved|ApplicationVendorSKStringSSSBlender Foundation�PPSLastSaved|ApplicationNameSKStringSSSBlender (stable FBX IO)�HPSLastSaved|ApplicationVersionSKStringSSS 2.79 (sub 0)8NPSLastSaved|DateTime_GMTSDateTimeSSS01/01/1970 00:00:00.000�FileIdR(�*��$�¿Ȱ*�+��� CreationTimeS1970-01-01 10:00:00:0004CreatorS/Blender (stable FBX IO) - 2.79 (sub 0) - 3.7.13� GlobalSettings8VersionI�u Properties70�)PSUpAxisSintSIntegerSI�-PS
UpAxisSignSintSIntegerSI�,PS FrontAxisSintSIntegerSI; 0PS FrontAxisSignSintSIntegerSIu ,PS CoordAxisSintSIntegerSI� 0PS CoordAxisSignSintSIntegerSI� 1PSOriginalUpAxisSintSIntegerSI����5
5PSOriginalUpAxisSignSintSIntegerSI{
8PSUnitScaleFactorSdoubleSNumberSD�?�
@PSOriginalUnitScaleFactorSdoubleSNumberSD�? HPS AmbientColorSColorRGBSColorSDDDn APS DefaultCameraSKStringSSSProducer Perspective� %PSTimeModeSenumSSI � 3PS TimeSpanStartSKTimeSTimeSL" 2PS TimeSpanStopSKTimeSTimeSL����
h 8PSCustomFrameRateSdoubleSNumberSD8@� Documents� CountI� DocumentL��$SSceneSScene| Properties70. &PS SourceObjectSobjectSSo 3PSActiveAnimStackNameSKStringSSS�  RootNodeL�
Referencesd$ Definitions VersionId CountIn
ObjectTypeSGlobalSettingsaCountI�
ObjectTypeSGeometry�CountI� PropertyTemplateSFbxMesh� Properties70:APSColorSColorRGBSColorSD�������?D�������?D�������?�DPSBBoxMinSVector3DSVectorSDDD�DPSBBoxMaxSVector3DSVectorSDDD/PSPrimary VisibilitySboolSSIS*PS Casts ShadowsSboolSSI�,PSReceive ShadowsSboolSSIW$
ObjectTypeSModel�CountIJ$ PropertyTemplateSFbxNode=$ Properties70n2PSQuaternionInterpolateSenumSSI�KPSRotationOffsetSVector3DSVectorSDDDJPS RotationPivotSVector3DSVectorSDDDwJPS ScalingOffsetSVector3DSVectorSDDD�IPS ScalingPivotSVector3DSVectorSDDD
.PSTranslationActiveSboolSSIcKPSTranslationMinSVector3DSVectorSDDD�KPSTranslationMaxSVector3DSVectorSDDD�,PSTranslationMinXSboolSSI0,PSTranslationMinYSboolSSIj,PSTranslationMinZSboolSSI�,PSTranslationMaxXSboolSSI�,PSTranslationMaxYSboolSSI,PSTranslationMaxZSboolSSIP*PS RotationOrderSenumSSI�6PSRotationSpaceForLimitOnlySboolSSI�;PSRotationStiffnessXSdoubleSNumberSD&;PSRotationStiffnessYSdoubleSNumberSDo;PSRotationStiffnessZSdoubleSNumberSD�0PSAxisLenSdoubleSNumberSD$@HPS PreRotationSVector3DSVectorSDDDZIPS PostRotationSVector3DSVectorSDDD�+PSRotationActiveSboolSSI�HPS RotationMinSVector3DSVectorSDDD?HPS RotationMaxSVector3DSVectorSDDDv)PS RotationMinXSboolSSI�)PS RotationMinYSboolSSI�)PS RotationMinZSboolSSI)PS RotationMaxXSboolSSIR)PS RotationMaxYSboolSSI�)PS RotationMaxZSboolSSI�(PS InheritTypeSenumSSI�*PS ScalingActiveSboolSSILGPS
ScalingMinSVector3DSVectorSDDD�GPS
ScalingMaxSVector3DSVectorSD�?D�?D�?�(PS ScalingMinXSboolSSI (PS ScalingMinYSboolSSIC(PS ScalingMinZSboolSSIy(PS ScalingMaxXSboolSSI�(PS ScalingMaxYSboolSSI�(PS ScalingMaxZSboolSSIDQPSGeometricTranslationSVector3DSVectorSDDD�NPSGeometricRotationSVector3DSVectorSDDD�MPSGeometricScalingSVector3DSVectorSD�?D�?D�??6PS MinDampRangeXSdoubleSNumberSD�6PS MinDampRangeYSdoubleSNumberSD�6PS MinDampRangeZSdoubleSNumberSD 6PS MaxDampRangeXSdoubleSNumberSDO6PS MaxDampRangeYSdoubleSNumberSD�6PS MaxDampRangeZSdoubleSNumberSD�9PSMinDampStrengthXSdoubleSNumberSD!9PSMinDampStrengthYSdoubleSNumberSDh9PSMinDampStrengthZSdoubleSNumberSD�9PSMaxDampStrengthXSdoubleSNumberSD�9PSMaxDampStrengthYSdoubleSNumberSD= 9PSMaxDampStrengthZSdoubleSNumberSD� 7PSPreferedAngleXSdoubleSNumberSD� 7PSPreferedAngleYSdoubleSNumberSD !7PSPreferedAngleZSdoubleSNumberSDB!(PSLookAtPropertySobjectSSz!*PSUpVectorPropertySobjectSS�!!PSShowSboolSSI�!8PSNegativePercentShapeSupportSboolSSI5"8PSDefaultAttributeIndexSintSIntegerSI����f"#PSFreezeSboolSSI�"#PSLODBoxSboolSSI�"NPSLcl TranslationSLcl TranslationSSADDDI#HPS Lcl RotationS Lcl RotationSSADDD�#FPS Lcl ScalingS Lcl ScalingSSAD�?D�?D�?�#2PS
VisibilityS
VisibilitySSAD�?0$EPSVisibility InheritanceSVisibility InheritanceSSI��Objects2�+GeometryLCZ-SCUTest.001GeometrySMesh�$ Properties70�$GeometryVersionI|�S�.Verticesd��.x��y�Vs���`��X"2��}�2�I�t�i&�n�M�$��P&Π0ҢB"g*�4��Hu�5JҢ$�S�%j$��~��tz�_���w��t�]��~�g����ޯ �a�?lAޠ����?~:~'G�O��jx�ay�ufxr�D���e�g��������O�z ��M't%O:nx����5�ی<޳���A����Q��ȳ�Z������}���`�|��ī ��<C����dRO���� O�hCOhnxvPS����-?{?�t^}���a%��OXo�g�s9y��-Ó����#Rãf������>T���8��޷�G]��w�Wp�5��ȱ�הʟr�
�����˟�<���
�����&�]} b=�c ���A^_�]�_� y����A����8q������vYSg����R����Oy�������S�b�����Ɇs����LÃ�}��>� ���-�� O���#�����|��g����'+�>\8�<�3�����>�z�8������v} ��Jȓ�m �O�@�}y����U�y˯��/���n����g3[�g�3<��6��I�ݳˇ�G�M0�I6{v�w9��d���L����a�]W�� W�n�k�t�����M�B?�,Ã&mȳ��5�{0�3yx�� Ϯ���k�3�i<�_�Ӿ�9�;��Cf�s� g %O{�}���}i����䵏�d�Y�~��?����Q����>mA}�21<^ۜ<l���dD3������`��ɓ{�[��)����x���O�#����5$��hx�f���� ��܃<�����Sۓ�y�]�9������'��p9��v����h y�����ӿ|K� �z�˓e �dv1<��%y��v��7�A���g���qɓ�׍wyx�z��� n?��q�E`xr/���ؗ\�����Q�� 7]?{�4<�{��� ��o��3Yt���k7���1<�zy|ı��lXC�/�q� ���F�������)�q�m�z�v[O�Ή���f��Z>f�dw=���������<�W�Ã&Nsy4��üs����[��o�����_Y���<~a<y��)�'�|d�O'Mu}�����ճ��� �n3�!�[�����z ��R��2s��<���X�������g.{���W��G��1.ϖ~��ӟ����ў���놻<?|�B��֩��/G�����K�]�]|y2��.�[M^���˛ty��������<>�����ҭ.Ͽ:�<�Ӣ�\^9��O���Y�����jx���;�^��|뻸�;F�]������L���|���I�z�<�g ��dցw�<�w�ߠ�+qy�z�⸾���\�-�w��m]я籨W�+\��y> FwQS��f��L�����˓_=��{����]��=y���]:�Q\W>�0��'����������<k�=y>���]�i�����?��x�s���|�˓|��XN.x���i��f��L7�v�U��q�9���.�E���'����אǫ������[�G3v��������r|���<_ۡ���6��tIS���{��>����Ӯ�^wy��y�Љ3O:�W��͟7����>�|�_����7&�W���P�`����י����a���y����u��;u��:���b��� �$Oҁ�~���𫖬;��~� ��$Ϛ�[��ߴCon�l���Q��9����^<��YYg�jW�W��I��y��T�[�;��z .ox��[�^���|Pꃙ��k�݆������,1<z��b�\^\�J���E����~>{��W��#<?�����Kx|��hǭ�^�eK O�-�W�5�=Fp���s�M���g��5����������>���� ��;��q�1��Kgp9��W���x�v>����e�љ�ti��Bv�<����ˋ����.����L<������ٌ�f��g���Z4�Z�?J�����W�Ƀ_�ax�ɹ���o2�m��!�uy�-�'}@�����������{���� �7�Wڬ#y�t�9�������xƨ�z�9ޣ����l�ts~6�%�������Q�yֿ���׌�>���]�]/4��^ٜ<l����Ӂ��:��7~�������d���� g����R��FX��C
�Q��>�&��d���o���?Z�{�a�r?H/��=� yx���'�}p������<��{�{�脻
����8�<x����ʯ������Y�I\�^�μ��݄<�<������'���-�m�z����G�m�r������s9��K���]^%Oj}�wx�<��J��g>\���4<����g�Kf��Zw"�θ��l���y�����ϻ�<>����-ɳ��3<<�w�A�V済�hB]Ҏן�|^ܸ�g\g��mS����׽R�_[������绎0� ��O���f������u�cz���]�:��n��'s�z�%=�}K֭X�6���ꃺ�z��N3�?Ѡ����z��_�sK���`Ó��"O,������i���~,��i곋~3��g_�Rܿ%�ƻ<�h�l�_�sy:��������sy������V��]n�dT+���V�]��G<l�?�<��P��ҳnvy2�n�d†N.:��vJ���Vÿ<�<m?����ߎ�� f<z�˳v���N[�pyr���q���g��ܮ?��r�(n����F�/��������n���JӚ�����ԟw_��O�tt��7��|ާ����x_t�� ��Mvx�� '_��[�˦��^Ӿ��ӹ�L�rr�Y�˃�o���,y����G���uy���/�v�@�?�� X65����ß���ء.Ϗ���3��s�~ܬ�X����˓N�?��`R��.�>�a � g������Z�4x��-_��ѐz��=�>J�̺z���op}�<���#��^Gq��<_:�<�f��>�������y�[v]�R��H�J�r�����������Iӗ��Y�O�?�xm����|�v�����4�qP��t�O�z��b�o����G>ݜ��C6�g#[��� ؊�o���W��5�[��=��f���| yP�{ѼS�����َ��>_����/�/�Cex>၂����O��Q�������a��<.�:�u�
~qWóQ\�6fx�sk����<�>�<k=�������}����_w*Ϋ��}~����z��y����x�W~L�����줓fp=^<����>�a�)��fU�2��|d#^G�u/�Fw�����o�&y2�5��5����P������׵=�3��ԡ���O OӼ��}gxtT��F�j'���W��>d���}O3<���<x�2Ã��y�&���'�.�P)����z����o���y�s�q=ryra�B�(����C���n�����5�YÎ��<ܡ��J������.��8�<Z��~.�o��<���.�I�-~�a���-|���\w�6�'�{?���F��\��'�ԓ.�.�l2xr{[㓭�
��cM=ъ����z���~�cx���w�<�/���e�������ɣn�_�����B���]n߸[�W����t���㯜����K:�<��5,�-�0�K��3^O����'��3�k}����L�|��F->�_�Aֹ����:� ,g��tqy4��YXN��7�<�i��XN��O��u���Ӽi��oY���`�77�<���C��7������-���ɽ\��t.�~��qy�9x<�s�@��_A�j��t� OZ��*�_g��1��I.>�<�g=���s?���=G�<\�F��As����<����>g������x_V��������V�3� �|���.ϛu%��f�w����G�63���ў������>�a�>�cws?�۩��{�|ʞn]�/��}����F�����d���{��g��[���>�� &���Rɓ�c������u����u�q��x�(��Q�������}������.���������sx�.��������9����Gs?L۞���K��h��6��[Ó�O�~�y�Mw=G8��E���s\~�-��d�A��M�q���?˗���:���-�'h�#���' �}�����w �^���O<2���$�o�y,Z�����0��̼��g�?}|������ ���I���#OW�q��?�y>��賋:���]�����nJ��������S�k������"�Ŏ�
6���E�`������
��^� ��tCq�h�������^�u_6<�b!y<l����iq�h�ђ�x �����[s;���5<��1�`� ���4(�/�jx4�!���� �;|E��i�f���ף��������o��<8f/���9ϒG}'�혷�<{���q��?b���]v+�?�y����b������4~���>-�3����;�&��_g���#O��b�O�sG�l����mDL��w��w��m�?��K ���$��<{��v>�<i:��d����9�.v��>{�g��1<]vbq���������՚3�u}�o�X��F=fxp���g+V�7<�8� =`���=�����K �m��*}�>ÓU3����g ��{��؀7 �Z7�~��[ny��<��~��Q��Sq��Gn:�8~[~n|�K�7���I�?�ߎ(�KG,0<_Һ��}p�����&�'��1ó?������}�"x~�� �ox<z���Ѷ{>K��w�v �\=�>G0<�m�H��b�݃�7 n���'�OL�3�I��������3���f���<�<��J��vx:`�9.�uw�<��0<j5�+x����M���>!^r�u�ɥ' O/�{ 6�u0�����������L��<�$jjx�yx6�{^��k�c'���z���\����[���h��
�&+_py�潶XNF���ˣ囮�r�ݼg\�}9�f,g��O�< .�����py6���XN���w����H�_���\����ԟ{�î>�C�{���~.���X�?���������n.��4���8l?��џ�+��0������7��6�ف<:��ˮO�W�B��A� ﹶ��4�`�W��`���x�|ر�����w}�?N.����u� �/� �����*�������x}O�<��藧��� ǯ��-X�������754<�sy��ã�<fC�7<����7��������S��ƫy���lx���<8�S��K[�'ׄ���S�_�'�w|��]��O��� ����d=���[ty#����w$O�ex��#S+5�m��]��K!����~^��蓏�6<�E+��;�0갞׋pZ�������xq��� �jN}������>9t�ݟW?O���fxy|p�9.J���p�[O0�
���<�`#y|]���<���<T�'{�m|“����=R��������o��?���b?�����^#ȣ�����_\������������ �z}B���u�?��{�����~�< �����5�~����>����n�4�Fݱ��ɘ��~����O�}V����������X�W_u���ߑ��2<Zp-y|������=�O� �'?F��6/s���1���[�y�Zϊ��W��
���Z����3���G�Lwy~����>��x����X�����f�}�S����1�'9�P과�b������ �X�B��w���k�� ����떼v��Y7�R�%��>U� �r^�*�E��y�����y�����y�G���E΋>"��r^�*�E�����y�����y�����y�_���U� \���U΋�"�E��y����q�r^.ws^����9/�U� \弨9/���y�����y����"�E��W9/p�����y�����y�����y�����yQ/r^�9/p��W9/����"�E.r^�*��r^�*��r^�*�E.r^�*��r^�*��r^�*��� ����s�������y�����y�����y�_���U� \弨9/�����y�_���/r^�*�E��W9/p��W9/�E΋�"��r^�"�E��W9/p��W9/p��W9/p��W9/�E΋�"��r^ԋ��E� \���E� \���U� \���#��W9/p��"9/�����y�����y����E΋�"�E���^���/r^�9/p��"9/�����yQ/r^�9/p��W9/�E΋�"��r^�*��r^�*�E�����yQ/r^�*��r^�9/p��W9/p��W9/p��W9/p��W9/p��W9/�����U� \弨9/����"�E���^���/r^ԋ��E΋z��W9/r��"9/p��W9/p��W9/p��W9/p�����y���}D� <9/p��W9/p���^���/r^�*��r^�*��r^�*�E��y�����y�����yQ/r^�9/p��"9/�����y�����y�����yQ/r^�*�E���E� \���U΋\���U΋\���#r^���y�����y���}D� \���U΋z�����y�����y�G���U΋z��W9/p��W9/p��W9/p��W9/p���^���/r^�e���u��n� z��W9/�P���U΋>"��r^�*�����y�����y����E΋>"��r^�9/�E΋�"�E��W9/r�����y�����yQ/r^���y�����yQ/r^�"�E��W9/�D伨9/p���^���U΋\���U� \���E� \���U� \���U΋�"��r^�*�E^湜���N� \��\���\w�\З9,���r^�)���r�}��y�G���U� \����"��r^���y�����y���}D� \弨9/p��W9/p�����y����E� \���E΋\���/r^�*�E.r^�9/�E΋z���^伨9/p�����y�����y�����yQ/r^�*��r^�"�E��W9/p��W9/p��W9/�����y�����y����"�E��yQ/r^�*�^�ܜ��y����E΋�"�E��W9/r��W9/p���^���/r^�"�����y�G���U΋�"�E��W9/p��W9/p�����y�����y����E� \���U� \���/r^�*��r^���y�����y�����y�G���U� \���E� \���U� \���/r^�9/p��"9/r�����y�����y���C7�E��y���y����E� \���U� \���E΋>"��r^�*�E��W9/�E΋�"��r^ԋ��E΋z�����yQ/r^�9/�E΋�"�E��y�����y���W��qΫ��8��r^�*��r^�*��r^�*��r^�9/p��W9/�E΋z��W9/�����y�����y�����y�����y�����y�����y�_���U΋\���U� \���U� \���/r^���y�����y�����y����"��r^ԋ���y����"��r7�E.r^�*��r^ԋ���y����"��r^�*�E.r^�9/p���^���U� \���#r^�*�E.r^�9/p��W9/����"�E���^���U΋z��W9/�E΋�"�E��y�_伨9/����"�E.r^�*��r^ԋ���y�����y�_���U΋z�����y���x*r^��|���\����U� \���U΋\���#r^���y�����y�����y�����y�����y����E΋z�����y�����y���}D� \���U� \���#r^ԋ���y�%����r^З��[����"��r^�*�^��j�n����)�/�\�1ws^���gś��U�>�C��w|]����������k��?[���|�ˡ/���Q�⮾��/�.�޷?(N�~RMN���
���Jq����}_�W�����S��R_ЂC�S��O�nw�S�������������(��9K�졞j�߃��y��W�qP��9������(�﹏����)�z<ω��'�R�����}ϕ����Iq�}ϡ����T5�V���y�=ϳ���������{k?�Rz�s1š�=/Sz5_b�áW�(B�8�j~E����<����_�<�Ы�z���\Oq�ռ����W�=B�8��烉����*��y����󜱚y&+5/��K�~�s�j楄5�UB��o���Mš�=�Tz��P�Y��9i5�dVj^W=W��{�*8�����̷�zB�|��糊C�{n�8��繊C����x8��翊C�{.�8���ŊC�{��8���ˊC�}�\ż����Ԭ�󜺚yJᯞk���\��yM�_�|�Ы�����|\q�}���^͛�z�^ͧ
���{��W1�*���������������}����+�ﹿ�З����(N��'���������\�o\����3ޠ��f+5���'��7>Aq��������b����s�f�[��q����P��x�KT3_.�Q�+��_Q�����f�]��8 ԓ{�i(��=�7��������W��B�8�j�_���!Ыy��W���q#�� �j����y��W�RP�w\J��?�X
�8�*�1.�<���q/�C��8��q2�C�?�8��q5�C�o�8��q8��~���j�g�Լ���xšW�9�_����g�O5�?�_�b=��B�� 5����E�C�w�8���H�C��T�<���qM���kRz�x'š���Rz��(š���R��{�SU3�v��u��+�g��W�C���8���Z�C�ǥ8���]��~ϸ�j���Լ�'��3NLq�}����;���y�Q$ơ��7Mq���V����G�g��g<[5���_���o���Ы���/�˹����b�t���u����Sz߸;����W�|��_�߃�o���Ы���/��A���8��q�U��z���j捇�|^��3�<���æ56����C���8�j^z�#�1B��X�<��OŸG���Xͼ��W�$��'�8�񌟬f�|�����W��C�8�j�}�������g*Nϸ�j��G=j�'�=�<�������}5}X�G��=�H��#��ŸS��Ɲ
N�g<j$8��q��C���8�=�Z��kP�y]5��q�U�A�5����o�j�-�W��/��B��,@�8��q�������*}���o��]}�񽥏ˡ���Uz�x`š����OD>b\1���+�����8d��qȊC���8��qˊC�Ϭ8��qΊC���8��qъC�/�8��qԊ�~���j�kT��b<6���Ǯ����m�{�oWѿ����`=b8���Wz��pš�͋�8��g�,�Y�g�Tp�}�k)�z<�n%���3W$8���ӕ
�z<�w%�C��׫�j��I����
�Kٗ�3�W 8����
�o~0š���8�=��e�C��gLq�}��)�o^2��Lp�=��傳��f�����=Sz�|h���3OZ*8������g^�Tp�����z������K�wy�Ğy���w8�Cg��-}*����.������ +}����� ο�t>� ���.}*�����Mq�}��)��R�} �zr}��5���g9š��/�8��y�����f�鳖��|t�<u�/�������p�j�:w^8W_{޹���n=.�`=l��宾�|w�������x>������q9��y�\����]o���З��r�w����+�.�>��ק8��y���7�����3�_&8�����7O�����Tz"_�Ǿt��L���3ߠ���3a.8���(^���[�<V���g��\p�}�*�o�Cš���8��̋ �o�D�Y�g�Lp���+�{���q�L?��7������ǘ ��=�4f�C��>���b����yg���s�Y�g�Tp�{�����g��Tp�{�����7Ϥ���3�d*8��y)��7_������Tz����C�x�^)}�釥8��>Y��O��Dp�}}����oKq�}}����?W(8����
������^����c��!���R��{���C�� �8��~a����v3�������*�.�C��/�8���c�C��G�8��>e���ӿ,��{��e�C��w�8�=}�2�Y��?Z$8�޾i�����<m��}C\^����_�5š��_Sz__6š��kSz_7š��wk��2�����o{����8���� ���'Nq�}�����WNq�}��g��>t����ӟ.��x��������.��{��ł�O��\p��}����\ui�Jͯ�����/Oq��飗 �����������>���Sz_�>š���S����~������/z_@š��Tz_�@š��T��x� f��O��Dp�{�f�C��W�8��>���~O�Dp�}}���Qq�}}���?Qq�}}���oQq�}}��ןQq�}}����9�8�-��M���r�~O��ˡ��Tz__H����}��#�8�=�%�Y���d*8�=�(�Y��Oe(8�=�+�Y���e*8�=�.�����\��[|����w��e�������73z_?Mš���Tz_�Mš���Tz_�Nš���Tz_O�Y���g$8��~���O��@p�}�C���WTq�}�F��ׇTq�{�����~O��\p�}�L����Tq�}�O���Uq�}�R�������{����C�뻪8��~��C��Ӫ8�=�[�Y���k.8��~�6�����@W��SOX�Y��?l.8��������dz�l����:+�Wp���P�隹�^q�=�g���\�}}i���_m 8��>���O�Lp�}}o���Wq��}r�uy�ua����?Wq������o�{�d��u6�K=�vg��>�������*��o��|���{����[�W��G������7��x����C�� �8��~�����G8��{� ��C��;������f��<��g=�>Ź�|�����K�;������g����k� ��߱���� +��?�����&+��������,+��������2+NO��Pp�����
}����\_�pW_��s��r�}�����'Zq�}�����WZq���7� �������S+��o�����Y+����sy�I[u�ʺ�룧�u*8�.��C��t�r��x8tɑ�S��j��Cw�E}�uf������ԇ�-3�Dp��px�e��+}���������Wq�� ]�O:n��C=r��5������f��{�0�Pp��9�����^p��o'���j�o}��/��߃�2��C,�O}p��F�8��� ��am�>�uL�I}���F�}�D�� ͍^q賃�R]p��+N���Q�Ϋo��S��+�;>a��?�.������[F�8���שG�F�8�Q�g
� ��^q��G*���qF�8��};�Q�u��'��^S�׾_�գ4��sn�ج�?�S~� �����
�E�8t%O���˥���-묥/�q}\}8� ?ߔ����|�h�Op�X���>>b���u��g�׏��_� ����F ���U��} 8���������'��Wq���C
�]͌^q��)��t�n��ӿS��|;�)��g��)η=f}"8�A�>��}����������^q�s�����^g�������/�����g���G��0��C.�O}Pg��+}��N��1��^q���ͩ��5zš��J�OF�5z�����/�1�Xpֽp�y˯���
}x�ޟ�w���F�8t���g�3z�YϾ�Q�>i��Tp�_>���� �|� N��م~���^p蓉k����[�+U<������;�p��+]�կ�O7|��Q�����mӢ�}����C4iC}�ӳ���8�;S�s����{
�����Tq�����z��7�Sš��L}>d�<,��Gq�8c(�i����X��w_Z�����#�]}�K񧬧Ի�d�Y��d��z�]}�m�)�.�>�������+}��9�a��F�8�ь����f�'�Cl{:�ɽ��^q��<���Zn��������;��?�C5kH}xlG�W�����g�?o�����=���f��������O��x��>�����6>��o�Q9��5u!PolygonVertexIndexiF
!xM�cԘk�e�ضm۶m;;��۶m۶m�vr��Zg��1�s�{�_����tw�ġG��������芝_��y��v| '㕯�i�E��W�n��p^����ljy��v|'��o��Y��W�mg�gp^������y��v|�ΊO�x��=;>��w#߷���Xo1�������������������֫?�~_9����Xo��qX|���\��0�0w���ǡ�!�z�ء�O�Cڟq� n���o8����y�q`^�'d�������?�� ��|��������2�\�ވ��cLz�{~����7���f\��b`���y學���.�ދ����q{.l�� �������� ���x�r�f\�����[p)��W�`o�%�j^��� ���x�J�v\���+�;p1��W�b��E�]�^�+W�w��x�\�ރ ᥼ru{/.����5�}�^�+״���x�\�>��ᅼrm� ΋��u��8�{��7�(�+�˺_�����)}��Nf��I�%�
�Ǻ���0���-�_��=���qb�N�/��4��e'��}O��=vߏ�\x�=�g����9^}���8��GqN����,����\^��ۏp|�W�d��1���1���ս���§y�MFߟ☾��}�c�S��g³yuoh?���� � ���3��8��+7�_���+���ۯqd� ��g��M��8"��+7����{O㕛�p8�#������O8 ��+�cơ�/8��+���␸�n4�n����o8nƫ�4���o���x������ᦼ�~��O�7?qP<�Wn������W�A|o�'�^�ōyu��'���ڮ���F��f����j��� �W��pC^�g�^���y�6�����{5���vx����r\�W������p=���^��Ԯ�����f���ً�8^�-��o��������n��ᱼr;�kw�c�^��� �ƣy�vg<
���;�]�H<�W�dw�#�^��� ��y�.vw< 㕻�=�P�'������^x0�+w�{�Ax0������A�rO�_<��{�}q<�W�m���p��' ȿC����:�����ݴu�a��W�T�
N�+�� yS�m�WwY�4t�N�/���;=>���w� �����3�3vf|�����Y�);+>ig�'���8��+߳s�cvN|�΅�ع�a;>d��qy������\�~>:�����pY{�6?{?.��� ���Ҿoĥ�M�� {/.��f\���o
�����o�q�����x7.�o����vS�� ����;|�w�8�?����8��Ǵ���~����pT�9�b�����8��
G�_����@���������=;����������{;����ax�v����м�G;��C�ʟ�����!y���$�i�l���� ^9�}g��y���9�㕳��qz|�W�n_���^9�}�Ňy���%���sٗqj|�W�m_���^9�}���y���5�¾���}�r>�N�������8)��+�o�$x7�\о��]�r!�N�w�ʅ���}��o�]JE�^���Kp�z���~���.���b^}S���^�{-�W��ⅾ��۰���U�
^�o����]���8>��+��7kp%<��zx+ֽ��W�s�M}�;��Y�+�-�r <�W�4�}=.�g���~Ȏ�7�ꛒ�\���7��&^�K�qY���3y��x���~̎�����5�uo�������<G������y��-�D��`����6x������1v{<���G��H�aw���.x�ɟ�+��֫?���x�������b?�c���q�#;.~h���������C���n�^rB|��D�����C�F���r|������ ����F���rr|�����_Ń�F���r*|����2�]��7r|������_��F���rz|���s�?�܇o�������~����g�����_p(��G��=�׏b�����X?��B���v?�߼⛈�k�~���7
���}�=���~�7��&,w�=�>��������7�&����?�g�}0���g�!�/��'��������f?囘|ӛW��A�F��|��/
�=��?�����|�o���{@�7`����>��������nr��}倸�=�~Ǝ�{�ʃ��8:��+�_�h�;�<�~���n��P���������82����7�h�:��]|�k���~Î�;����}����|\����[vD܉Wߌ�5xu_�{<W�}���w��7���x.�ƫo����r�=;<����Gۍ�\�W߬��yu�+��Ү��o�ٸ���p;^���M�,\�W߬�myug7�3q^y�� ���y� vs<���'���i�%�<�n�����w8�翫r.:��f��f�����t
��b�gs�a�9y���7��x���ot?���y��ʫo��ڼ5i1�c/�-ps��[�S�f�i��<�n���ּ�$� �������x&n�+O��Y��<�n�g����8���;��c��x.��+����y��<w�G�u��q^y�����+�<W����B\�W[�ʫ-W�Ֆ+�j˕x�劼�r^m�<��\�W[֟A[�f�e�a�;֖��Cq�-�����X[.eƽ����$��{ ��.�����6�(�n�;��x'��+� �]vA��.�����^{ އ����Ѹ�=
w�G�N�������𿼺���.�0����ᾼr{�n�=p?^��=���^���������(�h��߲��O�r� ��?�ʡ��8"��+��_�H�+��~�#�o�r���������8*��+�?���3v4��Wb?���o^9����x�@�c���ڏp, 0��5`?ıq@���_���{ ����}�{4�7��X[���sߣ���?�=
����S�~�o"�_�~��7�on����W��X�H�
����k?�7ٯq<�������>�u���]~���p�������8��wq0�����;��c����N~������&,�=N��-�����|���M�M��o°?�d���!���pr߯�����[�:��5Sp��q���W;��S����M�O�Ϧ�._��ھl����o�p�/qOk_��sO�7������p2�����3����|��o2r��r�d���pO�7��˧�˗qJ�Y�Sܳ�'�K|��o�q�Op_ƻ�jp_nW����q��}1���®�s��c|#_䟥���>�]�/�Z�W�Uq.s�o� ��4�f!�����~�oV��^��8��c�P����x<������u�����X��x��m|�Ǯ�'���>�N�o���x2����^�+�)���}���{ �g��i��������,v#<��f�Yvz37�zuo�������}�����+��vy�4;#��+��O�Lx#�\�>�3�M�r�΂7�ʥ��8+��+����lx+�\�>���m�r ��.na��;x�b�a��䕋ڇp.��W.bĹ�n^��}��{x�B�~���� ��p>܌��7�����=�ֈf�.����> ���� ٳqK�4�wm����qk{ncO�m� v}�\܎W����p{,�h������N��h�����#qW{�]�=w㕇���0���{�Cp/{0�m�y�:���>�����(���o�>�� �����#؝��� ��o��>�����������C��}�������f0�a�=�@��w�^�~��]/�k�EvM�خ�����R�^fW���*x�]��+�UvE�ڮ�����Z��W>h���p>^��o��˲����>� ހ ��{q!{�]����w�"�.�{.�+��K�͸�����%�[p� �����'��{�G;$�3�+�C�/8<��������;;��#��o���;��+����82�����(��+;�����/���7��+���?8:��ǰ������cr���p��bq��p����cۏ�˿���~�]��=0���C���A|����x��|����][~�+����|�-?���1�����G�X����}Ȏ�_����8����K^9������W�G� ��t�ǟG���q�o"�������!�^9�������:�]~ͷ�&"w�3��7�qB�����b'‰�u�;�:�������on�����x�p81����ͯ#��I|����$��[|��*%�]Nf_�)��8%���^©|ז�^��ھ����qZ�Ng����38�}g�O�L�I��>����qV�Άk��9����X[֟S[��CUZ��CM^}�ײ����b\�^��� q={�oϷ��k���j�]�ǽ�=7��؇�&'�7�.���Ğ���3�C|����q�gponO������|���[p��roiO�p��7��˓���'�6�D{?������� �3���}���M&�������^���& w�wy.�=�}�����B+��x�] ���x��'�ݸ ��~�"�����<^�����㾗c�����8)�|�.�7`��.~��W���)��h�›��x3�����^���.���\���������x;N�+���;���ϣ{��=7����}am�ޅ���C�d�� �=v~����}���g�������w�"�ْ��������(��5��6�Ÿ���r��r/�=�}����{ ��������Kr��+_➆��<���|��L���&*�� �����v#.��t���ս���p3����/���f��}*n������)�pz~V>�����T��<�����naO�-q~V>����uT��|�����n��Z\�� �5�+���Y��o��>�����
x�]�ߌc��}5����u�U�^�+׶W��x �\�^��ॼrM{9�����5p;�z���=�q�=֖;�j��]�Ѹ֖{�����mw���p���]ߌ�ދW?;��t�#p_���O/[H�/[L��[JC�[Nè[I#�[M�� [Kc�[O��[�H�[�L�� [�JS�[�NӨ[�I3�9[����RS�l޹4����4��兴����Ŵ���奴�j��崌j�啴����մ���嵴�*�����*�却�ʳ�ʹ�ʲ孴�J�����J�坴����ݴ���彴�
�����
���t�����t�����t�r���t�r���t�����t�����t�2���t�2���t�ҳ��t�Ҳ��t�R���t�R���t�����t�����t����t������������������b�����b���􂢳��􊢲����"�����"�����³����²����B�����B���􃂳��􋂲�������A���Q@��������� ��-�`��-����-��P��-��0��-��p��-G���-G�H��-G�(��-G�h��-Ǥ��-ǦX��-ǥ8��-ǧx��-'�t�-'�Dt�-'�$t�-'�dt�-��t�-��Tt�-��4t�-��tt�-g� t�-g�Lt�-g�,t�-g�lt�-��t�-��\t�-��<t�-��|t�-���-�B��-�"��-�b��-����-��R��-��2��-��r��-W�
��-W�J��-W�*��-W�j��-פ��-צZ��-ץ:��-קz��-7�4�-7�F4�-7�&4�-7�f4�-��h:[nE-i*[nC�i2[nGmi"[�@�i<[�Di,[�B�i4[�F]i$[�A�i8[�E=i([�C�i0[�K��@�ܟ��e�i�e˃i�a�Ci�b��i�`�#iucˣiua�ci ub��iu`�i�c˓i�a�Si
�b��i�`�3i5g˳i5e�si5f��i5d� i�gˋi�e�Ki �f��i�d�+iUg˫iUe�ki Uf��iUd�i�g˛i�e�[i �f��i�d�;ig˻ie�{if��id���gˇ��e�G��f����d�'�eg˧�ee�g� ef���ed���g˗��e�W�
�f����d�7�%g˷�%e�w�%f˳�w�,JȾ�~H(>[~L�(.[~JO(6[~N�(&[~I/(:[~M�(*[~Ko(2[~O�("[�H(<[�L�(,[�J_(4[�N�($[�I?(8[�M�(([�K(0[��S@��������7(��l98��l9$���l94���l9,���l9<���l9"E��l92E��l9*E��l9:E��l9&Š�l96Ţ�l9.š�l9>ţ�l9!%��l91%��l9)%��l99%��l9%���l95���l9-���l9=���l9#e��l93e��l9+e��l9;e��l9'���l97墣l9/���l9?壃l� ��l�0��l�(��l�8��l�$���l�4���l�,���l�<���l�"U��l�2U��l�*U��l�:U��l�&ՠ�l�6բ�lY�g�-f�eקz��-7�4�-7�F4�-7�&4�-7�f4�-��h:[nE-i*[nC�i2[nGmi"[�@�i<[�Di,[�B�i4[�F]i$[�A�i8[�E=i([�C�i0[�K��@�ܟ��e�i�e˃i�a�Ci�b��i�`�#iucˣiua�ci ub��iu`�i�c˓i�a�Si
�b��i�`�3i5g˳i5e�si5f��i5d� i�gˋi�e�Ki �f��i�d�+iUg˫iUe�ki Uf��iUd�i�g˛i�e�[i �f��i�d�;ig˻ie�{if��id���gˇ��e�G��f����d�'�eg˧�ee�g� ef���ed���g˗��e�W�
�f����d�7�%g˷�%e�w�%f���%d���gˏ��e�O� �f����d�/�Eg˯�Ee�o� Ef���Ed���g˟��e�_� �f����d�?�g˿�e��f����
ȖS ��������:������O��B�w��B�W����g����G��"�{��"�[����k����K��b�s��b�S����c����C����}����]�����m�����M���R�u���R�U�����e�����E���2�y���2�Y�����i�����I���r�q���r�Q�����a�����A�\�
�~�\�
�^�\���n�\���N�\�J�v�\�J�V�\���f�\���F�\�*�z�\�*�Z�\���j�\���J�\�j�r�\�j�R�\���b�\���B�ܐ�|�ܘ�\�ܔ��l�ܜ��L�܂���l����l� ���l����l����l�u��l� u��l�u��l�u��l����l����l�/�K�r꧗-�ԗ-�Aԇ-�!ԋ-�aԃ-��ԍ-��Qԅ-��1ԉ-��qԁ-O� Ԏ-O�IԆ-O�)Ԋ-O�iԂ-ϤԜ-ϦYԔ-ϥ9Ԙ-ϧyԐ-/�T�-/�ET�-/�%T�-/�eT�-��T�-��UT�-��5T�-��uT�-o� T�-o�MT�-o�-T�-o�mT�-��T�-��]T�-��=T�-��}T�-���-�C��-�#��-�c��-����-��S��-��3��-��s��-_� ��-_�K��-_�+��-_�k��-ߤ��-ߦ[��-ߥ;��-ߧ{��-?��-?�G�-?�'�-?�g�-���-��W�-��7�-��w�-��-�O�-�/�-�o�-���-��_�-��?�- ���) [L���W������o����O��B�w��B�W����g����G��"�{��"�[����k����K��b�s��b�S����c����C����}����]�����m�����M���R�u���R�U�����e�����E���2�y���2�Y�����i�����I���r�q���r�Q�����a�����A�\�
�~�\�
�^�\���n�\���N�\�J�v�\�J�V�\���f�\���F�\�*�z�\�*�Z�\���j�\���J�\�j�r�\�j�R����������T����Ԁ����Ԉ����Ԅf���Ԍf���Mg˭�%Me�m�5Mf���-Md��=�g˝�#�e�]�3�f�ݨ+�d�=�; g˽�' e�}�7 f�}�_Ȗ�S?�ly ��ly0 �>ly( �^ly8 �ly$��nly4��.ly,��Nly<��ly"M�vly2M�6ly*M�Vly:M�ly&͠�ly6͢�ly.͡�ly>ͣ�ly!-��ly1-��ly)-��ly9-��ly%���ly5���ly-���ly=���ly#m��ly3m��ly+m��ly;m��ly'���ly7���ly/���ly?���l� ��l�0��l�(��l�8��l�$���l�4���l�,���l�<���l�"]��l�2]��l�*]��l�:]��l�&ݠ�l�6ݢ�l�.ݡ�l�>ݣ�l�!=��l�1=��l�)=��l�9=��l�%���l�5���l�-���l�=���l�#}��l�3}��l�+}��l�;}��l�'���l�.ա���=�S78��Edgesi��x����b�1G#��o&7�;s�ܱ��C�ܹc�c!�B#�f!s��r7B�X�������x?ޟ���~��W^y�T�&�@������d �Ld�MB�Fvr��\�!/�(@!
S�b��$�(C9�(O*Q�*T��Ԥ��K}�4� My����Zӆv��C:���L�ҍ��A/zӗ� �S1�� g#��2�ϙ�$�0�/�A43���2��XH �X�7,e߲�XV����c?�����f~"�~f;;�I"���^�s�C&��8�1Np�Ӝ�,�8�E.q��$s����&������>x�#R��'<�9/x�T��LZґ�2��,���ld'o��<�%?)Da�R���4e)G�P�JT�*թA8�R�:ԥ>�ѐӄf�O >��iK{:�!��$�.|D7��1=�E�� �ȧ f(��g�b4c�x&0��LaәA43���2�,�k��oX�r�e%��b ��:ֳ��lb3?O���/�$���a8�!s��8�qNp��9�Y��<�����u�����;��>��G����<�9/�ꫤ"��H����7HOB�Hf�J6�";9y���%�)Ha�P�┠e(K�y��T�
U�N85�Em�P��GCј�4�9-��V������t�Dх������'��K?>a��2��dc�8>g���Lg_2���e�Y@ _��%,e�YA,߱�5ı�u�g#?��-ij����_Hd���~p�_I��q����s�s��.q�+��5��7��-ns����!�������x� ^6� �4�N0�x� d$�y�P��9�I.���|� �)B1�S�Ҕ�,a���L�Q�pjR��ԡ.�h@C"hL��>-h���-����t$�(:�]�����}�K?�3�O��2����1� Ld2S��� ���bs��W,$�E,����oYI,߱���c-?���lb3[�'����~!���a/�9�!���r���4�s�?8�.r��\%�k\�������>x�#R��'<�9/x٬�"��$�`Ғ�􄐑Ld!��d#;9y�\�!/�)H!
S�┠$�)K9�x��T�2U�N �y��ԡ�i@C"hDc��>-hI+ZӖvt�#��$�.|DW�Ӄ���}�� �S3�a��3F2����s&0��Le_0�hf2�9�c>_���Y�b�a����|�*��=q��6�#���Oē��lc;;��n����� �9�o�8'9����p��\�
��u��&����q�<���S��9/x�5Y%��HC��� �BF2�&�d�-�����M^򑟂�E)NIJQ����<�P��T�*թAMjQ�:ԣ>�ѐF4�)�hN >�5mhK{:БH�G]�J7�Ӄ^��/���2�! e8#�(�0�q|�D&1��Lc:�|�,f3�y|�b���,���-+��;V��8������lf �l%�m����n����W�8�o�'9����<��e��'�\�7��m�r��<��I� �����|��Jj$��IK:ғ�2��7�J6�"o����%?(Da�P���e(G��@%*S�jT'�w�Em�R�4$��4�)�Ӝ���5miG{>��Dљ.t�;Ӄ^��/���@>eC�pF0�Q�f c��Ld���T�`:�|�,�0�y|�BbX����oY�JbY�j��=q��ֳ�Mlf �$�3���N������0I�(�9�INs����<��e���5��7��;����G��/Oy�s^�j��^# A��7HO�L�������&��OA
Q����(MY��;T���J5jλԢu��{4$��4��ӂ���5miO>��Dљ��JwzГ���/�П�|�`�2��|�HF3�q�g���1�D�%3���2�,$�E,�����$�U��{�X�z6��Ml�'�I`����$����c?���$��8� N�;g8�\�"��Ÿ$s����-�����C��1)��S��9/x5H}%�@�D0iy� ����d!�l�Er�6��K>�S����)A)�P�r���L�Q���]jS�z��="hD�Ҍ���Zцv��C:���� э��A/zӇ~�g��2�|�(�0��|�&1��Lc:�|�,f3�y|�b��E,a)�X�
b��լ�{�����F~d3[�g+ lc���.v���� ����r�����s�s������$����&���]����<�1)<��񜗟�����$��IK:� �Df�$+��Nr��<�%(Ha�R���� e �*P��T�5�&��C]�р�DЈ&4�}�ӒV�� ����t$�(:�]��������'�g�2�! e8�1�Q�a����Lf
S���� ���b6s��W,$�E,f KY�r�%�U��{�X�l`#?����'����v��.������I�7�r���4g8���"���U���u����������G<�_����x��AU*x�@�x���Az2��Ld!��d#;9x���!/�)Da�R���4e(G�P�JT�*ըA8�R�:ԥ> hH�iJ3ާЊ6���H'"�� э�|LOzӇ~|B2�� a#��Q�f ���L`���4�3�hf2�9�e> XH �X�7,e9+XI,�X��ı��l`#���Oē�6�����b7{��~�+�I�7�q���w�p�?��E.q�?I�q�[��w��}��1)<�)���WҪ��"�@�D0�x�􄐑̼I(Yy��$��C>
P�B�(�)I)JS�0�S��T�
U�N85y��ԥ�y�ј�4�9-��ִ�-��@G"�Qt� ��Nzқ>��� 3�a��3F1����s&0��Leә���d6s��|�b1|��a߲�X�c5k�c-?�����f��[��m����n����W�8�o�'9����p�K\�*��unp����]�q��<�1������ ^�S�� �u�IGz2B&2�&�d#;9�I.r��|� �)J1�S�R��a���LU�Q�pjR��ԥ> x�фf�OsZ��iK;��!�$��t�+������7}�G�)��P�3���a,���D&1�i|�t���,f3��|�bX�b����|�JbY�j��Z~`=��f��V~f;;��Dv������8LG8�qNp�Ӝ�,�8�.q����5��7�������G��/Ox����7��ԼF A��t�'��d" �d%�����"��O
R�"�8%(I)JS�r��*R��T�:5�]�P��4�!4�1MhJ3�ӂ���5mhG{:БNDEg�Еnt�=�E�ҏ� ` ���1��d��x&0�ILf
S��tf�Lf1���c> XH �X������`%��b5k�c-�X�6���l!��$����`'��b{��r��$q���8'9�i�p�s�������5�s����6w��}��G<&�'<��y��e�T�&�@�D0iIGz2B&2��P����� '��M����0E(FqJP�Ҕ�a���D�R��S�ZԦ��OA#�Дf4�-iEk�Ў�t�#��$��t�+��Nzҋ>����@1�! c8#�(F3�q�g���2��� ���b6s��|����%,e�Y�JbY�j��Zֱ� ld��B<[I`���N�������I�G9�qNr�Ӝ�,�8�.r�+\%�k\�7��m�p��<�!�xL
Ox�3�󂗋��HM��!�`Ғ��d �Ld& �d%��ANr��<�#?(Da�P�┠�)C9�(O*R�*T�5�&��M�Q�4$�F4�)�hN ZҊִ���@G:I��BW�ѝ��}�K?�3�� b0C�pF0�Q�f,��&2�)LeәA43��l�2��,`!1,b1KX�2����IJ�լ!���c=��&6��x���6����$��=�e8�!���r�����9�Y�q� \�2W�J2׸� nr����.�y�C�����g<�/�pS��IC��#=!#��LB�J6�����"7y�G~
P����)A)JS�r�Q�
T�U�J5jNMjQ�:ԣ> hH�hBS�ќ���iC;�Ӂ�t"�(:Ӆ�t�;=�I/�З~�g�`�0���`$��X�1� LdS��4�3�hf2���e�Y�BbX�b���e,g+�e�YCkY�z6��Mlf �l%�mlg;Id{��>p�C&�#��9�)Ns����<��e�p�d�q������]����<�1)<�)�x� ^�(�H�x�`Ғ��d �Ld& �d%��ANr��<�#?(Da�P�┠�)C9�(O*R�*T�5�&��M�Q�4$�F4�)�hN ZҊִ���@G:I��BW�ѝ��}�K?�3�� b0C�pF0�Q�f,��&2�)LeәA43��l�2��,`!1,b1KX�2����IJ�լ!���c=��&6��x���6����$��=�e8�!���r�����9�Y�q� \�2W�J2׸� nr����.�y�C�����g<�/0R��IC��%��@��LB�J6�����"7y�G~
P����)A)JS�r�Q�
T�U�J5jNMjQ�:ԣ> hH�hBS�ќ���5mhK;�Ӂ�t"�(:Ӆ�t�;=�I/�З~�g�`�0���`$��X�1� LdS��4�3�hf2���e�Y�BbX�b���e,g+�e�YCkY�z6��Mlf �l%�mlg;Id{��>p�C&�#��9�)Ns����<��e�p�d�q������]����<�1)<�)�x� ^�,��&�@�D0iIGz2B&2��P����� '��M����0E(FqJP�Ҕ�a���D�R��S�ZԦ��OA#�Дf4�-iEk�Ў�t�#��$��t�+��Nzҋ>����@1�! c8#�(F3�q�g���2��� ���b6s��|����%,e�Y�JbY�j��Zֱ� ld��B<[I`���N�������I�G9�qNr�Ӝ�,�8�.r�+\%�k\�7��m�p��<�!�xL
Ox�3�����w�HM��!�`Ғ��d �Ld& �d%��ANr��<�#?(Da�P�┠�)C9�(O*R�*T�5�&��M�Q�4$�F4�)�hN ZҊִ���@G:I��BW�ѝ��}�K?�3�� b0C�pF0�Q�f,��&2�)LeәA43��l�2��,`!1,b1KX�2����IJ�լ!���c=��&6��x���6����$��=�e8�!���r�����9�Y�q� \�2W�J2׸� nr����.�y�C�����g<�/OS@ i�u�IK:ғ�2��,���ld'9�En������)B1�S�R�� ��<�H%�P�j� ��Ԣ6u�G}Аф�4�9-hI+Zӆv���D$Qt� ]�FwzГ^��/���2�� a��HF1���c<��$�0�iLg��d���<泀�İ��,a)�X�
V�*V��8ֲ��l`#�����J���v��.���}� �8LG8�1�s�S�� g9�y.p��\�*�\�:7��-ns����y�cRx�S����<�NEj$ A��t�'!d"3Y%+��Nr����!�)@!
S�b��(M�Fy*P�JT�*ըA85�E�'�fu~�LayerElementNormalIu�VersionIe��NameS‹MappingInformationTypeSByPolygonVertex�� ReferenceInformationTypeSDirectq�k:Normalsd�B^:x��w����?�3o��ĘH�����A:�{&���^[~��EA�F)wDT����Б"�xπX@��A1�"�#`���5w_���q���j8p���γ�^�̞={�X���=c�����O��S�/��r]C|�f�?�}XR�͔.?T����P����[����;ǟu_aY��������������S�� ��k�/.�*��Ĥ���P���y��g:^py~�*��"i;�W.��G�G.�ھFՑ�p�O5��r�<s��e���J.���}N���x��?���5?�\\�_������T..O+���5�L�py���u�zP��ܚ��ݦx�\�E|J�/��M��X.&�'Y<��;^5���i�sH'Y=�[�̛_��q|��
W�ǽ��:��ǹ<V�2�
�sa$�cዏ?I��ꫢ����5�֓�����ῦ�`����j{v����)?\�}����a~��c���U/H'�"Q�ݎ�;�3��W{�x�_�{q�.F��r]�>%ʏW����pyZ����}�65ϲ]q�{���M:\�V��:�\ߕ羟����&��f�n<.���gyj}�x<&w�u���_pyZ�����M-��w.�*���\\��~�I����Oj:c��b*����%�_��%����%.wߚ4�T..���#j<�ry~z��?�����#�������c����;�o����򓖎���CLy�rw�a�t�ܫ�r��#�!�����ߢ�#�!��nj��X��;���)���T��T..�ϳ���lީcc~�<���ud;��<��D�N�j�3�K'�5�;�o��]7��
�<���7���r���x<��x��rq�=j}[S�����S��r��s���\����폒��˹����2����<�A�~�/�����N���~�<�x*�N����qY�C.����8�ry<?2.�����߹<�7��\۳u�6���cK�瘌��J~Ҋ'�����~��!u�<����I����<syZ�x��ڿd~�<���n��,���%���\��9�?k��T..�����'�/g��GMy���+oI���u�uu���|eO�����'�i�aY<L�}�Y��c���ݠ�����w�|��/<&��S��]y��� w�/ԝ�|�˭�' 5����X_�u����Q\ G|L4sg�3�71yj�Lms���\.�G;���q�ܾ��;�v(���w�7��3yZy�W,2�\�G��˃#~f��ry�o�s�~���x�(��OEӱ��Ҹ.��n��c���ɽ�:��pyjywAOS�,&wG>q�I��S+W�P���/������$W�ʏ�tBS;�����h:N��W�����r�w����}�I��������oҮ�H.O�އT6�csy~@�ڡ�j?�����p�� ��}�\�G����c���5��Oy���_�s�'k'?ּ%m���f 0��s��99B��O���:���er��VmI�py�� �(�}YyQ�ܻ��S���~}�`5�~����u�)�ɕ��?�����q��8�yS�\&����<�
��˟��x]��r�ݯ���[ݭ��\\�<�Ҹ.��޴���˃6����������˿����՗[�k��\\^��$��zc�q ���+Y<��_�'��޻H;/�ɑ�F�_��)���҉rq(�&�]c7,.��g�Q�˿n���r�G��Gg�����0�{��+�����J0�?).�%�S���ā�r�yo���W�d<q}.�}?Q��J���1.�ǟ4��t��b��O������ 4�pyZ�
� �}�\\��8��<F.O�\����'d���9k�j�����V��7�t�<�`��{�L�q�r�q���OU'�Ӝ����E�e&w���bj�\��B�ʵ~_��q5������k~��]�6�.��!i�ܿMz���<�x��'k׭d��<�x�� G��� e�br������������:\�����Ԟ�<�W��͟��q����|��ƍ��vV뫬\\�'i}�d��D�
�~��T�l~���M� �<�ry�O6ާ���ŧ�j����\g������OZ:�S�j�w����i�S�t��A��W����P�����%7�0�L�N�q,�S�����#���s��������˽=���s��?m^3����|���}(9�D�0�_�:�?κNͳlo\֟����e�����'�x�)�uH�.��#뫢pY�x<?��t�bj�\�V����W������I��e<q��{�o��T_\�V���e���pyZ�XWl4��er��۪y����S+W�P��iXX�8��rk��{��)�_���D��������v�v�����}I�)?������0WL�w.�OO�������}����!�d��]�&�E\��s�O4�yC:�3� .w>=�Yc?e�x��+�l�6J.w�[]`���U���c��x���n��?���M������3\�G�;���gw����rq����~&6�/X�q��ZW5ϲ����1����<�X��ôt�1���rkp���z�yf���%�w�+��;p�[W��,��+�z�����<��Dyv?�~�ڿ�����:ߕs� ���\S{�r{ۓ��VR�˿kP>e<q}.G�?>�c�o���y��������zj{���������h�e������\#.O�\?Y�����o��\���Dǝ|�dǯ�tܞSQ��2?\�V<]G�'��������\����J;<X�q��>�x~2:{�y�t���<^ ��=��j�y�r��Z���qy~���g�5����ˎ�c��r뫖CLyf���j���X�Q�=w��3^���X8�c�q�9�M�T_\��`y@�a��/���˃��Rud<\�3i���j��(u���z�e���r�f`\��rk�yW��a��D'j�n�;��w�g.�'Y���td{��s��O\�������)p��=�6~n;A���Nz��^�������%�e��ޒ����e��<�x��7]n�3���A���e~��?w>��)?\^^�#�ᨕ��Ѹ����M�.Gq������l��;.�q�=�L����G\._`��q���z�}v\���d����G��Oe~�<��������z���ʕ/��z�=a������$��`�އL���OE����4���<^��~�.�}=Q;���Wg啋My��<�`�Z.oܾi�rqy~��՗�b��oY�7.{|fܷ��� Gj�wd;�r��A�~�����.���N�z7�p����d/����\.ڡI砼Š��2���n�yy�w#t�<���}"o}^���i����/���&�w�gg�=�H�����J�!�o�G��i�>sQ_\^��� ��wߺ(��U�S�?��8L��s��� ��������o7�cqy, �����E��/i�}�).���>'��:2���+Z<�\-?i�sH'����{�fP�$߁ .[g7�<�?�4R'��E�O�����n1���S�������0�{Vcm�!�.�n��������aG+o�P�pyZyNMg�����eqy~@��s�L��rp�o���������IKǟ��=WM���S�������ӊ'�#Ǎ��N���qy<���r�_�)�$m?���������g{j��j<�\\�V<MǩU�I5?���qyE+WZ���o�{~�8�pyZ�Ttٿ�q��y�<�w*Z����˺��Ϣ_py��$�ǫ9�j�8�������6���ܞ�J{��,���kՆ���y~@�� ��|�t�����cκ�Pq.��� �g�ʏ,� N���'�o\�r�OyO%?�_�G"���OR�`I�aj;�:\N���IT.��Iw�� ..��y]��ݽ�v2�����ЧD���y�v~�S�t�<�6��)�\�Z�����'%�p�aϛ���k����$�-!���|� �������rqyZ��+�ֱs��~�<�x��;�)�����1]L���ݽg��ç�S&�L}B���˽y����&�������NAɃ����<?�T�UY_qy.�}?�x��x��>m�3����4�y����ӊ������/���&O�\^�;��A.O+���Nڸ�ӥ���~�����R���*WZ:Ξ��L�������p�Od��Me\E�\�V<��c�zR�}�b����W��D��^z�������`����s����9���<^������z ?`����i�ٹ����~��iœ��;��ㅺ�/.�%�S�~zH����wWχM���S��[ˍ��������5Nj�������r�>Y~����i�/.��1ޗ��ֽi����5j�\�� ��`D��������IV_��N֞/!��������rqyZ��?�\��Y..O+��t��=Ǹρ��V'j�
d~��n�L��_�������t�q���iœ�Np����#���ӊ��鸿���i��x������_��[L�S.�Ǔ����uH�|�v�v�d����a;���\�3i<�wr���q��ӊ'���0N�I�N-��<O�s��w��_�����V�x<���+O��*Z<i���NY ��:Sf���z�P��'�xҪ��ʕT'��U[��:\n�f���*��m6�4ϴ�ܝ��HS<\����l���ox�j�v�m�o��i�i������i�S�t��O�nj�\^��U�♶k��ZL�~��_���r덡��(.wΘ���\l~טy�r9L�wy��r{� ���������D��wۮWMyf�>�}�T.����J�g��E�L�����j�I����JZ_���sLy����IM��Υ�<[\�P�~�/��9��-1���ύ7�4����;���/��\l��޹�?q�`S�������)�{M�>��K�c\n�v��@�pyX��XS~�<xc� j�rUN��˽�_�{0�&����|}�ɽ �Ѯ��<syZ�4<'Ю�x���ql����<syZ�r.��<|��Op�L���t����i�S�t�!G�������|6��i�������L�:�4�[\���r���˂��rq������#�g.�F�}�).��v}��/�<����.ϯ�d�go�����pyZ�5;z�x�<�x�q��~SO�<?�r��޻=��L�V�ʸ��˃�S��C.�Os�~�S� �_dǸ<�����G�����sx�d�8���g������6�cL�V~�����T�\�V<^�?]k���ӊ����g�/.��
�������y.�L�b��ϱ�ۗœ�?��ȝt����\n߹~��~d~����vUG�����Y�ǝp���uu.��K�����õ�VR���~s��v�m��r���<i����j�(���������\a��������uH&o���������<�O�O�c{��C�O��Cy��y����3�[�ܩjWm&O��\��q����%�'�Ve��j���˭��a:���p�_g���˃�M����pm��T�.ϯ�d���h˳��p����U˕��������)��wOx���W~n<?�rwz#m}^��ͯy���\.��o��������k��Wr�w� ����˝��h��,���%�"�χt���÷ȃ��Q���~��_;�uܐ�.�B��_��5��*/��~�]EU�j��V�+�<�NҪ����O%��h��9o\n���q���=��JK'q��jJgӼ���x��y�W�ю2?\�_��������,���U��0P�x��~i��s�3��v���pyxv��M����%����˽�^����5��r�=�*m_�l�\���Ȩ���f(>&������cs����s���=m������Qww4�6�v�����<��JM��2㺄�局���?����s��/�=����<�x�_�i�/��ӊ�wd����ӊǙ2w�).O+��7g��16��˸~�1y�\�����۾l�/.�.�=Θg&��'�9ѸLx40���V��LV�SV_L���׸ߘ��ʏS30�������>�zS}qyZ��v�).O+�����+���={C_c}1�{�a���\lx�rS<\K���h<��,���>�x*�Ny�ǩ���i����1����x{�h�U���;��e��\�V�C{��> .w^\i|N��U������Ⱦ�zP4>s�.A�R�sJ��㵽�8�������G���W-.��\��N�z��{�|��ӊ'5�Ym��aY�sy~@�Z�aד�}���(.�g�c�~����I��#��/��iœ�N�}��>).O+��tFo�f:ZL����[������ 0���� G��p�����L�C6ϯ�r��I����}�ɉ��.� ��^-�6t_~P���p��=��O����"�/���;��kE��]�K~����S����������M:� �oko�� ������{e/���|?�}Pk�<�o�<B~�=�(d�^Ӕڭ=y��G�O�C�����0�c����!?&.����:��5q��@����ItDyM���x����{�%��r����|!{4"�td������J��Q�qT_�����]���k��3u��k"�q˗���;�/��]}�� G��/U����nK���߿��#�{���_�L�G�E�^�yQ�C.U��ꄽ�D���,Q�G~��}�7t\q
�[�G���6��[-����#���/>?�o�}���8W'8�1�o��MUq��,��ۅ����L>�l������4�Zo�Q��~��W/K�/k��< q�N���5"~wB��j��#��>�z�j�@��@��:��9������I�q���/���з_�Y�G�������wg���L�Oz!��"{k��e���h����su�G-�^q �!��"{��s)?�1�>�\�����~�ݤ�#��"{�A�Q�[��Ӭx/}!�ձZ�'t��NMq���m�*�^� Mq�NPo�딗lOMq�ه;����/5}Ĺ:��~�P��{�� p��� �{���s�6> �ձ�����Z���7ġ_����c�6ߨ�ψ#��>l�O:��w/��/��8#j����k�v�B�E�^�Y4o���q���6Ѽ����Q;�Յxy��x���9�n��SMq�Τʻ�n4�C}.~đ_`�4}�ڍ7�5jGRq����ߣvog�~ ����=6P� �]O�X�#��B���и��oC������ؽ�q���h-u�8�������q?h��"�}"�ձ������|M�G�E�~fQ�ߢ�lUq�NX������ƨ��#�Ⱦlޓ[���#��|(ƹ:aI4��[>>V�G�5����Q�[��+�>��/���}�������8W�.<��ÂMo���#��>�w�_���wT}Ĺ:�W#h��'��}Uq�ٻ=^��3���y�l��su���������y��G�E�^�t���\N��Rq�ΎWi^��:�� ��G�{���4���s�:@�cꄣo�y��m�:�� ��"{kdO����mP���C�A��`����>��/�gw]���ܙQm���8WǛR���wg6آ�#��"{�n�h]��[U}Ĺ:~��i]�}�EMq����.�y�s��65~�Q<@ǪwGt~��4}đ_d�� Q�^�+�>�l�ZS���d���8�؇5��V���������;w����O@�E��z���&�"^�su��@4���T�H>�/3G~�}��L��)}'���su���Q����U�G~��}�W��,z[�G��c�+���W�L��#��/��>?;:l��#5~��:7���T?�����x��x���L��FI�^��C��c �"Zhڃ�Y2~đ_dN������*T�Rq�N0x-]� �H�t��8���-���h7^6�c�p�Ne�&j��|Q�#�Z��i>lV&���,��G�����H�;�U5}đ_d�t%]?�[/���\�mH�-N��7Q=��q��[����
{����'�\��y��~�]J묲� ��"{�ֳ7 }���P��\����4o��y���8� � �м�=e���p������U~�w��1�=��%���W��'��E���n>��K��Gk���#��ު���[^�ӵ��\�0������ �����/���3H߯�^��#�� ��=���'����#���l�����KU}Ĺ:N/���:��K�G�E�^��h��'��B�G���]�w}��#������ڨ��!�1u�Sw��ӻz�j5~đ_h�c��N��1p��_�w�:�>U�G�E�A絴>��t�:Uq��W�t:�z���qX�?�#��>\�uu6'�|Vm�?�\{սt\�t�㼌q��;3�E�]_�����긓jӼ!��3�#d��#���݈����i�c��x��?��4/� k��#���j�o�h?^��4���A���֘�*�����>��/�?���B�/Y��[�su�FKF �0�G�G���M�s���.���8[���#�nX�W�G�����`�t��|��#��q��0W��E�4}đ_d�4�&���]q� o\,��Gh���x��;�At�q�����8[�ޔ�"�������8��{MZ@�۪�����ՙ5��m~�˴㋇8��۫�y[���b�G3G~����5���������X5��m;?��'�#����r �?�[h�+Ĺ:�M'R�v�_j�Cđ_d޼e�h�^�9��p����7�� �J��#��A�~������;�M���r/��:=�R��^jI�p�zNq�wz?C��[m,�����#���=P��e�包j~���E���Sk�<Uq����wI?h�n���8W'������EUq��[N4� ��_�G<�����{M���x���/)?~� �h��������E;�����K�>������j�w�L���#����oE�i�d���8���ݒ1��U=���r|@��c�����u5~đ_d��E���*���#�ձ
���Ӷ�D�G�:v�A��U{]�G~�����~�Y��!�\���t�
m���!��A�ށ3��լ�^��su����@��Q<���ihwW�I����j '}��q����o�3��#�(h���пMk�!�\o���~������/���.����}�c5��su읿��m0r�'�>��/�Gw�y�7~�6�G��� 9i��۞v婬���"����h\h�Rq������^|���8� t��o�"��̛�>��/��^�1��;��;��u�V�I)�ה�q���V�>��~X�Q�q����g }�h���8������E��EC4}Ĺ:V�{�����32��p�ه�?[$��>'k��su�SZ?�z�q@q��۵}����y�>�\����tߑ�� m} q��{SΎ�'����#��qZ����}��7đ_d�f��}e�m���q�NPy%]�r�5��G~����_�4}J[�C���]=���7���|Y��E:�ȉ����Mj��#���0����ۯ��']�Q<�ީ3����7��'�#���7x-�o׿@��2���x�N�g�����i}�q��=q�z����:qiw�_do�*�@�g�K��'�\���5��=�xm�q�ٻ����wX��q��<��������S����+�/ߥ��t�}�!�.��.�/���4r�З�5J{�Q<��i�<�+�E ��!G���_�u����>��/�� �y[��.�����@��:���t}0�u-�S��8���퉏������[���8W�ou1]� [tݬ�#��"{k�ϣ��[�I�G���W�$�&{4���#���G㾻m�>��/�_D�E�� :N��#��q�ՠy�7� �GH}�-���]M�*�j%�I}Ĺ:��.�D��*��y��G����������Q��)�\���4���8t �G���=ג�_o�r��su��;���q�;�>��/�����~��?�5}�Q<�>8�6:�m|�|Uq�w��I?��q���8W'������G�P��~�N���-� ��#��"{�^�8ԩq��A�h�Aޔ�4���.���-��;�>]q�4֎��#��ޮ�+�?��sJ���8W'���僂k�#��"{���E�\�N�?j�7Ĺ:��� ������G~��[g�kB��ܫ�#����)��}�d���8���-�+�����#��qkM�B����͕C�G~��۬��f>��G�{�i��з��9��g��Q<��j�u�������A���49y�� 3�5}đ_d�7}w�����4}Ĺ:n��󄾝y\�G���-��P軅M5}p��=����g�����#���kG��^���#��q���?�l��?"��"{��C��p?o��?"��q��D�������Gđ_doU?<Z_���ю�^�su� �h}�oxa��W�q�wƽ�֋�Ae��su���Q����T��8����^���o�S���l�� �ݸ��tC��#�����/��;�Nў��8��������z����w�su�W��qǩ6��9��Q<��)�L���z�"�A��:V����zO���#��"{��8�߮���su��O��V�~ST}đ_d/�;#t�Æ����u�h�V��W�G���:�|/k���+��Qy��H;�~0i'�Ӱ�H�ܻ���6�H��s�)�g��H���E��K�K� 哯oc���6�e�<��j<��8���D���7���<��Ĉ�~x'���h��k>o�?�(ddV��S��4Uq��W4�����YUq���ه��k�D�(��!����D�{�f-�����~����3��c�g0s�q{5��kW��W#���[�O��W��A�:v�_����`�JUq��{M��(t��i����7UZ/�����u��� 8� ��:�I7�z#]Ǔ���x�����h�{g����su�!'�^�=z�Z���x�}��V����D�H�q���hy�xVo�Rq������ȋ��b��R?����g��|�{���8����F�)���Gǁ� ����g�ַ34}đ_d��B�� ����8Wǭ3v8�{�sMq��[ ���_:���q�NU�Ѭ���G���j�!�~t��q��{-�+�âh�%������:9�_��/��/�wM���A�
Mq�NЦ]���+yM�G���Uk��n�XM�����>�5�o�<��#��"{��w����G���\�����(�}Zi�#�����^���U�?�����w���ȯ��2:>�5/���Y���Ϡ�n0�cm��8WǞ>��%��$�D.�_đ_dv��A��ko�y�t�8W���&�o��yG~���q��4�F���C��:�����`���q�ٻS'| �o�~�6C�����t�v�6�B�E�V��/��}jk��\���sI?��t�]�G~��_�����J6����x�}� �gEЎ�����03g��mn���Y���8�����X�Wk?�su���V��˫���8����vW�"��!�g��/�Q<@��4�S�o7�_;�E�E�ޤ�6}g�0m|F���ݽ�� �����8����֋��w����_F����]����y��[�B�:N��m�~j|�j&��G~�}vc�_��$U?����-���V�ô��8����>���W�l���8W',�I����'�A�G~����C��i9���su�l�(�:�H}đ_d���B�v���A��c<�{���]G�:A돢q��}���f��"�������6k��O@��L_C� �Jm��/�qv�և�Π��l?�#����ن��n�����q�N��Ѹ��:N��G~��3�$w��U֩�#�ձ_���K���_��#��"���ʹ��߼���2?�su�v We������G~��[0�����K��d���x�N�4,=?:��Rq�ه�v,� Z��#�֩�g�з�?L��8�ٷ޳H�;�'�<�Lq��S�^�V����x�B��ۣ�ۙ�4�p�N��+�3��p�� ��"{��Ռ�cY۳R\���ia��k����ou��=~,��L�ރ�S��h��L��/�w
�{�з�Bk?�su��Ǽ+��^����8� t܉ߧ���KG~�}����/l�E����C��y�=��&*Gi#��"{��Ѽ��{��#�\���.4/������#��>���n�y�6�A��c��-�%�j�7đ_do��I����nm��8Wǽm �;<N��q�٫����O�Q<��ت:�WwS�u�����G~��;�9�;v�_��HyĹ:^�y��)�9FRq��6�q�n��B5o.�\+=7��{qt���E:^v�ڷ������U�~��S�� ��A��~R���4R�G��#��a7;�~Uq�����v�}3�n�{�>�<�[gq����${���C5}p�NP����œU}�-��{�y���T��#�ձ�E�����#��B�>"����o���\�`��Ѽ����Fđ_d�Ͼ0ү�[�.�8W��9��/NÓ�}^�}q���XB�B������͜�s�R:�����]_�G�{g�p����L��9d~G~����O4�rj��Dk��su�m�����<�SUq�w6�@�N���hN�p�����;��WmP�GŃ��խh��޳Q�G��3�U:?�?��։K�cy��x������~y�5~đ_d�׼��O�ٗ�:��q���y`qV�8|�?��/��}��Jzj���uZuzE��g�����x�}���Ln}I�O�8S'���1�?�� ��"{��cD���ij��su�gE�{Y����#��ޫ3��%vQt�M4U���t�֓��8���đ_d��<��_Ĺ:�K����A����q��{�ZӼ!l�[?����Ѽ!ػn��>G� {��!4opo��_��X5�Ѽ!ة?�q��{�ϤyC0~�v|G����E����ծ�#��"{g����^ku��l�yE��ӤrT�û�Vۏ�8��쭽ݩ]�n'm&�\��sԯ���}��8� ���G���;�� �Q<���uQ4��ꮟ�� ��#���/k�G�@��Ӹ��:��p����W{w���8����l�/�i4b���8W',�~��n��U}đ_dn��?�/^���C�r��7��t�-�4}đ_h�پM��f��������L%}��)sT}�C��{Z����Hm�q����Z? j���Yň#��>x�Z�p����� �ձw?�Q�����Se��#�о�?h} ��~�p��[�!��;��٠��������uz<C� ��"�"{�Z?ڗ��L�H�#��qNy�������R�#�����Gy�֭e���x�NP�o��T�����#��ޯ~񫙜�S2X��\��ѷ��]|���8��������[�Ĺ:~�et~��\��đ_dﮮ�{N+�qH�/�\�e4/wMY�����/��^*��[���7đ_d�M�u��V��C��:~���D�t������#��>�y���I7�:��_��:�����[��v� G� ��!����}$e�#��qԥ�s��m~�x�B���w��F�T�O8W��>F�{�f�S�G~�����W)�燀su��ۤﴨ:[�q��¨~���T}Ĺ:aі(�*'NT�G~�}X����FF����x�������›^P�G� {ˊ֝�6>��#�����ڹ�;���G� �R����%#�~����)�'�o�Mq��;Q>�6�>��#����y㏏T���_d�l��iU�>A�G��y��x�}P���S����>�(d�g�R�~��g���su���~��Uq���%�"���S����ŝI�k��MUq�ٻ� I�i��BUq�N��O��sb��f��"t�?�Hǚt���w������uh}��r��~�8W�ۘ�yy8~3��~G~�}�Z��~l��̹:��a6����&�._�� d��:/�_=��~~8Wǝ�b����=[��G� {��oh��n���"��q �,q��Gj���C�H�ދ�S^�����suZ5��-��G~��ע�X�x��Z���L���=#}nޡ�#��"���uS�~�-}����{!�ձj����]2@�q��;�i�_٫�Ĺ:���h}ɞ}���8�����h})�"��Ĺ:֪���f0�m�D���k+}"ڏ;�%m�����;}*��oj�/đ_d��'�_y��i�W��x���� �_�5���}��_�s˸���O�h�/\ā_d�,����eiV �/Ĺ:�y��#��^p�|�����]�"�&~0�=����� =��&{�}��B�[����?k��9�sY<���'Oػ�'F�v�ԏ�>�S��2�7��3��Rq���^C�4��z�o�B���^=�ֵ��{�u�R�#���m�"͟�imR���t–������ͪ>��/��&����3�9ZG��G���h�.`A���G~�}�r�B�~��h�[�9��XՏxU�;%��<[�#��"{�ڌIB?,٠�#��i�t�e�y��G������m��G�E��} ��x����8W�i�ԛ"~yݠ4=��/�wO��sP�Fk��su��Ui���;U�G�:��GW����_���#��>�������8W�����~A��f���q����h~Վ/�su�Z��P�o��v|D�����N�'����<����L8%���ô� ��/�v�����.\-�$_�su��=��nG:ϓ��#���{y&�{�Em�*�\��d����e���G~�}��w�������� �ձ�� }�>V[F�E�A�+��4�b��~��8�!��Uo����8���%K��������:a�s?�*�瀖�/�(�cy_Q�v��}5?��uJ�'��H�G���y�x��������x<�^��w�B~��*�4q_���{6�nW�G\~_�K��^�����F�/���<.�a���0�3Z�lu�8Uq��+#���OW���xE���g����#�����G��뿯���su���H��зT}ġ_��,�ua�J�����#�H�k�*Zw�mi�A�����E��k�Fߟ8��t��n�A�ut�M�G��:Sm�z��vm��G����Vč~�6Y�%�LayerI��VersionId� LayerElement��TypeSLayerElementNormal �
TypedIndexI��&ModelL�LSText.001ModelSMesh��VersionI�+� Properties70��NPSLcl TranslationSLcl TranslationSSADD`#UQ@DN�HPS Lcl RotationS Lcl RotationSSAD��`S�>D�D��FPS Lcl ScalingS Lcl ScalingSSADY@DY@DY@��8PSDefaultAttributeIndexSintSIntegerSI�(PS InheritTypeSenumSSIG�
MultiLayerIb� MultiTakeIx�ShadingC��CullingS
CullingOff(� Connections��CSOOL�LL�CSOOLCZ-L�L`�TakesS�CurrentS��� ���f�v���&~��Z�j���~�� �u�)

97
Project/Assets/ML-Agents/Examples/Match3/Prefabs/FBX/Match.fbx.meta


fileFormatVersion: 2
guid: 6cb02a85514f94d7f8266348b5c021cd
ModelImporter:
serializedVersion: 23
fileIDToRecycleName:
100000: //RootNode
400000: //RootNode
2100000: No Name
2300000: //RootNode
3300000: //RootNode
4300000: Text.001
externalObjects: {}
materials:
importMaterials: 1
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
motionNodeName:
rigImportErrors:
rigImportWarnings:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 1
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
optimizeMeshForGPU: 1
keepQuads: 0
weldVertices: 1
preserveHierarchy: 0
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVPackMargin: 4
useFileScale: 1
previousCalculatedGlobalScale: 1
hasPreviousCalculatedGlobalScale: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
importAnimation: 1
copyAvatar: 0
humanDescription:
serializedVersion: 2
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
animationType: 0
humanoidOversampling: 1
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:

1001
Project/Assets/ML-Agents/Examples/Match3/Prefabs/Tiles/TILE_Base.prefab
文件差异内容过多而无法显示
查看文件

7
Project/Assets/ML-Agents/Examples/Match3/Prefabs/Tiles/TILE_Base.prefab.meta


fileFormatVersion: 2
guid: faee4e805953b49e688bd00b45c55f2e
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
正在加载...
取消
保存