Added UI and health display
3 files modified
79 files added
| | |
| | | _isAlive: 1 |
| | | isInvincible: 0 |
| | | invincibilityTime: 0.25 |
| | | selfDamage: 0 |
| | |
| | | m_Children: [] |
| | | m_Father: {fileID: 0} |
| | | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
| | | --- !u!1 &153702488 |
| | | GameObject: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | serializedVersion: 6 |
| | | m_Component: |
| | | - component: {fileID: 153702489} |
| | | - component: {fileID: 153702491} |
| | | - component: {fileID: 153702490} |
| | | m_Layer: 5 |
| | | m_Name: HealthText |
| | | m_TagString: Untagged |
| | | m_Icon: {fileID: 0} |
| | | m_NavMeshLayer: 0 |
| | | m_StaticEditorFlags: 0 |
| | | m_IsActive: 1 |
| | | --- !u!224 &153702489 |
| | | RectTransform: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 153702488} |
| | | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} |
| | | m_LocalPosition: {x: 0, y: 0, z: 0} |
| | | m_LocalScale: {x: 1, y: 1, z: 1} |
| | | m_ConstrainProportionsScale: 0 |
| | | m_Children: [] |
| | | m_Father: {fileID: 2064964503} |
| | | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
| | | m_AnchorMin: {x: 0, y: 1} |
| | | m_AnchorMax: {x: 0, y: 1} |
| | | m_AnchoredPosition: {x: 5, y: -5} |
| | | m_SizeDelta: {x: 359.722, y: 53.584} |
| | | m_Pivot: {x: 0, y: 1} |
| | | --- !u!114 &153702490 |
| | | MonoBehaviour: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 153702488} |
| | | m_Enabled: 1 |
| | | m_EditorHideFlags: 0 |
| | | m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} |
| | | m_Name: |
| | | m_EditorClassIdentifier: |
| | | m_Material: {fileID: 0} |
| | | m_Color: {r: 1, g: 1, b: 1, a: 1} |
| | | m_RaycastTarget: 1 |
| | | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} |
| | | m_Maskable: 1 |
| | | m_OnCullStateChanged: |
| | | m_PersistentCalls: |
| | | m_Calls: [] |
| | | m_text: Health |
| | | m_isRightToLeft: 0 |
| | | m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} |
| | | m_sharedMaterial: {fileID: 2100000, guid: e73a58f6e2794ae7b1b7e50b7fb811b0, type: 2} |
| | | m_fontSharedMaterials: [] |
| | | m_fontMaterial: {fileID: 0} |
| | | m_fontMaterials: [] |
| | | m_fontColor32: |
| | | serializedVersion: 2 |
| | | rgba: 4278190335 |
| | | m_fontColor: {r: 1, g: 0, b: 0, a: 1} |
| | | m_enableVertexGradient: 0 |
| | | m_colorMode: 3 |
| | | m_fontColorGradient: |
| | | topLeft: {r: 1, g: 1, b: 1, a: 1} |
| | | topRight: {r: 1, g: 1, b: 1, a: 1} |
| | | bottomLeft: {r: 1, g: 1, b: 1, a: 1} |
| | | bottomRight: {r: 1, g: 1, b: 1, a: 1} |
| | | m_fontColorGradientPreset: {fileID: 0} |
| | | m_spriteAsset: {fileID: 0} |
| | | m_tintAllSprites: 0 |
| | | m_StyleSheet: {fileID: 0} |
| | | m_TextStyleHashCode: -1183493901 |
| | | m_overrideHtmlColors: 0 |
| | | m_faceColor: |
| | | serializedVersion: 2 |
| | | rgba: 4294967295 |
| | | m_fontSize: 48 |
| | | m_fontSizeBase: 48 |
| | | m_fontWeight: 400 |
| | | m_enableAutoSizing: 0 |
| | | m_fontSizeMin: 18 |
| | | m_fontSizeMax: 72 |
| | | m_fontStyle: 0 |
| | | m_HorizontalAlignment: 1 |
| | | m_VerticalAlignment: 256 |
| | | m_textAlignment: 65535 |
| | | m_characterSpacing: 0 |
| | | m_wordSpacing: 0 |
| | | m_lineSpacing: 0 |
| | | m_lineSpacingMax: 0 |
| | | m_paragraphSpacing: 0 |
| | | m_charWidthMaxAdj: 0 |
| | | m_enableWordWrapping: 1 |
| | | m_wordWrappingRatios: 0.4 |
| | | m_overflowMode: 0 |
| | | m_linkedTextComponent: {fileID: 0} |
| | | parentLinkedComponent: {fileID: 0} |
| | | m_enableKerning: 1 |
| | | m_enableExtraPadding: 0 |
| | | checkPaddingRequired: 0 |
| | | m_isRichText: 1 |
| | | m_parseCtrlCharacters: 1 |
| | | m_isOrthographic: 1 |
| | | m_isCullingEnabled: 0 |
| | | m_horizontalMapping: 0 |
| | | m_verticalMapping: 0 |
| | | m_uvLineOffset: 0 |
| | | m_geometrySortingOrder: 0 |
| | | m_IsTextObjectScaleStatic: 0 |
| | | m_VertexBufferAutoSizeReduction: 0 |
| | | m_useMaxVisibleDescender: 1 |
| | | m_pageToDisplay: 1 |
| | | m_margin: {x: 0, y: 0, z: -0.000015237446, w: 0.000091854265} |
| | | m_isUsingLegacyAnimationComponent: 0 |
| | | m_isVolumetricText: 0 |
| | | m_hasFontAssetChanged: 0 |
| | | m_baseMaterial: {fileID: 0} |
| | | m_maskOffset: {x: 0, y: 0, z: 0, w: 0} |
| | | --- !u!222 &153702491 |
| | | CanvasRenderer: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 153702488} |
| | | m_CullTransparentMesh: 1 |
| | | --- !u!4 &254538002 stripped |
| | | Transform: |
| | | m_CorrespondingSourceObject: {fileID: 2368348636056148999, guid: c220ec455fce341408d66d880b464cad, type: 3} |
| | | m_PrefabInstance: {fileID: 257677327013671455} |
| | | m_PrefabAsset: {fileID: 0} |
| | | --- !u!1 &487206665 |
| | | GameObject: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | serializedVersion: 6 |
| | | m_Component: |
| | | - component: {fileID: 487206666} |
| | | - component: {fileID: 487206668} |
| | | - component: {fileID: 487206667} |
| | | m_Layer: 5 |
| | | m_Name: Fill |
| | | m_TagString: Untagged |
| | | m_Icon: {fileID: 0} |
| | | m_NavMeshLayer: 0 |
| | | m_StaticEditorFlags: 0 |
| | | m_IsActive: 1 |
| | | --- !u!224 &487206666 |
| | | RectTransform: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 487206665} |
| | | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} |
| | | m_LocalPosition: {x: 0, y: 0, z: 0} |
| | | m_LocalScale: {x: 1, y: 1, z: 1} |
| | | m_ConstrainProportionsScale: 0 |
| | | m_Children: [] |
| | | m_Father: {fileID: 1520567228} |
| | | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
| | | m_AnchorMin: {x: 0, y: 0} |
| | | m_AnchorMax: {x: 0, y: 0} |
| | | m_AnchoredPosition: {x: 0, y: 0} |
| | | m_SizeDelta: {x: 0, y: 0} |
| | | m_Pivot: {x: 0.5, y: 0.5} |
| | | --- !u!114 &487206667 |
| | | MonoBehaviour: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 487206665} |
| | | m_Enabled: 1 |
| | | m_EditorHideFlags: 0 |
| | | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} |
| | | m_Name: |
| | | m_EditorClassIdentifier: |
| | | m_Material: {fileID: 0} |
| | | m_Color: {r: 0.08116722, g: 1, b: 0, a: 1} |
| | | m_RaycastTarget: 1 |
| | | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} |
| | | m_Maskable: 1 |
| | | m_OnCullStateChanged: |
| | | m_PersistentCalls: |
| | | m_Calls: [] |
| | | m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} |
| | | m_Type: 1 |
| | | m_PreserveAspect: 0 |
| | | m_FillCenter: 1 |
| | | m_FillMethod: 4 |
| | | m_FillAmount: 1 |
| | | m_FillClockwise: 1 |
| | | m_FillOrigin: 0 |
| | | m_UseSpriteMesh: 0 |
| | | m_PixelsPerUnitMultiplier: 1 |
| | | --- !u!222 &487206668 |
| | | CanvasRenderer: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 487206665} |
| | | m_CullTransparentMesh: 1 |
| | | --- !u!1 &519420028 |
| | | GameObject: |
| | | m_ObjectHideFlags: 0 |
| | |
| | | m_EditorClassIdentifier: |
| | | cam: {fileID: 519420031} |
| | | followTarget: {fileID: 254538002} |
| | | --- !u!1 &680455189 |
| | | GameObject: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | serializedVersion: 6 |
| | | m_Component: |
| | | - component: {fileID: 680455190} |
| | | - component: {fileID: 680455192} |
| | | - component: {fileID: 680455191} |
| | | m_Layer: 5 |
| | | m_Name: HealthImage |
| | | m_TagString: Untagged |
| | | m_Icon: {fileID: 0} |
| | | m_NavMeshLayer: 0 |
| | | m_StaticEditorFlags: 0 |
| | | m_IsActive: 0 |
| | | --- !u!224 &680455190 |
| | | RectTransform: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 680455189} |
| | | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} |
| | | m_LocalPosition: {x: 0, y: 0, z: 0} |
| | | m_LocalScale: {x: 1, y: 1, z: 1} |
| | | m_ConstrainProportionsScale: 0 |
| | | m_Children: [] |
| | | m_Father: {fileID: 2064964503} |
| | | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
| | | m_AnchorMin: {x: 0.0037500004, y: 0.9344482} |
| | | m_AnchorMax: {x: 0.0037500004, y: 0.9344482} |
| | | m_AnchoredPosition: {x: 0, y: -5} |
| | | m_SizeDelta: {x: 480, y: 20} |
| | | m_Pivot: {x: 0, y: 1} |
| | | --- !u!114 &680455191 |
| | | MonoBehaviour: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 680455189} |
| | | m_Enabled: 1 |
| | | m_EditorHideFlags: 0 |
| | | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} |
| | | m_Name: |
| | | m_EditorClassIdentifier: |
| | | m_Material: {fileID: 0} |
| | | m_Color: {r: 1, g: 1, b: 1, a: 1} |
| | | m_RaycastTarget: 1 |
| | | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} |
| | | m_Maskable: 1 |
| | | m_OnCullStateChanged: |
| | | m_PersistentCalls: |
| | | m_Calls: [] |
| | | m_Sprite: {fileID: 21300000, guid: 78473520b99ac4e4e8f4bcacf6670581, type: 3} |
| | | m_Type: 0 |
| | | m_PreserveAspect: 0 |
| | | m_FillCenter: 1 |
| | | m_FillMethod: 4 |
| | | m_FillAmount: 1 |
| | | m_FillClockwise: 1 |
| | | m_FillOrigin: 0 |
| | | m_UseSpriteMesh: 0 |
| | | m_PixelsPerUnitMultiplier: 1 |
| | | --- !u!222 &680455192 |
| | | CanvasRenderer: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 680455189} |
| | | m_CullTransparentMesh: 1 |
| | | --- !u!1 &727795131 |
| | | GameObject: |
| | | m_ObjectHideFlags: 0 |
| | |
| | | e31: 0 |
| | | e32: 0 |
| | | e33: 1 |
| | | --- !u!1 &1398596076 |
| | | GameObject: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | serializedVersion: 6 |
| | | m_Component: |
| | | - component: {fileID: 1398596077} |
| | | - component: {fileID: 1398596078} |
| | | m_Layer: 5 |
| | | m_Name: HealthBar |
| | | m_TagString: Untagged |
| | | m_Icon: {fileID: 0} |
| | | m_NavMeshLayer: 0 |
| | | m_StaticEditorFlags: 0 |
| | | m_IsActive: 1 |
| | | --- !u!224 &1398596077 |
| | | RectTransform: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1398596076} |
| | | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} |
| | | m_LocalPosition: {x: 0, y: 0, z: 0} |
| | | m_LocalScale: {x: 1, y: 1, z: 1} |
| | | m_ConstrainProportionsScale: 0 |
| | | m_Children: |
| | | - {fileID: 1990316378} |
| | | - {fileID: 1520567228} |
| | | m_Father: {fileID: 2064964503} |
| | | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
| | | m_AnchorMin: {x: 0.0031250005, y: 0.9344482} |
| | | m_AnchorMax: {x: 0.0031250005, y: 0.9344482} |
| | | m_AnchoredPosition: {x: 0, y: -5} |
| | | m_SizeDelta: {x: 480, y: 50} |
| | | m_Pivot: {x: 0, y: 1} |
| | | --- !u!114 &1398596078 |
| | | MonoBehaviour: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1398596076} |
| | | m_Enabled: 1 |
| | | m_EditorHideFlags: 0 |
| | | m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3} |
| | | m_Name: |
| | | m_EditorClassIdentifier: |
| | | m_Navigation: |
| | | m_Mode: 3 |
| | | m_WrapAround: 0 |
| | | m_SelectOnUp: {fileID: 0} |
| | | m_SelectOnDown: {fileID: 0} |
| | | m_SelectOnLeft: {fileID: 0} |
| | | m_SelectOnRight: {fileID: 0} |
| | | m_Transition: 1 |
| | | m_Colors: |
| | | m_NormalColor: {r: 1, g: 1, b: 1, a: 1} |
| | | m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} |
| | | m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} |
| | | m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} |
| | | m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} |
| | | m_ColorMultiplier: 1 |
| | | m_FadeDuration: 0.1 |
| | | m_SpriteState: |
| | | m_HighlightedSprite: {fileID: 0} |
| | | m_PressedSprite: {fileID: 0} |
| | | m_SelectedSprite: {fileID: 0} |
| | | m_DisabledSprite: {fileID: 0} |
| | | m_AnimationTriggers: |
| | | m_NormalTrigger: Normal |
| | | m_HighlightedTrigger: Highlighted |
| | | m_PressedTrigger: Pressed |
| | | m_SelectedTrigger: Selected |
| | | m_DisabledTrigger: Disabled |
| | | m_Interactable: 0 |
| | | m_TargetGraphic: {fileID: 0} |
| | | m_FillRect: {fileID: 487206666} |
| | | m_HandleRect: {fileID: 0} |
| | | m_Direction: 0 |
| | | m_MinValue: 0 |
| | | m_MaxValue: 1 |
| | | m_WholeNumbers: 0 |
| | | m_Value: 1 |
| | | m_OnValueChanged: |
| | | m_PersistentCalls: |
| | | m_Calls: [] |
| | | --- !u!1 &1406521042 |
| | | GameObject: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | serializedVersion: 6 |
| | | m_Component: |
| | | - component: {fileID: 1406521045} |
| | | - component: {fileID: 1406521044} |
| | | - component: {fileID: 1406521043} |
| | | m_Layer: 0 |
| | | m_Name: EventSystem |
| | | m_TagString: Untagged |
| | | m_Icon: {fileID: 0} |
| | | m_NavMeshLayer: 0 |
| | | m_StaticEditorFlags: 0 |
| | | m_IsActive: 1 |
| | | --- !u!114 &1406521043 |
| | | MonoBehaviour: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1406521042} |
| | | m_Enabled: 1 |
| | | m_EditorHideFlags: 0 |
| | | m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} |
| | | m_Name: |
| | | m_EditorClassIdentifier: |
| | | m_SendPointerHoverToParent: 1 |
| | | m_HorizontalAxis: Horizontal |
| | | m_VerticalAxis: Vertical |
| | | m_SubmitButton: Submit |
| | | m_CancelButton: Cancel |
| | | m_InputActionsPerSecond: 10 |
| | | m_RepeatDelay: 0.5 |
| | | m_ForceModuleActive: 0 |
| | | --- !u!114 &1406521044 |
| | | MonoBehaviour: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1406521042} |
| | | m_Enabled: 1 |
| | | m_EditorHideFlags: 0 |
| | | m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} |
| | | m_Name: |
| | | m_EditorClassIdentifier: |
| | | m_FirstSelected: {fileID: 0} |
| | | m_sendNavigationEvents: 1 |
| | | m_DragThreshold: 10 |
| | | --- !u!4 &1406521045 |
| | | Transform: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1406521042} |
| | | serializedVersion: 2 |
| | | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} |
| | | m_LocalPosition: {x: 0, y: 0, z: 0} |
| | | m_LocalScale: {x: 1, y: 1, z: 1} |
| | | m_ConstrainProportionsScale: 0 |
| | | m_Children: [] |
| | | m_Father: {fileID: 0} |
| | | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
| | | --- !u!1 &1520567227 |
| | | GameObject: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | serializedVersion: 6 |
| | | m_Component: |
| | | - component: {fileID: 1520567228} |
| | | m_Layer: 5 |
| | | m_Name: Fill Area |
| | | m_TagString: Untagged |
| | | m_Icon: {fileID: 0} |
| | | m_NavMeshLayer: 0 |
| | | m_StaticEditorFlags: 0 |
| | | m_IsActive: 1 |
| | | --- !u!224 &1520567228 |
| | | RectTransform: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1520567227} |
| | | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} |
| | | m_LocalPosition: {x: 0, y: 0, z: 0} |
| | | m_LocalScale: {x: 1, y: 1, z: 1} |
| | | m_ConstrainProportionsScale: 0 |
| | | m_Children: |
| | | - {fileID: 487206666} |
| | | m_Father: {fileID: 1398596077} |
| | | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
| | | m_AnchorMin: {x: 0, y: 0.25} |
| | | m_AnchorMax: {x: 1, y: 0.75} |
| | | m_AnchoredPosition: {x: 0, y: 0} |
| | | m_SizeDelta: {x: 0, y: 0} |
| | | m_Pivot: {x: 0.5, y: 0.5} |
| | | --- !u!1 &1586625532 |
| | | GameObject: |
| | | m_ObjectHideFlags: 3 |
| | |
| | | m_Script: {fileID: 11500000, guid: 1a8a05de0ac134f4f9d01bef6b9da077, type: 3} |
| | | m_Name: |
| | | m_EditorClassIdentifier: |
| | | --- !u!1 &1705998485 |
| | | GameObject: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | serializedVersion: 6 |
| | | m_Component: |
| | | - component: {fileID: 1705998486} |
| | | - component: {fileID: 1705998488} |
| | | - component: {fileID: 1705998487} |
| | | m_Layer: 5 |
| | | m_Name: HealthMaxImage |
| | | m_TagString: Untagged |
| | | m_Icon: {fileID: 0} |
| | | m_NavMeshLayer: 0 |
| | | m_StaticEditorFlags: 0 |
| | | m_IsActive: 0 |
| | | --- !u!224 &1705998486 |
| | | RectTransform: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1705998485} |
| | | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} |
| | | m_LocalPosition: {x: 0, y: 0, z: 0} |
| | | m_LocalScale: {x: 1, y: 1, z: 1} |
| | | m_ConstrainProportionsScale: 0 |
| | | m_Children: [] |
| | | m_Father: {fileID: 2064964503} |
| | | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
| | | m_AnchorMin: {x: 0.0037500004, y: 0.9344482} |
| | | m_AnchorMax: {x: 0.0037500004, y: 0.9344482} |
| | | m_AnchoredPosition: {x: 0, y: -5} |
| | | m_SizeDelta: {x: 480, y: 20} |
| | | m_Pivot: {x: 0, y: 1} |
| | | --- !u!114 &1705998487 |
| | | MonoBehaviour: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1705998485} |
| | | m_Enabled: 1 |
| | | m_EditorHideFlags: 0 |
| | | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} |
| | | m_Name: |
| | | m_EditorClassIdentifier: |
| | | m_Material: {fileID: 0} |
| | | m_Color: {r: 1, g: 1, b: 1, a: 1} |
| | | m_RaycastTarget: 1 |
| | | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} |
| | | m_Maskable: 1 |
| | | m_OnCullStateChanged: |
| | | m_PersistentCalls: |
| | | m_Calls: [] |
| | | m_Sprite: {fileID: 21300000, guid: c2942e726ac8f6d4d91314b62e2bda74, type: 3} |
| | | m_Type: 0 |
| | | m_PreserveAspect: 0 |
| | | m_FillCenter: 1 |
| | | m_FillMethod: 4 |
| | | m_FillAmount: 1 |
| | | m_FillClockwise: 1 |
| | | m_FillOrigin: 0 |
| | | m_UseSpriteMesh: 0 |
| | | m_PixelsPerUnitMultiplier: 1 |
| | | --- !u!222 &1705998488 |
| | | CanvasRenderer: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1705998485} |
| | | m_CullTransparentMesh: 1 |
| | | --- !u!1 &1919262556 |
| | | GameObject: |
| | | m_ObjectHideFlags: 0 |
| | |
| | | m_SleepingMode: 1 |
| | | m_CollisionDetection: 0 |
| | | m_Constraints: 0 |
| | | --- !u!1 &1990316377 |
| | | GameObject: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | serializedVersion: 6 |
| | | m_Component: |
| | | - component: {fileID: 1990316378} |
| | | - component: {fileID: 1990316380} |
| | | - component: {fileID: 1990316379} |
| | | m_Layer: 5 |
| | | m_Name: Background |
| | | m_TagString: Untagged |
| | | m_Icon: {fileID: 0} |
| | | m_NavMeshLayer: 0 |
| | | m_StaticEditorFlags: 0 |
| | | m_IsActive: 1 |
| | | --- !u!224 &1990316378 |
| | | RectTransform: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1990316377} |
| | | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} |
| | | m_LocalPosition: {x: 0, y: 0, z: 0} |
| | | m_LocalScale: {x: 1, y: 1, z: 1} |
| | | m_ConstrainProportionsScale: 0 |
| | | m_Children: [] |
| | | m_Father: {fileID: 1398596077} |
| | | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
| | | m_AnchorMin: {x: 0, y: 0.25} |
| | | m_AnchorMax: {x: 1, y: 0.75} |
| | | m_AnchoredPosition: {x: 0, y: 0} |
| | | m_SizeDelta: {x: 0, y: 0} |
| | | m_Pivot: {x: 0.5, y: 0.5} |
| | | --- !u!114 &1990316379 |
| | | MonoBehaviour: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1990316377} |
| | | m_Enabled: 1 |
| | | m_EditorHideFlags: 0 |
| | | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} |
| | | m_Name: |
| | | m_EditorClassIdentifier: |
| | | m_Material: {fileID: 0} |
| | | m_Color: {r: 1, g: 0, b: 0.067070484, a: 1} |
| | | m_RaycastTarget: 0 |
| | | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} |
| | | m_Maskable: 1 |
| | | m_OnCullStateChanged: |
| | | m_PersistentCalls: |
| | | m_Calls: [] |
| | | m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} |
| | | m_Type: 1 |
| | | m_PreserveAspect: 0 |
| | | m_FillCenter: 1 |
| | | m_FillMethod: 4 |
| | | m_FillAmount: 1 |
| | | m_FillClockwise: 1 |
| | | m_FillOrigin: 0 |
| | | m_UseSpriteMesh: 0 |
| | | m_PixelsPerUnitMultiplier: 1 |
| | | --- !u!222 &1990316380 |
| | | CanvasRenderer: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1990316377} |
| | | m_CullTransparentMesh: 1 |
| | | --- !u!1 &2010473985 |
| | | GameObject: |
| | | m_ObjectHideFlags: 0 |
| | |
| | | - {fileID: 1029677423} |
| | | m_Father: {fileID: 0} |
| | | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
| | | --- !u!1 &2064964499 |
| | | GameObject: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | serializedVersion: 6 |
| | | m_Component: |
| | | - component: {fileID: 2064964503} |
| | | - component: {fileID: 2064964502} |
| | | - component: {fileID: 2064964501} |
| | | - component: {fileID: 2064964500} |
| | | - component: {fileID: 2064964504} |
| | | m_Layer: 5 |
| | | m_Name: PlayerUI |
| | | m_TagString: Untagged |
| | | m_Icon: {fileID: 0} |
| | | m_NavMeshLayer: 0 |
| | | m_StaticEditorFlags: 0 |
| | | m_IsActive: 1 |
| | | --- !u!114 &2064964500 |
| | | MonoBehaviour: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 2064964499} |
| | | m_Enabled: 1 |
| | | m_EditorHideFlags: 0 |
| | | m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} |
| | | m_Name: |
| | | m_EditorClassIdentifier: |
| | | m_IgnoreReversedGraphics: 1 |
| | | m_BlockingObjects: 0 |
| | | m_BlockingMask: |
| | | serializedVersion: 2 |
| | | m_Bits: 4294967295 |
| | | --- !u!114 &2064964501 |
| | | MonoBehaviour: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 2064964499} |
| | | m_Enabled: 1 |
| | | m_EditorHideFlags: 0 |
| | | m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} |
| | | m_Name: |
| | | m_EditorClassIdentifier: |
| | | m_UiScaleMode: 1 |
| | | m_ReferencePixelsPerUnit: 16 |
| | | m_ScaleFactor: 1 |
| | | m_ReferenceResolution: {x: 1600, y: 900} |
| | | m_ScreenMatchMode: 0 |
| | | m_MatchWidthOrHeight: 0 |
| | | m_PhysicalUnit: 3 |
| | | m_FallbackScreenDPI: 96 |
| | | m_DefaultSpriteDPI: 96 |
| | | m_DynamicPixelsPerUnit: 1 |
| | | m_PresetInfoIsWorld: 0 |
| | | --- !u!223 &2064964502 |
| | | Canvas: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 2064964499} |
| | | m_Enabled: 1 |
| | | serializedVersion: 3 |
| | | m_RenderMode: 0 |
| | | m_Camera: {fileID: 0} |
| | | m_PlaneDistance: 100 |
| | | m_PixelPerfect: 0 |
| | | m_ReceivesEvents: 1 |
| | | m_OverrideSorting: 0 |
| | | m_OverridePixelPerfect: 0 |
| | | m_SortingBucketNormalizedSize: 0 |
| | | m_VertexColorAlwaysGammaSpace: 0 |
| | | m_AdditionalShaderChannelsFlag: 25 |
| | | m_UpdateRectTransformForStandalone: 0 |
| | | m_SortingLayerID: 0 |
| | | m_SortingOrder: 0 |
| | | m_TargetDisplay: 0 |
| | | --- !u!224 &2064964503 |
| | | RectTransform: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 2064964499} |
| | | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} |
| | | m_LocalPosition: {x: 0, y: 0, z: 0} |
| | | m_LocalScale: {x: 0, y: 0, z: 0} |
| | | m_ConstrainProportionsScale: 0 |
| | | m_Children: |
| | | - {fileID: 1398596077} |
| | | - {fileID: 153702489} |
| | | - {fileID: 1705998486} |
| | | - {fileID: 680455190} |
| | | m_Father: {fileID: 0} |
| | | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
| | | m_AnchorMin: {x: 0, y: 0} |
| | | m_AnchorMax: {x: 0, y: 0} |
| | | m_AnchoredPosition: {x: 0, y: 0} |
| | | m_SizeDelta: {x: 0, y: 0} |
| | | m_Pivot: {x: 0, y: 0} |
| | | --- !u!114 &2064964504 |
| | | MonoBehaviour: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 2064964499} |
| | | m_Enabled: 1 |
| | | m_EditorHideFlags: 0 |
| | | m_Script: {fileID: 11500000, guid: 0c85db65a27626e4e8585f7afd454dc1, type: 3} |
| | | m_Name: |
| | | m_EditorClassIdentifier: |
| | | healthText: {fileID: 153702490} |
| | | healthImage: {fileID: 680455191} |
| | | healthSlider: {fileID: 1398596078} |
| | | --- !u!1001 &257677327013671455 |
| | | PrefabInstance: |
| | | m_ObjectHideFlags: 0 |
| | |
| | | - {fileID: 72621626} |
| | | - {fileID: 1624236512} |
| | | - {fileID: 727795133} |
| | | - {fileID: 2064964503} |
| | | - {fileID: 1406521045} |
| | |
| | | |
| | | public class Damageable : MonoBehaviour |
| | | { |
| | | // ONLY FOR DEBUG USE |
| | | [SerializeField] |
| | | private bool selfDamage = false; |
| | | Animator animator; |
| | | |
| | | [SerializeField] |
| | | private int _maxHealth = 100; |
| | | [SerializeField] |
| | | private int _health; |
| | | private int _health = 100; |
| | | [SerializeField] |
| | | private bool _isAlive = true; |
| | | [SerializeField] |
| | |
| | | get { return _health; } |
| | | set |
| | | { |
| | | _health = value; |
| | | if (value > MaxHealth) |
| | | { |
| | | _health = MaxHealth; |
| | | } |
| | | else |
| | | { |
| | | _health = value; |
| | | } |
| | | if (value <= 0) |
| | | { |
| | | IsAlive = false; |
| | |
| | | |
| | | private void Awake() |
| | | { |
| | | Health = MaxHealth; |
| | | //Health = MaxHealth; |
| | | animator = GetComponent<Animator>(); |
| | | } |
| | | private void Update() |
| | |
| | | timeSinceHit += Time.deltaTime; |
| | | } |
| | | } |
| | | if (selfDamage) |
| | | { |
| | | Hit(10); |
| | | } |
| | | } |
| | | |
| | | public void Hit(int damage) |
New file |
| | |
| | | using System; |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using TMPro; |
| | | using UnityEngine; |
| | | using UnityEngine.UI; |
| | | |
| | | public class HealthDisplay : MonoBehaviour |
| | | { |
| | | private GameObject _playerGO; |
| | | private Damageable playerDamage; |
| | | public TextMeshProUGUI healthText; |
| | | //public Image healthImage; |
| | | //private Rect originalRect; |
| | | public Slider healthSlider; |
| | | |
| | | public GameObject PlayerGO |
| | | { |
| | | get |
| | | { |
| | | if (_playerGO == null) |
| | | { |
| | | _playerGO = GameObject.Find("Player"); |
| | | } |
| | | return _playerGO; |
| | | } |
| | | private set { _playerGO = value; } |
| | | } |
| | | |
| | | private void Awake() |
| | | { |
| | | PlayerGO = GameObject.Find("Player"); |
| | | playerDamage = _playerGO.GetComponent<Damageable>(); |
| | | //originalRect = healthImage.rectTransform.rect; |
| | | } |
| | | |
| | | private void Update() |
| | | { |
| | | healthText.text = "Health: " + playerDamage.Health; |
| | | healthSlider.value = (float)playerDamage.Health / (float)playerDamage.MaxHealth; |
| | | //healthImage.rectTransform.sizeDelta = new Vector2(originalRect.width * ((float)playerDamage.Health / (float)playerDamage.MaxHealth), originalRect.height); |
| | | } |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 0c85db65a27626e4e8585f7afd454dc1 |
| | | MonoImporter: |
| | | externalObjects: {} |
| | | serializedVersion: 2 |
| | | defaultReferences: [] |
| | | executionOrder: 0 |
| | | icon: {instanceID: 0} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: f54d1bd14bd3ca042bd867b519fee8cc |
| | | folderAsset: yes |
| | | DefaultImporter: |
| | | externalObjects: {} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 8e7e8f5a82a3a134e91c54efd2274ea9 |
| | | folderAsset: yes |
| | | DefaultImporter: |
| | | externalObjects: {} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 1b8d251f9af63b746bf2f7ffe00ebb9b |
| | | DefaultImporter: |
| | | externalObjects: {} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 6ab70aee4d56447429c680537fbf93ed |
| | | folderAsset: yes |
| | | DefaultImporter: |
| | | externalObjects: {} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | Digitized data copyright (c) 2010 Google Corporation |
| | | with Reserved Font Arimo, Tinos and Cousine. |
| | | Copyright (c) 2012 Red Hat, Inc. |
| | | with Reserved Font Name Liberation. |
| | | |
| | | This Font Software is licensed under the SIL Open Font License, Version 1.1. |
| | | This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL |
| | | |
| | | ----------------------------------------------------------- |
| | | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 |
| | | ----------------------------------------------------------- |
| | | |
| | | PREAMBLE |
| | | The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. |
| | | |
| | | The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. |
| | | |
| | | DEFINITIONS |
| | | "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. |
| | | |
| | | "Reserved Font Name" refers to any names specified as such after the copyright statement(s). |
| | | |
| | | "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). |
| | | |
| | | "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. |
| | | |
| | | "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. |
| | | |
| | | PERMISSION & CONDITIONS |
| | | Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: |
| | | |
| | | 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. |
| | | |
| | | 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. |
| | | |
| | | 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. |
| | | |
| | | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. |
| | | |
| | | 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. |
| | | |
| | | TERMINATION |
| | | This license becomes null and void if any of the above conditions are not met. |
| | | |
| | | DISCLAIMER |
| | | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 6e59c59b81ab47f9b6ec5781fa725d2c |
| | | timeCreated: 1484171296 |
| | | licenseType: Pro |
| | | TextScriptImporter: |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: e3265ab4bf004d28a9537516768c1c75 |
| | | timeCreated: 1484171297 |
| | | licenseType: Pro |
| | | TrueTypeFontImporter: |
| | | serializedVersion: 2 |
| | | fontSize: 16 |
| | | forceTextureCase: -2 |
| | | characterSpacing: 1 |
| | | characterPadding: 0 |
| | | includeFontData: 1 |
| | | use2xBehaviour: 0 |
| | | fontNames: [] |
| | | fallbackFontReferences: [] |
| | | customCharacters: |
| | | fontRenderingMode: 0 |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 243e06394e614e5d99fab26083b707fa |
| | | folderAsset: yes |
| | | DefaultImporter: |
| | | externalObjects: {} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 731f1baa9d144a9897cb1d341c2092b8 |
| | | folderAsset: yes |
| | | timeCreated: 1442040525 |
| | | licenseType: Pro |
| | | DefaultImporter: |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | %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: LiberationSans SDF - Drop Shadow |
| | | m_Shader: {fileID: 4800000, guid: fe393ace9b354375a9cb14cdbbc28be4, type: 3} |
| | | m_ShaderKeywords: OUTLINE_ON UNDERLAY_ON |
| | | m_LightmapFlags: 5 |
| | | 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} |
| | | - _Cube: |
| | | m_Texture: {fileID: 0} |
| | | m_Scale: {x: 1, y: 1} |
| | | m_Offset: {x: 0, y: 0} |
| | | - _FaceTex: |
| | | m_Texture: {fileID: 0} |
| | | m_Scale: {x: 1, y: 1} |
| | | m_Offset: {x: 0, y: 0} |
| | | - _MainTex: |
| | | m_Texture: {fileID: 28684132378477856, guid: 8f586378b4e144a9851e7b34d9b748ee, |
| | | type: 2} |
| | | m_Scale: {x: 1, y: 1} |
| | | m_Offset: {x: 0, y: 0} |
| | | - _OutlineTex: |
| | | m_Texture: {fileID: 0} |
| | | m_Scale: {x: 1, y: 1} |
| | | m_Offset: {x: 0, y: 0} |
| | | m_Floats: |
| | | - _Ambient: 0.5 |
| | | - _Bevel: 0.5 |
| | | - _BevelClamp: 0 |
| | | - _BevelOffset: 0 |
| | | - _BevelRoundness: 0 |
| | | - _BevelWidth: 0 |
| | | - _BumpFace: 0 |
| | | - _BumpOutline: 0 |
| | | - _ColorMask: 15 |
| | | - _Diffuse: 0.5 |
| | | - _DiffusePower: 1 |
| | | - _FaceDilate: 0.1 |
| | | - _FaceUVSpeedX: 0 |
| | | - _FaceUVSpeedY: 0 |
| | | - _GlowInner: 0.05 |
| | | - _GlowOffset: 0 |
| | | - _GlowOuter: 0.05 |
| | | - _GlowPower: 0.75 |
| | | - _GradientScale: 10 |
| | | - _LightAngle: 3.1416 |
| | | - _MaskSoftnessX: 0 |
| | | - _MaskSoftnessY: 0 |
| | | - _OutlineSoftness: 0 |
| | | - _OutlineUVSpeedX: 0 |
| | | - _OutlineUVSpeedY: 0 |
| | | - _OutlineWidth: 0.1 |
| | | - _PerspectiveFilter: 0.875 |
| | | - _Reflectivity: 10 |
| | | - _ScaleRatioA: 0.9 |
| | | - _ScaleRatioB: 0.73125 |
| | | - _ScaleRatioC: 0.64125 |
| | | - _ScaleX: 1 |
| | | - _ScaleY: 1 |
| | | - _ShaderFlags: 0 |
| | | - _Sharpness: 0 |
| | | - _SpecularPower: 2 |
| | | - _Stencil: 0 |
| | | - _StencilComp: 8 |
| | | - _StencilOp: 0 |
| | | - _StencilReadMask: 255 |
| | | - _StencilWriteMask: 255 |
| | | - _TextureHeight: 1024 |
| | | - _TextureWidth: 1024 |
| | | - _UnderlayDilate: 0 |
| | | - _UnderlayOffsetX: 0.5 |
| | | - _UnderlayOffsetY: -0.5 |
| | | - _UnderlaySoftness: 0.05 |
| | | - _VertexOffsetX: 0 |
| | | - _VertexOffsetY: 0 |
| | | - _WeightBold: 0.75 |
| | | - _WeightNormal: 0 |
| | | m_Colors: |
| | | - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} |
| | | - _Color: {r: 1, g: 1, b: 1, a: 1} |
| | | - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} |
| | | - _FaceColor: {r: 1, g: 1, b: 1, a: 1} |
| | | - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} |
| | | - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} |
| | | - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} |
| | | - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} |
| | | - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} |
| | | - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} |
| | | - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: e73a58f6e2794ae7b1b7e50b7fb811b0 |
| | | timeCreated: 1484172806 |
| | | licenseType: Pro |
| | | NativeFormatImporter: |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | %YAML 1.1 |
| | | %TAG !u! tag:unity3d.com,2011: |
| | | --- !u!21 &2180264 |
| | | Material: |
| | | serializedVersion: 8 |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_Name: LiberationSans SDF Material |
| | | m_Shader: {fileID: 4800000, guid: fe393ace9b354375a9cb14cdbbc28be4, type: 3} |
| | | m_Parent: {fileID: 0} |
| | | m_ModifiedSerializedProperties: 0 |
| | | m_ValidKeywords: [] |
| | | m_InvalidKeywords: [] |
| | | m_LightmapFlags: 1 |
| | | m_EnableInstancingVariants: 0 |
| | | m_DoubleSidedGI: 0 |
| | | m_CustomRenderQueue: -1 |
| | | stringTagMap: {} |
| | | disabledShaderPasses: [] |
| | | m_LockedProperties: |
| | | m_SavedProperties: |
| | | serializedVersion: 3 |
| | | m_TexEnvs: |
| | | - _BumpMap: |
| | | m_Texture: {fileID: 0} |
| | | m_Scale: {x: 1, y: 1} |
| | | m_Offset: {x: 0, y: 0} |
| | | - _Cube: |
| | | 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} |
| | | - _FaceTex: |
| | | m_Texture: {fileID: 0} |
| | | m_Scale: {x: 1, y: 1} |
| | | m_Offset: {x: 0, y: 0} |
| | | - _MainTex: |
| | | m_Texture: {fileID: 28268798066460806} |
| | | 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} |
| | | - _OutlineTex: |
| | | 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} |
| | | m_Ints: [] |
| | | m_Floats: |
| | | - _Ambient: 0.5 |
| | | - _Bevel: 0.5 |
| | | - _BevelClamp: 0 |
| | | - _BevelOffset: 0 |
| | | - _BevelRoundness: 0 |
| | | - _BevelWidth: 0 |
| | | - _BumpFace: 0 |
| | | - _BumpOutline: 0 |
| | | - _BumpScale: 1 |
| | | - _ColorMask: 15 |
| | | - _CullMode: 0 |
| | | - _Cutoff: 0.5 |
| | | - _DetailNormalMapScale: 1 |
| | | - _Diffuse: 0.5 |
| | | - _DstBlend: 0 |
| | | - _FaceDilate: 0 |
| | | - _FaceUVSpeedX: 0 |
| | | - _FaceUVSpeedY: 0 |
| | | - _GlossMapScale: 1 |
| | | - _Glossiness: 0.5 |
| | | - _GlossyReflections: 1 |
| | | - _GlowInner: 0.05 |
| | | - _GlowOffset: 0 |
| | | - _GlowOuter: 0.05 |
| | | - _GlowPower: 0.75 |
| | | - _GradientScale: 10 |
| | | - _LightAngle: 3.1416 |
| | | - _MaskSoftnessX: 0 |
| | | - _MaskSoftnessY: 0 |
| | | - _Metallic: 0 |
| | | - _Mode: 0 |
| | | - _OcclusionStrength: 1 |
| | | - _OutlineSoftness: 0 |
| | | - _OutlineUVSpeedX: 0 |
| | | - _OutlineUVSpeedY: 0 |
| | | - _OutlineWidth: 0 |
| | | - _Parallax: 0.02 |
| | | - _PerspectiveFilter: 0.875 |
| | | - _Reflectivity: 10 |
| | | - _ScaleRatioA: 0.9 |
| | | - _ScaleRatioB: 0.73125 |
| | | - _ScaleRatioC: 0.73125 |
| | | - _ScaleX: 1 |
| | | - _ScaleY: 1 |
| | | - _ShaderFlags: 0 |
| | | - _Sharpness: 0 |
| | | - _SmoothnessTextureChannel: 0 |
| | | - _SpecularHighlights: 1 |
| | | - _SpecularPower: 2 |
| | | - _SrcBlend: 1 |
| | | - _Stencil: 0 |
| | | - _StencilComp: 8 |
| | | - _StencilOp: 0 |
| | | - _StencilReadMask: 255 |
| | | - _StencilWriteMask: 255 |
| | | - _TextureHeight: 512 |
| | | - _TextureWidth: 512 |
| | | - _UVSec: 0 |
| | | - _UnderlayDilate: 0 |
| | | - _UnderlayOffsetX: 0 |
| | | - _UnderlayOffsetY: 0 |
| | | - _UnderlaySoftness: 0 |
| | | - _VertexOffsetX: 0 |
| | | - _VertexOffsetY: 0 |
| | | - _WeightBold: 0.75 |
| | | - _WeightNormal: 0 |
| | | - _ZWrite: 1 |
| | | m_Colors: |
| | | - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} |
| | | - _Color: {r: 1, g: 1, b: 1, a: 1} |
| | | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} |
| | | - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} |
| | | - _FaceColor: {r: 1, g: 1, b: 1, a: 1} |
| | | - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} |
| | | - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} |
| | | - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} |
| | | - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} |
| | | - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} |
| | | - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} |
| | | - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} |
| | | m_BuildTextureStacks: [] |
| | | --- !u!114 &11400000 |
| | | MonoBehaviour: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 0} |
| | | m_Enabled: 1 |
| | | m_EditorHideFlags: 0 |
| | | m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} |
| | | m_Name: LiberationSans SDF - Fallback |
| | | m_EditorClassIdentifier: |
| | | hashCode: -1699145518 |
| | | material: {fileID: 2180264} |
| | | materialHashCode: 462855346 |
| | | m_Version: 1.1.0 |
| | | m_SourceFontFileGUID: e3265ab4bf004d28a9537516768c1c75 |
| | | m_SourceFontFile_EditorRef: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} |
| | | m_SourceFontFile: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} |
| | | m_AtlasPopulationMode: 1 |
| | | m_FaceInfo: |
| | | m_FaceIndex: 0 |
| | | m_FamilyName: Liberation Sans |
| | | m_StyleName: Regular |
| | | m_PointSize: 86 |
| | | m_Scale: 1 |
| | | m_UnitsPerEM: 0 |
| | | m_LineHeight: 98.8916 |
| | | m_AscentLine: 77.853516 |
| | | m_CapLine: 59 |
| | | m_MeanLine: 45 |
| | | m_Baseline: 0 |
| | | m_DescentLine: -18.22461 |
| | | m_SuperscriptOffset: 77.853516 |
| | | m_SuperscriptSize: 0.5 |
| | | m_SubscriptOffset: -18.22461 |
| | | m_SubscriptSize: 0.5 |
| | | m_UnderlineOffset: -12.261719 |
| | | m_UnderlineThickness: 6.298828 |
| | | m_StrikethroughOffset: 18 |
| | | m_StrikethroughThickness: 6.298828 |
| | | m_TabWidth: 24 |
| | | m_GlyphTable: |
| | | - m_Index: 43 |
| | | m_Metrics: |
| | | m_Width: 48 |
| | | m_Height: 59 |
| | | m_HorizontalBearingX: 7 |
| | | m_HorizontalBearingY: 59 |
| | | m_HorizontalAdvance: 62 |
| | | m_GlyphRect: |
| | | m_X: 163 |
| | | m_Y: 10 |
| | | m_Width: 48 |
| | | m_Height: 59 |
| | | m_Scale: 1 |
| | | m_AtlasIndex: 0 |
| | | m_ClassDefinitionType: 0 |
| | | - m_Index: 66 |
| | | m_Metrics: |
| | | m_Width: 51 |
| | | m_Height: 6 |
| | | m_HorizontalBearingX: -2 |
| | | m_HorizontalBearingY: -12 |
| | | m_HorizontalAdvance: 48 |
| | | m_GlyphRect: |
| | | m_X: 93 |
| | | m_Y: 10 |
| | | m_Width: 51 |
| | | m_Height: 6 |
| | | m_Scale: 1 |
| | | m_AtlasIndex: 0 |
| | | m_ClassDefinitionType: 0 |
| | | - m_Index: 68 |
| | | m_Metrics: |
| | | m_Width: 45 |
| | | m_Height: 47 |
| | | m_HorizontalBearingX: 3 |
| | | m_HorizontalBearingY: 46 |
| | | m_HorizontalAdvance: 48 |
| | | m_GlyphRect: |
| | | m_X: 10 |
| | | m_Y: 38 |
| | | m_Width: 45 |
| | | m_Height: 47 |
| | | m_Scale: 1 |
| | | m_AtlasIndex: 0 |
| | | m_ClassDefinitionType: 0 |
| | | - m_Index: 72 |
| | | m_Metrics: |
| | | m_Width: 42 |
| | | m_Height: 47 |
| | | m_HorizontalBearingX: 3 |
| | | m_HorizontalBearingY: 46 |
| | | m_HorizontalAdvance: 48 |
| | | m_GlyphRect: |
| | | m_X: 93 |
| | | m_Y: 35 |
| | | m_Width: 42 |
| | | m_Height: 47 |
| | | m_Scale: 1 |
| | | m_AtlasIndex: 0 |
| | | m_ClassDefinitionType: 0 |
| | | - m_Index: 75 |
| | | m_Metrics: |
| | | m_Width: 38 |
| | | m_Height: 62 |
| | | m_HorizontalBearingX: 5 |
| | | m_HorizontalBearingY: 62 |
| | | m_HorizontalAdvance: 48 |
| | | m_GlyphRect: |
| | | m_X: 74 |
| | | m_Y: 101 |
| | | m_Width: 38 |
| | | m_Height: 62 |
| | | m_Scale: 1 |
| | | m_AtlasIndex: 0 |
| | | m_ClassDefinitionType: 0 |
| | | - m_Index: 79 |
| | | m_Metrics: |
| | | m_Width: 9 |
| | | m_Height: 62 |
| | | m_HorizontalBearingX: 5 |
| | | m_HorizontalBearingY: 62 |
| | | m_HorizontalAdvance: 19 |
| | | m_GlyphRect: |
| | | m_X: 230 |
| | | m_Y: 10 |
| | | m_Width: 9 |
| | | m_Height: 62 |
| | | m_Scale: 1 |
| | | m_AtlasIndex: 0 |
| | | m_ClassDefinitionType: 0 |
| | | - m_Index: 87 |
| | | m_Metrics: |
| | | m_Width: 23 |
| | | m_Height: 56 |
| | | m_HorizontalBearingX: 1 |
| | | m_HorizontalBearingY: 55 |
| | | m_HorizontalAdvance: 24 |
| | | m_GlyphRect: |
| | | m_X: 154 |
| | | m_Y: 88 |
| | | m_Width: 23 |
| | | m_Height: 56 |
| | | m_Scale: 1 |
| | | m_AtlasIndex: 0 |
| | | m_ClassDefinitionType: 0 |
| | | - m_Index: 2030 |
| | | m_Metrics: |
| | | m_Width: 64 |
| | | m_Height: 9 |
| | | m_HorizontalBearingX: 11 |
| | | m_HorizontalBearingY: 9 |
| | | m_HorizontalAdvance: 86 |
| | | m_GlyphRect: |
| | | m_X: 10 |
| | | m_Y: 10 |
| | | m_Width: 64 |
| | | m_Height: 9 |
| | | m_Scale: 1 |
| | | m_AtlasIndex: 0 |
| | | m_ClassDefinitionType: 0 |
| | | m_CharacterTable: |
| | | - m_ElementType: 1 |
| | | m_Unicode: 72 |
| | | m_GlyphIndex: 43 |
| | | m_Scale: 1 |
| | | - m_ElementType: 1 |
| | | m_Unicode: 95 |
| | | m_GlyphIndex: 66 |
| | | m_Scale: 1 |
| | | - m_ElementType: 1 |
| | | m_Unicode: 97 |
| | | m_GlyphIndex: 68 |
| | | m_Scale: 1 |
| | | - m_ElementType: 1 |
| | | m_Unicode: 101 |
| | | m_GlyphIndex: 72 |
| | | m_Scale: 1 |
| | | - m_ElementType: 1 |
| | | m_Unicode: 104 |
| | | m_GlyphIndex: 75 |
| | | m_Scale: 1 |
| | | - m_ElementType: 1 |
| | | m_Unicode: 108 |
| | | m_GlyphIndex: 79 |
| | | m_Scale: 1 |
| | | - m_ElementType: 1 |
| | | m_Unicode: 116 |
| | | m_GlyphIndex: 87 |
| | | m_Scale: 1 |
| | | - m_ElementType: 1 |
| | | m_Unicode: 8230 |
| | | m_GlyphIndex: 2030 |
| | | m_Scale: 1 |
| | | m_AtlasTextures: |
| | | - {fileID: 28268798066460806} |
| | | m_AtlasTextureIndex: 0 |
| | | m_IsMultiAtlasTexturesEnabled: 0 |
| | | m_ClearDynamicDataOnBuild: 1 |
| | | m_UsedGlyphRects: |
| | | - m_X: 0 |
| | | m_Y: 0 |
| | | m_Width: 83 |
| | | m_Height: 28 |
| | | - m_X: 83 |
| | | m_Y: 0 |
| | | m_Width: 70 |
| | | m_Height: 25 |
| | | - m_X: 153 |
| | | m_Y: 0 |
| | | m_Width: 67 |
| | | m_Height: 78 |
| | | - m_X: 83 |
| | | m_Y: 25 |
| | | m_Width: 61 |
| | | m_Height: 66 |
| | | - m_X: 0 |
| | | m_Y: 28 |
| | | m_Width: 64 |
| | | m_Height: 66 |
| | | - m_X: 220 |
| | | m_Y: 0 |
| | | m_Width: 28 |
| | | m_Height: 81 |
| | | - m_X: 144 |
| | | m_Y: 78 |
| | | m_Width: 42 |
| | | m_Height: 75 |
| | | - m_X: 64 |
| | | m_Y: 91 |
| | | m_Width: 57 |
| | | m_Height: 81 |
| | | m_FreeGlyphRects: |
| | | - m_X: 248 |
| | | m_Y: 0 |
| | | m_Width: 263 |
| | | m_Height: 511 |
| | | - m_X: 144 |
| | | m_Y: 25 |
| | | m_Width: 9 |
| | | m_Height: 53 |
| | | - m_X: 186 |
| | | m_Y: 81 |
| | | m_Width: 325 |
| | | m_Height: 430 |
| | | - m_X: 186 |
| | | m_Y: 78 |
| | | m_Width: 34 |
| | | m_Height: 433 |
| | | - m_X: 64 |
| | | m_Y: 28 |
| | | m_Width: 19 |
| | | m_Height: 63 |
| | | - m_X: 0 |
| | | m_Y: 172 |
| | | m_Width: 511 |
| | | m_Height: 339 |
| | | - m_X: 121 |
| | | m_Y: 153 |
| | | m_Width: 390 |
| | | m_Height: 358 |
| | | - m_X: 0 |
| | | m_Y: 94 |
| | | m_Width: 64 |
| | | m_Height: 417 |
| | | - m_X: 121 |
| | | m_Y: 91 |
| | | m_Width: 23 |
| | | m_Height: 420 |
| | | m_fontInfo: |
| | | Name: Liberation Sans |
| | | PointSize: 86 |
| | | Scale: 1 |
| | | CharacterCount: 250 |
| | | LineHeight: 98.90625 |
| | | Baseline: 0 |
| | | Ascender: 77.84375 |
| | | CapHeight: 59.1875 |
| | | Descender: -18.21875 |
| | | CenterLine: 0 |
| | | SuperscriptOffset: 77.84375 |
| | | SubscriptOffset: -12.261719 |
| | | SubSize: 0.5 |
| | | Underline: -12.261719 |
| | | UnderlineThickness: 6.298828 |
| | | strikethrough: 23.675 |
| | | strikethroughThickness: 0 |
| | | TabWidth: 239.0625 |
| | | Padding: 9 |
| | | AtlasWidth: 1024 |
| | | AtlasHeight: 1024 |
| | | atlas: {fileID: 0} |
| | | m_AtlasWidth: 512 |
| | | m_AtlasHeight: 512 |
| | | m_AtlasPadding: 9 |
| | | m_AtlasRenderMode: 4169 |
| | | m_glyphInfoList: [] |
| | | m_KerningTable: |
| | | kerningPairs: [] |
| | | m_FontFeatureTable: |
| | | m_GlyphPairAdjustmentRecords: [] |
| | | fallbackFontAssets: [] |
| | | m_FallbackFontAssetTable: [] |
| | | m_CreationSettings: |
| | | sourceFontFileName: |
| | | sourceFontFileGUID: e3265ab4bf004d28a9537516768c1c75 |
| | | pointSizeSamplingMode: 0 |
| | | pointSize: 86 |
| | | padding: 9 |
| | | packingMode: 4 |
| | | atlasWidth: 512 |
| | | atlasHeight: 512 |
| | | characterSetSelectionMode: 1 |
| | | characterSequence: 32 - 126, 160 - 255, 8192 - 8303, 8364, 8482, 9633 |
| | | referencedFontAssetGUID: 8f586378b4e144a9851e7b34d9b748ee |
| | | referencedTextAssetGUID: |
| | | fontStyle: 0 |
| | | fontStyleModifier: 0 |
| | | renderMode: 4169 |
| | | includeFontFeatures: 1 |
| | | m_FontWeightTable: |
| | | - regularTypeface: {fileID: 0} |
| | | italicTypeface: {fileID: 0} |
| | | - regularTypeface: {fileID: 0} |
| | | italicTypeface: {fileID: 0} |
| | | - regularTypeface: {fileID: 0} |
| | | italicTypeface: {fileID: 0} |
| | | - regularTypeface: {fileID: 0} |
| | | italicTypeface: {fileID: 0} |
| | | - regularTypeface: {fileID: 0} |
| | | italicTypeface: {fileID: 0} |
| | | - regularTypeface: {fileID: 0} |
| | | italicTypeface: {fileID: 0} |
| | | - regularTypeface: {fileID: 0} |
| | | italicTypeface: {fileID: 0} |
| | | - regularTypeface: {fileID: 0} |
| | | italicTypeface: {fileID: 0} |
| | | - regularTypeface: {fileID: 0} |
| | | italicTypeface: {fileID: 0} |
| | | - regularTypeface: {fileID: 0} |
| | | italicTypeface: {fileID: 0} |
| | | fontWeights: |
| | | - regularTypeface: {fileID: 0} |
| | | italicTypeface: {fileID: 0} |
| | | - regularTypeface: {fileID: 0} |
| | | italicTypeface: {fileID: 0} |
| | | - regularTypeface: {fileID: 0} |
| | | italicTypeface: {fileID: 0} |
| | | - regularTypeface: {fileID: 0} |
| | | italicTypeface: {fileID: 0} |
| | | - regularTypeface: {fileID: 0} |
| | | italicTypeface: {fileID: 0} |
| | | - regularTypeface: {fileID: 0} |
| | | italicTypeface: {fileID: 0} |
| | | - regularTypeface: {fileID: 0} |
| | | italicTypeface: {fileID: 0} |
| | | - regularTypeface: {fileID: 0} |
| | | italicTypeface: {fileID: 0} |
| | | - regularTypeface: {fileID: 0} |
| | | italicTypeface: {fileID: 0} |
| | | - regularTypeface: {fileID: 0} |
| | | italicTypeface: {fileID: 0} |
| | | normalStyle: 0 |
| | | normalSpacingOffset: 0 |
| | | boldStyle: 0.75 |
| | | boldSpacing: 7 |
| | | italicStyle: 35 |
| | | tabSize: 10 |
| | | --- !u!28 &28268798066460806 |
| | | Texture2D: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_Name: LiberationSans SDF Atlas |
| | | m_ImageContentsHash: |
| | | serializedVersion: 2 |
| | | Hash: 00000000000000000000000000000000 |
| | | m_ForcedFallbackFormat: 4 |
| | | m_DownscaleFallback: 0 |
| | | m_IsAlphaChannelOptional: 0 |
| | | serializedVersion: 2 |
| | | m_Width: 512 |
| | | m_Height: 512 |
| | | m_CompleteImageSize: 262144 |
| | | m_MipsStripped: 0 |
| | | m_TextureFormat: 1 |
| | | m_MipCount: 1 |
| | | m_IsReadable: 1 |
| | | m_IsPreProcessed: 0 |
| | | m_IgnoreMipmapLimit: 0 |
| | | m_MipmapLimitGroupName: |
| | | m_StreamingMipmaps: 0 |
| | | m_StreamingMipmapsPriority: 0 |
| | | m_VTOnly: 0 |
| | | m_AlphaIsTransparency: 0 |
| | | m_ImageCount: 1 |
| | | m_TextureDimension: 2 |
| | | m_TextureSettings: |
| | | serializedVersion: 2 |
| | | m_FilterMode: 1 |
| | | m_Aniso: 1 |
| | | m_MipBias: 0 |
| | | m_WrapU: 0 |
| | | m_WrapV: 0 |
| | | m_WrapW: 0 |
| | | m_LightmapFormat: 0 |
| | | m_ColorSpace: 0 |
| | | m_PlatformBlob: |
| | | image data: 262144 |
| | | _typelessdata: 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004080a0b1313131313131311110e0b060100000000000000000004090e11121313131313131313070705010000000000000000000000060b0e1011131313131313130a0a080400000000000000000000000000020507080c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0906010000000000000000000002080d101213131313131313130707040100000000000000000000000000000000000000000000000000030613131313131313131313120f0a05000000000000000000000003070909131313131313130b0a08040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c11141717202020202020201e1d1b17120c0400000000000000080f151a1d1f20202020202020201413110d080200000000000000040b11171a1d1e20202020202020171614100b0500000000000000000003090e12141519191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191816120d070000000000000000060d14191c1f1f202020202020201413110d0801000000000000000000000000000000000000000000060c1012202020202020202020201e1b1610090100000000000000040a0f13151620202020202020171714110c0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810171c2123242d2d2d2d2d2d2d2b2a27231d160e06000000000009121920262a2c2c2d2d2d2d2d2d2d21201d19130c050000000000050e161d22272a2a2d2d2d2d2d2d2d2423201c17100800000000000000060d141a1e2122262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262525221e1811090100000000000810181f25292b2c2d2d2d2d2d2d2d2d201d19130c04000000000000000000000000000000000000030a11171c1f2d2d2d2d2d2d2d2d2d2d2b27211b130a010000000000070f161b1f22232d2d2d2d2d2d2d2423211c17100800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121a22282d3031393939393939393837332e2820180e0400000008121b242b31363839393939393939392e2d2a251e160e05000000040e1720272e3336373939393939393931302d28221a11080000000000060f181f262a2d2e3232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232312e29231b13090000000006101a222a3035383939393939393939392c29241e160d0400000000000000000000000000000000030c151c23282c3939393939393939393937332c251c13090000000007101921272c2f303939393939393931302d28221a12080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101a242c33393c3e4646464646464644433f39322a20160c0100040f19242d353d42454646464646464646463936302820160c0200000b16202932393f4344464646464646463d3c39332c231a1005000000030d18212931363a3b3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3e3a342d251b11070000020d18222c343b414446464646464646464639352f2820160c010000000000000000000000000000000a151e262e343846464646464646464646433e372e251b10050000040f19232b32383b3c464646464646463e3c39332c241a10050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17222c363e45494a53535353535353514f4b443c32281d1206000915202b353f474e5253535353535353535346413a32281e13080006111d27323b444a4f51535353535353534a49443e362c22170b00000009141f29333b4246484c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a463f372d23180d010008141f2a343e464d5152535353535353535345413a32281e1308000000000000000000000000000006111c2630383f44535353535353535353534f4940372c21160a00000a16212b353d434849535353535353534a49453e362c22170c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111c28333e48505557606060606060605e5c564e44392e23170b010e1a26313d4751595e5f606060606060605f524c443a3025190d010b17222e39444d555b5d60606060606060575550483e33281c100400020e1a26313b454d535559595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959585651493f34291e1206000d1925303b4650585d5f606060606060605f524c443a2f24190d01000000000000000000000000000c17232e38424a505f60606060606060605f5a52493e33271b0f00030f1b27323d474f545660606060606060575550483e33281c1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212d3945505a61646c6c6c6c6c6c6c6b6760564b3f33271b0e04111d2a36424e59636a6c6c6c6c6c6c6c6c6c5e564c41362a1d11050e1a27333f4a555f676a6c6c6c6c6c6c6c64615a5044392d2014080005121e2a36424d575f616565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565625b51463a2e22160900101c2935414d5862696c6c6c6c6c6c6c6c6c5d564c4135291d110400000000000000000000000003101c28343f4a545c6c6c6c6c6c6c6c6c6c6c645a4f43372b1e120007131f2c38434f5960636c6c6c6c6c6c6c64615a5045392d211408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303c4955616c71797979797979797772675c4f43372a1d1106121f2c3845525e6a75797979797979797976685e5246392d201307101d2a36434f5b67717779797979797979706c6155493c3023160a000714212d3a46535f696e72727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272726d62564a3e3125180b00121f2b3844515d6974797979797979797976685d5245392c20130700000000000000000000000006121f2c3844505c66767979797979797979766c5f5346392d2013000915222f3b4854606b6f79797979797979716c6155493c3023170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717e8686868686868684776b5e5144382b1e110613202c3946535f6c7987868686868686867a6d6154473a2e211407111e2a3744515d6a7783868686868686867e7064574a3d3124170a000815222e3b4855616e7b7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7265584c3f3225190c00131f2c3946525f6c7986868686868686867a6d6054473a2d2114070000000000000000000000000713202d3a4653606d788686868686868686796c605346392d201300091623303c4956636f7d868686868686867e7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a93939393939184776b5e5144382b1e110613202c3946535f6c7986929393939393877a6d6154473a2e211407111e2a3744515d6a77849093939393938a7d7064574a3d3124170a000a1724303d4a5763707d8a8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c86796c5f5346392c201300131f2c3946525f6c7985929393939393877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693939393939386796c605346392d201300091623303c4956636f7c8993939393938a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a979f9f9f9e9184776b5e5144382b1e110613202c3946535f6c7986929f9f9f9f94877a6d6154473a2e211407111e2a3744515d6a7784909d9f9f9f978a7d7064574a3d3124170a000a1724303d4a5763707d8a96989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989286796c5f5346392c201300131f2c3946525f6c7985929f9f9f9f93877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d7986939f9f9f9f9386796c605346392d201300091623303c4956636f7c89969f9f9f978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4acaa9e9184776b5e5144382b1e110613202c3946535f6c7986929facaca094877a6d6154473a2e211407111e2a3744515d6a7784909daaaca3978a7d7064574a3d3124170a000a1724303d4a5763707d8a969f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9286796c5f5346392c201300131f2c3946525f6c7985929facaca093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2aca4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4b0aa9e9184776b5e5144382b1e110613202c3946535f6c7986929facada094877a6d6154473a2e211407111e2a3744515d6a7784909daab0a3978a7d7064574a3d3124170a000a1724303d4a5763707d8a93939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939286796c5f5346392c201300131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4acaa9e9184776b5e5144382b1e110613202c3946535f6c7986929facaca094877a6d6154473a2e211407111e2a3744515d6a7784909daaaca3978a7d7064574a3d3124170a000a1724303d4a5763707d8686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686796c5f5346392c201300131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a979f9f9f9e9184776b5e5144382b1e110613202c3946535f6c7986929f9f9f9f94877a6d6154473a2e211407111e2a3744515d6a7784909d9f9f9f978a7d7064574a3d3124170a000916232f3c4855616b707979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979746a5e5145382b1f1200131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a93939393939184776b5e5144382b1e110613202c3946535f6c7986929393939393877a6d6154473a2e211407111e2a3744515d6a77849093939393938a7d7064574a3d3124170a000714202c38444f5961636c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a62584d4135291d1000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717e8686868686868684776b5e5144382b1e110613202c3946535f6c7987868686868686867a6d6154473a2e211407111e2a3744515d6a7783868686868686867e7064574a3d3124170a0004101c28333e474f5557606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060605f5e5850473c3125190d00131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303c4955616c71797979797979797772675c4f43372a1d1106121f2c3845525e6a75797979797979797976685e5246392d201307101d2a36434f5b67717779797979797979706c6155493c3023160a00000b16212c353e44484a5353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353514d473e352a1f140900131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212d3945505a61646c6c6c6c6c6c6c6b6760564b3f33271b0e04111d2a36424e59636a6c6c6c6c6c6c6c6c6c5e564c41362a1d11050e1a27333f4a555f676a6c6c6c6c6c6c6c64615a5044392d201408000005101a232c33383c3d464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464645413c352c23190e0300131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111c28333e48505557606060606060605e5c564e44392e23170b010e1a26313d4751595e5f606060606060605f524c443a3025190d010b17222e39444d555b5d60606060606060575550483e33281c100400000008111a21282c2f3039393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393835312a231a11070000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17222c363e45494a53535353535353514f4b443c32281d1206000915202b353f474e5253535353535353535346413a32281e13080006111d27323b444a4f51535353535353534a49443e362c22170b00000000000810161c2023242d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2b29251f191108000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101a242c33393c3e4646464646464644433f39322a20160c0100040f19242d353d42454646464646464646463936302820160c0200000b16202932393f4344464646464646463d3c39332c231a1005000000000000050b1014161720202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201f1d19140e0700000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121a22282d3031393939393939393837332e2820180e0400000008121b242b31363839393939393939392e2d2a251e160e05000000040e1720272e3336373939393939393931302d28221a11080000000000000000000407090a131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131312100d09030000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810171c2123242d2d2d2d2d2d2d2b2a27231d160e06000000000009121920262a2c2c2d2d2d2d2d2d2d21201d19130c050000000000050e161d22272a2a2d2d2d2d2d2d2d2423201c1710080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c11141717202020202020201e1d1b17120c0400000000000000080f151a1d1f20202020202020201413110d080200000000000000040b11171a1d1e20202020202020171614100b0500000000000000000000000000000000000000000000000000020608080b0e1011121313121211100d0b080705020000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004080a0b1313131313131311110e0b060100000000000000000004090e11121313131313131313070705010000000000000000000000060b0e1011131313131313130a0a08040000000000000000000000000000000000000000000000000205090e121415181b1d1e1f20201f1f1e1c1a181514120e0905020000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070303030303030303030303030713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080e11151a1e21222528292b2c2c2c2c2b2b29272522211e1a14120e0902000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114101010101010101010101010101013202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080b0e111112131312110f0c0908060300000000000000000406070b0f1213131211100e0c0b090601000000000000000000000000000000000000000000000000000000000000000000000000000002080d14191e20262b2e2f323436383939393938373634322e2d2b26201e1a140e090200000000000000000000000000000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d211c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e121415181b1d1e1f201f1f1d1b191515120f0a0401000000070c101313181c1e1f201f1e1d1b181815120d06000000000000000000000000000000000000000000000000000000000000000000000000040c13191f252a2d31373a3b3e41434445464645454443403e3b3a37312d2a251f1a140d05000000000000000000000000000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2929292929292929292929292929292929292d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f141a1e212125282a2b2c2c2c2b2a282622211f1b15110d08030b12181c1f2025292b2c2c2c2b2a272524221d18110901000000000000000000000000000000000000000000000000000000000000000000080e161e25293036393c4247484b4e50515253535252514f4d4b4846423c3a36302a251f170f080000000000000000000000000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a36363636363636363636363636363636363636363a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c161b1f252a2d2e31343738393939383735322f2e2b26201d19130c151d23282c2d32353839393838363432312e29231b130900000000000000000000000000000000000000000000000000000000000000020a121a202830353b4146474e5355585b5c5e5f5f5f5f5e5e5c5a5855534d4846423b363029211a120a02000000000000000000000000000000000000131f2c3946525f6c7985929facada093877a6d605447434343434343434343434343434343434343434343434653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a111720272b31363a3b3e4144444546464544423f3c3b37322c29241e191e272e34383a3e42454646454443413f3d3a342d251b11060000000000000000000000000000000000000000000000000000000000020b141c242c323a41464d5254575f626567696b6c6c6c6c6b6a696765615f5754524d46423b332c241c140a020000000000000000000000000000000000131f2c3946525f6c7985929facada093877a6d60544f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f53606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151c232832373b4246484b4e505152535252504e4c4847433c39352f28222b30394045464b4f5152535251504e4b4a463f372d23180d01000000000000000000000000000000000000000000000000000000010b141d262e363e444c52565e61666a6e717476777879797878777673716e6966615e57524d453e362e261c140a0000000000000000000000000000000000131f2c3946525f6c7985929facada093877a6d605c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d151e262e343d43474d5354585b5d5e5f5f5f5e5d5b5955534e4745413a3129343c424b5153585c5e5f5f5f5e5d5a585651493f34291d120600000000000000000000000000000000000000000000000000000009131d262f38404850565e61686e73777b7e81838485868685858482807e7b77736e69615e57504840382e261c130900000000000000000000000000000000131f2c3946525f6c7985929facada093877a6d696969696969696969696969696969696969696969696969696969696d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151f2730383f444e54575e6164676a6b6c6c6c6b6a6865625f5854524c433f353c464e545c6065686b6c6c6b6b696765625b51463a2e221509000000000000000000000000000000000000000000000000000007101b252f38404a525a61686d747b8084888b8e8f919292929291918f8d8b8884807b746e69615a524a40382e251b0f06000000000000000000000000000000131f2c3946525f6c7985929facada093877a767676767676767676767676767676767676767676767676767676767676788693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d273139424a50586062696e71747777787979787775726f6a66605d56504540454e5860666d717578797978777674726d62564a3d3124180b00000000000000000000000000000000000000000000000000030c19222d37404a525c636c717a81868c9196989a9c9e9f9f9f9f9e9d9c9a9895918d86817b716c645c524a40372d21180e030000000000000000000000000000131f2c3946525f6c7985929facb6a99c8f82828282828282828282828282828282828282828282828282828282828282828f9ca9b5ac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c18242f39434b545c606a6f757b7e8183848586858583817f7c78726d68625a514b4d57606a6f797e82848586858483817f7265584b3f3225180c000000000000000000000000000000000000000000000000000a151e2b343f49525c646e737e858d92999da0a8a9a29f9d9c9b9c9d9fa2aaa7a09d99928e857e736e645c52493f332a1f14090000000000000000000000000000131f2c3946525f6c7985929facb8ab9f948f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f949fabb7ac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141e2935404b555d666d747c82878b8e909192929291908e8c88847f7a716d605d55535f696f7c848b8f9192929291908d86796c605346392d201300000000000000000000000000000000000000000000000006111c26303d46515b646e74808a92979fa3a9a19e999792908f8f8f909298989d9fa7a39f97928a80736e635b51453b31261a0e0400000000000000000000000000131f2c3946525f6c7985929facb8b0a69f9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9fa6b0bbac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303845515d676d7880898f93999a9d9e9f9f9f9e9d9b9896918c857e756d675d58626e7b8691969b9e9f9f9e9e9c9386796c605346392d20130000000000000000000000000000000000000000000000000c17232e38424f59626d74808d929ea1a9a39f97918c8885838282838385888b90959ea1a8a29f928d80736d62574d42362a20160a00000000000000000000000000131f2c3946525f6c7985929facb8b8b0aba9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9abb0b8b9ac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e3842505a606d79828d929b9fa4ababa39f9d9c9b9c9d9fa19e97928b82796d685f6a76828f98a1a8aaa39f9995949386796c605346392d2013000000000000000000000000000000000000000000000003101c28343f4a54606b727f8c929ca4aaa299928c84807b787675757677797b7f838a91969fa6a49c928b7f72695f53463d32271b0f03000000000000000000000000131f2c3946525f6c7985929facb8b0a8a2a09f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa0a1a6aeb8ac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54616c74818e949da4aca7a09d9992908f8f8f9192999a9e9f948f837a6d666f7c88949faaaea398928c88878886796c605346392d2013000000000000000000000000000000000000000000000006121f2c3844505c666f7c87929fa4aba29892878079736f6a6a696869656c6e72777d848f949fa6a49f92867b6e61584e43382b1f1306000000000000000000000000131f2c3946525f6c7985929facb8a89e969393939393939393939393939393939393939393939393939393939393939393959ca6b1ac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c66717e8b939ea6aea59d95908a86838282838486898d92979f959083786d73808d99a6b0a89f9286807c7a7b7d7063574a3d3024170a0000000000000000000000000000000000000000000003101c28343f4a54606d78839099a3afa39992867d736d67625f585c5c535b6061656c707a828f949fa9a2988f82766a6054473b2e221508000000000000000000000000131f2c3946525f6c7985929facb8a2968c87868686868686868686868686868686868686868686868686868686868686868a95a1adac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7884919ea5afa69d938e837d797776757677797c80858c9298958e81747683909ca9aca0958a7e736f6e6e706b6155483c2f2316090000000000000000000000000000000000000000000006121f2c3844505c66727f8b95a0aba89f92877d706b605d55534e4f4f495053555a61686d79829097a1a49f94897c6f6256493c2f231609000000000000000000000000131f2c3946525f6c7985929facada093877a797979797979797979797979797979797979797979797979797979797979788693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a96a0acac9f948e8179716d67696869676d70747a7f869095938a7e7885929fabaa9d9184776c6261616361594f44382c201407000000000000000000000000000000000000000000000713202d3a4653606d7984919ea7ada1968d80736b6059514b474342423f44464850565d676d7a85929b9993908c8275685c4f4235291c0f020000000000000000000000131f2c3946525f6c7985929facada093877a6d6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d576875818e9ba8afa49a8f82786d66605d555c555c6063676d727b838f9391857b8797a2ada79a8d8074675a545557554f473e33281c100400000000000000000000000000000000000000000004101d2935404b5564717d8a96a1acaa9e9184796d60594f45403937312d3337393e444c555e68717e8b8e8a86837f7c6f6255483c2f221509000000000000000000000000131f2c3946525f6c7985929facada093877a6d606060606060606060606060606060606060606060606060606060606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a46525e697885919eabac9f93877c6f665c54514b4f4b5153555d60696e79818f949083909da9b3a4988b7e7165584b484a48443e352c21160b000000000000000000000000000000000000000000000613202c3945515d6775828f9ba8aea3988b7e71675d51473d352f2b2622272b2d323a434c56606d7883817e7a76736f6a5f53473b2e211508000000000000000000000000131f2c3946525f6c7985929facada093877a6d605453535353535353535353535353535353535353535353535353606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8797a1adaa9d9083776a5f544b4540424045474b51575f676d78828f9590959fabb0a3968a7d7063574a3d3d3c38332c231a1005000000000000000000000000000000000000000000000714202d3a4753606d7a86929facac9f92867a6d60554b403529241d1a171b1f2028313a44515c666d7775716d6866625f584e43372b1f1206000000000000000000000000131f2c3946525f6c7985929facada093877a6d605447464646464646464646464646464646464646464646464653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8895a9b3a79a8d817467584e4239352f34383a40454d555c666d7a85919d9fa7b1afa396897c706356493d302f2c28211a110800000000000000000000000000000000000000000000000a1723303d4a5663707d8998a3aea89b8e8275675d51433a2f23181d1d1d1d1d161f2834404a545c606a6864615e5655534e463c32261b0f03000000000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a39393939393939393939393939393939393939393a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d8996a3b0a6998c7f7366594c402f2924292c2f353b434b545d68707d8a959fabb7afa396897c706356493d3023201c1610080000000000000000000000000000000000000000000000000d1a2733404d5a6673808d99aab4aa978b7e7164554c4131282a2a2a2a2a2a2a2a2a232e39424a51535d5b5754524c4847433c342a20150a00000000000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0a5988c7f7265594c3f2e23181c1f24293139424c56616c7683909da9b3afa396897c706356493d302316100b0500000000000000000000000000000000000000000000000004101c2834404b546975828f9ca8aea398887b6f6255483c2f3737373737373737373737373039404446514e4b4746413c3b37322a261f180f06000000000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2120202020202020202020202020202020202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d8996abb5a6998d807366544a403428211e1a181f27303a44505a64707d8a97a2adafa396897c706356493d3023160a000000000000000000000000000000000000000000000000000006131f2c3845515c667884919eabac9f9286796d6053464444444444444444444444444444444444444444444444444444443b3a36312a21180e030000000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114131313131313131313131313131313202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b8899a3afa89b8f8275665c51443a322d2b2627272628323e4653606d7985929fabafa396897c706356493d3023160a00000000000000000000000000000000000000000000000000000713202d3a4653606d7986939facaa9d908477665c50505050505050505050505050505050505050505050505050505050504846423b332a1f14090000000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070606060606060606060606060713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a86929facab9e9285796d60564c443d3a373134333332323845515c6675828f9ca8afa396897c706356493d3023160a00000000000000000000000000000000000000000000000000000815212e3b4854616e7b879aa4afa99c90837669545d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d55534d453b31261a0e0200000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3945515d677783909dabada1978a7e71685e564f484742424140403f3f3f404b546673808c99a6afa396897c706356493d3023160a00000000000000000000000000000000000000000000000000000916232f3c4956626f7c8995acb6a89c8f82756a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a615f574d42362a1e120500000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b5566737f8c99a3aea99e91847a6d68615955534d4f4e4d4c4c4c4b4b4c5865727f8b98a5afa396897c706356493d3023160a00000000000000000000000000000000000000000000000000000a1623303d495663707c8996a3afa89b8e8177777777777777777777777777777777777777777777777777777777777777776e695f53463a2d21140700000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18242f3b4854616e7b86929fa8ada19690827a706b65615f575c5a5a5959585858585865717e8b98a4afa396897c706356493d3023160a00000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a96a3b0ab9e928583838383838383838383838383838383838383838383838383838383838383837b6e6155483b2e22150800000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a46525e6974808d96a1a9a89f9590847d77726e696a6867666665656565646465717e8b98a4afa396897c706356493d3023160a00000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0ada1979290909090909090909090909090909090909090909090909090909090909090887b6e6255483b2f22150800000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d57606d79849197a1a9a79f969189837f7b78767574737372727271717171717e8b98a4afa396897c706356493d3023160a00000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0b3a9a19e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d94887b6e6155483b2e22150800000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a25303b45515d676f7c8591979ea5a8a09e95908b8885838281807f7f7f7e7e7e7e7d7d808d9aa7afa396897c706356493d3023160a00000000000000000000000000000000000000000000000000000a1723303d4a5663707d8996a3b0b8b0aba99f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa9aaaaaaaaaa94877a6e6154473b2e21140800000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2935414b555f6a6f7c858f939c9fa4a79f9d989892908f8d8d8c8c8b8b8b8b8a8a8a8d929da9afa396897c706356493d3023160a0000000000000000000000000000000000000000000000000000091623303c4956636f7c8996a2afb0a69f9c9393939393939393939393939393939393939393939393939c9ea6b0aea398877a6d6054473a2d21140700000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d18242f3a434e585f6a6f7a82898f93999c9fa2aaa29f9d9b9a999998989898979797979a9da4aeafa396897c706356493d3023160a00000000000000000000000000000000000000000000000000000815222f3b4855626e7b8895a9b3ab9f948f8686868686868686868686868686868686868686868686868f949eaaac9f928579675d5145392c20130600000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131d28313c464e585f686d757c82878b8f929897999a9b9c9d9d9d9e9e9e9e9f9f9f9fa3abacb5afa396897c706356493d3023160a00000000000000000000000000000000000000000000000000000714212d3a4754606d7a8797a2ada99c8f82797979797979797979797979797979797979797979797979828f9ca9ab9e9184786b554b4135291d110400000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2a343c464e565e616b6f757b7f8285888a8c8d8f8f9090919191919292929292999ba3acafa396897c706356493d3023160a00000000000000000000000000000000000000000000000000000613202c3945515d677885929eabaa9d9184776c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c667784919eaaa99c8f8376695c50432f24180d0100000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d18222a343c444c52596063696e7276797b7d7f81828383848484848585858585868b909ba7afa396897c706356493d3023160a000000000000000000000000000000000000000000000000000004111d2935414c55697683909ca9ab9f928578695f606060606060606060606060606060606060606d7986929faca79a8d8174675a4e4134271b070000000000000000000000131f2c3946525f6c7985929facaca093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e171e252a323a41464f54575e6165666d6f717374757676777777787878787879797e8b98a4afa396897c706356493d3023160a0000000000000000000000000000000000000000000000000000010d19242f414d5a6774808d9aabaea298887b6e61555353535353535353535353535353535355626f7c8899a3afa9988b7e7265584b3f3225180c0000000000000000000000131f2c3946525f6c7985929f9f9f9f93877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d7986939f9f9f9f9386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c1720293036393a3e3f44484d5354545c606264666768696a6a6a6b6b6b6b6c6c6c717e8b98a4afa396897c706356493d3023160a000000000000000000000000000000000000000000000000000000081724313d4a5764707d8a99a3afaa988b7e7165574d42464646464646464646464646424d5765727f8c98abada297887b6f6255483c2f2215090000000000000000000000131f2c3946525f6c7986929393939393877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693939393939386796c605346392d201300091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e29323a4146474b4c4d4e4f51524a50535557595a5c5c5d5d5e5e5e5e5f5f5f65717e8b98a4afa396897c706356493d3023160a0000000000000000000000000000000000000000000000000000000714212e3a4754616d7a86929faca89b8e8275695e53463d313939393939393939303946525e6976828f9ca9ab9e9285786c605346392d2013060000000000000000000000131f2c3946525f6c7986868686868686867a6d6054473a2d2114070000000000000000000000000713202d3a4653606d788686868686868686796c605346392d201300091623303c4956636f7c8996a2aca4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1925303a444c525457595a5b5c5d5e5b5953484a4c4e4f5050515151515252525965727f8c98a5afa396897c706356493d3023160a0000000000000000000000000000000000000000000000000000000713202d3946525d6876828f9ca8ac9f92867b6e61584e433b322c292424292c3139424d57616e7b86929faca89b8e8174655b5044372b1f12050000000000000000000000121f2b3844515d6974797979797979797976685d5245392c20130700000000000000000000000006121f2c3844505c66767979797979797979766c5f5346392d201300091623303c4956636f7c89969f9f9f978a7d7164574a3e3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2a36414c565e6164656768696a6b68655d534840414243434444444545454d596673808c99a6afa295897c6f6256493c2f23160900000000000000000000000000000000000000000000000000000005111d2935414c5664717e8a96a1ada3998d80746a60564d443e39352f2f35383c434b545e6973808d99a3aca0968a7d706353493f33271b0f030000000000000000000000101c2935414d5862696c6c6c6c6c6c6c6c6c5d564c4135291d110400000000000000000000000003101c28343f4a545c6c6c6c6c6c6c6c6c6c6c645a4f43372b1e1200091623303c4956636f7c8993939393938a7d7164574a3e3124170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525e686d71727374767778756f65594d3d323536373737383835404b556774818e9aa7b2a995887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000010d1924303a4653606d7984919ea7ab9f92877c6f685e564f47454141414045474e555c666e7b86929faba89e9184786c605346392d22170b0000000000000000000000000d1925303b4650585d5f606060606060605f524c443a2f24190d01000000000000000000000000000c17232e38424a505f60606060606060605f5a52493e33271b0f00091623303c4956636f7d868686868686867e7164574a3e3124170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a7e7f8081828485817568584e43372e2c2823282c2f3945515d677783909daaada196877a6d6054473a2d2114070000000000000000000000000000000000000000000000000000000008131f2c3845515c66727f8b95a0aba39991847a6e68615954514c4e4e4b5153575f676d78839098a2aca0968b7f72665b5044382b1b110600000000000000000000000008141f2a343e464d5152535353535353535345413a32281e1308000000000000000000000000000006111c2630383f44535353535353535353534f4940372c21160a000915222f3b4854606b6f79797979797979716c6155493c3023170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b878c8d8e8f909184786a6054473f3a38342e34383a404b55606d7a86929facab9e918578675d5145392c2013060000000000000000000000000000000000000000000000000000000004101c2834404b54606d78839199a3aba09690837a706b64605d555b5b555d60636a6e79818e959faaa49a9184796d60544a3f33281c0a00000000000000000000000000020d18222c343b414446464646464646464639352f2820160c010000000000000000000000000000000a151e262e343846464646464646464646433e372e251b10050007131f2c38434f5960636c6c6c6c6c6c6c64615a5045392d2114080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a46535e697884919a9b9c9d96897c6f625a504a464440434044464b515c67717e8b98a3aeaa9b8f827568554b4135291d110400000000000000000000000000000000000000000000000000000000000c18232e3944515c666f7c87929fa4a8a09590847d76716d6769676869676d70757b838e939ea7a69f93887d70665c5142382d22170b000000000000000000000000000006101a222a3035383939393939393939392c29241e160d0400000000000000000000000000000000030c151c23282c3939393939393939393937332c251c13090000030f1b27323d474f545660606060606060575550483e33281c110400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d576774818e9aa6a9a89b8e81756c605c5453514a504a5153555d606d7983919daaaea2988b7e7165584b3e2f24180d01000000000000000000000000000000000000000000000000000000000007121d2834404a54606b727f8c929ca4a7a096918a827d7a7775747475767a7d818790959ea5a59e938d80736b61544b402f261c11060000000000000000000000000000000810181f25292b2c2d2d2d2d2d2d2d2d201d19130c04000000000000000000000000000000000000030a11171c1f2d2d2d2d2d2d2d2d2d2d2b27211b130a010000000a16212b353d434849535353535353534a49453e362c22170c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a25313c4855626f7c88949faaaa9e938a7e726d6662605c545d545c6062676d75808d95a0aca99f92867a6d6154473a2e211407000000000000000000000000000000000000000000000000000000000000000c18232e39424f59626d73808c929ea1a8a19e948f8a8683828181828386898e93999fa7a39f938f81786d60594f42392e1d140a0000000000000000000000000000000000060d14191c1f1f202020202020201413110d0801000000000000000000000000000000000000000000060c1012202020202020202020201e1b1610090100000000040f19232b32383b3c464646464646463e3c39332c241a100500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915212e3b47535f6a76828f98a2aea59f92877f78726f6d666a696a666d6f7379818d929da7aca2978d8074685d5246392d2013070000000000000000000000000000000000000000000000000000000000000007121c27303d46515b646e73808a92979fa3a69f9c9992908f8e8e8f9092989b9fa4a69f99928c81796d665c50473d30271d0b0200000000000000000000000000000000000002080d101213131313131313130707040100000000000000000000000000000000000000000000000000030613131313131313131313120f0a050000000000000007101921272c2f303939393939393931302d28221a120800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e58626f7c86929fa4aca399928b837f7b797777767777797c80858e939da4aea49a92857a6d61564c4135291d110500000000000000000000000000000000000000000000000000000000000000000b151e2b343f49525c646e737e858e92999ea1a8a39f9d9c9a9b9c9d9fa3a9a29f9b948f877f776d675c544a3f352c1e150b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f161b1f22232d2d2d2d2d2d2d2423211c17100800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26323c47535f6a717e8b939aa2aaa39f95918c8886848483838485898c92979ea5aaa39f93887d70685e52443a3024190d010000000000000000000000000000000000000000000000000000000000000000030c19222d37404a525c636c707a81868d9196989b9c9e9f9f9f9f9e9d9b9997928e89827c736c655c554b42382e231a0c03000000000000000000000000000000000000000000000307090a0e111213131211100e0b0907060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f13151620202020202020171714110c050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202b37434e58616c727f8892989fa3a7a09d99999291909090919298999ea2a9a69f98928b7f726c61564c4132281e13080000000000000000000000000000000000000000000000000000000000000000000007101b252e38404a525a61686d747b8084888b8e90919292929291908e8c8985817c766f6a605b534b433930261c1108000000000000000000000000000000000000000000040b101316161a1d1f201f1e1e1d1a18151312100b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003070909131313131313130b0a08040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f1a26313c46505a636d727e868e92999da0a8aba39f9e9d9c9d9e9fa2aaaaa29f9b948f867e726d62594f443a3020160c02000000000000000000000000000000000000000000000000000000000000000000000009131c262e37404850565e61696e73787c7e818384858686858583817f7c79746f6a625f585049413930271e150a000000000000000000000000000000000000000002090e161b202223272a2c2c2c2b2a29272522201f1c17110a0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202a343e48515b636c717b81878c919597999c9d9e9e9f9f9f9e9d9b9998928e89827b716c625b51473e32281e0e04000000000000000000000000000000000000000000000000000000000000000000000000010a141c252e363e444c52575e61666a6f7274767878797978787675726f6d66626058534e443f382f271e150c0300000000000000000000000000000000000000050d141a21272c2f30343738393938373634312f2d2b28231c140c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e18222d363f49515a61696e747b8084888b8d8f90919292929291908e8c8985817c766e69625a51493f352c20160c0000000000000000000000000000000000000000000000000000000000000000000000000000020a131c242c323a41464d5254585f626568696b6c6c6c6c6b6a686663605c54544e47433c332d261d150c0300000000000000000000000000000000000000060f171f252a32383b3d4144454646454443413e3c3a38342e261e140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101b242e373f4850575e61696e73777b7e80828484858686858583827f7d79756f6b625f5750483f372d231a0e04000000000000000000000000000000000000000000000000000000000000000000000000000000010a121a202830363b4246484e5355585b5d5e5f5f5f5f5e5d5b595653514b47433d373127221b140b0300000000000000000000000000000000000000060f18212930363d4448494d505253525151504d4b4846443f3830261c1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121c252e363e454d52575f62666a6e71737577787879797978777573706d67636059534d453e362d251b1108000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e161e252a30363a3c4347484b4e50515253535252504e4c494645403937322b262017110a0200000000000000000000000000000000000000020c18212a333b42464f54565a5d5f5f5f5e5d5c5a585553504a42382e23170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131c242c333b42464d5355575f626466696a6b6b6c6c6c6b6a686663605d55544f47423c332d241b13090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c13191f252a2d32373b3c3f414345454646454543423f3c3a38342e2b27201b150b060000000000000000000000000000000000000000000a141e2a333b454d52596063676a6b6c6c6b6a69676462605c544a3f34281c10030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a121a212930363c4247484e5355585a5c5d5e5f5f5f5f5e5d5b595653514b48433d37312a211b12090100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d141a1e20262b2e2f323536383939393938373533302d2c28231d1b150f0a0300000000000000000000000000000000000000000006111c26303b454d575e616b70747778797978777674716f6d665c5044382b1f120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f171f252a31373a3c4247484b4d4f51515253535252504f4c4a4745403938322b2620180f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e12151b1f212225282a2b2c2c2c2c2b2a282623201f1c18120f0a0400000000000000000000000000000000000000000000000b17232e38424d575f696e767c8083858685848483807e7c786d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d141a1f262b2e31373a3b3e4042444545464646454442403d3a38352f2c27211a150e060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002050a0f121515181b1d1e1f20201f1f1d1b19161313100c070000000000000000000000000000000000000000000000000003101c28343f4a545f696e7b82898d9092929291908f8d8b887e7164584b3e3125180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090e151a1e21262b2e2f31333637383839393938373533302d2c29241d1b160e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030608090c0e10121213131212100f0c0907060400000000000000000000000000000000000000000000000000000006121f2b3844505c666e7b848f949a9d9e9f9f9e9d9c9a978b7e7164584b3e3125180b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e12151a1e21222527292a2b2c2c2c2c2b2a282623201f1d18120f0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d788390969fa6aaababa5a1a0a0a1978b7e7164584b3e3125180b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000206090e121415181a1c1e1e1f20201f1f1d1c19171413100c070100000000000000000000000000000000000000000000000000000000030613131313131313130d0c0a07020000000000000000000000000003060809131313131313130b0b0905010000000000000000000000000000000000000000000000000000000000000000000004101c2834404b5564717e8a959fa8b0a9a19e9894939394968b7e7164584b3e3125180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020608080b0d0f11121213131312110f0d0a0706040000000000000000000000000000000000000000000000000000000000060c101220202020202020201a1917130e0800000000000000000000040a0f13151620202020202020181715110c0600000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c6776828f9ca7b1aaa197928b88868687898b7e7164584b3e3125180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a11171c1f2d2d2d2d2d2d2d2d2726231f19120a0200000000000000070f161b1f22232d2d2d2d2d2d2d2524211d18110900000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7986929facaea39892857f7b79797b7c7f7c6f6256493c2f231609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151c23282c393939393939393933322f2a241c140a00000000000007101920272b2e2f3939393939393932312e29221b1209000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c8999a3aeac9f92867c726e6d6d6e70726f6a6054473b2e2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151e262e34384646464646464646403f3b362e261c120800000000040f19222b32383b3c464646464646463e3d3a342d241b11060000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97abb4a79a8e81746a6160606163656260584e43372b1f1306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2630383f4453535353535353534d4b4740382e24190e020000000a16202b343d434749535353535353534b4a453f362d22180c0100000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a4978a7e716458535354565856544e463d32271b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17232e38424a505f606060606060605a58524a40362a1f13070000030f1b27323d464e545660606060606060585650483f34291d110500000000000000000000000000000000000000000000000000000000000c1825323f4b5865727e8b98a5afa295897c6f6256494648494c4947433d342b20150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a545c6c6c6c6c6c6c6c6c66635c52473b2f23170a000006131f2b38434e5860626c6c6c6c6c6c6c65625a50453a2e21150900000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5aea195887b6e6255483b3b3d3f3c3b37322b22190f04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844505c667679797979797979736e63584b3f3226190c00000815222e3b4754606a6f79797979797979716c62564a3d3124170b00000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e30322f2e2b27201910070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d78868686868686868073665a4d4033271a0d00000916232f3c4956626f7c868686868686867e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e232523221f1b150f07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693939393938d8073665a4d4033271a0d00000916232f3c4956626f7c8993939393938b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e22191615130f0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7986939f9f9f998d8073665a4d4033271a0d00000916232f3c4956626f7c89959f9f9f988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221509080603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2aca4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508080400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000050c1925323f4c5865727f8b98a5aea194887b6e6155483b2e22171614100b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000000000000000000000000000000000000000000000000000000810171c25323f4c5865727f8b98a5aea194887b6e6155483b2e262423201c17100800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000000000000000000000000000000000000000000000000000008121a22282d323f4c5865727f8b98a5aea194887b6e6155483b333331302d28221a1108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000000000000000000000000000000000000000000000000005101a242c33393c3f4c5865727f8b98a5aea194887b6e6155484040403d3c39332c231a10050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000000000000000000000000000000000000000000000000000c17222c363e45494a4d5865727f8b98a5aea194887b6e61554d4d4d4d4a49443e362c22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000005111c28333e48505557595965727f8b98a5aea194887b6e615959595959575550483e33281c100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000000000000000000000000000000000000000000000000814212d3945505a6164666666727f8b98a5aea194887b6e66666666666664615a5044392d20140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0600000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000000000000000000000000000000000000000000000000a1723303c4955616c71737373737f8b98a5aea194887b73737373737373706c6155493c3023160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca79a8d8174675a4e412d22170b00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000000000000000000000000000000000000000000000000b1724313e4a5764717e80808080828f9ca8b3a79a8d80808080808080807e7064574a3d3124170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca89b8e827568544a3f33281c0f03000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000000000000000000000000000000000000000000000000f1c2835424f5b6875828c8c8c8c8f949eaab5a99d928d8c8c8c8c8c8c8c8174685b4e4135281b0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca99c8f8376665b5044382b1f120700091623303c4956636f7c8996a2afa4988b7e7165584b3e3225180b0000000000000000000000000000000000000000000000000f1c2835424f5b6875828e9999999c9ea6b0b9aea49d9a9999999999998e8174685b4e4135281b0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0acab9f9285796c605346392e23180d060a1723303d4a5663707d8996a3b0a4978b7e7164584b3e3125180b0000000000000000000000000000000000000000000000000f1c2835424f5b6875828e9b9f9fa0acaeb5bdb1a9a3a19f9f9f9f9f9b8e8174685b4e4135281b0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0acada297887c6f62544a4034281f1612101724313e4a5764717d8a97a4b0a4978a7e7164574b3e3124180b0000000000000000000000000000000000000000000000000f1c2835424f5b6875828e939393939fa3abb5a99f98949393939393938e8174685b4e4135281b0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0acb3a9998c7f73665c51443b3128201f1c1f25323f4c5865727f8b98a5b0a3968a7d7063574a3d3024170a0000000000000000000000000000000000000000000000000f1c2835424f5b68758186868686868b99a3aea3988d88868686868686868174685b4e4135281b0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0acb8ab9e9184796d60574d433a322d2c282b2d36414c566774808d9aa7b3aa95897c6f6256493c2f2316090000000000000000000000000000000000000000000000000e1b2834414d59656f75797979797987929faca194887b79797979797979746f64594d4034271a0e01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0acb9ada1968b7e71695e554c443e3a383437393e46525e687683909ca9aea298877a6e6154473b2e2114080000000000000000000000000000000000000000000000000c1925313d48535d65686c6c6c677683909da9a194887b6e6c6c6c6c6c6c68645d53483c3024180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0acb1a8a09d92857b6e675e56504846443f4446484f58616d7a86929facab9f928578695e52463a2d2014070000000000000000000000000000000000000000000000000915202c37424b53595b6060606774808d9aa7a194887b6e6160606060605b59534b41372b20140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0acaca09591959082796d68615a5553504a50535459616a73808c99a3afa99c8f827669564d42362a1e1105000000000000000000000000000000000000000000000000040f1b25303942484d4f53535764717e8a97a9a194887b6e6155535353534e4d4841392f251a0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0acaa9d9184919590837a716c6662605c545b6061646b707c87929fabb0a6998c7f7266594c3f3025190e020000000000000000000000000000000000000000000000000009141e2730373d4142464854616e7b8796a1a194887b6e61554846464641403c372f271d13090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca4978a7e85929590847e77726f6d666b656c6e71767d859299a3aeac9f94887b6e6155483b2e2215090000000000000000000000000000000000000000000000000000020c151e252c3134353a46535e697884919ea194887b6e6155483b39393534302b251d150b010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca4978a7e7e8b9296918a837f7b79787778797b7e828a9297a2abafa49a8f8276695f53473a2d211408000000000000000000000000000000000000000000000000000000030c141b2025282a36424d576875828e9ba194887b6e6155483b2e2d282724201a130b03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca4978b7e74818e949e95908c888685848585878b8f949fa2a9aea59f93877c6f62574d42372b1e12060000000000000000000000000000000000000000000000000000000002090f15191a25313f4c5965727f8c989f94887b6e6155483b2e221b1a18140f090100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca5988b7e7278828e939f9d999a939291919298979c9fa6adaba39f938d80736a6054453c31261a0e020000000000000000000000000000000000000000000000000000000000000409091623303c4956636f7c89999393887b6e6155483b2e2215080c0803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca5988b7f726d78818b92989fa29f9e9e9e9fa3aaa9a9aaa29f99928b81786d60584e43332a1f15090000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7987868686867b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca5998c7f72666d757f868d92989a9c9e9e9f9f9e9d9c9998928d867f746d665c50463d3221180e0300000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c6775797979797976695f53463a2d211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998c7f7366606d727b80858a8d8f9192929291908f8c8985807b726d605c544a3f342b200f060000000000000000000000000000000000000000000000000000000000000000000004101c2834404b555c6a6c6c6c6c6c6c5f574d42372b1e1205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665b62686e74797d808284858685858482807d7a746e69625b504a42382e22190f0000000000000000000000000000000000000000000000000000000000000000000000000c18232e39434b51535f6060606055534d453c31261a0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a565e61666d7073757778797978777673706d67615e5751443f3830261c100700000000000000000000000000000000000000000000000000000000000000000000000007121d27303940454653535353534846423c332a1f140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d52545c606367696b6b6c6c6b6a696663605d55534d453f342e261e140a00000000000000000000000000000000000000000000000000000000000000000000000000000b151e272e34383a46464646463b3a37312a21180e0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d464b5153575a5c5e5f5f5f5e5d5c595654514b46423b3328231c140c020000000000000000000000000000000000000000000000000000000000000000000000000000030c151d23282c2d39393939392e2d2b261f180f060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d404045464a4d4f5152535252514f4d4a4745413a3631292117110a0200000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181c1f202c2d2d2d2d22211e1a140e06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4034383a3d404244454646454443403d3a39352f2a251f170f060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c10131320202020201514120e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d40332c2d3034363838393938373633302d2c29241d1a140d050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607131313131308070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d403327202427292b2c2c2c2b2a29262321201d18130e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a171a1c1e1f201f1f1e1c1a171413110d07010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d0d0f111213131211100d0a0706040100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d01030505060605040300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7986939f9f9f998d8073665a4d4033271a0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693939393938d8073665a4d4033271a0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d78868686868686868073665a4d4033271a0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844505c667679797979797979736e63584b3f3226190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a545c6c6c6c6c6c6c6c6c66635c52473b2f23170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17232e38424a505f606060606060605a58524a40362a1f130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2630383f4453535353535353534d4b4740382e24190e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151e262e34384646464646464646403f3b362e261c12080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151c23282c393939393939393933322f2a241c140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a11171c1f2d2d2d2d2d2d2d2d2726231f19120a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c101220202020202020201a1917130e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030613131313131313130d0c0a070200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 |
| | | m_StreamData: |
| | | serializedVersion: 2 |
| | | offset: 0 |
| | | size: 0 |
| | | path: |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 2e498d1c8094910479dc3e1b768306a4 |
| | | timeCreated: 1484171803 |
| | | licenseType: Pro |
| | | NativeFormatImporter: |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | %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: LiberationSans SDF - Outline |
| | | m_Shader: {fileID: 4800000, guid: fe393ace9b354375a9cb14cdbbc28be4, type: 3} |
| | | m_ShaderKeywords: OUTLINE_ON |
| | | m_LightmapFlags: 5 |
| | | 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} |
| | | - _Cube: |
| | | m_Texture: {fileID: 0} |
| | | m_Scale: {x: 1, y: 1} |
| | | m_Offset: {x: 0, y: 0} |
| | | - _FaceTex: |
| | | m_Texture: {fileID: 0} |
| | | m_Scale: {x: 1, y: 1} |
| | | m_Offset: {x: 0, y: 0} |
| | | - _MainTex: |
| | | m_Texture: {fileID: 28684132378477856, guid: 8f586378b4e144a9851e7b34d9b748ee, |
| | | type: 2} |
| | | m_Scale: {x: 1, y: 1} |
| | | m_Offset: {x: 0, y: 0} |
| | | - _OutlineTex: |
| | | m_Texture: {fileID: 0} |
| | | m_Scale: {x: 1, y: 1} |
| | | m_Offset: {x: 0, y: 0} |
| | | m_Floats: |
| | | - _Ambient: 0.5 |
| | | - _Bevel: 0.5 |
| | | - _BevelClamp: 0 |
| | | - _BevelOffset: 0 |
| | | - _BevelRoundness: 0 |
| | | - _BevelWidth: 0 |
| | | - _BumpFace: 0 |
| | | - _BumpOutline: 0 |
| | | - _ColorMask: 15 |
| | | - _Diffuse: 0.5 |
| | | - _FaceDilate: 0.1 |
| | | - _FaceUVSpeedX: 0 |
| | | - _FaceUVSpeedY: 0 |
| | | - _GlowInner: 0.05 |
| | | - _GlowOffset: 0 |
| | | - _GlowOuter: 0.05 |
| | | - _GlowPower: 0.75 |
| | | - _GradientScale: 10 |
| | | - _LightAngle: 3.1416 |
| | | - _MaskSoftnessX: 0 |
| | | - _MaskSoftnessY: 0 |
| | | - _OutlineSoftness: 0 |
| | | - _OutlineUVSpeedX: 0 |
| | | - _OutlineUVSpeedY: 0 |
| | | - _OutlineWidth: 0.1 |
| | | - _PerspectiveFilter: 0.875 |
| | | - _Reflectivity: 10 |
| | | - _ScaleRatioA: 0.9 |
| | | - _ScaleRatioB: 0.73125 |
| | | - _ScaleRatioC: 0.64125 |
| | | - _ScaleX: 1 |
| | | - _ScaleY: 1 |
| | | - _ShaderFlags: 0 |
| | | - _Sharpness: 0 |
| | | - _SpecularPower: 2 |
| | | - _Stencil: 0 |
| | | - _StencilComp: 8 |
| | | - _StencilOp: 0 |
| | | - _StencilReadMask: 255 |
| | | - _StencilWriteMask: 255 |
| | | - _TextureHeight: 1024 |
| | | - _TextureWidth: 1024 |
| | | - _UnderlayDilate: 0 |
| | | - _UnderlayOffsetX: 0 |
| | | - _UnderlayOffsetY: 0 |
| | | - _UnderlaySoftness: 0 |
| | | - _VertexOffsetX: 0 |
| | | - _VertexOffsetY: 0 |
| | | - _WeightBold: 0.75 |
| | | - _WeightNormal: 0 |
| | | m_Colors: |
| | | - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} |
| | | - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} |
| | | - _FaceColor: {r: 1, g: 1, b: 1, a: 1} |
| | | - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} |
| | | - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} |
| | | - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} |
| | | - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} |
| | | - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} |
| | | - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} |
| | | - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 79459efec17a4d00a321bdcc27bbc385 |
| | | timeCreated: 1484172856 |
| | | licenseType: Pro |
| | | NativeFormatImporter: |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 8f586378b4e144a9851e7b34d9b748ee |
| | | timeCreated: 1484171803 |
| | | licenseType: Pro |
| | | NativeFormatImporter: |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | )]}〕〉》」』】〙〗〟’”⦆»ヽヾーァィゥェォッャュョヮヵヶぁぃぅぇぉっゃゅょゎゕゖㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇺㇻㇼㇽㇾㇿ々〻‐゠–〜?!‼⁇⁈⁉・、%,.:;。!?]):;=}¢°"†‡℃〆%,. |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: fade42e8bc714b018fac513c043d323b |
| | | timeCreated: 1425440388 |
| | | licenseType: Store |
| | | TextScriptImporter: |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | ([{〔〈《「『【〘〖〝‘“⦅«$—…‥〳〴〵\[({£¥"々〇$¥₩ # |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: d82c1b31c7e74239bff1220585707d2b |
| | | timeCreated: 1425440388 |
| | | licenseType: Store |
| | | TextScriptImporter: |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 512a49d95c0c4332bdd98131869c23c9 |
| | | folderAsset: yes |
| | | timeCreated: 1441876896 |
| | | licenseType: Pro |
| | | DefaultImporter: |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | %YAML 1.1 |
| | | %TAG !u! tag:unity3d.com,2011: |
| | | --- !u!21 &2103686 |
| | | Material: |
| | | serializedVersion: 6 |
| | | m_ObjectHideFlags: 1 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_Name: TextMeshPro/Sprite |
| | | m_Shader: {fileID: 4800000, guid: cf81c85f95fe47e1a27f6ae460cf182c, type: 3} |
| | | m_ShaderKeywords: UNITY_UI_CLIP_RECT |
| | | m_LightmapFlags: 5 |
| | | m_EnableInstancingVariants: 0 |
| | | m_DoubleSidedGI: 0 |
| | | m_CustomRenderQueue: -1 |
| | | stringTagMap: {} |
| | | disabledShaderPasses: [] |
| | | m_SavedProperties: |
| | | serializedVersion: 3 |
| | | m_TexEnvs: |
| | | - _MainTex: |
| | | m_Texture: {fileID: 2800000, guid: dffef66376be4fa480fb02b19edbe903, type: 3} |
| | | m_Scale: {x: 1, y: 1} |
| | | m_Offset: {x: 0, y: 0} |
| | | m_Floats: |
| | | - _ColorMask: 15 |
| | | - _CullMode: 0 |
| | | - _Stencil: 0 |
| | | - _StencilComp: 8 |
| | | - _StencilOp: 0 |
| | | - _StencilReadMask: 255 |
| | | - _StencilWriteMask: 255 |
| | | - _UseUIAlphaClip: 0 |
| | | m_Colors: |
| | | - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} |
| | | - _Color: {r: 1, g: 1, b: 1, a: 1} |
| | | --- !u!114 &11400000 |
| | | MonoBehaviour: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 0} |
| | | m_Enabled: 1 |
| | | m_EditorHideFlags: 0 |
| | | m_Script: {fileID: 11500000, guid: 84a92b25f83d49b9bc132d206b370281, type: 3} |
| | | m_Name: EmojiOne |
| | | m_EditorClassIdentifier: |
| | | hashCode: -1836805472 |
| | | material: {fileID: 2103686} |
| | | materialHashCode: 0 |
| | | m_Version: 1.1.0 |
| | | m_FaceInfo: |
| | | m_FamilyName: |
| | | m_StyleName: |
| | | m_PointSize: 0 |
| | | m_Scale: 0 |
| | | m_LineHeight: 0 |
| | | m_AscentLine: 0 |
| | | m_CapLine: 0 |
| | | m_MeanLine: 0 |
| | | m_Baseline: 0 |
| | | m_DescentLine: 0 |
| | | m_SuperscriptOffset: 0 |
| | | m_SuperscriptSize: 0 |
| | | m_SubscriptOffset: 0 |
| | | m_SubscriptSize: 0 |
| | | m_UnderlineOffset: 0 |
| | | m_UnderlineThickness: 0 |
| | | m_StrikethroughOffset: 0 |
| | | m_StrikethroughThickness: 0 |
| | | m_TabWidth: 0 |
| | | spriteSheet: {fileID: 2800000, guid: dffef66376be4fa480fb02b19edbe903, type: 3} |
| | | m_SpriteCharacterTable: |
| | | - m_ElementType: 2 |
| | | m_Unicode: 128522 |
| | | m_GlyphIndex: 0 |
| | | m_Scale: 1 |
| | | m_Name: Smiling face with smiling eyes |
| | | m_HashCode: -1318250903 |
| | | - m_ElementType: 2 |
| | | m_Unicode: 128523 |
| | | m_GlyphIndex: 1 |
| | | m_Scale: 1 |
| | | m_Name: 1f60b |
| | | m_HashCode: 57188339 |
| | | - m_ElementType: 2 |
| | | m_Unicode: 128525 |
| | | m_GlyphIndex: 2 |
| | | m_Scale: 1 |
| | | m_Name: 1f60d |
| | | m_HashCode: 57188341 |
| | | - m_ElementType: 2 |
| | | m_Unicode: 128526 |
| | | m_GlyphIndex: 3 |
| | | m_Scale: 1 |
| | | m_Name: 1f60e |
| | | m_HashCode: 57188340 |
| | | - m_ElementType: 2 |
| | | m_Unicode: 128512 |
| | | m_GlyphIndex: 4 |
| | | m_Scale: 1 |
| | | m_Name: Grinning face |
| | | m_HashCode: -95541379 |
| | | - m_ElementType: 2 |
| | | m_Unicode: 128513 |
| | | m_GlyphIndex: 5 |
| | | m_Scale: 1 |
| | | m_Name: 1f601 |
| | | m_HashCode: 57188256 |
| | | - m_ElementType: 2 |
| | | m_Unicode: 128514 |
| | | m_GlyphIndex: 6 |
| | | m_Scale: 1 |
| | | m_Name: Face with tears of joy |
| | | m_HashCode: 239522663 |
| | | - m_ElementType: 2 |
| | | m_Unicode: 128515 |
| | | m_GlyphIndex: 7 |
| | | m_Scale: 1 |
| | | m_Name: 1f603 |
| | | m_HashCode: 57188258 |
| | | - m_ElementType: 2 |
| | | m_Unicode: 128516 |
| | | m_GlyphIndex: 8 |
| | | m_Scale: 1 |
| | | m_Name: 1f604 |
| | | m_HashCode: 57188261 |
| | | - m_ElementType: 2 |
| | | m_Unicode: 128517 |
| | | m_GlyphIndex: 9 |
| | | m_Scale: 1 |
| | | m_Name: 1f605 |
| | | m_HashCode: 57188260 |
| | | - m_ElementType: 2 |
| | | m_Unicode: 128518 |
| | | m_GlyphIndex: 10 |
| | | m_Scale: 1 |
| | | m_Name: 1f606 |
| | | m_HashCode: 57188263 |
| | | - m_ElementType: 2 |
| | | m_Unicode: 128521 |
| | | m_GlyphIndex: 11 |
| | | m_Scale: 1 |
| | | m_Name: 1f609 |
| | | m_HashCode: 57188264 |
| | | - m_ElementType: 2 |
| | | m_Unicode: 0 |
| | | m_GlyphIndex: 12 |
| | | m_Scale: 1 |
| | | m_Name: .notdef |
| | | m_HashCode: -600915428 |
| | | - m_ElementType: 2 |
| | | m_Unicode: 129315 |
| | | m_GlyphIndex: 13 |
| | | m_Scale: 1 |
| | | m_Name: 1f923 |
| | | m_HashCode: 57200239 |
| | | - m_ElementType: 2 |
| | | m_Unicode: 9786 |
| | | m_GlyphIndex: 14 |
| | | m_Scale: 1 |
| | | m_Name: 263a |
| | | m_HashCode: 1748406 |
| | | - m_ElementType: 2 |
| | | m_Unicode: 9785 |
| | | m_GlyphIndex: 15 |
| | | m_Scale: 1 |
| | | m_Name: 2639 |
| | | m_HashCode: 1748462 |
| | | m_SpriteGlyphTable: |
| | | - m_Index: 0 |
| | | m_Metrics: |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_HorizontalBearingX: 0 |
| | | m_HorizontalBearingY: 115.6 |
| | | m_HorizontalAdvance: 128 |
| | | m_GlyphRect: |
| | | m_X: 0 |
| | | m_Y: 384 |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_Scale: 1 |
| | | m_AtlasIndex: 0 |
| | | sprite: {fileID: 0} |
| | | - m_Index: 1 |
| | | m_Metrics: |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_HorizontalBearingX: 0 |
| | | m_HorizontalBearingY: 115.6 |
| | | m_HorizontalAdvance: 128 |
| | | m_GlyphRect: |
| | | m_X: 128 |
| | | m_Y: 384 |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_Scale: 1 |
| | | m_AtlasIndex: 0 |
| | | sprite: {fileID: 0} |
| | | - m_Index: 2 |
| | | m_Metrics: |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_HorizontalBearingX: 0 |
| | | m_HorizontalBearingY: 115.6 |
| | | m_HorizontalAdvance: 128 |
| | | m_GlyphRect: |
| | | m_X: 256 |
| | | m_Y: 384 |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_Scale: 1 |
| | | m_AtlasIndex: 0 |
| | | sprite: {fileID: 0} |
| | | - m_Index: 3 |
| | | m_Metrics: |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_HorizontalBearingX: 0 |
| | | m_HorizontalBearingY: 115.6 |
| | | m_HorizontalAdvance: 128 |
| | | m_GlyphRect: |
| | | m_X: 384 |
| | | m_Y: 384 |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_Scale: 1 |
| | | m_AtlasIndex: 0 |
| | | sprite: {fileID: 0} |
| | | - m_Index: 4 |
| | | m_Metrics: |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_HorizontalBearingX: 0 |
| | | m_HorizontalBearingY: 115.6 |
| | | m_HorizontalAdvance: 128 |
| | | m_GlyphRect: |
| | | m_X: 0 |
| | | m_Y: 256 |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_Scale: 1 |
| | | m_AtlasIndex: 0 |
| | | sprite: {fileID: 0} |
| | | - m_Index: 5 |
| | | m_Metrics: |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_HorizontalBearingX: 0 |
| | | m_HorizontalBearingY: 115.6 |
| | | m_HorizontalAdvance: 128 |
| | | m_GlyphRect: |
| | | m_X: 128 |
| | | m_Y: 256 |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_Scale: 1 |
| | | m_AtlasIndex: 0 |
| | | sprite: {fileID: 0} |
| | | - m_Index: 6 |
| | | m_Metrics: |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_HorizontalBearingX: 0 |
| | | m_HorizontalBearingY: 115.6 |
| | | m_HorizontalAdvance: 128 |
| | | m_GlyphRect: |
| | | m_X: 256 |
| | | m_Y: 256 |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_Scale: 1 |
| | | m_AtlasIndex: 0 |
| | | sprite: {fileID: 0} |
| | | - m_Index: 7 |
| | | m_Metrics: |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_HorizontalBearingX: 0 |
| | | m_HorizontalBearingY: 115.6 |
| | | m_HorizontalAdvance: 128 |
| | | m_GlyphRect: |
| | | m_X: 384 |
| | | m_Y: 256 |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_Scale: 1 |
| | | m_AtlasIndex: 0 |
| | | sprite: {fileID: 0} |
| | | - m_Index: 8 |
| | | m_Metrics: |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_HorizontalBearingX: 0 |
| | | m_HorizontalBearingY: 115.6 |
| | | m_HorizontalAdvance: 128 |
| | | m_GlyphRect: |
| | | m_X: 0 |
| | | m_Y: 128 |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_Scale: 1 |
| | | m_AtlasIndex: 0 |
| | | sprite: {fileID: 0} |
| | | - m_Index: 9 |
| | | m_Metrics: |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_HorizontalBearingX: 0 |
| | | m_HorizontalBearingY: 115.6 |
| | | m_HorizontalAdvance: 128 |
| | | m_GlyphRect: |
| | | m_X: 128 |
| | | m_Y: 128 |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_Scale: 1 |
| | | m_AtlasIndex: 0 |
| | | sprite: {fileID: 0} |
| | | - m_Index: 10 |
| | | m_Metrics: |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_HorizontalBearingX: 0 |
| | | m_HorizontalBearingY: 115.6 |
| | | m_HorizontalAdvance: 128 |
| | | m_GlyphRect: |
| | | m_X: 256 |
| | | m_Y: 128 |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_Scale: 1 |
| | | m_AtlasIndex: 0 |
| | | sprite: {fileID: 0} |
| | | - m_Index: 11 |
| | | m_Metrics: |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_HorizontalBearingX: 0 |
| | | m_HorizontalBearingY: 115.6 |
| | | m_HorizontalAdvance: 128 |
| | | m_GlyphRect: |
| | | m_X: 384 |
| | | m_Y: 128 |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_Scale: 1 |
| | | m_AtlasIndex: 0 |
| | | sprite: {fileID: 0} |
| | | - m_Index: 12 |
| | | m_Metrics: |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_HorizontalBearingX: 0 |
| | | m_HorizontalBearingY: 115.6 |
| | | m_HorizontalAdvance: 128 |
| | | m_GlyphRect: |
| | | m_X: 0 |
| | | m_Y: 0 |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_Scale: 1 |
| | | m_AtlasIndex: 0 |
| | | sprite: {fileID: 0} |
| | | - m_Index: 13 |
| | | m_Metrics: |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_HorizontalBearingX: 0 |
| | | m_HorizontalBearingY: 115.6 |
| | | m_HorizontalAdvance: 128 |
| | | m_GlyphRect: |
| | | m_X: 128 |
| | | m_Y: 0 |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_Scale: 1 |
| | | m_AtlasIndex: 0 |
| | | sprite: {fileID: 0} |
| | | - m_Index: 14 |
| | | m_Metrics: |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_HorizontalBearingX: 0 |
| | | m_HorizontalBearingY: 115.6 |
| | | m_HorizontalAdvance: 128 |
| | | m_GlyphRect: |
| | | m_X: 256 |
| | | m_Y: 0 |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_Scale: 1 |
| | | m_AtlasIndex: 0 |
| | | sprite: {fileID: 0} |
| | | - m_Index: 15 |
| | | m_Metrics: |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_HorizontalBearingX: 0 |
| | | m_HorizontalBearingY: 115.6 |
| | | m_HorizontalAdvance: 128 |
| | | m_GlyphRect: |
| | | m_X: 384 |
| | | m_Y: 0 |
| | | m_Width: 128 |
| | | m_Height: 128 |
| | | m_Scale: 1 |
| | | m_AtlasIndex: 0 |
| | | sprite: {fileID: 0} |
| | | spriteInfoList: |
| | | - id: 0 |
| | | x: 0 |
| | | y: 384 |
| | | width: 128 |
| | | height: 128 |
| | | xOffset: 0 |
| | | yOffset: 115.6 |
| | | xAdvance: 128 |
| | | scale: 1 |
| | | name: Smiling face with smiling eyes |
| | | hashCode: -1318250903 |
| | | unicode: 128522 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | sprite: {fileID: 0} |
| | | - id: 1 |
| | | x: 128 |
| | | y: 384 |
| | | width: 128 |
| | | height: 128 |
| | | xOffset: 0 |
| | | yOffset: 115.6 |
| | | xAdvance: 128 |
| | | scale: 1 |
| | | name: 1f60b |
| | | hashCode: 57188339 |
| | | unicode: 128523 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | sprite: {fileID: 0} |
| | | - id: 2 |
| | | x: 256 |
| | | y: 384 |
| | | width: 128 |
| | | height: 128 |
| | | xOffset: 0 |
| | | yOffset: 115.6 |
| | | xAdvance: 128 |
| | | scale: 1 |
| | | name: 1f60d |
| | | hashCode: 57188341 |
| | | unicode: 128525 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | sprite: {fileID: 0} |
| | | - id: 3 |
| | | x: 384 |
| | | y: 384 |
| | | width: 128 |
| | | height: 128 |
| | | xOffset: 0 |
| | | yOffset: 115.6 |
| | | xAdvance: 128 |
| | | scale: 1 |
| | | name: 1f60e |
| | | hashCode: 57188340 |
| | | unicode: 128526 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | sprite: {fileID: 0} |
| | | - id: 4 |
| | | x: 0 |
| | | y: 256 |
| | | width: 128 |
| | | height: 128 |
| | | xOffset: 0 |
| | | yOffset: 115.6 |
| | | xAdvance: 128 |
| | | scale: 1 |
| | | name: Grinning face |
| | | hashCode: -95541379 |
| | | unicode: 128512 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | sprite: {fileID: 0} |
| | | - id: 5 |
| | | x: 128 |
| | | y: 256 |
| | | width: 128 |
| | | height: 128 |
| | | xOffset: 0 |
| | | yOffset: 115.6 |
| | | xAdvance: 128 |
| | | scale: 1 |
| | | name: 1f601 |
| | | hashCode: 57188256 |
| | | unicode: 128513 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | sprite: {fileID: 0} |
| | | - id: 6 |
| | | x: 256 |
| | | y: 256 |
| | | width: 128 |
| | | height: 128 |
| | | xOffset: 0 |
| | | yOffset: 115.6 |
| | | xAdvance: 128 |
| | | scale: 1 |
| | | name: Face with tears of joy |
| | | hashCode: 239522663 |
| | | unicode: 128514 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | sprite: {fileID: 0} |
| | | - id: 7 |
| | | x: 384 |
| | | y: 256 |
| | | width: 128 |
| | | height: 128 |
| | | xOffset: 0 |
| | | yOffset: 115.6 |
| | | xAdvance: 128 |
| | | scale: 1 |
| | | name: 1f603 |
| | | hashCode: 57188258 |
| | | unicode: 128515 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | sprite: {fileID: 0} |
| | | - id: 8 |
| | | x: 0 |
| | | y: 128 |
| | | width: 128 |
| | | height: 128 |
| | | xOffset: 0 |
| | | yOffset: 115.6 |
| | | xAdvance: 128 |
| | | scale: 1 |
| | | name: 1f604 |
| | | hashCode: 57188261 |
| | | unicode: 128516 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | sprite: {fileID: 0} |
| | | - id: 9 |
| | | x: 128 |
| | | y: 128 |
| | | width: 128 |
| | | height: 128 |
| | | xOffset: 0 |
| | | yOffset: 115.6 |
| | | xAdvance: 128 |
| | | scale: 1 |
| | | name: 1f605 |
| | | hashCode: 57188260 |
| | | unicode: 128517 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | sprite: {fileID: 0} |
| | | - id: 10 |
| | | x: 256 |
| | | y: 128 |
| | | width: 128 |
| | | height: 128 |
| | | xOffset: 0 |
| | | yOffset: 115.6 |
| | | xAdvance: 128 |
| | | scale: 1 |
| | | name: 1f606 |
| | | hashCode: 57188263 |
| | | unicode: 128518 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | sprite: {fileID: 0} |
| | | - id: 11 |
| | | x: 384 |
| | | y: 128 |
| | | width: 128 |
| | | height: 128 |
| | | xOffset: 0 |
| | | yOffset: 115.6 |
| | | xAdvance: 128 |
| | | scale: 1 |
| | | name: 1f609 |
| | | hashCode: 57188264 |
| | | unicode: 128521 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | sprite: {fileID: 0} |
| | | - id: 12 |
| | | x: 0 |
| | | y: 0 |
| | | width: 128 |
| | | height: 128 |
| | | xOffset: 0 |
| | | yOffset: 115.6 |
| | | xAdvance: 128 |
| | | scale: 1 |
| | | name: 1f618 |
| | | hashCode: 57188168 |
| | | unicode: 128536 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | sprite: {fileID: 0} |
| | | - id: 13 |
| | | x: 128 |
| | | y: 0 |
| | | width: 128 |
| | | height: 128 |
| | | xOffset: 0 |
| | | yOffset: 115.6 |
| | | xAdvance: 128 |
| | | scale: 1 |
| | | name: 1f923 |
| | | hashCode: 57200239 |
| | | unicode: 129315 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | sprite: {fileID: 0} |
| | | - id: 14 |
| | | x: 256 |
| | | y: 0 |
| | | width: 128 |
| | | height: 128 |
| | | xOffset: 0 |
| | | yOffset: 115.6 |
| | | xAdvance: 128 |
| | | scale: 1 |
| | | name: 263a |
| | | hashCode: 1748406 |
| | | unicode: 9786 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | sprite: {fileID: 0} |
| | | - id: 15 |
| | | x: 384 |
| | | y: 0 |
| | | width: 128 |
| | | height: 128 |
| | | xOffset: 0 |
| | | yOffset: 115.6 |
| | | xAdvance: 128 |
| | | scale: 1 |
| | | name: 2639 |
| | | hashCode: 1748462 |
| | | unicode: 9785 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | sprite: {fileID: 0} |
| | | fallbackSpriteAssets: [] |
| | | --- !u!21 &1369835458 |
| | | Material: |
| | | serializedVersion: 6 |
| | | m_ObjectHideFlags: 1 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_Name: TextMeshPro/Sprite |
| | | m_Shader: {fileID: 4800000, guid: cf81c85f95fe47e1a27f6ae460cf182c, type: 3} |
| | | m_ShaderKeywords: |
| | | m_LightmapFlags: 5 |
| | | m_EnableInstancingVariants: 0 |
| | | m_DoubleSidedGI: 0 |
| | | m_CustomRenderQueue: -1 |
| | | stringTagMap: {} |
| | | disabledShaderPasses: [] |
| | | m_SavedProperties: |
| | | serializedVersion: 3 |
| | | m_TexEnvs: [] |
| | | m_Floats: [] |
| | | m_Colors: [] |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: c41005c129ba4d66911b75229fd70b45 |
| | | timeCreated: 1480316912 |
| | | licenseType: Pro |
| | | NativeFormatImporter: |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 4aecb92fff08436c8303b10eab8da368 |
| | | folderAsset: yes |
| | | timeCreated: 1441876950 |
| | | licenseType: Pro |
| | | DefaultImporter: |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | %YAML 1.1 |
| | | %TAG !u! tag:unity3d.com,2011: |
| | | --- !u!114 &11400000 |
| | | MonoBehaviour: |
| | | m_ObjectHideFlags: 0 |
| | | m_PrefabParentObject: {fileID: 0} |
| | | m_PrefabInternal: {fileID: 0} |
| | | m_GameObject: {fileID: 0} |
| | | m_Enabled: 1 |
| | | m_EditorHideFlags: 0 |
| | | m_Script: {fileID: 11500000, guid: ab2114bdc8544297b417dfefe9f1e410, type: 3} |
| | | m_Name: Default Style Sheet |
| | | m_EditorClassIdentifier: |
| | | m_StyleList: |
| | | - m_Name: H1 |
| | | m_HashCode: 2425 |
| | | m_OpeningDefinition: <size=2em><b><#40ff80>* |
| | | m_ClosingDefinition: '*</size></b></color>' |
| | | m_OpeningTagArray: 3c00000073000000690000007a000000650000003d00000032000000650000006d0000003e0000003c000000620000003e0000003c000000230000003400000030000000660000006600000038000000300000003e0000002a000000 |
| | | m_ClosingTagArray: 2a0000003c0000002f00000073000000690000007a000000650000003e0000003c0000002f000000620000003e0000003c0000002f000000630000006f0000006c0000006f000000720000003e000000 |
| | | - m_Name: Quote |
| | | m_HashCode: 92254330 |
| | | m_OpeningDefinition: <i><size=75%><margin=10%> |
| | | m_ClosingDefinition: </i></size></width></margin> |
| | | m_OpeningTagArray: 3c000000690000003e0000003c00000073000000690000007a000000650000003d0000003700000035000000250000003e0000003c0000006d000000610000007200000067000000690000006e0000003d0000003100000030000000250000003e000000 |
| | | m_ClosingTagArray: 3c0000002f000000690000003e0000003c0000002f00000073000000690000007a000000650000003e0000003c0000002f00000077000000690000006400000074000000680000003e0000003c0000002f0000006d000000610000007200000067000000690000006e0000003e000000 |
| | | - m_Name: Link |
| | | m_HashCode: 2687968 |
| | | m_OpeningDefinition: <u><#40a0ff><link="ID_01"> |
| | | m_ClosingDefinition: </u></color></link> |
| | | m_OpeningTagArray: 3c000000750000003e0000003c000000230000003400000030000000610000003000000066000000660000003e0000003c0000006c000000690000006e0000006b0000003d0000002200000049000000440000005f0000003000000031000000220000003e000000 |
| | | m_ClosingTagArray: 3c0000002f000000750000003e0000003c0000002f000000630000006f0000006c0000006f000000720000003e0000003c0000002f0000006c000000690000006e0000006b0000003e000000 |
| | | - m_Name: Title |
| | | m_HashCode: 98732960 |
| | | m_OpeningDefinition: <size=125%><b><align=center> |
| | | m_ClosingDefinition: </size></b></align> |
| | | m_OpeningTagArray: 3c00000073000000690000007a000000650000003d000000310000003200000035000000250000003e0000003c000000620000003e0000003c000000610000006c00000069000000670000006e0000003d00000063000000650000006e0000007400000065000000720000003e000000 |
| | | m_ClosingTagArray: 3c0000002f00000073000000690000007a000000650000003e0000003c0000002f000000620000003e0000003c0000002f000000610000006c00000069000000670000006e0000003e000000 |
| | | - m_Name: H2 |
| | | m_HashCode: 2426 |
| | | m_OpeningDefinition: <size=1.5em><b><#4080FF> |
| | | m_ClosingDefinition: </size></b></color> |
| | | m_OpeningTagArray: 3c00000073000000690000007a000000650000003d000000310000002e00000035000000650000006d0000003e0000003c000000620000003e0000003c000000230000003400000030000000380000003000000046000000460000003e000000 |
| | | m_ClosingTagArray: 3c0000002f00000073000000690000007a000000650000003e0000003c0000002f000000620000003e0000003c0000002f000000630000006f0000006c0000006f000000720000003e000000 |
| | | - m_Name: H3 |
| | | m_HashCode: 2427 |
| | | m_OpeningDefinition: <size=1.17em><b><#FF8040> |
| | | m_ClosingDefinition: </size></b></color> |
| | | m_OpeningTagArray: 3c00000073000000690000007a000000650000003d000000310000002e0000003100000037000000650000006d0000003e0000003c000000620000003e0000003c000000230000004600000046000000380000003000000034000000300000003e000000 |
| | | m_ClosingTagArray: 3c0000002f00000073000000690000007a000000650000003e0000003c0000002f000000620000003e0000003c0000002f000000630000006f0000006c0000006f000000720000003e000000 |
| | | - m_Name: C1 |
| | | m_HashCode: 2194 |
| | | m_OpeningDefinition: <color=#ffff40> |
| | | m_ClosingDefinition: </color> |
| | | m_OpeningTagArray: 3c000000630000006f0000006c0000006f000000720000003d000000230000006600000066000000660000006600000034000000300000003e000000 |
| | | m_ClosingTagArray: 3c0000002f000000630000006f0000006c0000006f000000720000003e000000 |
| | | - m_Name: C2 |
| | | m_HashCode: 2193 |
| | | m_OpeningDefinition: <color=#ff40FF><size=125%> |
| | | m_ClosingDefinition: </color></size> |
| | | m_OpeningTagArray: 3c000000630000006f0000006c0000006f000000720000003d000000230000006600000066000000340000003000000046000000460000003e0000003c00000073000000690000007a000000650000003d000000310000003200000035000000250000003e000000 |
| | | m_ClosingTagArray: 3c0000002f000000630000006f0000006c0000006f000000720000003e0000003c0000002f00000073000000690000007a000000650000003e000000 |
| | | - m_Name: C3 |
| | | m_HashCode: 2192 |
| | | m_OpeningDefinition: <color=#80A0FF><b> |
| | | m_ClosingDefinition: </color></b> |
| | | m_OpeningTagArray: 3c000000630000006f0000006c0000006f000000720000003d000000230000003800000030000000410000003000000046000000460000003e0000003c000000620000003e000000 |
| | | m_ClosingTagArray: 3c0000002f000000630000006f0000006c0000006f000000720000003e0000003c0000002f000000620000003e000000 |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: f952c082cb03451daed3ee968ac6c63e |
| | | timeCreated: 1432805430 |
| | | licenseType: Store |
| | | NativeFormatImporter: |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | %YAML 1.1 |
| | | %TAG !u! tag:unity3d.com,2011: |
| | | --- !u!114 &11400000 |
| | | MonoBehaviour: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 0} |
| | | m_Enabled: 1 |
| | | m_EditorHideFlags: 0 |
| | | m_Script: {fileID: 11500000, guid: 2705215ac5b84b70bacc50632be6e391, type: 3} |
| | | m_Name: TMP Settings |
| | | m_EditorClassIdentifier: |
| | | m_enableWordWrapping: 1 |
| | | m_enableKerning: 1 |
| | | m_enableExtraPadding: 0 |
| | | m_enableTintAllSprites: 0 |
| | | m_enableParseEscapeCharacters: 1 |
| | | m_EnableRaycastTarget: 1 |
| | | m_GetFontFeaturesAtRuntime: 1 |
| | | m_missingGlyphCharacter: 0 |
| | | m_warningsDisabled: 0 |
| | | m_defaultFontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} |
| | | m_defaultFontAssetPath: Fonts & Materials/ |
| | | m_defaultFontSize: 36 |
| | | m_defaultAutoSizeMinRatio: 0.5 |
| | | m_defaultAutoSizeMaxRatio: 2 |
| | | m_defaultTextMeshProTextContainerSize: {x: 20, y: 5} |
| | | m_defaultTextMeshProUITextContainerSize: {x: 200, y: 50} |
| | | m_autoSizeTextContainer: 0 |
| | | m_fallbackFontAssets: [] |
| | | m_matchMaterialPreset: 1 |
| | | m_defaultSpriteAsset: {fileID: 11400000, guid: c41005c129ba4d66911b75229fd70b45, |
| | | type: 2} |
| | | m_defaultSpriteAssetPath: Sprite Assets/ |
| | | m_enableEmojiSupport: 1 |
| | | m_MissingCharacterSpriteUnicode: 0 |
| | | m_defaultColorGradientPresetsPath: Color Gradient Presets/ |
| | | m_defaultStyleSheet: {fileID: 11400000, guid: f952c082cb03451daed3ee968ac6c63e, |
| | | type: 2} |
| | | m_StyleSheetsResourcePath: |
| | | m_leadingCharacters: {fileID: 4900000, guid: d82c1b31c7e74239bff1220585707d2b, type: 3} |
| | | m_followingCharacters: {fileID: 4900000, guid: fade42e8bc714b018fac513c043d323b, |
| | | type: 3} |
| | | m_UseModernHangulLineBreakingRules: 0 |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 3f5b5dff67a942289a9defa416b206f3 |
| | | timeCreated: 1436653997 |
| | | licenseType: Pro |
| | | NativeFormatImporter: |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: e9f693669af91aa45ad615fc681ed29f |
| | | folderAsset: yes |
| | | DefaultImporter: |
| | | externalObjects: {} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | Shader "TextMeshPro/Bitmap Custom Atlas" { |
| | | |
| | | Properties { |
| | | _MainTex ("Font Atlas", 2D) = "white" {} |
| | | _FaceTex ("Font Texture", 2D) = "white" {} |
| | | [HDR]_FaceColor ("Text Color", Color) = (1,1,1,1) |
| | | |
| | | _VertexOffsetX ("Vertex OffsetX", float) = 0 |
| | | _VertexOffsetY ("Vertex OffsetY", float) = 0 |
| | | _MaskSoftnessX ("Mask SoftnessX", float) = 0 |
| | | _MaskSoftnessY ("Mask SoftnessY", float) = 0 |
| | | |
| | | _ClipRect("Clip Rect", vector) = (-32767, -32767, 32767, 32767) |
| | | _Padding ("Padding", float) = 0 |
| | | |
| | | _StencilComp("Stencil Comparison", Float) = 8 |
| | | _Stencil("Stencil ID", Float) = 0 |
| | | _StencilOp("Stencil Operation", Float) = 0 |
| | | _StencilWriteMask("Stencil Write Mask", Float) = 255 |
| | | _StencilReadMask("Stencil Read Mask", Float) = 255 |
| | | |
| | | _CullMode("Cull Mode", Float) = 0 |
| | | _ColorMask("Color Mask", Float) = 15 |
| | | } |
| | | |
| | | SubShader{ |
| | | |
| | | Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" } |
| | | |
| | | Stencil |
| | | { |
| | | Ref[_Stencil] |
| | | Comp[_StencilComp] |
| | | Pass[_StencilOp] |
| | | ReadMask[_StencilReadMask] |
| | | WriteMask[_StencilWriteMask] |
| | | } |
| | | |
| | | |
| | | Lighting Off |
| | | Cull [_CullMode] |
| | | ZTest [unity_GUIZTestMode] |
| | | ZWrite Off |
| | | Fog { Mode Off } |
| | | Blend SrcAlpha OneMinusSrcAlpha |
| | | ColorMask[_ColorMask] |
| | | |
| | | Pass { |
| | | CGPROGRAM |
| | | #pragma vertex vert |
| | | #pragma fragment frag |
| | | |
| | | #pragma multi_compile __ UNITY_UI_CLIP_RECT |
| | | #pragma multi_compile __ UNITY_UI_ALPHACLIP |
| | | |
| | | |
| | | #include "UnityCG.cginc" |
| | | |
| | | struct appdata_t { |
| | | float4 vertex : POSITION; |
| | | fixed4 color : COLOR; |
| | | float2 texcoord0 : TEXCOORD0; |
| | | float2 texcoord1 : TEXCOORD1; |
| | | }; |
| | | |
| | | struct v2f { |
| | | float4 vertex : SV_POSITION; |
| | | fixed4 color : COLOR; |
| | | float2 texcoord0 : TEXCOORD0; |
| | | float2 texcoord1 : TEXCOORD1; |
| | | float4 mask : TEXCOORD2; |
| | | }; |
| | | |
| | | uniform sampler2D _MainTex; |
| | | uniform sampler2D _FaceTex; |
| | | uniform float4 _FaceTex_ST; |
| | | uniform fixed4 _FaceColor; |
| | | |
| | | uniform float _VertexOffsetX; |
| | | uniform float _VertexOffsetY; |
| | | uniform float4 _ClipRect; |
| | | uniform float _MaskSoftnessX; |
| | | uniform float _MaskSoftnessY; |
| | | |
| | | float2 UnpackUV(float uv) |
| | | { |
| | | float2 output; |
| | | output.x = floor(uv / 4096); |
| | | output.y = uv - 4096 * output.x; |
| | | |
| | | return output * 0.001953125; |
| | | } |
| | | |
| | | v2f vert (appdata_t v) |
| | | { |
| | | float4 vert = v.vertex; |
| | | vert.x += _VertexOffsetX; |
| | | vert.y += _VertexOffsetY; |
| | | |
| | | vert.xy += (vert.w * 0.5) / _ScreenParams.xy; |
| | | |
| | | float4 vPosition = UnityPixelSnap(UnityObjectToClipPos(vert)); |
| | | |
| | | fixed4 faceColor = v.color; |
| | | faceColor *= _FaceColor; |
| | | |
| | | v2f OUT; |
| | | OUT.vertex = vPosition; |
| | | OUT.color = faceColor; |
| | | OUT.texcoord0 = v.texcoord0; |
| | | OUT.texcoord1 = TRANSFORM_TEX(UnpackUV(v.texcoord1), _FaceTex); |
| | | float2 pixelSize = vPosition.w; |
| | | pixelSize /= abs(float2(_ScreenParams.x * UNITY_MATRIX_P[0][0], _ScreenParams.y * UNITY_MATRIX_P[1][1])); |
| | | |
| | | // Clamp _ClipRect to 16bit. |
| | | float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); |
| | | OUT.mask = float4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)); |
| | | |
| | | return OUT; |
| | | } |
| | | |
| | | fixed4 frag (v2f IN) : SV_Target |
| | | { |
| | | fixed4 color = tex2D(_MainTex, IN.texcoord0) * tex2D(_FaceTex, IN.texcoord1) * IN.color; |
| | | |
| | | // Alternative implementation to UnityGet2DClipping with support for softness. |
| | | #if UNITY_UI_CLIP_RECT |
| | | half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw); |
| | | color *= m.x * m.y; |
| | | #endif |
| | | |
| | | #if UNITY_UI_ALPHACLIP |
| | | clip(color.a - 0.001); |
| | | #endif |
| | | |
| | | return color; |
| | | } |
| | | ENDCG |
| | | } |
| | | } |
| | | |
| | | CustomEditor "TMPro.EditorUtilities.TMP_BitmapShaderGUI" |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 48bb5f55d8670e349b6e614913f9d910 |
| | | ShaderImporter: |
| | | externalObjects: {} |
| | | defaultTextures: [] |
| | | nonModifiableTextures: [] |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | Shader "TextMeshPro/Mobile/Bitmap" { |
| | | |
| | | Properties { |
| | | _MainTex ("Font Atlas", 2D) = "white" {} |
| | | [HDR]_Color ("Text Color", Color) = (1,1,1,1) |
| | | _DiffusePower ("Diffuse Power", Range(1.0,4.0)) = 1.0 |
| | | |
| | | _VertexOffsetX("Vertex OffsetX", float) = 0 |
| | | _VertexOffsetY("Vertex OffsetY", float) = 0 |
| | | _MaskSoftnessX("Mask SoftnessX", float) = 0 |
| | | _MaskSoftnessY("Mask SoftnessY", float) = 0 |
| | | |
| | | _ClipRect("Clip Rect", vector) = (-32767, -32767, 32767, 32767) |
| | | |
| | | _StencilComp("Stencil Comparison", Float) = 8 |
| | | _Stencil("Stencil ID", Float) = 0 |
| | | _StencilOp("Stencil Operation", Float) = 0 |
| | | _StencilWriteMask("Stencil Write Mask", Float) = 255 |
| | | _StencilReadMask("Stencil Read Mask", Float) = 255 |
| | | |
| | | _CullMode("Cull Mode", Float) = 0 |
| | | _ColorMask("Color Mask", Float) = 15 |
| | | } |
| | | |
| | | SubShader { |
| | | |
| | | Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } |
| | | |
| | | Stencil |
| | | { |
| | | Ref[_Stencil] |
| | | Comp[_StencilComp] |
| | | Pass[_StencilOp] |
| | | ReadMask[_StencilReadMask] |
| | | WriteMask[_StencilWriteMask] |
| | | } |
| | | |
| | | |
| | | Lighting Off |
| | | Cull [_CullMode] |
| | | ZTest [unity_GUIZTestMode] |
| | | ZWrite Off |
| | | Fog { Mode Off } |
| | | Blend SrcAlpha OneMinusSrcAlpha |
| | | ColorMask[_ColorMask] |
| | | |
| | | Pass { |
| | | CGPROGRAM |
| | | #pragma vertex vert |
| | | #pragma fragment frag |
| | | #pragma fragmentoption ARB_precision_hint_fastest |
| | | |
| | | #pragma multi_compile __ UNITY_UI_CLIP_RECT |
| | | #pragma multi_compile __ UNITY_UI_ALPHACLIP |
| | | |
| | | |
| | | #include "UnityCG.cginc" |
| | | |
| | | struct appdata_t { |
| | | float4 vertex : POSITION; |
| | | fixed4 color : COLOR; |
| | | float2 texcoord0 : TEXCOORD0; |
| | | float2 texcoord1 : TEXCOORD1; |
| | | }; |
| | | |
| | | struct v2f { |
| | | float4 vertex : POSITION; |
| | | fixed4 color : COLOR; |
| | | float2 texcoord0 : TEXCOORD0; |
| | | float4 mask : TEXCOORD2; |
| | | }; |
| | | |
| | | sampler2D _MainTex; |
| | | fixed4 _Color; |
| | | float _DiffusePower; |
| | | |
| | | uniform float _VertexOffsetX; |
| | | uniform float _VertexOffsetY; |
| | | uniform float4 _ClipRect; |
| | | uniform float _MaskSoftnessX; |
| | | uniform float _MaskSoftnessY; |
| | | |
| | | v2f vert (appdata_t v) |
| | | { |
| | | v2f OUT; |
| | | float4 vert = v.vertex; |
| | | vert.x += _VertexOffsetX; |
| | | vert.y += _VertexOffsetY; |
| | | |
| | | vert.xy += (vert.w * 0.5) / _ScreenParams.xy; |
| | | |
| | | OUT.vertex = UnityPixelSnap(UnityObjectToClipPos(vert)); |
| | | OUT.color = v.color; |
| | | OUT.color *= _Color; |
| | | OUT.color.rgb *= _DiffusePower; |
| | | OUT.texcoord0 = v.texcoord0; |
| | | |
| | | float2 pixelSize = OUT.vertex.w; |
| | | //pixelSize /= abs(float2(_ScreenParams.x * UNITY_MATRIX_P[0][0], _ScreenParams.y * UNITY_MATRIX_P[1][1])); |
| | | |
| | | // Clamp _ClipRect to 16bit. |
| | | float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); |
| | | OUT.mask = float4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)); |
| | | |
| | | return OUT; |
| | | } |
| | | |
| | | fixed4 frag (v2f IN) : COLOR |
| | | { |
| | | fixed4 color = fixed4(IN.color.rgb, IN.color.a * tex2D(_MainTex, IN.texcoord0).a); |
| | | |
| | | // Alternative implementation to UnityGet2DClipping with support for softness. |
| | | #if UNITY_UI_CLIP_RECT |
| | | half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw); |
| | | color *= m.x * m.y; |
| | | #endif |
| | | |
| | | #if UNITY_UI_ALPHACLIP |
| | | clip(color.a - 0.001); |
| | | #endif |
| | | |
| | | return color; |
| | | } |
| | | ENDCG |
| | | } |
| | | } |
| | | |
| | | SubShader { |
| | | Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } |
| | | Lighting Off Cull Off ZTest Always ZWrite Off Fog { Mode Off } |
| | | Blend SrcAlpha OneMinusSrcAlpha |
| | | BindChannels { |
| | | Bind "Color", color |
| | | Bind "Vertex", vertex |
| | | Bind "TexCoord", texcoord0 |
| | | } |
| | | Pass { |
| | | SetTexture [_MainTex] { |
| | | constantColor [_Color] combine constant * primary, constant * texture |
| | | } |
| | | } |
| | | } |
| | | |
| | | CustomEditor "TMPro.EditorUtilities.TMP_BitmapShaderGUI" |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 1e3b057af24249748ff873be7fafee47 |
| | | ShaderImporter: |
| | | externalObjects: {} |
| | | defaultTextures: [] |
| | | nonModifiableTextures: [] |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | Shader "TextMeshPro/Bitmap" { |
| | | |
| | | Properties { |
| | | _MainTex ("Font Atlas", 2D) = "white" {} |
| | | _FaceTex ("Font Texture", 2D) = "white" {} |
| | | [HDR]_FaceColor ("Text Color", Color) = (1,1,1,1) |
| | | |
| | | _VertexOffsetX ("Vertex OffsetX", float) = 0 |
| | | _VertexOffsetY ("Vertex OffsetY", float) = 0 |
| | | _MaskSoftnessX ("Mask SoftnessX", float) = 0 |
| | | _MaskSoftnessY ("Mask SoftnessY", float) = 0 |
| | | |
| | | _ClipRect("Clip Rect", vector) = (-32767, -32767, 32767, 32767) |
| | | |
| | | _StencilComp("Stencil Comparison", Float) = 8 |
| | | _Stencil("Stencil ID", Float) = 0 |
| | | _StencilOp("Stencil Operation", Float) = 0 |
| | | _StencilWriteMask("Stencil Write Mask", Float) = 255 |
| | | _StencilReadMask("Stencil Read Mask", Float) = 255 |
| | | |
| | | _CullMode("Cull Mode", Float) = 0 |
| | | _ColorMask("Color Mask", Float) = 15 |
| | | } |
| | | |
| | | SubShader{ |
| | | |
| | | Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" } |
| | | |
| | | Stencil |
| | | { |
| | | Ref[_Stencil] |
| | | Comp[_StencilComp] |
| | | Pass[_StencilOp] |
| | | ReadMask[_StencilReadMask] |
| | | WriteMask[_StencilWriteMask] |
| | | } |
| | | |
| | | |
| | | Lighting Off |
| | | Cull [_CullMode] |
| | | ZTest [unity_GUIZTestMode] |
| | | ZWrite Off |
| | | Fog { Mode Off } |
| | | Blend SrcAlpha OneMinusSrcAlpha |
| | | ColorMask[_ColorMask] |
| | | |
| | | Pass { |
| | | CGPROGRAM |
| | | #pragma vertex vert |
| | | #pragma fragment frag |
| | | |
| | | #pragma multi_compile __ UNITY_UI_CLIP_RECT |
| | | #pragma multi_compile __ UNITY_UI_ALPHACLIP |
| | | |
| | | |
| | | #include "UnityCG.cginc" |
| | | |
| | | struct appdata_t { |
| | | float4 vertex : POSITION; |
| | | fixed4 color : COLOR; |
| | | float2 texcoord0 : TEXCOORD0; |
| | | float2 texcoord1 : TEXCOORD1; |
| | | }; |
| | | |
| | | struct v2f { |
| | | float4 vertex : SV_POSITION; |
| | | fixed4 color : COLOR; |
| | | float2 texcoord0 : TEXCOORD0; |
| | | float2 texcoord1 : TEXCOORD1; |
| | | float4 mask : TEXCOORD2; |
| | | }; |
| | | |
| | | uniform sampler2D _MainTex; |
| | | uniform sampler2D _FaceTex; |
| | | uniform float4 _FaceTex_ST; |
| | | uniform fixed4 _FaceColor; |
| | | |
| | | uniform float _VertexOffsetX; |
| | | uniform float _VertexOffsetY; |
| | | uniform float4 _ClipRect; |
| | | uniform float _MaskSoftnessX; |
| | | uniform float _MaskSoftnessY; |
| | | |
| | | float2 UnpackUV(float uv) |
| | | { |
| | | float2 output; |
| | | output.x = floor(uv / 4096); |
| | | output.y = uv - 4096 * output.x; |
| | | |
| | | return output * 0.001953125; |
| | | } |
| | | |
| | | v2f vert (appdata_t v) |
| | | { |
| | | float4 vert = v.vertex; |
| | | vert.x += _VertexOffsetX; |
| | | vert.y += _VertexOffsetY; |
| | | |
| | | vert.xy += (vert.w * 0.5) / _ScreenParams.xy; |
| | | |
| | | float4 vPosition = UnityPixelSnap(UnityObjectToClipPos(vert)); |
| | | |
| | | fixed4 faceColor = v.color; |
| | | faceColor *= _FaceColor; |
| | | |
| | | v2f OUT; |
| | | OUT.vertex = vPosition; |
| | | OUT.color = faceColor; |
| | | OUT.texcoord0 = v.texcoord0; |
| | | OUT.texcoord1 = TRANSFORM_TEX(UnpackUV(v.texcoord1), _FaceTex); |
| | | float2 pixelSize = vPosition.w; |
| | | pixelSize /= abs(float2(_ScreenParams.x * UNITY_MATRIX_P[0][0], _ScreenParams.y * UNITY_MATRIX_P[1][1])); |
| | | |
| | | // Clamp _ClipRect to 16bit. |
| | | float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); |
| | | OUT.mask = float4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)); |
| | | |
| | | return OUT; |
| | | } |
| | | |
| | | fixed4 frag (v2f IN) : SV_Target |
| | | { |
| | | fixed4 color = tex2D(_MainTex, IN.texcoord0); |
| | | color = fixed4 (tex2D(_FaceTex, IN.texcoord1).rgb * IN.color.rgb, IN.color.a * color.a); |
| | | |
| | | // Alternative implementation to UnityGet2DClipping with support for softness. |
| | | #if UNITY_UI_CLIP_RECT |
| | | half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw); |
| | | color *= m.x * m.y; |
| | | #endif |
| | | |
| | | #if UNITY_UI_ALPHACLIP |
| | | clip(color.a - 0.001); |
| | | #endif |
| | | |
| | | return color; |
| | | } |
| | | ENDCG |
| | | } |
| | | } |
| | | |
| | | CustomEditor "TMPro.EditorUtilities.TMP_BitmapShaderGUI" |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 128e987d567d4e2c824d754223b3f3b0 |
| | | ShaderImporter: |
| | | externalObjects: {} |
| | | defaultTextures: [] |
| | | nonModifiableTextures: [] |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | Shader "TextMeshPro/Distance Field Overlay" { |
| | | |
| | | Properties { |
| | | _FaceTex ("Face Texture", 2D) = "white" {} |
| | | _FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0 |
| | | _FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0 |
| | | [HDR]_FaceColor ("Face Color", Color) = (1,1,1,1) |
| | | _FaceDilate ("Face Dilate", Range(-1,1)) = 0 |
| | | |
| | | [HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1) |
| | | _OutlineTex ("Outline Texture", 2D) = "white" {} |
| | | _OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0 |
| | | _OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0 |
| | | _OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 |
| | | _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 |
| | | |
| | | _Bevel ("Bevel", Range(0,1)) = 0.5 |
| | | _BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0 |
| | | _BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0 |
| | | _BevelClamp ("Bevel Clamp", Range(0,1)) = 0 |
| | | _BevelRoundness ("Bevel Roundness", Range(0,1)) = 0 |
| | | |
| | | _LightAngle ("Light Angle", Range(0.0, 6.2831853)) = 3.1416 |
| | | [HDR]_SpecularColor ("Specular", Color) = (1,1,1,1) |
| | | _SpecularPower ("Specular", Range(0,4)) = 2.0 |
| | | _Reflectivity ("Reflectivity", Range(5.0,15.0)) = 10 |
| | | _Diffuse ("Diffuse", Range(0,1)) = 0.5 |
| | | _Ambient ("Ambient", Range(1,0)) = 0.5 |
| | | |
| | | _BumpMap ("Normal map", 2D) = "bump" {} |
| | | _BumpOutline ("Bump Outline", Range(0,1)) = 0 |
| | | _BumpFace ("Bump Face", Range(0,1)) = 0 |
| | | |
| | | _ReflectFaceColor ("Reflection Color", Color) = (0,0,0,1) |
| | | _ReflectOutlineColor("Reflection Color", Color) = (0,0,0,1) |
| | | _Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ } |
| | | _EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0) |
| | | |
| | | |
| | | [HDR]_UnderlayColor ("Border Color", Color) = (0,0,0, 0.5) |
| | | _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 |
| | | _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 |
| | | _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 |
| | | _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 |
| | | |
| | | [HDR]_GlowColor ("Color", Color) = (0, 1, 0, 0.5) |
| | | _GlowOffset ("Offset", Range(-1,1)) = 0 |
| | | _GlowInner ("Inner", Range(0,1)) = 0.05 |
| | | _GlowOuter ("Outer", Range(0,1)) = 0.05 |
| | | _GlowPower ("Falloff", Range(1, 0)) = 0.75 |
| | | |
| | | _WeightNormal ("Weight Normal", float) = 0 |
| | | _WeightBold ("Weight Bold", float) = 0.5 |
| | | |
| | | _ShaderFlags ("Flags", float) = 0 |
| | | _ScaleRatioA ("Scale RatioA", float) = 1 |
| | | _ScaleRatioB ("Scale RatioB", float) = 1 |
| | | _ScaleRatioC ("Scale RatioC", float) = 1 |
| | | |
| | | _MainTex ("Font Atlas", 2D) = "white" {} |
| | | _TextureWidth ("Texture Width", float) = 512 |
| | | _TextureHeight ("Texture Height", float) = 512 |
| | | _GradientScale ("Gradient Scale", float) = 5.0 |
| | | _ScaleX ("Scale X", float) = 1.0 |
| | | _ScaleY ("Scale Y", float) = 1.0 |
| | | _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 |
| | | _Sharpness ("Sharpness", Range(-1,1)) = 0 |
| | | |
| | | _VertexOffsetX ("Vertex OffsetX", float) = 0 |
| | | _VertexOffsetY ("Vertex OffsetY", float) = 0 |
| | | |
| | | _MaskCoord ("Mask Coordinates", vector) = (0, 0, 32767, 32767) |
| | | _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) |
| | | _MaskSoftnessX ("Mask SoftnessX", float) = 0 |
| | | _MaskSoftnessY ("Mask SoftnessY", float) = 0 |
| | | |
| | | _StencilComp ("Stencil Comparison", Float) = 8 |
| | | _Stencil ("Stencil ID", Float) = 0 |
| | | _StencilOp ("Stencil Operation", Float) = 0 |
| | | _StencilWriteMask ("Stencil Write Mask", Float) = 255 |
| | | _StencilReadMask ("Stencil Read Mask", Float) = 255 |
| | | |
| | | _CullMode ("Cull Mode", Float) = 0 |
| | | _ColorMask ("Color Mask", Float) = 15 |
| | | } |
| | | |
| | | SubShader { |
| | | |
| | | Tags |
| | | { |
| | | "Queue"="Overlay" |
| | | "IgnoreProjector"="True" |
| | | "RenderType"="Transparent" |
| | | } |
| | | |
| | | Stencil |
| | | { |
| | | Ref [_Stencil] |
| | | Comp [_StencilComp] |
| | | Pass [_StencilOp] |
| | | ReadMask [_StencilReadMask] |
| | | WriteMask [_StencilWriteMask] |
| | | } |
| | | |
| | | Cull [_CullMode] |
| | | ZWrite Off |
| | | Lighting Off |
| | | Fog { Mode Off } |
| | | ZTest Always |
| | | Blend One OneMinusSrcAlpha |
| | | ColorMask [_ColorMask] |
| | | |
| | | Pass { |
| | | CGPROGRAM |
| | | #pragma target 3.0 |
| | | #pragma vertex VertShader |
| | | #pragma fragment PixShader |
| | | #pragma shader_feature __ BEVEL_ON |
| | | #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER |
| | | #pragma shader_feature __ GLOW_ON |
| | | |
| | | #pragma multi_compile __ UNITY_UI_CLIP_RECT |
| | | #pragma multi_compile __ UNITY_UI_ALPHACLIP |
| | | |
| | | #include "UnityCG.cginc" |
| | | #include "UnityUI.cginc" |
| | | #include "TMPro_Properties.cginc" |
| | | #include "TMPro.cginc" |
| | | |
| | | struct vertex_t { |
| | | UNITY_VERTEX_INPUT_INSTANCE_ID |
| | | float4 position : POSITION; |
| | | float3 normal : NORMAL; |
| | | fixed4 color : COLOR; |
| | | float2 texcoord0 : TEXCOORD0; |
| | | float2 texcoord1 : TEXCOORD1; |
| | | }; |
| | | |
| | | |
| | | struct pixel_t { |
| | | UNITY_VERTEX_INPUT_INSTANCE_ID |
| | | UNITY_VERTEX_OUTPUT_STEREO |
| | | float4 position : SV_POSITION; |
| | | fixed4 color : COLOR; |
| | | float2 atlas : TEXCOORD0; // Atlas |
| | | float4 param : TEXCOORD1; // alphaClip, scale, bias, weight |
| | | float4 mask : TEXCOORD2; // Position in object space(xy), pixel Size(zw) |
| | | float3 viewDir : TEXCOORD3; |
| | | |
| | | #if (UNDERLAY_ON || UNDERLAY_INNER) |
| | | float4 texcoord2 : TEXCOORD4; // u,v, scale, bias |
| | | fixed4 underlayColor : COLOR1; |
| | | #endif |
| | | float4 textures : TEXCOORD5; |
| | | }; |
| | | |
| | | // Used by Unity internally to handle Texture Tiling and Offset. |
| | | float4 _FaceTex_ST; |
| | | float4 _OutlineTex_ST; |
| | | |
| | | pixel_t VertShader(vertex_t input) |
| | | { |
| | | pixel_t output; |
| | | |
| | | UNITY_INITIALIZE_OUTPUT(pixel_t, output); |
| | | UNITY_SETUP_INSTANCE_ID(input); |
| | | UNITY_TRANSFER_INSTANCE_ID(input,output); |
| | | UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); |
| | | |
| | | float bold = step(input.texcoord1.y, 0); |
| | | |
| | | float4 vert = input.position; |
| | | vert.x += _VertexOffsetX; |
| | | vert.y += _VertexOffsetY; |
| | | |
| | | float4 vPosition = UnityObjectToClipPos(vert); |
| | | |
| | | float2 pixelSize = vPosition.w; |
| | | pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); |
| | | float scale = rsqrt(dot(pixelSize, pixelSize)); |
| | | scale *= abs(input.texcoord1.y) * _GradientScale * (_Sharpness + 1); |
| | | if (UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); |
| | | |
| | | float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; |
| | | weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; |
| | | |
| | | float bias =(.5 - weight) + (.5 / scale); |
| | | |
| | | float alphaClip = (1.0 - _OutlineWidth*_ScaleRatioA - _OutlineSoftness*_ScaleRatioA); |
| | | |
| | | #if GLOW_ON |
| | | alphaClip = min(alphaClip, 1.0 - _GlowOffset * _ScaleRatioB - _GlowOuter * _ScaleRatioB); |
| | | #endif |
| | | |
| | | alphaClip = alphaClip / 2.0 - ( .5 / scale) - weight; |
| | | |
| | | #if (UNDERLAY_ON || UNDERLAY_INNER) |
| | | float4 underlayColor = _UnderlayColor; |
| | | underlayColor.rgb *= underlayColor.a; |
| | | |
| | | float bScale = scale; |
| | | bScale /= 1 + ((_UnderlaySoftness*_ScaleRatioC) * bScale); |
| | | float bBias = (0.5 - weight) * bScale - 0.5 - ((_UnderlayDilate * _ScaleRatioC) * 0.5 * bScale); |
| | | |
| | | float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; |
| | | float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; |
| | | float2 bOffset = float2(x, y); |
| | | #endif |
| | | |
| | | // Generate UV for the Masking Texture |
| | | float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); |
| | | float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); |
| | | |
| | | // Support for texture tiling and offset |
| | | float2 textureUV = UnpackUV(input.texcoord1.x); |
| | | float2 faceUV = TRANSFORM_TEX(textureUV, _FaceTex); |
| | | float2 outlineUV = TRANSFORM_TEX(textureUV, _OutlineTex); |
| | | |
| | | |
| | | output.position = vPosition; |
| | | output.color = input.color; |
| | | output.atlas = input.texcoord0; |
| | | output.param = float4(alphaClip, scale, bias, weight); |
| | | output.mask = half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)); |
| | | output.viewDir = mul((float3x3)_EnvMatrix, _WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, vert).xyz); |
| | | #if (UNDERLAY_ON || UNDERLAY_INNER) |
| | | output.texcoord2 = float4(input.texcoord0 + bOffset, bScale, bBias); |
| | | output.underlayColor = underlayColor; |
| | | #endif |
| | | output.textures = float4(faceUV, outlineUV); |
| | | |
| | | return output; |
| | | } |
| | | |
| | | |
| | | fixed4 PixShader(pixel_t input) : SV_Target |
| | | { |
| | | UNITY_SETUP_INSTANCE_ID(input); |
| | | |
| | | float c = tex2D(_MainTex, input.atlas).a; |
| | | |
| | | #ifndef UNDERLAY_ON |
| | | clip(c - input.param.x); |
| | | #endif |
| | | |
| | | float scale = input.param.y; |
| | | float bias = input.param.z; |
| | | float weight = input.param.w; |
| | | float sd = (bias - c) * scale; |
| | | |
| | | float outline = (_OutlineWidth * _ScaleRatioA) * scale; |
| | | float softness = (_OutlineSoftness * _ScaleRatioA) * scale; |
| | | |
| | | half4 faceColor = _FaceColor; |
| | | half4 outlineColor = _OutlineColor; |
| | | |
| | | faceColor.rgb *= input.color.rgb; |
| | | |
| | | faceColor *= tex2D(_FaceTex, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y); |
| | | outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y); |
| | | |
| | | faceColor = GetColor(sd, faceColor, outlineColor, outline, softness); |
| | | |
| | | #if BEVEL_ON |
| | | float3 dxy = float3(0.5 / _TextureWidth, 0.5 / _TextureHeight, 0); |
| | | float3 n = GetSurfaceNormal(input.atlas, weight, dxy); |
| | | |
| | | float3 bump = UnpackNormal(tex2D(_BumpMap, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y)).xyz; |
| | | bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5)); |
| | | n = normalize(n- bump); |
| | | |
| | | float3 light = normalize(float3(sin(_LightAngle), cos(_LightAngle), -1.0)); |
| | | |
| | | float3 col = GetSpecular(n, light); |
| | | faceColor.rgb += col*faceColor.a; |
| | | faceColor.rgb *= 1-(dot(n, light)*_Diffuse); |
| | | faceColor.rgb *= lerp(_Ambient, 1, n.z*n.z); |
| | | |
| | | fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDir, -n)); |
| | | faceColor.rgb += reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a; |
| | | #endif |
| | | |
| | | #if UNDERLAY_ON |
| | | float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; |
| | | faceColor += input.underlayColor * saturate(d - input.texcoord2.w) * (1 - faceColor.a); |
| | | #endif |
| | | |
| | | #if UNDERLAY_INNER |
| | | float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; |
| | | faceColor += input.underlayColor * (1 - saturate(d - input.texcoord2.w)) * saturate(1 - sd) * (1 - faceColor.a); |
| | | #endif |
| | | |
| | | #if GLOW_ON |
| | | float4 glowColor = GetGlowColor(sd, scale); |
| | | faceColor.rgb += glowColor.rgb * glowColor.a; |
| | | #endif |
| | | |
| | | // Alternative implementation to UnityGet2DClipping with support for softness. |
| | | #if UNITY_UI_CLIP_RECT |
| | | half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); |
| | | faceColor *= m.x * m.y; |
| | | #endif |
| | | |
| | | #if UNITY_UI_ALPHACLIP |
| | | clip(faceColor.a - 0.001); |
| | | #endif |
| | | |
| | | return faceColor * input.color.a; |
| | | } |
| | | |
| | | ENDCG |
| | | } |
| | | } |
| | | |
| | | Fallback "TextMeshPro/Mobile/Distance Field" |
| | | CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: dd89cf5b9246416f84610a006f916af7 |
| | | ShaderImporter: |
| | | externalObjects: {} |
| | | defaultTextures: [] |
| | | nonModifiableTextures: [] |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | Shader "TextMeshPro/Distance Field SSD" { |
| | | |
| | | Properties { |
| | | _FaceTex ("Face Texture", 2D) = "white" {} |
| | | _FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0 |
| | | _FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0 |
| | | [HDR]_FaceColor ("Face Color", Color) = (1,1,1,1) |
| | | _FaceDilate ("Face Dilate", Range(-1,1)) = 0 |
| | | |
| | | [HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1) |
| | | _OutlineTex ("Outline Texture", 2D) = "white" {} |
| | | _OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0 |
| | | _OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0 |
| | | _OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 |
| | | _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 |
| | | |
| | | _Bevel ("Bevel", Range(0,1)) = 0.5 |
| | | _BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0 |
| | | _BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0 |
| | | _BevelClamp ("Bevel Clamp", Range(0,1)) = 0 |
| | | _BevelRoundness ("Bevel Roundness", Range(0,1)) = 0 |
| | | |
| | | _LightAngle ("Light Angle", Range(0.0, 6.2831853)) = 3.1416 |
| | | [HDR]_SpecularColor ("Specular", Color) = (1,1,1,1) |
| | | _SpecularPower ("Specular", Range(0,4)) = 2.0 |
| | | _Reflectivity ("Reflectivity", Range(5.0,15.0)) = 10 |
| | | _Diffuse ("Diffuse", Range(0,1)) = 0.5 |
| | | _Ambient ("Ambient", Range(1,0)) = 0.5 |
| | | |
| | | _BumpMap ("Normal map", 2D) = "bump" {} |
| | | _BumpOutline ("Bump Outline", Range(0,1)) = 0 |
| | | _BumpFace ("Bump Face", Range(0,1)) = 0 |
| | | |
| | | _ReflectFaceColor ("Reflection Color", Color) = (0,0,0,1) |
| | | _ReflectOutlineColor("Reflection Color", Color) = (0,0,0,1) |
| | | _Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ } |
| | | _EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0) |
| | | |
| | | |
| | | [HDR]_UnderlayColor ("Border Color", Color) = (0,0,0, 0.5) |
| | | _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 |
| | | _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 |
| | | _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 |
| | | _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 |
| | | |
| | | [HDR]_GlowColor ("Color", Color) = (0, 1, 0, 0.5) |
| | | _GlowOffset ("Offset", Range(-1,1)) = 0 |
| | | _GlowInner ("Inner", Range(0,1)) = 0.05 |
| | | _GlowOuter ("Outer", Range(0,1)) = 0.05 |
| | | _GlowPower ("Falloff", Range(1, 0)) = 0.75 |
| | | |
| | | _WeightNormal ("Weight Normal", float) = 0 |
| | | _WeightBold ("Weight Bold", float) = 0.5 |
| | | |
| | | _ShaderFlags ("Flags", float) = 0 |
| | | _ScaleRatioA ("Scale RatioA", float) = 1 |
| | | _ScaleRatioB ("Scale RatioB", float) = 1 |
| | | _ScaleRatioC ("Scale RatioC", float) = 1 |
| | | |
| | | _MainTex ("Font Atlas", 2D) = "white" {} |
| | | _TextureWidth ("Texture Width", float) = 512 |
| | | _TextureHeight ("Texture Height", float) = 512 |
| | | _GradientScale ("Gradient Scale", float) = 5.0 |
| | | _ScaleX ("Scale X", float) = 1.0 |
| | | _ScaleY ("Scale Y", float) = 1.0 |
| | | _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 |
| | | _Sharpness ("Sharpness", Range(-1,1)) = 0 |
| | | |
| | | _VertexOffsetX ("Vertex OffsetX", float) = 0 |
| | | _VertexOffsetY ("Vertex OffsetY", float) = 0 |
| | | |
| | | _MaskCoord ("Mask Coordinates", vector) = (0, 0, 32767, 32767) |
| | | _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) |
| | | _MaskSoftnessX ("Mask SoftnessX", float) = 0 |
| | | _MaskSoftnessY ("Mask SoftnessY", float) = 0 |
| | | |
| | | _StencilComp ("Stencil Comparison", Float) = 8 |
| | | _Stencil ("Stencil ID", Float) = 0 |
| | | _StencilOp ("Stencil Operation", Float) = 0 |
| | | _StencilWriteMask ("Stencil Write Mask", Float) = 255 |
| | | _StencilReadMask ("Stencil Read Mask", Float) = 255 |
| | | |
| | | _CullMode ("Cull Mode", Float) = 0 |
| | | _ColorMask ("Color Mask", Float) = 15 |
| | | } |
| | | |
| | | SubShader { |
| | | Tags |
| | | { |
| | | "Queue" = "Transparent" |
| | | "IgnoreProjector" = "True" |
| | | "RenderType" = "Transparent" |
| | | } |
| | | |
| | | Stencil |
| | | { |
| | | Ref[_Stencil] |
| | | Comp[_StencilComp] |
| | | Pass[_StencilOp] |
| | | ReadMask[_StencilReadMask] |
| | | WriteMask[_StencilWriteMask] |
| | | } |
| | | |
| | | Cull[_CullMode] |
| | | ZWrite Off |
| | | Lighting Off |
| | | Fog { Mode Off } |
| | | ZTest[unity_GUIZTestMode] |
| | | Blend One OneMinusSrcAlpha |
| | | ColorMask[_ColorMask] |
| | | |
| | | Pass { |
| | | CGPROGRAM |
| | | #pragma target 3.0 |
| | | #pragma vertex VertShader |
| | | #pragma fragment PixShader |
| | | #pragma shader_feature __ BEVEL_ON |
| | | #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER |
| | | #pragma shader_feature __ GLOW_ON |
| | | #pragma shader_feature __ FORCE_LINEAR |
| | | |
| | | #pragma multi_compile __ UNITY_UI_CLIP_RECT |
| | | #pragma multi_compile __ UNITY_UI_ALPHACLIP |
| | | |
| | | #include "UnityCG.cginc" |
| | | #include "UnityUI.cginc" |
| | | #include "TMPro_Properties.cginc" |
| | | #include "TMPro.cginc" |
| | | |
| | | struct vertex_t { |
| | | UNITY_VERTEX_INPUT_INSTANCE_ID |
| | | float4 position : POSITION; |
| | | float3 normal : NORMAL; |
| | | float4 color : COLOR; |
| | | float2 texcoord0 : TEXCOORD0; |
| | | float2 texcoord1 : TEXCOORD1; |
| | | }; |
| | | |
| | | |
| | | struct pixel_t { |
| | | UNITY_VERTEX_INPUT_INSTANCE_ID |
| | | UNITY_VERTEX_OUTPUT_STEREO |
| | | float4 position : SV_POSITION; |
| | | float4 color : COLOR; |
| | | float2 atlas : TEXCOORD0; |
| | | float weight : TEXCOORD1; |
| | | float2 mask : TEXCOORD2; // Position in object space(xy) |
| | | float3 viewDir : TEXCOORD3; |
| | | |
| | | #if (UNDERLAY_ON || UNDERLAY_INNER) |
| | | float2 texcoord2 : TEXCOORD4; |
| | | float4 underlayColor : COLOR1; |
| | | #endif |
| | | float4 textures : TEXCOORD5; |
| | | }; |
| | | |
| | | // Used by Unity internally to handle Texture Tiling and Offset. |
| | | float4 _FaceTex_ST; |
| | | float4 _OutlineTex_ST; |
| | | |
| | | float4 SRGBToLinear(float4 rgba) { |
| | | return float4(lerp(rgba.rgb / 12.92f, pow((rgba.rgb + 0.055f) / 1.055f, 2.4f), step(0.04045f, rgba.rgb)), rgba.a); |
| | | } |
| | | |
| | | pixel_t VertShader(vertex_t input) |
| | | { |
| | | pixel_t output; |
| | | |
| | | UNITY_INITIALIZE_OUTPUT(pixel_t, output); |
| | | UNITY_SETUP_INSTANCE_ID(input); |
| | | UNITY_TRANSFER_INSTANCE_ID(input,output); |
| | | UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); |
| | | |
| | | float bold = step(input.texcoord1.y, 0); |
| | | |
| | | float4 vert = input.position; |
| | | vert.x += _VertexOffsetX; |
| | | vert.y += _VertexOffsetY; |
| | | |
| | | float4 vPosition = UnityObjectToClipPos(vert); |
| | | |
| | | float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; |
| | | weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; |
| | | |
| | | #if (UNDERLAY_ON || UNDERLAY_INNER) |
| | | float4 underlayColor = _UnderlayColor; |
| | | underlayColor.rgb *= underlayColor.a; |
| | | |
| | | float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; |
| | | float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; |
| | | float2 bOffset = float2(x, y); |
| | | #endif |
| | | |
| | | // Generate UV for the Masking Texture |
| | | float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); |
| | | |
| | | // Support for texture tiling and offset |
| | | float2 textureUV = UnpackUV(input.texcoord1.x); |
| | | float2 faceUV = TRANSFORM_TEX(textureUV, _FaceTex); |
| | | float2 outlineUV = TRANSFORM_TEX(textureUV, _OutlineTex); |
| | | |
| | | float4 color = input.color; |
| | | #if (FORCE_LINEAR && !UNITY_COLORSPACE_GAMMA) |
| | | color = SRGBToLinear(input.color); |
| | | #endif |
| | | |
| | | output.position = vPosition; |
| | | output.color = color; |
| | | output.atlas = input.texcoord0; |
| | | output.weight = weight; |
| | | output.mask = half2(vert.xy * 2 - clampedRect.xy - clampedRect.zw); |
| | | output.viewDir = mul((float3x3)_EnvMatrix, _WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, vert).xyz); |
| | | #if (UNDERLAY_ON || UNDERLAY_INNER) |
| | | output.texcoord2 = input.texcoord0 + bOffset; |
| | | output.underlayColor = underlayColor; |
| | | #endif |
| | | output.textures = float4(faceUV, outlineUV); |
| | | |
| | | return output; |
| | | } |
| | | |
| | | |
| | | fixed4 PixShader(pixel_t input) : SV_Target |
| | | { |
| | | UNITY_SETUP_INSTANCE_ID(input); |
| | | |
| | | float c = tex2D(_MainTex, input.atlas).a; |
| | | |
| | | float2 pixelSize = float2(ddx(input.atlas.y), ddy(input.atlas.y)); |
| | | pixelSize *= _TextureWidth * .75; |
| | | float scale = rsqrt(dot(pixelSize, pixelSize)) * _GradientScale * (_Sharpness + 1); |
| | | |
| | | float weight = input.weight; |
| | | float bias = (.5 - weight) + (.5 / scale); |
| | | float sd = (bias - c) * scale; |
| | | |
| | | float outline = (_OutlineWidth * _ScaleRatioA) * scale; |
| | | float softness = (_OutlineSoftness * _ScaleRatioA) * scale; |
| | | |
| | | half4 faceColor = _FaceColor; |
| | | half4 outlineColor = _OutlineColor; |
| | | |
| | | faceColor.rgb *= input.color.rgb; |
| | | |
| | | faceColor *= tex2D(_FaceTex, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y); |
| | | outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y); |
| | | |
| | | faceColor = GetColor(sd, faceColor, outlineColor, outline, softness); |
| | | |
| | | #if BEVEL_ON |
| | | float3 dxy = float3(0.5 / _TextureWidth, 0.5 / _TextureHeight, 0); |
| | | float3 n = GetSurfaceNormal(input.atlas, weight, dxy); |
| | | |
| | | float3 bump = UnpackNormal(tex2D(_BumpMap, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y)).xyz; |
| | | bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5)); |
| | | n = normalize(n - bump); |
| | | |
| | | float3 light = normalize(float3(sin(_LightAngle), cos(_LightAngle), -1.0)); |
| | | |
| | | float3 col = GetSpecular(n, light); |
| | | faceColor.rgb += col * faceColor.a; |
| | | faceColor.rgb *= 1 - (dot(n, light) * _Diffuse); |
| | | faceColor.rgb *= lerp(_Ambient, 1, n.z * n.z); |
| | | |
| | | fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDir, -n)); |
| | | faceColor.rgb += reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a; |
| | | #endif |
| | | |
| | | #if (UNDERLAY_ON || UNDERLAY_INNER) |
| | | float bScale = scale; |
| | | bScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * bScale); |
| | | float bBias = (0.5 - weight) * bScale - 0.5 - ((_UnderlayDilate * _ScaleRatioC) * 0.5 * bScale); |
| | | #endif |
| | | |
| | | #if UNDERLAY_ON |
| | | float d = tex2D(_MainTex, input.texcoord2.xy).a * bScale; |
| | | faceColor += input.underlayColor * saturate(d - bBias) * (1 - faceColor.a); |
| | | #endif |
| | | |
| | | #if UNDERLAY_INNER |
| | | float d = tex2D(_MainTex, input.texcoord2.xy).a * bScale; |
| | | faceColor += input.underlayColor * (1 - saturate(d - bBias)) * saturate(1 - sd) * (1 - faceColor.a); |
| | | #endif |
| | | |
| | | #if GLOW_ON |
| | | float4 glowColor = GetGlowColor(sd, scale); |
| | | faceColor.rgb += glowColor.rgb * glowColor.a; |
| | | #endif |
| | | |
| | | // Alternative implementation to UnityGet2DClipping with support for softness. |
| | | #if UNITY_UI_CLIP_RECT |
| | | float2 maskZW = 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + (1 / scale)); |
| | | half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * maskZW); |
| | | faceColor *= m.x * m.y; |
| | | #endif |
| | | |
| | | #if UNITY_UI_ALPHACLIP |
| | | clip(faceColor.a - 0.001); |
| | | #endif |
| | | |
| | | return faceColor * input.color.a; |
| | | } |
| | | |
| | | ENDCG |
| | | } |
| | | } |
| | | |
| | | Fallback "TextMeshPro/Mobile/Distance Field" |
| | | CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 14eb328de4b8eb245bb7cea29e4ac00b |
| | | ShaderImporter: |
| | | externalObjects: {} |
| | | defaultTextures: [] |
| | | nonModifiableTextures: [] |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | // Simplified SDF shader: |
| | | // - No Shading Option (bevel / bump / env map) |
| | | // - No Glow Option |
| | | // - Softness is applied on both side of the outline |
| | | |
| | | Shader "TextMeshPro/Mobile/Distance Field - Masking" { |
| | | |
| | | Properties { |
| | | [HDR]_FaceColor ("Face Color", Color) = (1,1,1,1) |
| | | _FaceDilate ("Face Dilate", Range(-1,1)) = 0 |
| | | |
| | | [HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1) |
| | | _OutlineWidth ("Outline Thickness", Range(0,1)) = 0 |
| | | _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 |
| | | |
| | | [HDR]_UnderlayColor ("Border Color", Color) = (0,0,0,.5) |
| | | _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 |
| | | _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 |
| | | _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 |
| | | _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 |
| | | |
| | | _WeightNormal ("Weight Normal", float) = 0 |
| | | _WeightBold ("Weight Bold", float) = .5 |
| | | |
| | | _ShaderFlags ("Flags", float) = 0 |
| | | _ScaleRatioA ("Scale RatioA", float) = 1 |
| | | _ScaleRatioB ("Scale RatioB", float) = 1 |
| | | _ScaleRatioC ("Scale RatioC", float) = 1 |
| | | |
| | | _MainTex ("Font Atlas", 2D) = "white" {} |
| | | _TextureWidth ("Texture Width", float) = 512 |
| | | _TextureHeight ("Texture Height", float) = 512 |
| | | _GradientScale ("Gradient Scale", float) = 5 |
| | | _ScaleX ("Scale X", float) = 1 |
| | | _ScaleY ("Scale Y", float) = 1 |
| | | _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 |
| | | _Sharpness ("Sharpness", Range(-1,1)) = 0 |
| | | |
| | | _VertexOffsetX ("Vertex OffsetX", float) = 0 |
| | | _VertexOffsetY ("Vertex OffsetY", float) = 0 |
| | | |
| | | _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) |
| | | _MaskSoftnessX ("Mask SoftnessX", float) = 0 |
| | | _MaskSoftnessY ("Mask SoftnessY", float) = 0 |
| | | _MaskTex ("Mask Texture", 2D) = "white" {} |
| | | _MaskInverse ("Inverse", float) = 0 |
| | | _MaskEdgeColor ("Edge Color", Color) = (1,1,1,1) |
| | | _MaskEdgeSoftness ("Edge Softness", Range(0, 1)) = 0.01 |
| | | _MaskWipeControl ("Wipe Position", Range(0, 1)) = 0.5 |
| | | |
| | | _StencilComp ("Stencil Comparison", Float) = 8 |
| | | _Stencil ("Stencil ID", Float) = 0 |
| | | _StencilOp ("Stencil Operation", Float) = 0 |
| | | _StencilWriteMask ("Stencil Write Mask", Float) = 255 |
| | | _StencilReadMask ("Stencil Read Mask", Float) = 255 |
| | | |
| | | _CullMode ("Cull Mode", Float) = 0 |
| | | _ColorMask ("Color Mask", Float) = 15 |
| | | } |
| | | |
| | | SubShader { |
| | | Tags |
| | | { |
| | | "Queue"="Transparent" |
| | | "IgnoreProjector"="True" |
| | | "RenderType"="Transparent" |
| | | } |
| | | |
| | | |
| | | Stencil |
| | | { |
| | | Ref [_Stencil] |
| | | Comp [_StencilComp] |
| | | Pass [_StencilOp] |
| | | ReadMask [_StencilReadMask] |
| | | WriteMask [_StencilWriteMask] |
| | | } |
| | | |
| | | Cull [_CullMode] |
| | | ZWrite Off |
| | | Lighting Off |
| | | Fog { Mode Off } |
| | | ZTest [unity_GUIZTestMode] |
| | | Blend One OneMinusSrcAlpha |
| | | ColorMask [_ColorMask] |
| | | |
| | | Pass { |
| | | CGPROGRAM |
| | | #pragma vertex VertShader |
| | | #pragma fragment PixShader |
| | | #pragma shader_feature __ OUTLINE_ON |
| | | #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER |
| | | |
| | | #pragma multi_compile __ UNITY_UI_CLIP_RECT |
| | | #pragma multi_compile __ UNITY_UI_ALPHACLIP |
| | | |
| | | |
| | | #include "UnityCG.cginc" |
| | | #include "UnityUI.cginc" |
| | | #include "TMPro_Properties.cginc" |
| | | |
| | | struct vertex_t { |
| | | float4 vertex : POSITION; |
| | | float3 normal : NORMAL; |
| | | fixed4 color : COLOR; |
| | | float2 texcoord0 : TEXCOORD0; |
| | | float2 texcoord1 : TEXCOORD1; |
| | | }; |
| | | |
| | | struct pixel_t { |
| | | float4 vertex : SV_POSITION; |
| | | fixed4 faceColor : COLOR; |
| | | fixed4 outlineColor : COLOR1; |
| | | float4 texcoord0 : TEXCOORD0; // Texture UV, Mask UV |
| | | half4 param : TEXCOORD1; // Scale(x), BiasIn(y), BiasOut(z), Bias(w) |
| | | half4 mask : TEXCOORD2; // Position in clip space(xy), Softness(zw) |
| | | #if (UNDERLAY_ON | UNDERLAY_INNER) |
| | | float4 texcoord1 : TEXCOORD3; // Texture UV, alpha, reserved |
| | | half2 underlayParam : TEXCOORD4; // Scale(x), Bias(y) |
| | | #endif |
| | | }; |
| | | |
| | | float _MaskWipeControl; |
| | | float _MaskEdgeSoftness; |
| | | fixed4 _MaskEdgeColor; |
| | | bool _MaskInverse; |
| | | |
| | | pixel_t VertShader(vertex_t input) |
| | | { |
| | | float bold = step(input.texcoord1.y, 0); |
| | | |
| | | float4 vert = input.vertex; |
| | | vert.x += _VertexOffsetX; |
| | | vert.y += _VertexOffsetY; |
| | | float4 vPosition = UnityObjectToClipPos(vert); |
| | | |
| | | float2 pixelSize = vPosition.w; |
| | | pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); |
| | | |
| | | float scale = rsqrt(dot(pixelSize, pixelSize)); |
| | | scale *= abs(input.texcoord1.y) * _GradientScale * (_Sharpness + 1); |
| | | if(UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); |
| | | |
| | | float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; |
| | | weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; |
| | | |
| | | float layerScale = scale; |
| | | |
| | | scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale); |
| | | float bias = (0.5 - weight) * scale - 0.5; |
| | | float outline = _OutlineWidth * _ScaleRatioA * 0.5 * scale; |
| | | |
| | | float opacity = input.color.a; |
| | | #if (UNDERLAY_ON | UNDERLAY_INNER) |
| | | opacity = 1.0; |
| | | #endif |
| | | |
| | | fixed4 faceColor = fixed4(input.color.rgb, opacity) * _FaceColor; |
| | | faceColor.rgb *= faceColor.a; |
| | | |
| | | fixed4 outlineColor = _OutlineColor; |
| | | outlineColor.a *= opacity; |
| | | outlineColor.rgb *= outlineColor.a; |
| | | outlineColor = lerp(faceColor, outlineColor, sqrt(min(1.0, (outline * 2)))); |
| | | |
| | | #if (UNDERLAY_ON | UNDERLAY_INNER) |
| | | |
| | | layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale); |
| | | float layerBias = (.5 - weight) * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale); |
| | | |
| | | float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; |
| | | float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; |
| | | float2 layerOffset = float2(x, y); |
| | | #endif |
| | | |
| | | // Generate UV for the Masking Texture |
| | | float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); |
| | | float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); |
| | | |
| | | // Structure for pixel shader |
| | | pixel_t output = { |
| | | vPosition, |
| | | faceColor, |
| | | outlineColor, |
| | | float4(input.texcoord0.x, input.texcoord0.y, maskUV.x, maskUV.y), |
| | | half4(scale, bias - outline, bias + outline, bias), |
| | | half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)), |
| | | #if (UNDERLAY_ON | UNDERLAY_INNER) |
| | | float4(input.texcoord0 + layerOffset, input.color.a, 0), |
| | | half2(layerScale, layerBias), |
| | | #endif |
| | | }; |
| | | |
| | | return output; |
| | | } |
| | | |
| | | |
| | | // PIXEL SHADER |
| | | fixed4 PixShader(pixel_t input) : SV_Target |
| | | { |
| | | half d = tex2D(_MainTex, input.texcoord0.xy).a * input.param.x; |
| | | half4 c = input.faceColor * saturate(d - input.param.w); |
| | | |
| | | #ifdef OUTLINE_ON |
| | | c = lerp(input.outlineColor, input.faceColor, saturate(d - input.param.z)); |
| | | c *= saturate(d - input.param.y); |
| | | #endif |
| | | |
| | | #if UNDERLAY_ON |
| | | d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; |
| | | c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - input.underlayParam.y) * (1 - c.a); |
| | | #endif |
| | | |
| | | #if UNDERLAY_INNER |
| | | half sd = saturate(d - input.param.z); |
| | | d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; |
| | | c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - input.underlayParam.y)) * sd * (1 - c.a); |
| | | #endif |
| | | |
| | | // Alternative implementation to UnityGet2DClipping with support for softness. |
| | | //#if UNITY_UI_CLIP_RECT |
| | | half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); |
| | | c *= m.x * m.y; |
| | | //#endif |
| | | |
| | | float a = abs(_MaskInverse - tex2D(_MaskTex, input.texcoord0.zw).a); |
| | | float t = a + (1 - _MaskWipeControl) * _MaskEdgeSoftness - _MaskWipeControl; |
| | | a = saturate(t / _MaskEdgeSoftness); |
| | | c.rgb = lerp(_MaskEdgeColor.rgb*c.a, c.rgb, a); |
| | | c *= a; |
| | | |
| | | #if (UNDERLAY_ON | UNDERLAY_INNER) |
| | | c *= input.texcoord1.z; |
| | | #endif |
| | | |
| | | #if UNITY_UI_ALPHACLIP |
| | | clip(c.a - 0.001); |
| | | #endif |
| | | |
| | | return c; |
| | | } |
| | | ENDCG |
| | | } |
| | | } |
| | | |
| | | CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: bc1ede39bf3643ee8e493720e4259791 |
| | | ShaderImporter: |
| | | externalObjects: {} |
| | | defaultTextures: [] |
| | | nonModifiableTextures: [] |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | // Simplified SDF shader: |
| | | // - No Shading Option (bevel / bump / env map) |
| | | // - No Glow Option |
| | | // - Softness is applied on both side of the outline |
| | | |
| | | Shader "TextMeshPro/Mobile/Distance Field Overlay" { |
| | | |
| | | Properties { |
| | | [HDR]_FaceColor ("Face Color", Color) = (1,1,1,1) |
| | | _FaceDilate ("Face Dilate", Range(-1,1)) = 0 |
| | | |
| | | [HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1) |
| | | _OutlineWidth ("Outline Thickness", Range(0,1)) = 0 |
| | | _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 |
| | | |
| | | [HDR]_UnderlayColor ("Border Color", Color) = (0,0,0,.5) |
| | | _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 |
| | | _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 |
| | | _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 |
| | | _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 |
| | | |
| | | _WeightNormal ("Weight Normal", float) = 0 |
| | | _WeightBold ("Weight Bold", float) = .5 |
| | | |
| | | _ShaderFlags ("Flags", float) = 0 |
| | | _ScaleRatioA ("Scale RatioA", float) = 1 |
| | | _ScaleRatioB ("Scale RatioB", float) = 1 |
| | | _ScaleRatioC ("Scale RatioC", float) = 1 |
| | | |
| | | _MainTex ("Font Atlas", 2D) = "white" {} |
| | | _TextureWidth ("Texture Width", float) = 512 |
| | | _TextureHeight ("Texture Height", float) = 512 |
| | | _GradientScale ("Gradient Scale", float) = 5 |
| | | _ScaleX ("Scale X", float) = 1 |
| | | _ScaleY ("Scale Y", float) = 1 |
| | | _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 |
| | | _Sharpness ("Sharpness", Range(-1,1)) = 0 |
| | | |
| | | _VertexOffsetX ("Vertex OffsetX", float) = 0 |
| | | _VertexOffsetY ("Vertex OffsetY", float) = 0 |
| | | |
| | | _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) |
| | | _MaskSoftnessX ("Mask SoftnessX", float) = 0 |
| | | _MaskSoftnessY ("Mask SoftnessY", float) = 0 |
| | | |
| | | _StencilComp ("Stencil Comparison", Float) = 8 |
| | | _Stencil ("Stencil ID", Float) = 0 |
| | | _StencilOp ("Stencil Operation", Float) = 0 |
| | | _StencilWriteMask ("Stencil Write Mask", Float) = 255 |
| | | _StencilReadMask ("Stencil Read Mask", Float) = 255 |
| | | |
| | | _CullMode ("Cull Mode", Float) = 0 |
| | | _ColorMask ("Color Mask", Float) = 15 |
| | | } |
| | | |
| | | SubShader { |
| | | Tags |
| | | { |
| | | "Queue"="Overlay" |
| | | "IgnoreProjector"="True" |
| | | "RenderType"="Transparent" |
| | | } |
| | | |
| | | |
| | | Stencil |
| | | { |
| | | Ref [_Stencil] |
| | | Comp [_StencilComp] |
| | | Pass [_StencilOp] |
| | | ReadMask [_StencilReadMask] |
| | | WriteMask [_StencilWriteMask] |
| | | } |
| | | |
| | | Cull [_CullMode] |
| | | ZWrite Off |
| | | Lighting Off |
| | | Fog { Mode Off } |
| | | ZTest Always |
| | | Blend One OneMinusSrcAlpha |
| | | ColorMask [_ColorMask] |
| | | |
| | | Pass { |
| | | CGPROGRAM |
| | | #pragma vertex VertShader |
| | | #pragma fragment PixShader |
| | | #pragma shader_feature __ OUTLINE_ON |
| | | #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER |
| | | |
| | | #pragma multi_compile __ UNITY_UI_CLIP_RECT |
| | | #pragma multi_compile __ UNITY_UI_ALPHACLIP |
| | | |
| | | #include "UnityCG.cginc" |
| | | #include "UnityUI.cginc" |
| | | #include "TMPro_Properties.cginc" |
| | | |
| | | struct vertex_t { |
| | | UNITY_VERTEX_INPUT_INSTANCE_ID |
| | | float4 vertex : POSITION; |
| | | float3 normal : NORMAL; |
| | | fixed4 color : COLOR; |
| | | float2 texcoord0 : TEXCOORD0; |
| | | float2 texcoord1 : TEXCOORD1; |
| | | }; |
| | | |
| | | struct pixel_t { |
| | | UNITY_VERTEX_INPUT_INSTANCE_ID |
| | | UNITY_VERTEX_OUTPUT_STEREO |
| | | float4 vertex : SV_POSITION; |
| | | fixed4 faceColor : COLOR; |
| | | fixed4 outlineColor : COLOR1; |
| | | float4 texcoord0 : TEXCOORD0; // Texture UV, Mask UV |
| | | half4 param : TEXCOORD1; // Scale(x), BiasIn(y), BiasOut(z), Bias(w) |
| | | half4 mask : TEXCOORD2; // Position in clip space(xy), Softness(zw) |
| | | #if (UNDERLAY_ON | UNDERLAY_INNER) |
| | | float4 texcoord1 : TEXCOORD3; // Texture UV, alpha, reserved |
| | | half2 underlayParam : TEXCOORD4; // Scale(x), Bias(y) |
| | | #endif |
| | | }; |
| | | |
| | | |
| | | pixel_t VertShader(vertex_t input) |
| | | { |
| | | pixel_t output; |
| | | |
| | | UNITY_INITIALIZE_OUTPUT(pixel_t, output); |
| | | UNITY_SETUP_INSTANCE_ID(input); |
| | | UNITY_TRANSFER_INSTANCE_ID(input, output); |
| | | UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); |
| | | |
| | | float bold = step(input.texcoord1.y, 0); |
| | | |
| | | float4 vert = input.vertex; |
| | | vert.x += _VertexOffsetX; |
| | | vert.y += _VertexOffsetY; |
| | | float4 vPosition = UnityObjectToClipPos(vert); |
| | | |
| | | float2 pixelSize = vPosition.w; |
| | | pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); |
| | | |
| | | float scale = rsqrt(dot(pixelSize, pixelSize)); |
| | | scale *= abs(input.texcoord1.y) * _GradientScale * (_Sharpness + 1); |
| | | if(UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); |
| | | |
| | | float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; |
| | | weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; |
| | | |
| | | float layerScale = scale; |
| | | |
| | | scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale); |
| | | float bias = (0.5 - weight) * scale - 0.5; |
| | | float outline = _OutlineWidth * _ScaleRatioA * 0.5 * scale; |
| | | |
| | | float opacity = input.color.a; |
| | | #if (UNDERLAY_ON | UNDERLAY_INNER) |
| | | opacity = 1.0; |
| | | #endif |
| | | |
| | | fixed4 faceColor = fixed4(input.color.rgb, opacity) * _FaceColor; |
| | | faceColor.rgb *= faceColor.a; |
| | | |
| | | fixed4 outlineColor = _OutlineColor; |
| | | outlineColor.a *= opacity; |
| | | outlineColor.rgb *= outlineColor.a; |
| | | outlineColor = lerp(faceColor, outlineColor, sqrt(min(1.0, (outline * 2)))); |
| | | |
| | | #if (UNDERLAY_ON | UNDERLAY_INNER) |
| | | layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale); |
| | | float layerBias = (.5 - weight) * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale); |
| | | |
| | | float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; |
| | | float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; |
| | | float2 layerOffset = float2(x, y); |
| | | #endif |
| | | |
| | | // Generate UV for the Masking Texture |
| | | float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); |
| | | float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); |
| | | |
| | | // Populate structure for pixel shader |
| | | output.vertex = vPosition; |
| | | output.faceColor = faceColor; |
| | | output.outlineColor = outlineColor; |
| | | output.texcoord0 = float4(input.texcoord0.x, input.texcoord0.y, maskUV.x, maskUV.y); |
| | | output.param = half4(scale, bias - outline, bias + outline, bias); |
| | | output.mask = half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)); |
| | | #if (UNDERLAY_ON || UNDERLAY_INNER) |
| | | output.texcoord1 = float4(input.texcoord0 + layerOffset, input.color.a, 0); |
| | | output.underlayParam = half2(layerScale, layerBias); |
| | | #endif |
| | | |
| | | return output; |
| | | } |
| | | |
| | | |
| | | // PIXEL SHADER |
| | | fixed4 PixShader(pixel_t input) : SV_Target |
| | | { |
| | | UNITY_SETUP_INSTANCE_ID(input); |
| | | |
| | | half d = tex2D(_MainTex, input.texcoord0.xy).a * input.param.x; |
| | | half4 c = input.faceColor * saturate(d - input.param.w); |
| | | |
| | | #ifdef OUTLINE_ON |
| | | c = lerp(input.outlineColor, input.faceColor, saturate(d - input.param.z)); |
| | | c *= saturate(d - input.param.y); |
| | | #endif |
| | | |
| | | #if UNDERLAY_ON |
| | | d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; |
| | | c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - input.underlayParam.y) * (1 - c.a); |
| | | #endif |
| | | |
| | | #if UNDERLAY_INNER |
| | | half sd = saturate(d - input.param.z); |
| | | d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; |
| | | c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - input.underlayParam.y)) * sd * (1 - c.a); |
| | | #endif |
| | | |
| | | // Alternative implementation to UnityGet2DClipping with support for softness. |
| | | #if UNITY_UI_CLIP_RECT |
| | | half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); |
| | | c *= m.x * m.y; |
| | | #endif |
| | | |
| | | #if (UNDERLAY_ON | UNDERLAY_INNER) |
| | | c *= input.texcoord1.z; |
| | | #endif |
| | | |
| | | #if UNITY_UI_ALPHACLIP |
| | | clip(c.a - 0.001); |
| | | #endif |
| | | |
| | | return c; |
| | | } |
| | | ENDCG |
| | | } |
| | | } |
| | | |
| | | CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: a02a7d8c237544f1962732b55a9aebf1 |
| | | ShaderImporter: |
| | | externalObjects: {} |
| | | defaultTextures: [] |
| | | nonModifiableTextures: [] |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | // Simplified SDF shader: |
| | | // - No Shading Option (bevel / bump / env map) |
| | | // - No Glow Option |
| | | // - Softness is applied on both side of the outline |
| | | |
| | | Shader "TextMeshPro/Mobile/Distance Field SSD" { |
| | | |
| | | Properties { |
| | | [HDR]_FaceColor ("Face Color", Color) = (1,1,1,1) |
| | | _FaceDilate ("Face Dilate", Range(-1,1)) = 0 |
| | | |
| | | [HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1) |
| | | _OutlineWidth ("Outline Thickness", Range(0,1)) = 0 |
| | | _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 |
| | | |
| | | [HDR]_UnderlayColor ("Border Color", Color) = (0,0,0,.5) |
| | | _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 |
| | | _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 |
| | | _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 |
| | | _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 |
| | | |
| | | _WeightNormal ("Weight Normal", float) = 0 |
| | | _WeightBold ("Weight Bold", float) = .5 |
| | | |
| | | _ShaderFlags ("Flags", float) = 0 |
| | | _ScaleRatioA ("Scale RatioA", float) = 1 |
| | | _ScaleRatioB ("Scale RatioB", float) = 1 |
| | | _ScaleRatioC ("Scale RatioC", float) = 1 |
| | | |
| | | _MainTex ("Font Atlas", 2D) = "white" {} |
| | | _TextureWidth ("Texture Width", float) = 512 |
| | | _TextureHeight ("Texture Height", float) = 512 |
| | | _GradientScale ("Gradient Scale", float) = 5 |
| | | _ScaleX ("Scale X", float) = 1 |
| | | _ScaleY ("Scale Y", float) = 1 |
| | | _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 |
| | | _Sharpness ("Sharpness", Range(-1,1)) = 0 |
| | | |
| | | _VertexOffsetX ("Vertex OffsetX", float) = 0 |
| | | _VertexOffsetY ("Vertex OffsetY", float) = 0 |
| | | |
| | | _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) |
| | | _MaskSoftnessX ("Mask SoftnessX", float) = 0 |
| | | _MaskSoftnessY ("Mask SoftnessY", float) = 0 |
| | | _MaskTex ("Mask Texture", 2D) = "white" {} |
| | | _MaskInverse ("Inverse", float) = 0 |
| | | _MaskEdgeColor ("Edge Color", Color) = (1,1,1,1) |
| | | _MaskEdgeSoftness ("Edge Softness", Range(0, 1)) = 0.01 |
| | | _MaskWipeControl ("Wipe Position", Range(0, 1)) = 0.5 |
| | | |
| | | _StencilComp ("Stencil Comparison", Float) = 8 |
| | | _Stencil ("Stencil ID", Float) = 0 |
| | | _StencilOp ("Stencil Operation", Float) = 0 |
| | | _StencilWriteMask ("Stencil Write Mask", Float) = 255 |
| | | _StencilReadMask ("Stencil Read Mask", Float) = 255 |
| | | |
| | | _CullMode ("Cull Mode", Float) = 0 |
| | | _ColorMask ("Color Mask", Float) = 15 |
| | | } |
| | | |
| | | SubShader { |
| | | Tags { |
| | | "Queue"="Transparent" |
| | | "IgnoreProjector"="True" |
| | | "RenderType"="Transparent" |
| | | } |
| | | |
| | | Stencil |
| | | { |
| | | Ref [_Stencil] |
| | | Comp [_StencilComp] |
| | | Pass [_StencilOp] |
| | | ReadMask [_StencilReadMask] |
| | | WriteMask [_StencilWriteMask] |
| | | } |
| | | |
| | | Cull [_CullMode] |
| | | ZWrite Off |
| | | Lighting Off |
| | | Fog { Mode Off } |
| | | ZTest [unity_GUIZTestMode] |
| | | Blend One OneMinusSrcAlpha |
| | | ColorMask [_ColorMask] |
| | | |
| | | Pass { |
| | | CGPROGRAM |
| | | #pragma vertex VertShader |
| | | #pragma fragment PixShader |
| | | #pragma shader_feature __ OUTLINE_ON |
| | | #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER |
| | | |
| | | #pragma multi_compile __ UNITY_UI_CLIP_RECT |
| | | #pragma multi_compile __ UNITY_UI_ALPHACLIP |
| | | |
| | | #include "UnityCG.cginc" |
| | | #include "UnityUI.cginc" |
| | | #include "TMPro_Properties.cginc" |
| | | |
| | | #include "TMPro_Mobile.cginc" |
| | | |
| | | ENDCG |
| | | } |
| | | } |
| | | |
| | | CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: c8d12adcee749c344b8117cf7c7eb912 |
| | | ShaderImporter: |
| | | externalObjects: {} |
| | | defaultTextures: [] |
| | | nonModifiableTextures: [] |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | // Simplified SDF shader: |
| | | // - No Shading Option (bevel / bump / env map) |
| | | // - No Glow Option |
| | | // - Softness is applied on both side of the outline |
| | | |
| | | Shader "TextMeshPro/Mobile/Distance Field" { |
| | | |
| | | Properties { |
| | | [HDR]_FaceColor ("Face Color", Color) = (1,1,1,1) |
| | | _FaceDilate ("Face Dilate", Range(-1,1)) = 0 |
| | | |
| | | [HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1) |
| | | _OutlineWidth ("Outline Thickness", Range(0,1)) = 0 |
| | | _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 |
| | | |
| | | [HDR]_UnderlayColor ("Border Color", Color) = (0,0,0,.5) |
| | | _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 |
| | | _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 |
| | | _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 |
| | | _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 |
| | | |
| | | _WeightNormal ("Weight Normal", float) = 0 |
| | | _WeightBold ("Weight Bold", float) = .5 |
| | | |
| | | _ShaderFlags ("Flags", float) = 0 |
| | | _ScaleRatioA ("Scale RatioA", float) = 1 |
| | | _ScaleRatioB ("Scale RatioB", float) = 1 |
| | | _ScaleRatioC ("Scale RatioC", float) = 1 |
| | | |
| | | _MainTex ("Font Atlas", 2D) = "white" {} |
| | | _TextureWidth ("Texture Width", float) = 512 |
| | | _TextureHeight ("Texture Height", float) = 512 |
| | | _GradientScale ("Gradient Scale", float) = 5 |
| | | _ScaleX ("Scale X", float) = 1 |
| | | _ScaleY ("Scale Y", float) = 1 |
| | | _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 |
| | | _Sharpness ("Sharpness", Range(-1,1)) = 0 |
| | | |
| | | _VertexOffsetX ("Vertex OffsetX", float) = 0 |
| | | _VertexOffsetY ("Vertex OffsetY", float) = 0 |
| | | |
| | | _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) |
| | | _MaskSoftnessX ("Mask SoftnessX", float) = 0 |
| | | _MaskSoftnessY ("Mask SoftnessY", float) = 0 |
| | | |
| | | _StencilComp ("Stencil Comparison", Float) = 8 |
| | | _Stencil ("Stencil ID", Float) = 0 |
| | | _StencilOp ("Stencil Operation", Float) = 0 |
| | | _StencilWriteMask ("Stencil Write Mask", Float) = 255 |
| | | _StencilReadMask ("Stencil Read Mask", Float) = 255 |
| | | |
| | | _CullMode ("Cull Mode", Float) = 0 |
| | | _ColorMask ("Color Mask", Float) = 15 |
| | | } |
| | | |
| | | SubShader { |
| | | Tags |
| | | { |
| | | "Queue"="Transparent" |
| | | "IgnoreProjector"="True" |
| | | "RenderType"="Transparent" |
| | | } |
| | | |
| | | |
| | | Stencil |
| | | { |
| | | Ref [_Stencil] |
| | | Comp [_StencilComp] |
| | | Pass [_StencilOp] |
| | | ReadMask [_StencilReadMask] |
| | | WriteMask [_StencilWriteMask] |
| | | } |
| | | |
| | | Cull [_CullMode] |
| | | ZWrite Off |
| | | Lighting Off |
| | | Fog { Mode Off } |
| | | ZTest [unity_GUIZTestMode] |
| | | Blend One OneMinusSrcAlpha |
| | | ColorMask [_ColorMask] |
| | | |
| | | Pass { |
| | | CGPROGRAM |
| | | #pragma vertex VertShader |
| | | #pragma fragment PixShader |
| | | #pragma shader_feature __ OUTLINE_ON |
| | | #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER |
| | | |
| | | #pragma multi_compile __ UNITY_UI_CLIP_RECT |
| | | #pragma multi_compile __ UNITY_UI_ALPHACLIP |
| | | |
| | | #include "UnityCG.cginc" |
| | | #include "UnityUI.cginc" |
| | | #include "TMPro_Properties.cginc" |
| | | |
| | | struct vertex_t { |
| | | UNITY_VERTEX_INPUT_INSTANCE_ID |
| | | float4 vertex : POSITION; |
| | | float3 normal : NORMAL; |
| | | fixed4 color : COLOR; |
| | | float2 texcoord0 : TEXCOORD0; |
| | | float2 texcoord1 : TEXCOORD1; |
| | | }; |
| | | |
| | | struct pixel_t { |
| | | UNITY_VERTEX_INPUT_INSTANCE_ID |
| | | UNITY_VERTEX_OUTPUT_STEREO |
| | | float4 vertex : SV_POSITION; |
| | | fixed4 faceColor : COLOR; |
| | | fixed4 outlineColor : COLOR1; |
| | | float4 texcoord0 : TEXCOORD0; // Texture UV, Mask UV |
| | | half4 param : TEXCOORD1; // Scale(x), BiasIn(y), BiasOut(z), Bias(w) |
| | | half4 mask : TEXCOORD2; // Position in clip space(xy), Softness(zw) |
| | | #if (UNDERLAY_ON | UNDERLAY_INNER) |
| | | float4 texcoord1 : TEXCOORD3; // Texture UV, alpha, reserved |
| | | half2 underlayParam : TEXCOORD4; // Scale(x), Bias(y) |
| | | #endif |
| | | }; |
| | | |
| | | |
| | | pixel_t VertShader(vertex_t input) |
| | | { |
| | | pixel_t output; |
| | | |
| | | UNITY_INITIALIZE_OUTPUT(pixel_t, output); |
| | | UNITY_SETUP_INSTANCE_ID(input); |
| | | UNITY_TRANSFER_INSTANCE_ID(input, output); |
| | | UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); |
| | | |
| | | float bold = step(input.texcoord1.y, 0); |
| | | |
| | | float4 vert = input.vertex; |
| | | vert.x += _VertexOffsetX; |
| | | vert.y += _VertexOffsetY; |
| | | float4 vPosition = UnityObjectToClipPos(vert); |
| | | |
| | | float2 pixelSize = vPosition.w; |
| | | pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); |
| | | |
| | | float scale = rsqrt(dot(pixelSize, pixelSize)); |
| | | scale *= abs(input.texcoord1.y) * _GradientScale * (_Sharpness + 1); |
| | | if(UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); |
| | | |
| | | float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; |
| | | weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; |
| | | |
| | | float layerScale = scale; |
| | | |
| | | scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale); |
| | | float bias = (0.5 - weight) * scale - 0.5; |
| | | float outline = _OutlineWidth * _ScaleRatioA * 0.5 * scale; |
| | | |
| | | float opacity = input.color.a; |
| | | #if (UNDERLAY_ON | UNDERLAY_INNER) |
| | | opacity = 1.0; |
| | | #endif |
| | | |
| | | fixed4 faceColor = fixed4(input.color.rgb, opacity) * _FaceColor; |
| | | faceColor.rgb *= faceColor.a; |
| | | |
| | | fixed4 outlineColor = _OutlineColor; |
| | | outlineColor.a *= opacity; |
| | | outlineColor.rgb *= outlineColor.a; |
| | | outlineColor = lerp(faceColor, outlineColor, sqrt(min(1.0, (outline * 2)))); |
| | | |
| | | #if (UNDERLAY_ON | UNDERLAY_INNER) |
| | | layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale); |
| | | float layerBias = (.5 - weight) * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale); |
| | | |
| | | float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; |
| | | float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; |
| | | float2 layerOffset = float2(x, y); |
| | | #endif |
| | | |
| | | // Generate UV for the Masking Texture |
| | | float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); |
| | | float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); |
| | | |
| | | // Populate structure for pixel shader |
| | | output.vertex = vPosition; |
| | | output.faceColor = faceColor; |
| | | output.outlineColor = outlineColor; |
| | | output.texcoord0 = float4(input.texcoord0.x, input.texcoord0.y, maskUV.x, maskUV.y); |
| | | output.param = half4(scale, bias - outline, bias + outline, bias); |
| | | output.mask = half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)); |
| | | #if (UNDERLAY_ON || UNDERLAY_INNER) |
| | | output.texcoord1 = float4(input.texcoord0 + layerOffset, input.color.a, 0); |
| | | output.underlayParam = half2(layerScale, layerBias); |
| | | #endif |
| | | |
| | | return output; |
| | | } |
| | | |
| | | |
| | | // PIXEL SHADER |
| | | fixed4 PixShader(pixel_t input) : SV_Target |
| | | { |
| | | UNITY_SETUP_INSTANCE_ID(input); |
| | | |
| | | half d = tex2D(_MainTex, input.texcoord0.xy).a * input.param.x; |
| | | half4 c = input.faceColor * saturate(d - input.param.w); |
| | | |
| | | #ifdef OUTLINE_ON |
| | | c = lerp(input.outlineColor, input.faceColor, saturate(d - input.param.z)); |
| | | c *= saturate(d - input.param.y); |
| | | #endif |
| | | |
| | | #if UNDERLAY_ON |
| | | d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; |
| | | c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - input.underlayParam.y) * (1 - c.a); |
| | | #endif |
| | | |
| | | #if UNDERLAY_INNER |
| | | half sd = saturate(d - input.param.z); |
| | | d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; |
| | | c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - input.underlayParam.y)) * sd * (1 - c.a); |
| | | #endif |
| | | |
| | | // Alternative implementation to UnityGet2DClipping with support for softness. |
| | | #if UNITY_UI_CLIP_RECT |
| | | half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); |
| | | c *= m.x * m.y; |
| | | #endif |
| | | |
| | | #if (UNDERLAY_ON | UNDERLAY_INNER) |
| | | c *= input.texcoord1.z; |
| | | #endif |
| | | |
| | | #if UNITY_UI_ALPHACLIP |
| | | clip(c.a - 0.001); |
| | | #endif |
| | | |
| | | return c; |
| | | } |
| | | ENDCG |
| | | } |
| | | } |
| | | |
| | | CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: fe393ace9b354375a9cb14cdbbc28be4 |
| | | ShaderImporter: |
| | | externalObjects: {} |
| | | defaultTextures: [] |
| | | nonModifiableTextures: [] |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | // Simplified version of the SDF Surface shader : |
| | | // - No support for Bevel, Bump or envmap |
| | | // - Diffuse only lighting |
| | | // - Fully supports only 1 directional light. Other lights can affect it, but it will be per-vertex/SH. |
| | | |
| | | Shader "TextMeshPro/Mobile/Distance Field (Surface)" { |
| | | |
| | | Properties { |
| | | _FaceTex ("Fill Texture", 2D) = "white" {} |
| | | [HDR]_FaceColor ("Fill Color", Color) = (1,1,1,1) |
| | | _FaceDilate ("Face Dilate", Range(-1,1)) = 0 |
| | | |
| | | [HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1) |
| | | _OutlineTex ("Outline Texture", 2D) = "white" {} |
| | | _OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 |
| | | _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 |
| | | |
| | | [HDR]_GlowColor ("Color", Color) = (0, 1, 0, 0.5) |
| | | _GlowOffset ("Offset", Range(-1,1)) = 0 |
| | | _GlowInner ("Inner", Range(0,1)) = 0.05 |
| | | _GlowOuter ("Outer", Range(0,1)) = 0.05 |
| | | _GlowPower ("Falloff", Range(1, 0)) = 0.75 |
| | | |
| | | _WeightNormal ("Weight Normal", float) = 0 |
| | | _WeightBold ("Weight Bold", float) = 0.5 |
| | | |
| | | // Should not be directly exposed to the user |
| | | _ShaderFlags ("Flags", float) = 0 |
| | | _ScaleRatioA ("Scale RatioA", float) = 1 |
| | | _ScaleRatioB ("Scale RatioB", float) = 1 |
| | | _ScaleRatioC ("Scale RatioC", float) = 1 |
| | | |
| | | _MainTex ("Font Atlas", 2D) = "white" {} |
| | | _TextureWidth ("Texture Width", float) = 512 |
| | | _TextureHeight ("Texture Height", float) = 512 |
| | | _GradientScale ("Gradient Scale", float) = 5.0 |
| | | _ScaleX ("Scale X", float) = 1.0 |
| | | _ScaleY ("Scale Y", float) = 1.0 |
| | | _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 |
| | | _Sharpness ("Sharpness", Range(-1,1)) = 0 |
| | | |
| | | _VertexOffsetX ("Vertex OffsetX", float) = 0 |
| | | _VertexOffsetY ("Vertex OffsetY", float) = 0 |
| | | |
| | | _CullMode ("Cull Mode", Float) = 0 |
| | | //_MaskCoord ("Mask Coords", vector) = (0,0,0,0) |
| | | //_MaskSoftness ("Mask Softness", float) = 0 |
| | | } |
| | | |
| | | SubShader { |
| | | |
| | | Tags { |
| | | "Queue"="Transparent" |
| | | "IgnoreProjector"="True" |
| | | "RenderType"="Transparent" |
| | | } |
| | | |
| | | LOD 300 |
| | | Cull [_CullMode] |
| | | |
| | | CGPROGRAM |
| | | #pragma surface PixShader Lambert alpha:blend vertex:VertShader noforwardadd nolightmap nodirlightmap |
| | | #pragma target 3.0 |
| | | #pragma shader_feature __ GLOW_ON |
| | | |
| | | #include "TMPro_Properties.cginc" |
| | | #include "TMPro.cginc" |
| | | |
| | | half _FaceShininess; |
| | | half _OutlineShininess; |
| | | |
| | | struct Input |
| | | { |
| | | fixed4 color : COLOR; |
| | | float2 uv_MainTex; |
| | | float2 uv2_FaceTex; |
| | | float2 uv2_OutlineTex; |
| | | float2 param; // Weight, Scale |
| | | float3 viewDirEnv; |
| | | }; |
| | | |
| | | #include "TMPro_Surface.cginc" |
| | | |
| | | ENDCG |
| | | |
| | | // Pass to render object as a shadow caster |
| | | Pass |
| | | { |
| | | Name "Caster" |
| | | Tags { "LightMode" = "ShadowCaster" } |
| | | Offset 1, 1 |
| | | |
| | | Fog {Mode Off} |
| | | ZWrite On ZTest LEqual Cull Off |
| | | |
| | | CGPROGRAM |
| | | #pragma vertex vert |
| | | #pragma fragment frag |
| | | #pragma multi_compile_shadowcaster |
| | | #include "UnityCG.cginc" |
| | | |
| | | struct v2f { |
| | | V2F_SHADOW_CASTER; |
| | | float2 uv : TEXCOORD1; |
| | | float2 uv2 : TEXCOORD3; |
| | | float alphaClip : TEXCOORD2; |
| | | }; |
| | | |
| | | uniform float4 _MainTex_ST; |
| | | uniform float4 _OutlineTex_ST; |
| | | float _OutlineWidth; |
| | | float _FaceDilate; |
| | | float _ScaleRatioA; |
| | | |
| | | v2f vert( appdata_base v ) |
| | | { |
| | | v2f o; |
| | | TRANSFER_SHADOW_CASTER(o) |
| | | o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); |
| | | o.uv2 = TRANSFORM_TEX(v.texcoord, _OutlineTex); |
| | | o.alphaClip = o.alphaClip = (1.0 - _OutlineWidth * _ScaleRatioA - _FaceDilate * _ScaleRatioA) / 2; |
| | | return o; |
| | | } |
| | | |
| | | uniform sampler2D _MainTex; |
| | | |
| | | float4 frag(v2f i) : COLOR |
| | | { |
| | | fixed4 texcol = tex2D(_MainTex, i.uv).a; |
| | | clip(texcol.a - i.alphaClip); |
| | | SHADOW_CASTER_FRAGMENT(i) |
| | | } |
| | | ENDCG |
| | | } |
| | | } |
| | | |
| | | CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 85187c2149c549c5b33f0cdb02836b17 |
| | | ShaderImporter: |
| | | externalObjects: {} |
| | | defaultTextures: [] |
| | | nonModifiableTextures: [] |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | Shader "TextMeshPro/Distance Field (Surface)" { |
| | | |
| | | Properties { |
| | | _FaceTex ("Fill Texture", 2D) = "white" {} |
| | | _FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0 |
| | | _FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0 |
| | | [HDR]_FaceColor ("Fill Color", Color) = (1,1,1,1) |
| | | _FaceDilate ("Face Dilate", Range(-1,1)) = 0 |
| | | |
| | | [HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1) |
| | | _OutlineTex ("Outline Texture", 2D) = "white" {} |
| | | _OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0 |
| | | _OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0 |
| | | _OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 |
| | | _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 |
| | | |
| | | _Bevel ("Bevel", Range(0,1)) = 0.5 |
| | | _BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0 |
| | | _BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0 |
| | | _BevelClamp ("Bevel Clamp", Range(0,1)) = 0 |
| | | _BevelRoundness ("Bevel Roundness", Range(0,1)) = 0 |
| | | |
| | | _BumpMap ("Normalmap", 2D) = "bump" {} |
| | | _BumpOutline ("Bump Outline", Range(0,1)) = 0.5 |
| | | _BumpFace ("Bump Face", Range(0,1)) = 0.5 |
| | | |
| | | _ReflectFaceColor ("Face Color", Color) = (0,0,0,1) |
| | | _ReflectOutlineColor ("Outline Color", Color) = (0,0,0,1) |
| | | _Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ } |
| | | _EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0) |
| | | [HDR]_SpecColor ("Specular Color", Color) = (0,0,0,1) |
| | | |
| | | _FaceShininess ("Face Shininess", Range(0,1)) = 0 |
| | | _OutlineShininess ("Outline Shininess", Range(0,1)) = 0 |
| | | |
| | | [HDR]_GlowColor ("Color", Color) = (0, 1, 0, 0.5) |
| | | _GlowOffset ("Offset", Range(-1,1)) = 0 |
| | | _GlowInner ("Inner", Range(0,1)) = 0.05 |
| | | _GlowOuter ("Outer", Range(0,1)) = 0.05 |
| | | _GlowPower ("Falloff", Range(1, 0)) = 0.75 |
| | | |
| | | _WeightNormal ("Weight Normal", float) = 0 |
| | | _WeightBold ("Weight Bold", float) = 0.5 |
| | | |
| | | // Should not be directly exposed to the user |
| | | _ShaderFlags ("Flags", float) = 0 |
| | | _ScaleRatioA ("Scale RatioA", float) = 1 |
| | | _ScaleRatioB ("Scale RatioB", float) = 1 |
| | | _ScaleRatioC ("Scale RatioC", float) = 1 |
| | | |
| | | _MainTex ("Font Atlas", 2D) = "white" {} |
| | | _TextureWidth ("Texture Width", float) = 512 |
| | | _TextureHeight ("Texture Height", float) = 512 |
| | | _GradientScale ("Gradient Scale", float) = 5.0 |
| | | _ScaleX ("Scale X", float) = 1.0 |
| | | _ScaleY ("Scale Y", float) = 1.0 |
| | | _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 |
| | | _Sharpness ("Sharpness", Range(-1,1)) = 0 |
| | | |
| | | _VertexOffsetX ("Vertex OffsetX", float) = 0 |
| | | _VertexOffsetY ("Vertex OffsetY", float) = 0 |
| | | |
| | | _CullMode ("Cull Mode", Float) = 0 |
| | | //_MaskCoord ("Mask Coords", vector) = (0,0,0,0) |
| | | //_MaskSoftness ("Mask Softness", float) = 0 |
| | | } |
| | | |
| | | SubShader { |
| | | |
| | | Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } |
| | | |
| | | LOD 300 |
| | | Cull [_CullMode] |
| | | |
| | | CGPROGRAM |
| | | #pragma surface PixShader BlinnPhong alpha:blend vertex:VertShader nolightmap nodirlightmap |
| | | #pragma target 3.0 |
| | | #pragma shader_feature __ GLOW_ON |
| | | #pragma glsl |
| | | |
| | | #include "TMPro_Properties.cginc" |
| | | #include "TMPro.cginc" |
| | | |
| | | half _FaceShininess; |
| | | half _OutlineShininess; |
| | | |
| | | struct Input |
| | | { |
| | | fixed4 color : COLOR; |
| | | float2 uv_MainTex; |
| | | float2 uv2_FaceTex; |
| | | float2 uv2_OutlineTex; |
| | | float2 param; // Weight, Scale |
| | | float3 viewDirEnv; |
| | | }; |
| | | |
| | | |
| | | #define BEVEL_ON 1 |
| | | #include "TMPro_Surface.cginc" |
| | | |
| | | ENDCG |
| | | |
| | | // Pass to render object as a shadow caster |
| | | Pass |
| | | { |
| | | Name "Caster" |
| | | Tags { "LightMode" = "ShadowCaster" } |
| | | Offset 1, 1 |
| | | |
| | | Fog {Mode Off} |
| | | ZWrite On |
| | | ZTest LEqual |
| | | Cull Off |
| | | |
| | | CGPROGRAM |
| | | #pragma vertex vert |
| | | #pragma fragment frag |
| | | #pragma multi_compile_shadowcaster |
| | | #include "UnityCG.cginc" |
| | | |
| | | struct v2f { |
| | | V2F_SHADOW_CASTER; |
| | | float2 uv : TEXCOORD1; |
| | | float2 uv2 : TEXCOORD3; |
| | | float alphaClip : TEXCOORD2; |
| | | }; |
| | | |
| | | uniform float4 _MainTex_ST; |
| | | uniform float4 _OutlineTex_ST; |
| | | float _OutlineWidth; |
| | | float _FaceDilate; |
| | | float _ScaleRatioA; |
| | | |
| | | v2f vert( appdata_base v ) |
| | | { |
| | | v2f o; |
| | | TRANSFER_SHADOW_CASTER(o) |
| | | o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); |
| | | o.uv2 = TRANSFORM_TEX(v.texcoord, _OutlineTex); |
| | | o.alphaClip = (1.0 - _OutlineWidth * _ScaleRatioA - _FaceDilate * _ScaleRatioA) / 2; |
| | | return o; |
| | | } |
| | | |
| | | uniform sampler2D _MainTex; |
| | | |
| | | float4 frag(v2f i) : COLOR |
| | | { |
| | | fixed4 texcol = tex2D(_MainTex, i.uv).a; |
| | | clip(texcol.a - i.alphaClip); |
| | | SHADOW_CASTER_FRAGMENT(i) |
| | | } |
| | | ENDCG |
| | | } |
| | | } |
| | | |
| | | CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" |
| | | } |
| | | |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: f7ada0af4f174f0694ca6a487b8f543d |
| | | ShaderImporter: |
| | | externalObjects: {} |
| | | defaultTextures: [] |
| | | nonModifiableTextures: [] |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | Shader "TextMeshPro/Distance Field" { |
| | | |
| | | Properties { |
| | | _FaceTex ("Face Texture", 2D) = "white" {} |
| | | _FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0 |
| | | _FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0 |
| | | [HDR]_FaceColor ("Face Color", Color) = (1,1,1,1) |
| | | _FaceDilate ("Face Dilate", Range(-1,1)) = 0 |
| | | |
| | | [HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1) |
| | | _OutlineTex ("Outline Texture", 2D) = "white" {} |
| | | _OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0 |
| | | _OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0 |
| | | _OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 |
| | | _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 |
| | | |
| | | _Bevel ("Bevel", Range(0,1)) = 0.5 |
| | | _BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0 |
| | | _BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0 |
| | | _BevelClamp ("Bevel Clamp", Range(0,1)) = 0 |
| | | _BevelRoundness ("Bevel Roundness", Range(0,1)) = 0 |
| | | |
| | | _LightAngle ("Light Angle", Range(0.0, 6.2831853)) = 3.1416 |
| | | [HDR]_SpecularColor ("Specular", Color) = (1,1,1,1) |
| | | _SpecularPower ("Specular", Range(0,4)) = 2.0 |
| | | _Reflectivity ("Reflectivity", Range(5.0,15.0)) = 10 |
| | | _Diffuse ("Diffuse", Range(0,1)) = 0.5 |
| | | _Ambient ("Ambient", Range(1,0)) = 0.5 |
| | | |
| | | _BumpMap ("Normal map", 2D) = "bump" {} |
| | | _BumpOutline ("Bump Outline", Range(0,1)) = 0 |
| | | _BumpFace ("Bump Face", Range(0,1)) = 0 |
| | | |
| | | _ReflectFaceColor ("Reflection Color", Color) = (0,0,0,1) |
| | | _ReflectOutlineColor("Reflection Color", Color) = (0,0,0,1) |
| | | _Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ } |
| | | _EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0) |
| | | |
| | | |
| | | [HDR]_UnderlayColor ("Border Color", Color) = (0,0,0, 0.5) |
| | | _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 |
| | | _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 |
| | | _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 |
| | | _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 |
| | | |
| | | [HDR]_GlowColor ("Color", Color) = (0, 1, 0, 0.5) |
| | | _GlowOffset ("Offset", Range(-1,1)) = 0 |
| | | _GlowInner ("Inner", Range(0,1)) = 0.05 |
| | | _GlowOuter ("Outer", Range(0,1)) = 0.05 |
| | | _GlowPower ("Falloff", Range(1, 0)) = 0.75 |
| | | |
| | | _WeightNormal ("Weight Normal", float) = 0 |
| | | _WeightBold ("Weight Bold", float) = 0.5 |
| | | |
| | | _ShaderFlags ("Flags", float) = 0 |
| | | _ScaleRatioA ("Scale RatioA", float) = 1 |
| | | _ScaleRatioB ("Scale RatioB", float) = 1 |
| | | _ScaleRatioC ("Scale RatioC", float) = 1 |
| | | |
| | | _MainTex ("Font Atlas", 2D) = "white" {} |
| | | _TextureWidth ("Texture Width", float) = 512 |
| | | _TextureHeight ("Texture Height", float) = 512 |
| | | _GradientScale ("Gradient Scale", float) = 5.0 |
| | | _ScaleX ("Scale X", float) = 1.0 |
| | | _ScaleY ("Scale Y", float) = 1.0 |
| | | _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 |
| | | _Sharpness ("Sharpness", Range(-1,1)) = 0 |
| | | |
| | | _VertexOffsetX ("Vertex OffsetX", float) = 0 |
| | | _VertexOffsetY ("Vertex OffsetY", float) = 0 |
| | | |
| | | _MaskCoord ("Mask Coordinates", vector) = (0, 0, 32767, 32767) |
| | | _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) |
| | | _MaskSoftnessX ("Mask SoftnessX", float) = 0 |
| | | _MaskSoftnessY ("Mask SoftnessY", float) = 0 |
| | | |
| | | _StencilComp ("Stencil Comparison", Float) = 8 |
| | | _Stencil ("Stencil ID", Float) = 0 |
| | | _StencilOp ("Stencil Operation", Float) = 0 |
| | | _StencilWriteMask ("Stencil Write Mask", Float) = 255 |
| | | _StencilReadMask ("Stencil Read Mask", Float) = 255 |
| | | |
| | | _CullMode ("Cull Mode", Float) = 0 |
| | | _ColorMask ("Color Mask", Float) = 15 |
| | | } |
| | | |
| | | SubShader { |
| | | |
| | | Tags |
| | | { |
| | | "Queue"="Transparent" |
| | | "IgnoreProjector"="True" |
| | | "RenderType"="Transparent" |
| | | } |
| | | |
| | | Stencil |
| | | { |
| | | Ref [_Stencil] |
| | | Comp [_StencilComp] |
| | | Pass [_StencilOp] |
| | | ReadMask [_StencilReadMask] |
| | | WriteMask [_StencilWriteMask] |
| | | } |
| | | |
| | | Cull [_CullMode] |
| | | ZWrite Off |
| | | Lighting Off |
| | | Fog { Mode Off } |
| | | ZTest [unity_GUIZTestMode] |
| | | Blend One OneMinusSrcAlpha |
| | | ColorMask [_ColorMask] |
| | | |
| | | Pass { |
| | | CGPROGRAM |
| | | #pragma target 3.0 |
| | | #pragma vertex VertShader |
| | | #pragma fragment PixShader |
| | | #pragma shader_feature __ BEVEL_ON |
| | | #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER |
| | | #pragma shader_feature __ GLOW_ON |
| | | |
| | | #pragma multi_compile __ UNITY_UI_CLIP_RECT |
| | | #pragma multi_compile __ UNITY_UI_ALPHACLIP |
| | | |
| | | #include "UnityCG.cginc" |
| | | #include "UnityUI.cginc" |
| | | #include "TMPro_Properties.cginc" |
| | | #include "TMPro.cginc" |
| | | |
| | | struct vertex_t { |
| | | UNITY_VERTEX_INPUT_INSTANCE_ID |
| | | float4 position : POSITION; |
| | | float3 normal : NORMAL; |
| | | fixed4 color : COLOR; |
| | | float2 texcoord0 : TEXCOORD0; |
| | | float2 texcoord1 : TEXCOORD1; |
| | | }; |
| | | |
| | | |
| | | struct pixel_t { |
| | | UNITY_VERTEX_INPUT_INSTANCE_ID |
| | | UNITY_VERTEX_OUTPUT_STEREO |
| | | float4 position : SV_POSITION; |
| | | fixed4 color : COLOR; |
| | | float2 atlas : TEXCOORD0; // Atlas |
| | | float4 param : TEXCOORD1; // alphaClip, scale, bias, weight |
| | | float4 mask : TEXCOORD2; // Position in object space(xy), pixel Size(zw) |
| | | float3 viewDir : TEXCOORD3; |
| | | |
| | | #if (UNDERLAY_ON || UNDERLAY_INNER) |
| | | float4 texcoord2 : TEXCOORD4; // u,v, scale, bias |
| | | fixed4 underlayColor : COLOR1; |
| | | #endif |
| | | float4 textures : TEXCOORD5; |
| | | }; |
| | | |
| | | // Used by Unity internally to handle Texture Tiling and Offset. |
| | | float4 _FaceTex_ST; |
| | | float4 _OutlineTex_ST; |
| | | |
| | | pixel_t VertShader(vertex_t input) |
| | | { |
| | | pixel_t output; |
| | | |
| | | UNITY_INITIALIZE_OUTPUT(pixel_t, output); |
| | | UNITY_SETUP_INSTANCE_ID(input); |
| | | UNITY_TRANSFER_INSTANCE_ID(input,output); |
| | | UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); |
| | | |
| | | float bold = step(input.texcoord1.y, 0); |
| | | |
| | | float4 vert = input.position; |
| | | vert.x += _VertexOffsetX; |
| | | vert.y += _VertexOffsetY; |
| | | |
| | | float4 vPosition = UnityObjectToClipPos(vert); |
| | | |
| | | float2 pixelSize = vPosition.w; |
| | | pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); |
| | | float scale = rsqrt(dot(pixelSize, pixelSize)); |
| | | scale *= abs(input.texcoord1.y) * _GradientScale * (_Sharpness + 1); |
| | | if (UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); |
| | | |
| | | float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; |
| | | weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; |
| | | |
| | | float bias =(.5 - weight) + (.5 / scale); |
| | | |
| | | float alphaClip = (1.0 - _OutlineWidth * _ScaleRatioA - _OutlineSoftness * _ScaleRatioA); |
| | | |
| | | #if GLOW_ON |
| | | alphaClip = min(alphaClip, 1.0 - _GlowOffset * _ScaleRatioB - _GlowOuter * _ScaleRatioB); |
| | | #endif |
| | | |
| | | alphaClip = alphaClip / 2.0 - ( .5 / scale) - weight; |
| | | |
| | | #if (UNDERLAY_ON || UNDERLAY_INNER) |
| | | float4 underlayColor = _UnderlayColor; |
| | | underlayColor.rgb *= underlayColor.a; |
| | | |
| | | float bScale = scale; |
| | | bScale /= 1 + ((_UnderlaySoftness*_ScaleRatioC) * bScale); |
| | | float bBias = (0.5 - weight) * bScale - 0.5 - ((_UnderlayDilate * _ScaleRatioC) * 0.5 * bScale); |
| | | |
| | | float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; |
| | | float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; |
| | | float2 bOffset = float2(x, y); |
| | | #endif |
| | | |
| | | // Generate UV for the Masking Texture |
| | | float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); |
| | | float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); |
| | | |
| | | // Support for texture tiling and offset |
| | | float2 textureUV = UnpackUV(input.texcoord1.x); |
| | | float2 faceUV = TRANSFORM_TEX(textureUV, _FaceTex); |
| | | float2 outlineUV = TRANSFORM_TEX(textureUV, _OutlineTex); |
| | | |
| | | |
| | | output.position = vPosition; |
| | | output.color = input.color; |
| | | output.atlas = input.texcoord0; |
| | | output.param = float4(alphaClip, scale, bias, weight); |
| | | output.mask = half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)); |
| | | output.viewDir = mul((float3x3)_EnvMatrix, _WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, vert).xyz); |
| | | #if (UNDERLAY_ON || UNDERLAY_INNER) |
| | | output.texcoord2 = float4(input.texcoord0 + bOffset, bScale, bBias); |
| | | output.underlayColor = underlayColor; |
| | | #endif |
| | | output.textures = float4(faceUV, outlineUV); |
| | | |
| | | return output; |
| | | } |
| | | |
| | | |
| | | fixed4 PixShader(pixel_t input) : SV_Target |
| | | { |
| | | UNITY_SETUP_INSTANCE_ID(input); |
| | | |
| | | float c = tex2D(_MainTex, input.atlas).a; |
| | | |
| | | #ifndef UNDERLAY_ON |
| | | clip(c - input.param.x); |
| | | #endif |
| | | |
| | | float scale = input.param.y; |
| | | float bias = input.param.z; |
| | | float weight = input.param.w; |
| | | float sd = (bias - c) * scale; |
| | | |
| | | float outline = (_OutlineWidth * _ScaleRatioA) * scale; |
| | | float softness = (_OutlineSoftness * _ScaleRatioA) * scale; |
| | | |
| | | half4 faceColor = _FaceColor; |
| | | half4 outlineColor = _OutlineColor; |
| | | |
| | | faceColor.rgb *= input.color.rgb; |
| | | |
| | | faceColor *= tex2D(_FaceTex, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y); |
| | | outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y); |
| | | |
| | | faceColor = GetColor(sd, faceColor, outlineColor, outline, softness); |
| | | |
| | | #if BEVEL_ON |
| | | float3 dxy = float3(0.5 / _TextureWidth, 0.5 / _TextureHeight, 0); |
| | | float3 n = GetSurfaceNormal(input.atlas, weight, dxy); |
| | | |
| | | float3 bump = UnpackNormal(tex2D(_BumpMap, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y)).xyz; |
| | | bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5)); |
| | | n = normalize(n- bump); |
| | | |
| | | float3 light = normalize(float3(sin(_LightAngle), cos(_LightAngle), -1.0)); |
| | | |
| | | float3 col = GetSpecular(n, light); |
| | | faceColor.rgb += col*faceColor.a; |
| | | faceColor.rgb *= 1-(dot(n, light)*_Diffuse); |
| | | faceColor.rgb *= lerp(_Ambient, 1, n.z*n.z); |
| | | |
| | | fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDir, -n)); |
| | | faceColor.rgb += reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a; |
| | | #endif |
| | | |
| | | #if UNDERLAY_ON |
| | | float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; |
| | | faceColor += input.underlayColor * saturate(d - input.texcoord2.w) * (1 - faceColor.a); |
| | | #endif |
| | | |
| | | #if UNDERLAY_INNER |
| | | float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; |
| | | faceColor += input.underlayColor * (1 - saturate(d - input.texcoord2.w)) * saturate(1 - sd) * (1 - faceColor.a); |
| | | #endif |
| | | |
| | | #if GLOW_ON |
| | | float4 glowColor = GetGlowColor(sd, scale); |
| | | faceColor.rgb += glowColor.rgb * glowColor.a; |
| | | #endif |
| | | |
| | | // Alternative implementation to UnityGet2DClipping with support for softness. |
| | | #if UNITY_UI_CLIP_RECT |
| | | half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); |
| | | faceColor *= m.x * m.y; |
| | | #endif |
| | | |
| | | #if UNITY_UI_ALPHACLIP |
| | | clip(faceColor.a - 0.001); |
| | | #endif |
| | | |
| | | return faceColor * input.color.a; |
| | | } |
| | | |
| | | ENDCG |
| | | } |
| | | } |
| | | |
| | | Fallback "TextMeshPro/Mobile/Distance Field" |
| | | CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 68e6db2ebdc24f95958faec2be5558d6 |
| | | ShaderImporter: |
| | | externalObjects: {} |
| | | defaultTextures: [] |
| | | nonModifiableTextures: [] |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | Shader "TextMeshPro/Sprite" |
| | | { |
| | | Properties |
| | | { |
| | | [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {} |
| | | _Color ("Tint", Color) = (1,1,1,1) |
| | | |
| | | _StencilComp ("Stencil Comparison", Float) = 8 |
| | | _Stencil ("Stencil ID", Float) = 0 |
| | | _StencilOp ("Stencil Operation", Float) = 0 |
| | | _StencilWriteMask ("Stencil Write Mask", Float) = 255 |
| | | _StencilReadMask ("Stencil Read Mask", Float) = 255 |
| | | |
| | | _CullMode ("Cull Mode", Float) = 0 |
| | | _ColorMask ("Color Mask", Float) = 15 |
| | | _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) |
| | | |
| | | [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0 |
| | | } |
| | | |
| | | SubShader |
| | | { |
| | | Tags |
| | | { |
| | | "Queue"="Transparent" |
| | | "IgnoreProjector"="True" |
| | | "RenderType"="Transparent" |
| | | "PreviewType"="Plane" |
| | | "CanUseSpriteAtlas"="True" |
| | | } |
| | | |
| | | Stencil |
| | | { |
| | | Ref [_Stencil] |
| | | Comp [_StencilComp] |
| | | Pass [_StencilOp] |
| | | ReadMask [_StencilReadMask] |
| | | WriteMask [_StencilWriteMask] |
| | | } |
| | | |
| | | Cull [_CullMode] |
| | | Lighting Off |
| | | ZWrite Off |
| | | ZTest [unity_GUIZTestMode] |
| | | Blend SrcAlpha OneMinusSrcAlpha |
| | | ColorMask [_ColorMask] |
| | | |
| | | Pass |
| | | { |
| | | Name "Default" |
| | | CGPROGRAM |
| | | #pragma vertex vert |
| | | #pragma fragment frag |
| | | #pragma target 2.0 |
| | | |
| | | #include "UnityCG.cginc" |
| | | #include "UnityUI.cginc" |
| | | |
| | | #pragma multi_compile __ UNITY_UI_CLIP_RECT |
| | | #pragma multi_compile __ UNITY_UI_ALPHACLIP |
| | | |
| | | struct appdata_t |
| | | { |
| | | float4 vertex : POSITION; |
| | | float4 color : COLOR; |
| | | float2 texcoord : TEXCOORD0; |
| | | UNITY_VERTEX_INPUT_INSTANCE_ID |
| | | }; |
| | | |
| | | struct v2f |
| | | { |
| | | float4 vertex : SV_POSITION; |
| | | fixed4 color : COLOR; |
| | | float2 texcoord : TEXCOORD0; |
| | | float4 worldPosition : TEXCOORD1; |
| | | UNITY_VERTEX_OUTPUT_STEREO |
| | | }; |
| | | |
| | | sampler2D _MainTex; |
| | | fixed4 _Color; |
| | | fixed4 _TextureSampleAdd; |
| | | float4 _ClipRect; |
| | | float4 _MainTex_ST; |
| | | |
| | | v2f vert(appdata_t v) |
| | | { |
| | | v2f OUT; |
| | | UNITY_SETUP_INSTANCE_ID(v); |
| | | UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT); |
| | | OUT.worldPosition = v.vertex; |
| | | OUT.vertex = UnityObjectToClipPos(OUT.worldPosition); |
| | | |
| | | OUT.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex); |
| | | |
| | | OUT.color = v.color * _Color; |
| | | return OUT; |
| | | } |
| | | |
| | | fixed4 frag(v2f IN) : SV_Target |
| | | { |
| | | half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color; |
| | | |
| | | #ifdef UNITY_UI_CLIP_RECT |
| | | color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect); |
| | | #endif |
| | | |
| | | #ifdef UNITY_UI_ALPHACLIP |
| | | clip (color.a - 0.001); |
| | | #endif |
| | | |
| | | return color; |
| | | } |
| | | ENDCG |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: cf81c85f95fe47e1a27f6ae460cf182c |
| | | ShaderImporter: |
| | | externalObjects: {} |
| | | defaultTextures: [] |
| | | nonModifiableTextures: [] |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | float2 UnpackUV(float uv) |
| | | { |
| | | float2 output; |
| | | output.x = floor(uv / 4096); |
| | | output.y = uv - 4096 * output.x; |
| | | |
| | | return output * 0.001953125; |
| | | } |
| | | |
| | | fixed4 GetColor(half d, fixed4 faceColor, fixed4 outlineColor, half outline, half softness) |
| | | { |
| | | half faceAlpha = 1-saturate((d - outline * 0.5 + softness * 0.5) / (1.0 + softness)); |
| | | half outlineAlpha = saturate((d + outline * 0.5)) * sqrt(min(1.0, outline)); |
| | | |
| | | faceColor.rgb *= faceColor.a; |
| | | outlineColor.rgb *= outlineColor.a; |
| | | |
| | | faceColor = lerp(faceColor, outlineColor, outlineAlpha); |
| | | |
| | | faceColor *= faceAlpha; |
| | | |
| | | return faceColor; |
| | | } |
| | | |
| | | float3 GetSurfaceNormal(float4 h, float bias) |
| | | { |
| | | bool raisedBevel = step(1, fmod(_ShaderFlags, 2)); |
| | | |
| | | h += bias+_BevelOffset; |
| | | |
| | | float bevelWidth = max(.01, _OutlineWidth+_BevelWidth); |
| | | |
| | | // Track outline |
| | | h -= .5; |
| | | h /= bevelWidth; |
| | | h = saturate(h+.5); |
| | | |
| | | if(raisedBevel) h = 1 - abs(h*2.0 - 1.0); |
| | | h = lerp(h, sin(h*3.141592/2.0), _BevelRoundness); |
| | | h = min(h, 1.0-_BevelClamp); |
| | | h *= _Bevel * bevelWidth * _GradientScale * -2.0; |
| | | |
| | | float3 va = normalize(float3(1.0, 0.0, h.y - h.x)); |
| | | float3 vb = normalize(float3(0.0, -1.0, h.w - h.z)); |
| | | |
| | | return cross(va, vb); |
| | | } |
| | | |
| | | float3 GetSurfaceNormal(float2 uv, float bias, float3 delta) |
| | | { |
| | | // Read "height field" |
| | | float4 h = {tex2D(_MainTex, uv - delta.xz).a, |
| | | tex2D(_MainTex, uv + delta.xz).a, |
| | | tex2D(_MainTex, uv - delta.zy).a, |
| | | tex2D(_MainTex, uv + delta.zy).a}; |
| | | |
| | | return GetSurfaceNormal(h, bias); |
| | | } |
| | | |
| | | float3 GetSpecular(float3 n, float3 l) |
| | | { |
| | | float spec = pow(max(0.0, dot(n, l)), _Reflectivity); |
| | | return _SpecularColor.rgb * spec * _SpecularPower; |
| | | } |
| | | |
| | | float4 GetGlowColor(float d, float scale) |
| | | { |
| | | float glow = d - (_GlowOffset*_ScaleRatioB) * 0.5 * scale; |
| | | float t = lerp(_GlowInner, (_GlowOuter * _ScaleRatioB), step(0.0, glow)) * 0.5 * scale; |
| | | glow = saturate(abs(glow/(1.0 + t))); |
| | | glow = 1.0-pow(glow, _GlowPower); |
| | | glow *= sqrt(min(1.0, t)); // Fade off glow thinner than 1 screen pixel |
| | | return float4(_GlowColor.rgb, saturate(_GlowColor.a * glow * 2)); |
| | | } |
| | | |
| | | float4 BlendARGB(float4 overlying, float4 underlying) |
| | | { |
| | | overlying.rgb *= overlying.a; |
| | | underlying.rgb *= underlying.a; |
| | | float3 blended = overlying.rgb + ((1-overlying.a)*underlying.rgb); |
| | | float alpha = underlying.a + (1-underlying.a)*overlying.a; |
| | | return float4(blended, alpha); |
| | | } |
| | | |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 407bc68d299748449bbf7f48ee690f8d |
| | | ShaderImporter: |
| | | externalObjects: {} |
| | | defaultTextures: [] |
| | | nonModifiableTextures: [] |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | struct vertex_t { |
| | | UNITY_VERTEX_INPUT_INSTANCE_ID |
| | | float4 position : POSITION; |
| | | float3 normal : NORMAL; |
| | | float4 color : COLOR; |
| | | float2 texcoord0 : TEXCOORD0; |
| | | float2 texcoord1 : TEXCOORD1; |
| | | }; |
| | | |
| | | struct pixel_t { |
| | | UNITY_VERTEX_INPUT_INSTANCE_ID |
| | | UNITY_VERTEX_OUTPUT_STEREO |
| | | float4 position : SV_POSITION; |
| | | float4 faceColor : COLOR; |
| | | float4 outlineColor : COLOR1; |
| | | float4 texcoord0 : TEXCOORD0; |
| | | float4 param : TEXCOORD1; // weight, scaleRatio |
| | | float2 mask : TEXCOORD2; |
| | | #if (UNDERLAY_ON || UNDERLAY_INNER) |
| | | float4 texcoord2 : TEXCOORD3; |
| | | float4 underlayColor : COLOR2; |
| | | #endif |
| | | }; |
| | | |
| | | float4 SRGBToLinear(float4 rgba) { |
| | | return float4(lerp(rgba.rgb / 12.92f, pow((rgba.rgb + 0.055f) / 1.055f, 2.4f), step(0.04045f, rgba.rgb)), rgba.a); |
| | | } |
| | | |
| | | pixel_t VertShader(vertex_t input) |
| | | { |
| | | pixel_t output; |
| | | |
| | | UNITY_INITIALIZE_OUTPUT(pixel_t, output); |
| | | UNITY_SETUP_INSTANCE_ID(input); |
| | | UNITY_TRANSFER_INSTANCE_ID(input, output); |
| | | UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); |
| | | |
| | | float bold = step(input.texcoord1.y, 0); |
| | | |
| | | float4 vert = input.position; |
| | | vert.x += _VertexOffsetX; |
| | | vert.y += _VertexOffsetY; |
| | | |
| | | float4 vPosition = UnityObjectToClipPos(vert); |
| | | |
| | | float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; |
| | | weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; |
| | | |
| | | // Generate UV for the Masking Texture |
| | | float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); |
| | | float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); |
| | | |
| | | float4 color = input.color; |
| | | #if (FORCE_LINEAR && !UNITY_COLORSPACE_GAMMA) |
| | | color = SRGBToLinear(input.color); |
| | | #endif |
| | | |
| | | float opacity = color.a; |
| | | #if (UNDERLAY_ON | UNDERLAY_INNER) |
| | | opacity = 1.0; |
| | | #endif |
| | | |
| | | float4 faceColor = float4(color.rgb, opacity) * _FaceColor; |
| | | faceColor.rgb *= faceColor.a; |
| | | |
| | | float4 outlineColor = _OutlineColor; |
| | | outlineColor.a *= opacity; |
| | | outlineColor.rgb *= outlineColor.a; |
| | | |
| | | output.position = vPosition; |
| | | output.faceColor = faceColor; |
| | | output.outlineColor = outlineColor; |
| | | output.texcoord0 = float4(input.texcoord0.xy, maskUV.xy); |
| | | output.param = float4(0.5 - weight, 1.3333 * _GradientScale * (_Sharpness + 1) / _TextureWidth, _OutlineWidth * _ScaleRatioA * 0.5, 0); |
| | | |
| | | float2 mask = float2(0, 0); |
| | | #if UNITY_UI_CLIP_RECT |
| | | mask = vert.xy * 2 - clampedRect.xy - clampedRect.zw; |
| | | #endif |
| | | output.mask = mask; |
| | | |
| | | #if (UNDERLAY_ON || UNDERLAY_INNER) |
| | | float4 underlayColor = _UnderlayColor; |
| | | underlayColor.rgb *= underlayColor.a; |
| | | |
| | | float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; |
| | | float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; |
| | | |
| | | output.texcoord2 = float4(input.texcoord0 + float2(x, y), input.color.a, 0); |
| | | output.underlayColor = underlayColor; |
| | | #endif |
| | | |
| | | return output; |
| | | } |
| | | |
| | | float4 PixShader(pixel_t input) : SV_Target |
| | | { |
| | | UNITY_SETUP_INSTANCE_ID(input); |
| | | |
| | | float d = tex2D(_MainTex, input.texcoord0.xy).a; |
| | | |
| | | float2 UV = input.texcoord0.xy; |
| | | float scale = rsqrt(abs(ddx(UV.x) * ddy(UV.y) - ddy(UV.x) * ddx(UV.y))) * input.param.y; |
| | | |
| | | #if (UNDERLAY_ON | UNDERLAY_INNER) |
| | | float layerScale = scale; |
| | | layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale); |
| | | float layerBias = input.param.x * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale); |
| | | #endif |
| | | |
| | | scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale); |
| | | |
| | | float4 faceColor = input.faceColor * saturate((d - input.param.x) * scale + 0.5); |
| | | |
| | | #ifdef OUTLINE_ON |
| | | float4 outlineColor = lerp(input.faceColor, input.outlineColor, sqrt(min(1.0, input.param.z * scale * 2))); |
| | | faceColor = lerp(outlineColor, input.faceColor, saturate((d - input.param.x - input.param.z) * scale + 0.5)); |
| | | faceColor *= saturate((d - input.param.x + input.param.z) * scale + 0.5); |
| | | #endif |
| | | |
| | | #if UNDERLAY_ON |
| | | d = tex2D(_MainTex, input.texcoord2.xy).a * layerScale; |
| | | faceColor += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - layerBias) * (1 - faceColor.a); |
| | | #endif |
| | | |
| | | #if UNDERLAY_INNER |
| | | float bias = input.param.x * scale - 0.5; |
| | | float sd = saturate(d * scale - bias - input.param.z); |
| | | d = tex2D(_MainTex, input.texcoord2.xy).a * layerScale; |
| | | faceColor += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - layerBias)) * sd * (1 - faceColor.a); |
| | | #endif |
| | | |
| | | #ifdef MASKING |
| | | float a = abs(_MaskInverse - tex2D(_MaskTex, input.texcoord0.zw).a); |
| | | float t = a + (1 - _MaskWipeControl) * _MaskEdgeSoftness - _MaskWipeControl; |
| | | a = saturate(t / _MaskEdgeSoftness); |
| | | faceColor.rgb = lerp(_MaskEdgeColor.rgb * faceColor.a, faceColor.rgb, a); |
| | | faceColor *= a; |
| | | #endif |
| | | |
| | | // Alternative implementation to UnityGet2DClipping with support for softness |
| | | #if UNITY_UI_CLIP_RECT |
| | | float2 maskZW = 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + (1 / scale)); |
| | | float2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * maskZW); |
| | | faceColor *= m.x * m.y; |
| | | #endif |
| | | |
| | | #if (UNDERLAY_ON | UNDERLAY_INNER) |
| | | faceColor *= input.texcoord2.z; |
| | | #endif |
| | | |
| | | #if UNITY_UI_ALPHACLIP |
| | | clip(faceColor.a - 0.001); |
| | | #endif |
| | | |
| | | return faceColor; |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: c334973cef89a9840b0b0c507e0377ab |
| | | ShaderImporter: |
| | | externalObjects: {} |
| | | defaultTextures: [] |
| | | nonModifiableTextures: [] |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | // UI Editable properties |
| | | uniform sampler2D _FaceTex; // Alpha : Signed Distance |
| | | uniform float _FaceUVSpeedX; |
| | | uniform float _FaceUVSpeedY; |
| | | uniform fixed4 _FaceColor; // RGBA : Color + Opacity |
| | | uniform float _FaceDilate; // v[ 0, 1] |
| | | uniform float _OutlineSoftness; // v[ 0, 1] |
| | | |
| | | uniform sampler2D _OutlineTex; // RGBA : Color + Opacity |
| | | uniform float _OutlineUVSpeedX; |
| | | uniform float _OutlineUVSpeedY; |
| | | uniform fixed4 _OutlineColor; // RGBA : Color + Opacity |
| | | uniform float _OutlineWidth; // v[ 0, 1] |
| | | |
| | | uniform float _Bevel; // v[ 0, 1] |
| | | uniform float _BevelOffset; // v[-1, 1] |
| | | uniform float _BevelWidth; // v[-1, 1] |
| | | uniform float _BevelClamp; // v[ 0, 1] |
| | | uniform float _BevelRoundness; // v[ 0, 1] |
| | | |
| | | uniform sampler2D _BumpMap; // Normal map |
| | | uniform float _BumpOutline; // v[ 0, 1] |
| | | uniform float _BumpFace; // v[ 0, 1] |
| | | |
| | | uniform samplerCUBE _Cube; // Cube / sphere map |
| | | uniform fixed4 _ReflectFaceColor; // RGB intensity |
| | | uniform fixed4 _ReflectOutlineColor; |
| | | //uniform float _EnvTiltX; // v[-1, 1] |
| | | //uniform float _EnvTiltY; // v[-1, 1] |
| | | uniform float3 _EnvMatrixRotation; |
| | | uniform float4x4 _EnvMatrix; |
| | | |
| | | uniform fixed4 _SpecularColor; // RGB intensity |
| | | uniform float _LightAngle; // v[ 0,Tau] |
| | | uniform float _SpecularPower; // v[ 0, 1] |
| | | uniform float _Reflectivity; // v[ 5, 15] |
| | | uniform float _Diffuse; // v[ 0, 1] |
| | | uniform float _Ambient; // v[ 0, 1] |
| | | |
| | | uniform fixed4 _UnderlayColor; // RGBA : Color + Opacity |
| | | uniform float _UnderlayOffsetX; // v[-1, 1] |
| | | uniform float _UnderlayOffsetY; // v[-1, 1] |
| | | uniform float _UnderlayDilate; // v[-1, 1] |
| | | uniform float _UnderlaySoftness; // v[ 0, 1] |
| | | |
| | | uniform fixed4 _GlowColor; // RGBA : Color + Intesity |
| | | uniform float _GlowOffset; // v[-1, 1] |
| | | uniform float _GlowOuter; // v[ 0, 1] |
| | | uniform float _GlowInner; // v[ 0, 1] |
| | | uniform float _GlowPower; // v[ 1, 1/(1+4*4)] |
| | | |
| | | // API Editable properties |
| | | uniform float _ShaderFlags; |
| | | uniform float _WeightNormal; |
| | | uniform float _WeightBold; |
| | | |
| | | uniform float _ScaleRatioA; |
| | | uniform float _ScaleRatioB; |
| | | uniform float _ScaleRatioC; |
| | | |
| | | uniform float _VertexOffsetX; |
| | | uniform float _VertexOffsetY; |
| | | |
| | | //uniform float _UseClipRect; |
| | | uniform float _MaskID; |
| | | uniform sampler2D _MaskTex; |
| | | uniform float4 _MaskCoord; |
| | | uniform float4 _ClipRect; // bottom left(x,y) : top right(z,w) |
| | | //uniform float _MaskWipeControl; |
| | | //uniform float _MaskEdgeSoftness; |
| | | //uniform fixed4 _MaskEdgeColor; |
| | | //uniform bool _MaskInverse; |
| | | |
| | | uniform float _MaskSoftnessX; |
| | | uniform float _MaskSoftnessY; |
| | | |
| | | // Font Atlas properties |
| | | uniform sampler2D _MainTex; |
| | | uniform float _TextureWidth; |
| | | uniform float _TextureHeight; |
| | | uniform float _GradientScale; |
| | | uniform float _ScaleX; |
| | | uniform float _ScaleY; |
| | | uniform float _PerspectiveFilter; |
| | | uniform float _Sharpness; |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 3997e2241185407d80309a82f9148466 |
| | | ShaderImporter: |
| | | externalObjects: {} |
| | | defaultTextures: [] |
| | | nonModifiableTextures: [] |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | void VertShader(inout appdata_full v, out Input data) |
| | | { |
| | | v.vertex.x += _VertexOffsetX; |
| | | v.vertex.y += _VertexOffsetY; |
| | | |
| | | UNITY_INITIALIZE_OUTPUT(Input, data); |
| | | |
| | | float bold = step(v.texcoord1.y, 0); |
| | | |
| | | // Generate normal for backface |
| | | float3 view = ObjSpaceViewDir(v.vertex); |
| | | v.normal *= sign(dot(v.normal, view)); |
| | | |
| | | #if USE_DERIVATIVE |
| | | data.param.y = 1; |
| | | #else |
| | | float4 vert = v.vertex; |
| | | float4 vPosition = UnityObjectToClipPos(vert); |
| | | float2 pixelSize = vPosition.w; |
| | | |
| | | pixelSize /= float2(_ScaleX, _ScaleY) * mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy); |
| | | float scale = rsqrt(dot(pixelSize, pixelSize)); |
| | | scale *= abs(v.texcoord1.y) * _GradientScale * (_Sharpness + 1); |
| | | scale = lerp(scale * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(v.normal.xyz), normalize(WorldSpaceViewDir(vert))))); |
| | | data.param.y = scale; |
| | | #endif |
| | | |
| | | data.param.x = (lerp(_WeightNormal, _WeightBold, bold) / 4.0 + _FaceDilate) * _ScaleRatioA * 0.5; // |
| | | |
| | | v.texcoord1.xy = UnpackUV(v.texcoord1.x); |
| | | data.viewDirEnv = mul((float3x3)_EnvMatrix, WorldSpaceViewDir(v.vertex)); |
| | | } |
| | | |
| | | void PixShader(Input input, inout SurfaceOutput o) |
| | | { |
| | | |
| | | #if USE_DERIVATIVE |
| | | float2 pixelSize = float2(ddx(input.uv_MainTex.y), ddy(input.uv_MainTex.y)); |
| | | pixelSize *= _TextureWidth * .75; |
| | | float scale = rsqrt(dot(pixelSize, pixelSize)) * _GradientScale * (_Sharpness + 1); |
| | | #else |
| | | float scale = input.param.y; |
| | | #endif |
| | | |
| | | // Signed distance |
| | | float c = tex2D(_MainTex, input.uv_MainTex).a; |
| | | float sd = (.5 - c - input.param.x) * scale + .5; |
| | | float outline = _OutlineWidth*_ScaleRatioA * scale; |
| | | float softness = _OutlineSoftness*_ScaleRatioA * scale; |
| | | |
| | | // Color & Alpha |
| | | float4 faceColor = _FaceColor; |
| | | float4 outlineColor = _OutlineColor; |
| | | faceColor *= input.color; |
| | | outlineColor.a *= input.color.a; |
| | | faceColor *= tex2D(_FaceTex, float2(input.uv2_FaceTex.x + _FaceUVSpeedX * _Time.y, input.uv2_FaceTex.y + _FaceUVSpeedY * _Time.y)); |
| | | outlineColor *= tex2D(_OutlineTex, float2(input.uv2_OutlineTex.x + _OutlineUVSpeedX * _Time.y, input.uv2_OutlineTex.y + _OutlineUVSpeedY * _Time.y)); |
| | | faceColor = GetColor(sd, faceColor, outlineColor, outline, softness); |
| | | faceColor.rgb /= max(faceColor.a, 0.0001); |
| | | |
| | | #if BEVEL_ON |
| | | float3 delta = float3(1.0 / _TextureWidth, 1.0 / _TextureHeight, 0.0); |
| | | |
| | | float4 smp4x = {tex2D(_MainTex, input.uv_MainTex - delta.xz).a, |
| | | tex2D(_MainTex, input.uv_MainTex + delta.xz).a, |
| | | tex2D(_MainTex, input.uv_MainTex - delta.zy).a, |
| | | tex2D(_MainTex, input.uv_MainTex + delta.zy).a }; |
| | | |
| | | // Face Normal |
| | | float3 n = GetSurfaceNormal(smp4x, input.param.x); |
| | | |
| | | // Bumpmap |
| | | float3 bump = UnpackNormal(tex2D(_BumpMap, input.uv2_FaceTex.xy)).xyz; |
| | | bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5)); |
| | | bump = lerp(float3(0, 0, 1), bump, faceColor.a); |
| | | n = normalize(n - bump); |
| | | |
| | | // Cubemap reflection |
| | | fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDirEnv, mul((float3x3)unity_ObjectToWorld, n))); |
| | | float3 emission = reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a; |
| | | #else |
| | | float3 n = float3(0, 0, -1); |
| | | float3 emission = float3(0, 0, 0); |
| | | #endif |
| | | |
| | | #if GLOW_ON |
| | | float4 glowColor = GetGlowColor(sd, scale); |
| | | glowColor.a *= input.color.a; |
| | | emission += glowColor.rgb*glowColor.a; |
| | | faceColor = BlendARGB(glowColor, faceColor); |
| | | faceColor.rgb /= max(faceColor.a, 0.0001); |
| | | #endif |
| | | |
| | | // Set Standard output structure |
| | | o.Albedo = faceColor.rgb; |
| | | o.Normal = -n; |
| | | o.Emission = emission; |
| | | o.Specular = lerp(_FaceShininess, _OutlineShininess, saturate(sd + outline * 0.5)); |
| | | o.Gloss = 1; |
| | | o.Alpha = faceColor.a; |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: d930090c0cd643c7b55f19a38538c162 |
| | | ShaderImporter: |
| | | externalObjects: {} |
| | | defaultTextures: [] |
| | | nonModifiableTextures: [] |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: d0603b6d5186471b96c778c3949c7ce2 |
| | | folderAsset: yes |
| | | DefaultImporter: |
| | | externalObjects: {} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | This sample of beautiful emojis are provided by EmojiOne https://www.emojione.com/ |
| | | |
| | | Please visit their website to view the complete set of their emojis and review their licensing terms. |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 381dcb09d5029d14897e55f98031fca5 |
| | | TextScriptImporter: |
| | | externalObjects: {} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | {"frames": [ |
| | | |
| | | { |
| | | "filename": "1f60a.png", |
| | | "frame": {"x":0,"y":0,"w":128,"h":128}, |
| | | "rotated": false, |
| | | "trimmed": false, |
| | | "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
| | | "sourceSize": {"w":128,"h":128}, |
| | | "pivot": {"x":0.5,"y":0.5} |
| | | }, |
| | | { |
| | | "filename": "1f60b.png", |
| | | "frame": {"x":128,"y":0,"w":128,"h":128}, |
| | | "rotated": false, |
| | | "trimmed": false, |
| | | "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
| | | "sourceSize": {"w":128,"h":128}, |
| | | "pivot": {"x":0.5,"y":0.5} |
| | | }, |
| | | { |
| | | "filename": "1f60d.png", |
| | | "frame": {"x":256,"y":0,"w":128,"h":128}, |
| | | "rotated": false, |
| | | "trimmed": false, |
| | | "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
| | | "sourceSize": {"w":128,"h":128}, |
| | | "pivot": {"x":0.5,"y":0.5} |
| | | }, |
| | | { |
| | | "filename": "1f60e.png", |
| | | "frame": {"x":384,"y":0,"w":128,"h":128}, |
| | | "rotated": false, |
| | | "trimmed": false, |
| | | "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
| | | "sourceSize": {"w":128,"h":128}, |
| | | "pivot": {"x":0.5,"y":0.5} |
| | | }, |
| | | { |
| | | "filename": "1f600.png", |
| | | "frame": {"x":0,"y":128,"w":128,"h":128}, |
| | | "rotated": false, |
| | | "trimmed": false, |
| | | "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
| | | "sourceSize": {"w":128,"h":128}, |
| | | "pivot": {"x":0.5,"y":0.5} |
| | | }, |
| | | { |
| | | "filename": "1f601.png", |
| | | "frame": {"x":128,"y":128,"w":128,"h":128}, |
| | | "rotated": false, |
| | | "trimmed": false, |
| | | "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
| | | "sourceSize": {"w":128,"h":128}, |
| | | "pivot": {"x":0.5,"y":0.5} |
| | | }, |
| | | { |
| | | "filename": "1f602.png", |
| | | "frame": {"x":256,"y":128,"w":128,"h":128}, |
| | | "rotated": false, |
| | | "trimmed": false, |
| | | "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
| | | "sourceSize": {"w":128,"h":128}, |
| | | "pivot": {"x":0.5,"y":0.5} |
| | | }, |
| | | { |
| | | "filename": "1f603.png", |
| | | "frame": {"x":384,"y":128,"w":128,"h":128}, |
| | | "rotated": false, |
| | | "trimmed": false, |
| | | "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
| | | "sourceSize": {"w":128,"h":128}, |
| | | "pivot": {"x":0.5,"y":0.5} |
| | | }, |
| | | { |
| | | "filename": "1f604.png", |
| | | "frame": {"x":0,"y":256,"w":128,"h":128}, |
| | | "rotated": false, |
| | | "trimmed": false, |
| | | "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
| | | "sourceSize": {"w":128,"h":128}, |
| | | "pivot": {"x":0.5,"y":0.5} |
| | | }, |
| | | { |
| | | "filename": "1f605.png", |
| | | "frame": {"x":128,"y":256,"w":128,"h":128}, |
| | | "rotated": false, |
| | | "trimmed": false, |
| | | "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
| | | "sourceSize": {"w":128,"h":128}, |
| | | "pivot": {"x":0.5,"y":0.5} |
| | | }, |
| | | { |
| | | "filename": "1f606.png", |
| | | "frame": {"x":256,"y":256,"w":128,"h":128}, |
| | | "rotated": false, |
| | | "trimmed": false, |
| | | "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
| | | "sourceSize": {"w":128,"h":128}, |
| | | "pivot": {"x":0.5,"y":0.5} |
| | | }, |
| | | { |
| | | "filename": "1f609.png", |
| | | "frame": {"x":384,"y":256,"w":128,"h":128}, |
| | | "rotated": false, |
| | | "trimmed": false, |
| | | "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
| | | "sourceSize": {"w":128,"h":128}, |
| | | "pivot": {"x":0.5,"y":0.5} |
| | | }, |
| | | { |
| | | "filename": "1f618.png", |
| | | "frame": {"x":0,"y":384,"w":128,"h":128}, |
| | | "rotated": false, |
| | | "trimmed": false, |
| | | "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
| | | "sourceSize": {"w":128,"h":128}, |
| | | "pivot": {"x":0.5,"y":0.5} |
| | | }, |
| | | { |
| | | "filename": "1f923.png", |
| | | "frame": {"x":128,"y":384,"w":128,"h":128}, |
| | | "rotated": false, |
| | | "trimmed": false, |
| | | "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
| | | "sourceSize": {"w":128,"h":128}, |
| | | "pivot": {"x":0.5,"y":0.5} |
| | | }, |
| | | { |
| | | "filename": "263a.png", |
| | | "frame": {"x":256,"y":384,"w":128,"h":128}, |
| | | "rotated": false, |
| | | "trimmed": false, |
| | | "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
| | | "sourceSize": {"w":128,"h":128}, |
| | | "pivot": {"x":0.5,"y":0.5} |
| | | }, |
| | | { |
| | | "filename": "2639.png", |
| | | "frame": {"x":384,"y":384,"w":128,"h":128}, |
| | | "rotated": false, |
| | | "trimmed": false, |
| | | "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
| | | "sourceSize": {"w":128,"h":128}, |
| | | "pivot": {"x":0.5,"y":0.5} |
| | | }], |
| | | "meta": { |
| | | "app": "http://www.codeandweb.com/texturepacker", |
| | | "version": "1.0", |
| | | "image": "EmojiOne.png", |
| | | "format": "RGBA8888", |
| | | "size": {"w":512,"h":512}, |
| | | "scale": "1", |
| | | "smartupdate": "$TexturePacker:SmartUpdate:196a26a2e149d875b91ffc8fa3581e76:fc928c7e275404b7e0649307410475cb:424723c3774975ddb2053fd5c4b85f6e$" |
| | | } |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 8f05276190cf498a8153f6cbe761d4e6 |
| | | timeCreated: 1480316860 |
| | | licenseType: Pro |
| | | TextScriptImporter: |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: dffef66376be4fa480fb02b19edbe903 |
| | | TextureImporter: |
| | | fileIDToRecycleName: |
| | | 21300000: EmojiOne_0 |
| | | 21300002: EmojiOne_1 |
| | | 21300004: EmojiOne_2 |
| | | 21300006: EmojiOne_3 |
| | | 21300008: EmojiOne_4 |
| | | 21300010: EmojiOne_6 |
| | | 21300012: EmojiOne_7 |
| | | 21300014: EmojiOne_8 |
| | | 21300016: EmojiOne_9 |
| | | 21300018: EmojiOne_10 |
| | | 21300020: EmojiOne_11 |
| | | 21300022: EmojiOne_12 |
| | | 21300024: EmojiOne_13 |
| | | 21300026: EmojiOne_5 |
| | | 21300028: EmojiOne_14 |
| | | externalObjects: {} |
| | | serializedVersion: 5 |
| | | mipmaps: |
| | | mipMapMode: 0 |
| | | enableMipMap: 1 |
| | | sRGBTexture: 1 |
| | | linearTexture: 0 |
| | | fadeOut: 0 |
| | | borderMipMap: 0 |
| | | mipMapsPreserveCoverage: 0 |
| | | alphaTestReferenceValue: 0.5 |
| | | mipMapFadeDistanceStart: 1 |
| | | mipMapFadeDistanceEnd: 3 |
| | | bumpmap: |
| | | convertToNormalMap: 0 |
| | | externalNormalMap: 0 |
| | | heightScale: 0.25 |
| | | normalMapFilter: 0 |
| | | isReadable: 0 |
| | | grayScaleToAlpha: 0 |
| | | generateCubemap: 6 |
| | | cubemapConvolution: 0 |
| | | seamlessCubemap: 0 |
| | | textureFormat: -1 |
| | | maxTextureSize: 2048 |
| | | textureSettings: |
| | | serializedVersion: 2 |
| | | filterMode: -1 |
| | | aniso: -1 |
| | | mipBias: -1 |
| | | wrapU: 1 |
| | | wrapV: 1 |
| | | wrapW: 1 |
| | | nPOTScale: 0 |
| | | lightmap: 0 |
| | | compressionQuality: 50 |
| | | spriteMode: 2 |
| | | spriteExtrude: 1 |
| | | spriteMeshType: 1 |
| | | alignment: 0 |
| | | spritePivot: {x: 0.5, y: 0.5} |
| | | spriteBorder: {x: 0, y: 0, z: 0, w: 0} |
| | | spritePixelsToUnits: 100 |
| | | alphaUsage: 1 |
| | | alphaIsTransparency: 1 |
| | | spriteTessellationDetail: -1 |
| | | textureType: 0 |
| | | textureShape: 1 |
| | | singleChannelComponent: 0 |
| | | maxTextureSizeSet: 0 |
| | | compressionQualitySet: 0 |
| | | textureFormatSet: 0 |
| | | platformSettings: |
| | | - serializedVersion: 2 |
| | | buildTarget: DefaultTexturePlatform |
| | | maxTextureSize: 512 |
| | | resizeAlgorithm: 0 |
| | | textureFormat: -1 |
| | | textureCompression: 1 |
| | | compressionQuality: 50 |
| | | crunchedCompression: 0 |
| | | allowsAlphaSplitting: 0 |
| | | overridden: 0 |
| | | androidETC2FallbackOverride: 0 |
| | | - serializedVersion: 2 |
| | | buildTarget: Standalone |
| | | maxTextureSize: 512 |
| | | resizeAlgorithm: 0 |
| | | textureFormat: -1 |
| | | textureCompression: 1 |
| | | compressionQuality: 50 |
| | | crunchedCompression: 0 |
| | | allowsAlphaSplitting: 0 |
| | | overridden: 0 |
| | | androidETC2FallbackOverride: 0 |
| | | - serializedVersion: 2 |
| | | buildTarget: iPhone |
| | | maxTextureSize: 512 |
| | | resizeAlgorithm: 0 |
| | | textureFormat: -1 |
| | | textureCompression: 1 |
| | | compressionQuality: 50 |
| | | crunchedCompression: 0 |
| | | allowsAlphaSplitting: 0 |
| | | overridden: 0 |
| | | androidETC2FallbackOverride: 0 |
| | | - serializedVersion: 2 |
| | | buildTarget: Android |
| | | maxTextureSize: 512 |
| | | resizeAlgorithm: 0 |
| | | textureFormat: -1 |
| | | textureCompression: 1 |
| | | compressionQuality: 50 |
| | | crunchedCompression: 0 |
| | | allowsAlphaSplitting: 0 |
| | | overridden: 0 |
| | | androidETC2FallbackOverride: 0 |
| | | spriteSheet: |
| | | serializedVersion: 2 |
| | | sprites: |
| | | - serializedVersion: 2 |
| | | name: EmojiOne_0 |
| | | rect: |
| | | serializedVersion: 2 |
| | | x: 0 |
| | | y: 384 |
| | | width: 128 |
| | | height: 128 |
| | | alignment: 0 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | border: {x: 0, y: 0, z: 0, w: 0} |
| | | outline: [] |
| | | physicsShape: [] |
| | | tessellationDetail: 0 |
| | | bones: [] |
| | | spriteID: 4bcc36da2108f2c4ba3de5c921d25c3c |
| | | vertices: [] |
| | | indices: |
| | | edges: [] |
| | | weights: [] |
| | | - serializedVersion: 2 |
| | | name: EmojiOne_1 |
| | | rect: |
| | | serializedVersion: 2 |
| | | x: 128 |
| | | y: 384 |
| | | width: 128 |
| | | height: 128 |
| | | alignment: 0 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | border: {x: 0, y: 0, z: 0, w: 0} |
| | | outline: [] |
| | | physicsShape: [] |
| | | tessellationDetail: 0 |
| | | bones: [] |
| | | spriteID: e9eea8093eaeaee4d901c4553f572c22 |
| | | vertices: [] |
| | | indices: |
| | | edges: [] |
| | | weights: [] |
| | | - serializedVersion: 2 |
| | | name: EmojiOne_2 |
| | | rect: |
| | | serializedVersion: 2 |
| | | x: 256 |
| | | y: 384 |
| | | width: 128 |
| | | height: 128 |
| | | alignment: 0 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | border: {x: 0, y: 0, z: 0, w: 0} |
| | | outline: [] |
| | | physicsShape: [] |
| | | tessellationDetail: 0 |
| | | bones: [] |
| | | spriteID: 49451da35411dcc42a3692e39b0fde70 |
| | | vertices: [] |
| | | indices: |
| | | edges: [] |
| | | weights: [] |
| | | - serializedVersion: 2 |
| | | name: EmojiOne_3 |
| | | rect: |
| | | serializedVersion: 2 |
| | | x: 384 |
| | | y: 384 |
| | | width: 128 |
| | | height: 128 |
| | | alignment: 0 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | border: {x: 0, y: 0, z: 0, w: 0} |
| | | outline: [] |
| | | physicsShape: [] |
| | | tessellationDetail: 0 |
| | | bones: [] |
| | | spriteID: f65709664b924904790c850a50ca82bc |
| | | vertices: [] |
| | | indices: |
| | | edges: [] |
| | | weights: [] |
| | | - serializedVersion: 2 |
| | | name: EmojiOne_4 |
| | | rect: |
| | | serializedVersion: 2 |
| | | x: 0 |
| | | y: 256 |
| | | width: 128 |
| | | height: 128 |
| | | alignment: 0 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | border: {x: 0, y: 0, z: 0, w: 0} |
| | | outline: [] |
| | | physicsShape: [] |
| | | tessellationDetail: 0 |
| | | bones: [] |
| | | spriteID: 5b92c568a5ec9ad4b9ed90e271f1c9a8 |
| | | vertices: [] |
| | | indices: |
| | | edges: [] |
| | | weights: [] |
| | | - serializedVersion: 2 |
| | | name: EmojiOne_6 |
| | | rect: |
| | | serializedVersion: 2 |
| | | x: 256 |
| | | y: 256 |
| | | width: 128 |
| | | height: 128 |
| | | alignment: 0 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | border: {x: 0, y: 0, z: 0, w: 0} |
| | | outline: [] |
| | | physicsShape: [] |
| | | tessellationDetail: 0 |
| | | bones: [] |
| | | spriteID: b10f2b48b7281594bb8a24a6511a35af |
| | | vertices: [] |
| | | indices: |
| | | edges: [] |
| | | weights: [] |
| | | - serializedVersion: 2 |
| | | name: EmojiOne_7 |
| | | rect: |
| | | serializedVersion: 2 |
| | | x: 384 |
| | | y: 256 |
| | | width: 128 |
| | | height: 128 |
| | | alignment: 0 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | border: {x: 0, y: 0, z: 0, w: 0} |
| | | outline: [] |
| | | physicsShape: [] |
| | | tessellationDetail: 0 |
| | | bones: [] |
| | | spriteID: 10a600f9329dc2246a897e89f4d283cd |
| | | vertices: [] |
| | | indices: |
| | | edges: [] |
| | | weights: [] |
| | | - serializedVersion: 2 |
| | | name: EmojiOne_8 |
| | | rect: |
| | | serializedVersion: 2 |
| | | x: 0 |
| | | y: 128 |
| | | width: 128 |
| | | height: 128 |
| | | alignment: 0 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | border: {x: 0, y: 0, z: 0, w: 0} |
| | | outline: [] |
| | | physicsShape: [] |
| | | tessellationDetail: 0 |
| | | bones: [] |
| | | spriteID: 66cffa363b90ab14787d8a5b90cf4502 |
| | | vertices: [] |
| | | indices: |
| | | edges: [] |
| | | weights: [] |
| | | - serializedVersion: 2 |
| | | name: EmojiOne_9 |
| | | rect: |
| | | serializedVersion: 2 |
| | | x: 128 |
| | | y: 128 |
| | | width: 128 |
| | | height: 128 |
| | | alignment: 0 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | border: {x: 0, y: 0, z: 0, w: 0} |
| | | outline: [] |
| | | physicsShape: [] |
| | | tessellationDetail: 0 |
| | | bones: [] |
| | | spriteID: 55cf3d409c9b89349b1e1bdc1cc224ad |
| | | vertices: [] |
| | | indices: |
| | | edges: [] |
| | | weights: [] |
| | | - serializedVersion: 2 |
| | | name: EmojiOne_10 |
| | | rect: |
| | | serializedVersion: 2 |
| | | x: 256 |
| | | y: 128 |
| | | width: 128 |
| | | height: 128 |
| | | alignment: 0 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | border: {x: 0, y: 0, z: 0, w: 0} |
| | | outline: [] |
| | | physicsShape: [] |
| | | tessellationDetail: 0 |
| | | bones: [] |
| | | spriteID: 2a9e58eaf96feef42bcefa1cf257193f |
| | | vertices: [] |
| | | indices: |
| | | edges: [] |
| | | weights: [] |
| | | - serializedVersion: 2 |
| | | name: EmojiOne_11 |
| | | rect: |
| | | serializedVersion: 2 |
| | | x: 384 |
| | | y: 128 |
| | | width: 128 |
| | | height: 128 |
| | | alignment: 0 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | border: {x: 0, y: 0, z: 0, w: 0} |
| | | outline: [] |
| | | physicsShape: [] |
| | | tessellationDetail: 0 |
| | | bones: [] |
| | | spriteID: 2489120affc155840ae6a7be2e93ce19 |
| | | vertices: [] |
| | | indices: |
| | | edges: [] |
| | | weights: [] |
| | | - serializedVersion: 2 |
| | | name: EmojiOne_12 |
| | | rect: |
| | | serializedVersion: 2 |
| | | x: 0 |
| | | y: 0 |
| | | width: 128 |
| | | height: 128 |
| | | alignment: 0 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | border: {x: 0, y: 0, z: 0, w: 0} |
| | | outline: [] |
| | | physicsShape: [] |
| | | tessellationDetail: 0 |
| | | bones: [] |
| | | spriteID: 412349a150598d14da4d7140df5c0286 |
| | | vertices: [] |
| | | indices: |
| | | edges: [] |
| | | weights: [] |
| | | - serializedVersion: 2 |
| | | name: EmojiOne_13 |
| | | rect: |
| | | serializedVersion: 2 |
| | | x: 128 |
| | | y: 0 |
| | | width: 128 |
| | | height: 128 |
| | | alignment: 0 |
| | | pivot: {x: 0.5, y: 0.5} |
| | | border: {x: 0, y: 0, z: 0, w: 0} |
| | | outline: [] |
| | | physicsShape: [] |
| | | tessellationDetail: 0 |
| | | bones: [] |
| | | spriteID: a937464b42bb3634782dea34c6becb6c |
| | | vertices: [] |
| | | indices: |
| | | edges: [] |
| | | weights: [] |
| | | - serializedVersion: 2 |
| | | name: EmojiOne_5 |
| | | rect: |
| | | serializedVersion: 2 |
| | | x: 256 |
| | | y: 0 |
| | | width: 128 |
| | | height: 128 |
| | | alignment: 0 |
| | | pivot: {x: 0, y: 0} |
| | | border: {x: 0, y: 0, z: 0, w: 0} |
| | | outline: [] |
| | | physicsShape: [] |
| | | tessellationDetail: 0 |
| | | bones: [] |
| | | spriteID: b0f933b217682124dbfc5e6b89abe3d0 |
| | | vertices: [] |
| | | indices: |
| | | edges: [] |
| | | weights: [] |
| | | - serializedVersion: 2 |
| | | name: EmojiOne_14 |
| | | rect: |
| | | serializedVersion: 2 |
| | | x: 128 |
| | | y: 256 |
| | | width: 128 |
| | | height: 128 |
| | | alignment: 0 |
| | | pivot: {x: 0, y: 0} |
| | | border: {x: 0, y: 0, z: 0, w: 0} |
| | | outline: [] |
| | | physicsShape: [] |
| | | tessellationDetail: 0 |
| | | bones: [] |
| | | spriteID: f7235c763afe4434e8bb666750a41096 |
| | | vertices: [] |
| | | indices: |
| | | edges: [] |
| | | weights: [] |
| | | outline: [] |
| | | physicsShape: [] |
| | | bones: [] |
| | | spriteID: 3e32d8f5477abfc43b19066e8ad5032e |
| | | vertices: [] |
| | | indices: |
| | | edges: [] |
| | | weights: [] |
| | | spritePackingTag: |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 78473520b99ac4e4e8f4bcacf6670581 |
| | | TextureImporter: |
| | | internalIDToNameTable: [] |
| | | externalObjects: {} |
| | | serializedVersion: 12 |
| | | mipmaps: |
| | | mipMapMode: 0 |
| | | enableMipMap: 0 |
| | | sRGBTexture: 1 |
| | | linearTexture: 0 |
| | | fadeOut: 0 |
| | | borderMipMap: 0 |
| | | mipMapsPreserveCoverage: 0 |
| | | alphaTestReferenceValue: 0.5 |
| | | mipMapFadeDistanceStart: 1 |
| | | mipMapFadeDistanceEnd: 3 |
| | | bumpmap: |
| | | convertToNormalMap: 0 |
| | | externalNormalMap: 0 |
| | | heightScale: 0.25 |
| | | normalMapFilter: 0 |
| | | flipGreenChannel: 0 |
| | | isReadable: 0 |
| | | streamingMipmaps: 0 |
| | | streamingMipmapsPriority: 0 |
| | | vTOnly: 0 |
| | | ignoreMipmapLimit: 0 |
| | | grayScaleToAlpha: 0 |
| | | generateCubemap: 6 |
| | | cubemapConvolution: 0 |
| | | seamlessCubemap: 0 |
| | | textureFormat: 1 |
| | | maxTextureSize: 2048 |
| | | textureSettings: |
| | | serializedVersion: 2 |
| | | filterMode: 0 |
| | | aniso: 1 |
| | | mipBias: 0 |
| | | wrapU: 1 |
| | | wrapV: 1 |
| | | wrapW: 1 |
| | | nPOTScale: 0 |
| | | lightmap: 0 |
| | | compressionQuality: 50 |
| | | spriteMode: 1 |
| | | spriteExtrude: 1 |
| | | spriteMeshType: 1 |
| | | alignment: 0 |
| | | spritePivot: {x: 0.5, y: 0.5} |
| | | spritePixelsToUnits: 16 |
| | | spriteBorder: {x: 0, y: 0, z: 0, w: 0} |
| | | spriteGenerateFallbackPhysicsShape: 1 |
| | | alphaUsage: 1 |
| | | alphaIsTransparency: 1 |
| | | spriteTessellationDetail: -1 |
| | | textureType: 8 |
| | | textureShape: 1 |
| | | singleChannelComponent: 0 |
| | | flipbookRows: 1 |
| | | flipbookColumns: 1 |
| | | maxTextureSizeSet: 0 |
| | | compressionQualitySet: 0 |
| | | textureFormatSet: 0 |
| | | ignorePngGamma: 0 |
| | | applyGammaDecoding: 0 |
| | | swizzle: 50462976 |
| | | cookieLightType: 0 |
| | | platformSettings: |
| | | - serializedVersion: 3 |
| | | buildTarget: DefaultTexturePlatform |
| | | maxTextureSize: 4096 |
| | | resizeAlgorithm: 0 |
| | | textureFormat: -1 |
| | | textureCompression: 0 |
| | | compressionQuality: 50 |
| | | crunchedCompression: 0 |
| | | allowsAlphaSplitting: 0 |
| | | overridden: 0 |
| | | ignorePlatformSupport: 0 |
| | | androidETC2FallbackOverride: 0 |
| | | forceMaximumCompressionQuality_BC6H_BC7: 0 |
| | | - serializedVersion: 3 |
| | | buildTarget: Standalone |
| | | maxTextureSize: 2048 |
| | | resizeAlgorithm: 0 |
| | | textureFormat: -1 |
| | | textureCompression: 1 |
| | | compressionQuality: 50 |
| | | crunchedCompression: 0 |
| | | allowsAlphaSplitting: 0 |
| | | overridden: 0 |
| | | ignorePlatformSupport: 0 |
| | | androidETC2FallbackOverride: 0 |
| | | forceMaximumCompressionQuality_BC6H_BC7: 0 |
| | | - serializedVersion: 3 |
| | | buildTarget: Server |
| | | maxTextureSize: 2048 |
| | | resizeAlgorithm: 0 |
| | | textureFormat: -1 |
| | | textureCompression: 1 |
| | | compressionQuality: 50 |
| | | crunchedCompression: 0 |
| | | allowsAlphaSplitting: 0 |
| | | overridden: 0 |
| | | ignorePlatformSupport: 0 |
| | | androidETC2FallbackOverride: 0 |
| | | forceMaximumCompressionQuality_BC6H_BC7: 0 |
| | | spriteSheet: |
| | | serializedVersion: 2 |
| | | sprites: [] |
| | | outline: [] |
| | | physicsShape: [] |
| | | bones: [] |
| | | spriteID: 5e97eb03825dee720800000000000000 |
| | | internalID: 0 |
| | | vertices: [] |
| | | indices: |
| | | edges: [] |
| | | weights: [] |
| | | secondaryTextures: [] |
| | | nameFileIdTable: {} |
| | | mipmapLimitGroupName: |
| | | pSDRemoveMatte: 0 |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: c2942e726ac8f6d4d91314b62e2bda74 |
| | | TextureImporter: |
| | | internalIDToNameTable: [] |
| | | externalObjects: {} |
| | | serializedVersion: 12 |
| | | mipmaps: |
| | | mipMapMode: 0 |
| | | enableMipMap: 0 |
| | | sRGBTexture: 1 |
| | | linearTexture: 0 |
| | | fadeOut: 0 |
| | | borderMipMap: 0 |
| | | mipMapsPreserveCoverage: 0 |
| | | alphaTestReferenceValue: 0.5 |
| | | mipMapFadeDistanceStart: 1 |
| | | mipMapFadeDistanceEnd: 3 |
| | | bumpmap: |
| | | convertToNormalMap: 0 |
| | | externalNormalMap: 0 |
| | | heightScale: 0.25 |
| | | normalMapFilter: 0 |
| | | flipGreenChannel: 0 |
| | | isReadable: 0 |
| | | streamingMipmaps: 0 |
| | | streamingMipmapsPriority: 0 |
| | | vTOnly: 0 |
| | | ignoreMipmapLimit: 0 |
| | | grayScaleToAlpha: 0 |
| | | generateCubemap: 6 |
| | | cubemapConvolution: 0 |
| | | seamlessCubemap: 0 |
| | | textureFormat: 1 |
| | | maxTextureSize: 2048 |
| | | textureSettings: |
| | | serializedVersion: 2 |
| | | filterMode: 0 |
| | | aniso: 1 |
| | | mipBias: 0 |
| | | wrapU: 1 |
| | | wrapV: 1 |
| | | wrapW: 1 |
| | | nPOTScale: 0 |
| | | lightmap: 0 |
| | | compressionQuality: 50 |
| | | spriteMode: 1 |
| | | spriteExtrude: 1 |
| | | spriteMeshType: 1 |
| | | alignment: 0 |
| | | spritePivot: {x: 0.5, y: 0.5} |
| | | spritePixelsToUnits: 16 |
| | | spriteBorder: {x: 0, y: 0, z: 0, w: 0} |
| | | spriteGenerateFallbackPhysicsShape: 1 |
| | | alphaUsage: 1 |
| | | alphaIsTransparency: 1 |
| | | spriteTessellationDetail: -1 |
| | | textureType: 8 |
| | | textureShape: 1 |
| | | singleChannelComponent: 0 |
| | | flipbookRows: 1 |
| | | flipbookColumns: 1 |
| | | maxTextureSizeSet: 0 |
| | | compressionQualitySet: 0 |
| | | textureFormatSet: 0 |
| | | ignorePngGamma: 0 |
| | | applyGammaDecoding: 0 |
| | | swizzle: 50462976 |
| | | cookieLightType: 0 |
| | | platformSettings: |
| | | - serializedVersion: 3 |
| | | buildTarget: DefaultTexturePlatform |
| | | maxTextureSize: 4096 |
| | | resizeAlgorithm: 0 |
| | | textureFormat: -1 |
| | | textureCompression: 0 |
| | | compressionQuality: 50 |
| | | crunchedCompression: 0 |
| | | allowsAlphaSplitting: 0 |
| | | overridden: 0 |
| | | ignorePlatformSupport: 0 |
| | | androidETC2FallbackOverride: 0 |
| | | forceMaximumCompressionQuality_BC6H_BC7: 0 |
| | | - serializedVersion: 3 |
| | | buildTarget: Standalone |
| | | maxTextureSize: 2048 |
| | | resizeAlgorithm: 0 |
| | | textureFormat: -1 |
| | | textureCompression: 1 |
| | | compressionQuality: 50 |
| | | crunchedCompression: 0 |
| | | allowsAlphaSplitting: 0 |
| | | overridden: 0 |
| | | ignorePlatformSupport: 0 |
| | | androidETC2FallbackOverride: 0 |
| | | forceMaximumCompressionQuality_BC6H_BC7: 0 |
| | | - serializedVersion: 3 |
| | | buildTarget: Server |
| | | maxTextureSize: 2048 |
| | | resizeAlgorithm: 0 |
| | | textureFormat: -1 |
| | | textureCompression: 1 |
| | | compressionQuality: 50 |
| | | crunchedCompression: 0 |
| | | allowsAlphaSplitting: 0 |
| | | overridden: 0 |
| | | ignorePlatformSupport: 0 |
| | | androidETC2FallbackOverride: 0 |
| | | forceMaximumCompressionQuality_BC6H_BC7: 0 |
| | | spriteSheet: |
| | | serializedVersion: 2 |
| | | sprites: [] |
| | | outline: [] |
| | | physicsShape: [] |
| | | bones: [] |
| | | spriteID: 5e97eb03825dee720800000000000000 |
| | | internalID: 0 |
| | | vertices: [] |
| | | indices: |
| | | edges: [] |
| | | weights: [] |
| | | secondaryTextures: [] |
| | | nameFileIdTable: {} |
| | | mipmapLimitGroupName: |
| | | pSDRemoveMatte: 0 |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |