diff --git a/.github/workflows/npm.yaml b/.github/workflows/npm.yaml deleted file mode 100644 index 27ee31b9..00000000 --- a/.github/workflows/npm.yaml +++ /dev/null @@ -1,25 +0,0 @@ -name: Publish to npm - -on: - push: - tags: - - '*.*.*' - -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - #Install Node.js, with the version 12 and using the registry URL of npm, this could be changed to a custom registry or the GitHub registry. - - uses: actions/setup-node@v1 - with: - node-version: 12 - registry-url: https://registry.npmjs.org/ - - # Command to install the package dependencies - # - run: yarn install - - # Publish to npm - - run: npm publish --access public - env: - NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index cd262045..bd1567a3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,7 +7,8 @@ on: jobs: release: name: Release - runs-on: ubuntu-22.04 + runs-on: ubuntu-latest + if: github.ref == 'refs/heads/release' permissions: contents: write steps: @@ -29,14 +30,14 @@ jobs: filename: "tezos-unity-sdk.zip" exclusions: "*.git* *.github*" - - name: Create unitypackageFiles + - name: Create .unitypackage Files run: | echo "Assets/TezosUnitySdk.meta" > unitypackageFiles mv Assets/TezosUnitySdk/Samples~ Assets/TezosUnitySdk/Samples - find ./Assets/TezosUnitySdk/ -name \*.meta ! -path "./Assets/TezosUnitySdk/Tests*" ! -path "./Assets/TezosUnitySdk/*.md.meta" >> unitypackageFiles + find ./Assets/TezosUnitySdk/ -name \*.meta ! -path "./Assets/TezosUnitySdk/Tests*" ! -path "./Assets/TezosUnitySdk/*.md.meta" ! -name "CODEOWNERS" >> unitypackageFiles - - name: Create unitypackage - uses: pCYSl5EDgo/create-unitypackage@master + - name: Create .unitypackage + uses: cnbrk13/create-unitypackage@master with: package-path: 'TezosUnitySdk.unitypackage' include-files: unitypackageFiles diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml deleted file mode 100644 index df551cd1..00000000 --- a/.github/workflows/tests.yaml +++ /dev/null @@ -1,38 +0,0 @@ -name: Run Unity Tests -on: [ pull_request, workflow_dispatch ] - -jobs: - tests: - permissions: write-all - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2 - - - name: copy dir to new dir - run: | - pwd - folderName=$(echo "${PWD##*/}") - rsync -r "$GITHUB_WORKSPACE" "copiedProject" - ls -F "copiedProject/$folderName" - - name: Run tests - id: runTests - uses: trudeaua21/unity-test-runner@main - env: - UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }} - with: - githubToken: ${{ secrets.GITHUB_TOKEN }} - projectPath: ./copiedProject/tezos-unity-sdk - unityVersion: "2021.3.22f1" - testMode: all - # coverageOptions: 'generateAdditionalMetrics;generateHtmlReport;generateBadgeReport;assemblyFilters:+tezos-unity-sdk.*,-*Tests*' - artifactsPath: result-artifacts - packageMode: true - - # Upload results - - name: Upload test results - uses: actions/upload-artifact@v3 - with: - name: Package Coverage results (all) - path: ${{ steps.runTests.outputs.artifactsPath }} - retention-days: 1 diff --git a/.gitignore b/.gitignore index 3b58c0ce..2647bcb4 100644 --- a/.gitignore +++ b/.gitignore @@ -250,3 +250,5 @@ dist WebGLFrontend/node_modules/ WebGLFrontend/node_modules.meta WebGLFrontend/dist/ +Samples~.meta +CHANGELOG.md.meta diff --git a/CHANGELOG.md b/CHANGELOG.md index 216a3f8a..55eae681 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,41 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [3.0.0] - 2023-01-09 +### Added +- Tutorial scenes within the `Tutorials` folder, offering step-by-step guidance on SDK features. +- Centralised event management system `WalletEventManager.cs` for uniform event handling. +- `TezosManager` as a singleton pattern and as a prefab for easy SDK initialization and management. +- `TezosAuthenticator.prefab` to streamline user authentication processes with drag-and-drop setup. +- `TezosConfigSO` and `DataProviderConfigSO` for flexible and user-friendly SDK configuration management. + +### Changed +- Folder restructuring and namespace adjustments for clarity and better organization. +- Renaming of classes and files across the SDK to enhance understandability (e.g., `DemoExample` to `Marketplace Example` and `NftApi Sample` to `Nft Api Example`). +- Refactored HTTP client construction to utilise `DataProviderConfigSO` for data settings. +- Namespace adjustments to reflect the new folder structure. +- Update of `package.json` to provide better descriptions and categorisation of samples. +- Improvement and consolidation of log messages and error handling throughout the SDK. +- Major code cleanups and refactoring across multiple files (`BeaconClientManager.cs`, `WalletProvider.cs`, `Tezos.cs`, and others) for readability and maintainability. + +### Removed +- Obsolete scripts, e.g., `WalletProviderInfo`, `ApiTests` and Unity events and prefabs associated with outdated functionalities. +- Unused fields and refactored classes to remove redundant methods and streamline interfaces (e.g., changes in `IBeaconConnector`). + +### Fixed +- Enhanced UI responsiveness and visual aesthetics. +- Resolved TypeScript serialization issues on the WebGL frontend. +- Bug fixes in `GetContractTokenIds` handling of zero token counts. +- Miscellaneous bug fixes and improved error handling throughout the codebase. + +### Deprecated +- Phased out classes and methods that have been replaced by the new event management system and singleton patterns. +- Deprecated `TezosSingleton.cs` in favor of `TezosManager.cs`. + +## [Migration Notes] +- Due to extensive changes, users are encouraged to review the changed file paths and updated namespaces to ensure compatibility with the new version. +- Custom implementations should be revised to work with the new central event manager (`WalletEventManager.cs`). + ## [2.0.7] - 2023-10-24 ### Added @@ -169,7 +204,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added auto releases with GH actions -[unreleased]: https://github.com/trilitech/tezos-unity-sdk/compare/2.0.7...HEAD +[unreleased]: https://github.com/trilitech/tezos-unity-sdk/compare/3.0.0...HEAD +[3.0.0]: https://github.com/trilitech/tezos-unity-sdk/releases/tag/3.0.0 [2.0.7]: https://github.com/trilitech/tezos-unity-sdk/releases/tag/2.0.7 [2.0.6]: https://github.com/trilitech/tezos-unity-sdk/releases/tag/2.0.6 [2.0.5]: https://github.com/trilitech/tezos-unity-sdk/releases/tag/2.0.5 diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 00000000..aaddf789 --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1 @@ +* @asutosh-mourya @cnbrk13 \ No newline at end of file diff --git a/Samples~/Contracts/FA2/balance_of.jsligo.meta b/CODEOWNERS.meta similarity index 74% rename from Samples~/Contracts/FA2/balance_of.jsligo.meta rename to CODEOWNERS.meta index fabbbdab..69cdc76d 100644 --- a/Samples~/Contracts/FA2/balance_of.jsligo.meta +++ b/CODEOWNERS.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 803572c38b4eb4852abb616c0f0528ae +guid: 556a1148f1e54ef89ce92dd844fc8ef5 DefaultImporter: externalObjects: {} userData: diff --git a/Editor/IssueReportFormWindow.cs b/Editor/IssueReportFormWindow.cs deleted file mode 100644 index b166b330..00000000 --- a/Editor/IssueReportFormWindow.cs +++ /dev/null @@ -1,161 +0,0 @@ -using UnityEditor; -using UnityEngine; -using System.IO; -using Newtonsoft.Json.Linq; -using UnityEngine.Networking; - -namespace TezosSDK.Editor.Windows -{ - public class IssueReportFormWindow : EditorWindow - { - private string issueDefinition = ""; - private string email = ""; - private string stepsToReproduce = ""; - private string additionalContext = ""; - private string unityVersion = ""; - private string sdkVersion = ""; - private string[] issueTypes = new string[] {"Select a issue type...", "Fix", "Critical Bug", "Bug", "Feature", "Other"}; - private int issueTypeIndex = 0; - private string errorMessage = ""; - private string successMessage = ""; - - [MenuItem("Tools/Tezos SDK for Unity/Report an Issue")] - public static void ShowWindow() - { - GetWindow("Issue Report Form"); - } - - private void OnGUI() - { - GUILayout.Label("Issue Report Form", EditorStyles.boldLabel); - EditorGUILayout.Space(); - - EditorGUILayout.LabelField("Issue Definition*", GUILayout.Width(100)); - issueDefinition = EditorGUILayout.TextArea(issueDefinition, GUILayout.Height(60)); - EditorGUILayout.Space(); - - EditorGUILayout.LabelField("Steps To Reproduce (Optional)", GUILayout.Width(200)); - stepsToReproduce = EditorGUILayout.TextArea(stepsToReproduce, GUILayout.Height(60)); - EditorGUILayout.Space(); - - EditorGUILayout.LabelField("Additional Context (Optional)", GUILayout.Width(200)); - additionalContext = EditorGUILayout.TextArea(additionalContext, GUILayout.Height(60)); - EditorGUILayout.Space(); - - if (string.IsNullOrEmpty(unityVersion)) - { - unityVersion = Application.unityVersion; - } - - unityVersion = EditorGUILayout.TextField("Unity Version*", unityVersion); - EditorGUILayout.Space(); - - if (string.IsNullOrEmpty(sdkVersion)) - { - sdkVersion = GetSDKVersion(); - } - - sdkVersion = EditorGUILayout.TextField("SDK Version*", sdkVersion); - EditorGUILayout.Space(); - - email = EditorGUILayout.TextField("Email (Optional)", email); - EditorGUILayout.Space(); - - issueTypeIndex = EditorGUILayout.Popup("Issue Type*", issueTypeIndex, issueTypes); - EditorGUILayout.Space(); - - ValidateFields(); - - if (!string.IsNullOrEmpty(errorMessage)) - { - EditorGUILayout.HelpBox(errorMessage, MessageType.Error); - } - - if (!string.IsNullOrEmpty(successMessage)) - { - EditorGUILayout.HelpBox(successMessage, MessageType.Info); - } - - if (GUILayout.Button("Submit")) - { - SubmitReport(); - } - } - - private string GetSDKVersion() - { - string rootPath = Application.dataPath; - string[] directories = Directory.GetDirectories(rootPath, "*", SearchOption.AllDirectories); - - string packageJsonPath = ""; - - foreach (string directory in directories) - { - if (directory.EndsWith("tezos-unity-sdk") || directory.EndsWith("Tezos Unity SDK")) - { - packageJsonPath = Path.Combine(directory, "package.json"); - break; - } - } - - if (!string.IsNullOrEmpty(packageJsonPath) && File.Exists(packageJsonPath)) - { - string json = File.ReadAllText(packageJsonPath); - JObject obj = JObject.Parse(json); - return (string) obj["version"]; - } - else - { - Debug.LogError("Issue Report Form: package.json file not found"); - return ""; - } - } - - private void ValidateFields() - { - if (string.IsNullOrEmpty(issueDefinition)) - { - errorMessage = "Issue Definition is required."; - } - else if (string.IsNullOrEmpty(unityVersion)) - { - errorMessage = "Unity Version is required."; - } - else if (string.IsNullOrEmpty(sdkVersion)) - { - errorMessage = "SDK Version is required."; - } - else if (issueTypeIndex == 0) - { - errorMessage = "Issue Type is required."; - } - else - { - errorMessage = ""; - } - } - - private void SubmitReport() - { - successMessage = ""; - - ValidateFields(); - - if (!string.IsNullOrEmpty(errorMessage)) - return; - - string url = "https://docs.google.com/forms/d/e/1FAIpQLScUslljbVpQztjqB96D2c8dSlPpeYkM2sJdZlnOz7qyN3g4nw/formResponse?usp=pp_url"; - url += "&entry.2052348936=" + UnityWebRequest.EscapeURL(issueDefinition); - url += "&entry.1859623235=" + UnityWebRequest.EscapeURL(stepsToReproduce); - url += "&entry.1214054480=" + UnityWebRequest.EscapeURL(additionalContext); - url += "&entry.1889569160=" + UnityWebRequest.EscapeURL(unityVersion); - url += "&entry.1546304813=" + UnityWebRequest.EscapeURL(sdkVersion); - url += "&entry.334812445=" + UnityWebRequest.EscapeURL(email); - url += "&entry.1713563215=" + UnityWebRequest.EscapeURL(issueTypes[issueTypeIndex]); - url += "&submit=Submit"; - - Application.OpenURL(url); - successMessage = "Report submitted. Thanks!"; - } - } -} diff --git a/Runtime/Plugins/Newtonsoft.Json AOT.meta b/Editor/Scripts.meta similarity index 77% rename from Runtime/Plugins/Newtonsoft.Json AOT.meta rename to Editor/Scripts.meta index 07cb02ed..83552925 100644 --- a/Runtime/Plugins/Newtonsoft.Json AOT.meta +++ b/Editor/Scripts.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 793bdc0667ed017448ebfc2b29db3cce +guid: 7c8282a0b02eb44ebbe4d414cf69e58d folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Editor/Scripts/IssueReportFormWindow.cs b/Editor/Scripts/IssueReportFormWindow.cs new file mode 100644 index 00000000..f978f322 --- /dev/null +++ b/Editor/Scripts/IssueReportFormWindow.cs @@ -0,0 +1,170 @@ +using System.IO; +using Unity.Plastic.Newtonsoft.Json.Linq; +using UnityEditor; +using UnityEngine; +using UnityEngine.Networking; + +namespace TezosSDK.Editor.Scripts +{ + + public class IssueReportFormWindow : EditorWindow + { + private readonly string[] issueTypes = + { + "Select a issue type...", "Fix", "Critical Bug", "Bug", "Feature", "Other" + }; + private string additionalContext = ""; + private string email = ""; + private string errorMessage = ""; + private string issueDefinition = ""; + private int issueTypeIndex; + private string sdkVersion = ""; + private string stepsToReproduce = ""; + private string successMessage = ""; + private string unityVersion = ""; + + private void OnGUI() + { + GUILayout.Label("Issue Report Form", EditorStyles.boldLabel); + EditorGUILayout.Space(); + + EditorGUILayout.LabelField("Issue Definition*", GUILayout.Width(100)); + issueDefinition = EditorGUILayout.TextArea(issueDefinition, GUILayout.Height(60)); + EditorGUILayout.Space(); + + EditorGUILayout.LabelField("Steps To Reproduce (Optional)", GUILayout.Width(200)); + stepsToReproduce = EditorGUILayout.TextArea(stepsToReproduce, GUILayout.Height(60)); + EditorGUILayout.Space(); + + EditorGUILayout.LabelField("Additional Context (Optional)", GUILayout.Width(200)); + additionalContext = EditorGUILayout.TextArea(additionalContext, GUILayout.Height(60)); + EditorGUILayout.Space(); + + if (string.IsNullOrEmpty(unityVersion)) + { + unityVersion = Application.unityVersion; + } + + unityVersion = EditorGUILayout.TextField("Unity Version*", unityVersion); + EditorGUILayout.Space(); + + if (string.IsNullOrEmpty(sdkVersion)) + { + sdkVersion = GetSDKVersion(); + } + + sdkVersion = EditorGUILayout.TextField("SDK Version*", sdkVersion); + EditorGUILayout.Space(); + + email = EditorGUILayout.TextField("Email (Optional)", email); + EditorGUILayout.Space(); + + issueTypeIndex = EditorGUILayout.Popup("Issue Type*", issueTypeIndex, issueTypes); + EditorGUILayout.Space(); + + ValidateFields(); + + if (!string.IsNullOrEmpty(errorMessage)) + { + EditorGUILayout.HelpBox(errorMessage, MessageType.Error); + } + + if (!string.IsNullOrEmpty(successMessage)) + { + EditorGUILayout.HelpBox(successMessage, MessageType.Info); + } + + if (GUILayout.Button("Submit")) + { + SubmitReport(); + } + } + + [MenuItem("Tools/Tezos SDK for Unity/Report an Issue")] + public static void ShowWindow() + { + GetWindow("Issue Report Form"); + } + + private string GetSDKVersion() + { + var rootPath = Application.dataPath; + var directories = Directory.GetDirectories(rootPath, "*", SearchOption.AllDirectories); + + var packageJsonPath = ""; + + foreach (var directory in directories) + { + if (!directory.EndsWith("tezos-unity-sdk") && !directory.EndsWith("Tezos Unity SDK")) + { + continue; + } + + packageJsonPath = Path.Combine(directory, "package.json"); + break; + } + + if (!string.IsNullOrEmpty(packageJsonPath) && File.Exists(packageJsonPath)) + { + var json = File.ReadAllText(packageJsonPath); + var obj = JObject.Parse(json); + return (string)obj["version"]; + } + + Debug.LogError("Issue Report Form: package.json file not found"); + return ""; + } + + private void SubmitReport() + { + successMessage = ""; + + ValidateFields(); + + if (!string.IsNullOrEmpty(errorMessage)) + { + return; + } + + var url = + "https://docs.google.com/forms/d/e/1FAIpQLScUslljbVpQztjqB96D2c8dSlPpeYkM2sJdZlnOz7qyN3g4nw/formResponse?usp=pp_url"; + + url += "&entry.2052348936=" + UnityWebRequest.EscapeURL(issueDefinition); + url += "&entry.1859623235=" + UnityWebRequest.EscapeURL(stepsToReproduce); + url += "&entry.1214054480=" + UnityWebRequest.EscapeURL(additionalContext); + url += "&entry.1889569160=" + UnityWebRequest.EscapeURL(unityVersion); + url += "&entry.1546304813=" + UnityWebRequest.EscapeURL(sdkVersion); + url += "&entry.334812445=" + UnityWebRequest.EscapeURL(email); + url += "&entry.1713563215=" + UnityWebRequest.EscapeURL(issueTypes[issueTypeIndex]); + url += "&submit=Submit"; + + Application.OpenURL(url); + successMessage = "Report submitted. Thanks!"; + } + + private void ValidateFields() + { + if (string.IsNullOrEmpty(issueDefinition)) + { + errorMessage = "Issue Definition is required."; + } + else if (string.IsNullOrEmpty(unityVersion)) + { + errorMessage = "Unity Version is required."; + } + else if (string.IsNullOrEmpty(sdkVersion)) + { + errorMessage = "SDK Version is required."; + } + else if (issueTypeIndex == 0) + { + errorMessage = "Issue Type is required."; + } + else + { + errorMessage = ""; + } + } + } + +} \ No newline at end of file diff --git a/Editor/IssueReportFormWindow.cs.meta b/Editor/Scripts/IssueReportFormWindow.cs.meta similarity index 100% rename from Editor/IssueReportFormWindow.cs.meta rename to Editor/Scripts/IssueReportFormWindow.cs.meta diff --git a/Editor/Scripts/TezosManagerEditor.cs b/Editor/Scripts/TezosManagerEditor.cs new file mode 100644 index 00000000..fbaa8dea --- /dev/null +++ b/Editor/Scripts/TezosManagerEditor.cs @@ -0,0 +1,45 @@ +using TezosSDK.Tezos; +using UnityEditor; +using UnityEngine; + +namespace TezosSDK.Editor.Scripts +{ + + [CustomEditor(typeof(TezosManager))] + public class TezosManagerEditor : UnityEditor.Editor + { + private Texture2D logo; + + private void OnEnable() + { + logo = (Texture2D)Resources.Load("tezos-logo"); + } + + public override void OnInspectorGUI() + { + GUILayout.Space(10); + + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + GUILayout.Label("Tezos SDK Manager", EditorStyles.boldLabel); + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + + GUILayout.Space(10); + + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + GUILayout.Label(logo, GUILayout.Width(90), GUILayout.Height(90)); + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + + GUILayout.Space(10); + + // Draw fields excluding the script reference + serializedObject.Update(); + DrawPropertiesExcluding(serializedObject, "m_Script"); + serializedObject.ApplyModifiedProperties(); + } + } + +} \ No newline at end of file diff --git a/Editor/Scripts/TezosManagerEditor.cs.meta b/Editor/Scripts/TezosManagerEditor.cs.meta new file mode 100644 index 00000000..4d39a7ae --- /dev/null +++ b/Editor/Scripts/TezosManagerEditor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ca37b8809c19407e903685e5aa5b2fc8 +timeCreated: 1699104479 \ No newline at end of file diff --git a/Resources/tezos-logo.png b/Resources/tezos-logo.png new file mode 100644 index 00000000..7d2ec872 Binary files /dev/null and b/Resources/tezos-logo.png differ diff --git a/Resources/tezos-logo.png.meta b/Resources/tezos-logo.png.meta new file mode 100644 index 00000000..05914ecc --- /dev/null +++ b/Resources/tezos-logo.png.meta @@ -0,0 +1,166 @@ +fileFormatVersion: 2 +guid: 05a69db801ca8474c993d67beafb0eae +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: 1 + 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: 200 + 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: 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: WebGL + 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: 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: iPhone + 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: Android + 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: diff --git a/Runtime/Art/Button.png b/Runtime/Art/Button.png new file mode 100644 index 00000000..82047569 Binary files /dev/null and b/Runtime/Art/Button.png differ diff --git a/Runtime/Art/Button.png.meta b/Runtime/Art/Button.png.meta new file mode 100644 index 00000000..cd38ba2f --- /dev/null +++ b/Runtime/Art/Button.png.meta @@ -0,0 +1,166 @@ +fileFormatVersion: 2 +guid: f8f8f8eb4d49f47a0b0ae6d9b46fa215 +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: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 16, y: 16, z: 16, w: 16} + 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: 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: WebGL + 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: 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: iPhone + 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: Android + 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: 1537655665 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Art/Dark_BG.png b/Runtime/Art/Dark_BG.png new file mode 100644 index 00000000..176cbb98 Binary files /dev/null and b/Runtime/Art/Dark_BG.png differ diff --git a/Runtime/Art/Dark_BG.png.meta b/Runtime/Art/Dark_BG.png.meta new file mode 100644 index 00000000..c143dd4f --- /dev/null +++ b/Runtime/Art/Dark_BG.png.meta @@ -0,0 +1,166 @@ +fileFormatVersion: 2 +guid: dfba7daef3c114d23b1f3d2637bbe1c7 +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: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 256 + spriteBorder: {x: 14, y: 14, z: 14, w: 14} + 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: 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: WebGL + 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: 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: iPhone + 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: Android + 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: 1537655665 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Art/Icons/Back_Icon.png b/Runtime/Art/Icons/Back_Icon.png new file mode 100644 index 00000000..9a7f1fba Binary files /dev/null and b/Runtime/Art/Icons/Back_Icon.png differ diff --git a/Runtime/Art/Icons/Back_Icon.png.meta b/Runtime/Art/Icons/Back_Icon.png.meta new file mode 100644 index 00000000..2e67365b --- /dev/null +++ b/Runtime/Art/Icons/Back_Icon.png.meta @@ -0,0 +1,166 @@ +fileFormatVersion: 2 +guid: e45f8efa737754a9ba34ae95cccf6c0a +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: 1 + 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: 100 + 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: 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: WebGL + 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: 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: iPhone + 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: Android + 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: diff --git a/Runtime/Art/Icons/Contract_Icon.png b/Runtime/Art/Icons/Contract_Icon.png new file mode 100644 index 00000000..3c2214e7 Binary files /dev/null and b/Runtime/Art/Icons/Contract_Icon.png differ diff --git a/Runtime/Art/Icons/Contract_Icon.png.meta b/Runtime/Art/Icons/Contract_Icon.png.meta new file mode 100644 index 00000000..cee4e7ae --- /dev/null +++ b/Runtime/Art/Icons/Contract_Icon.png.meta @@ -0,0 +1,166 @@ +fileFormatVersion: 2 +guid: 72e3141756a48445e8c4827ae6f64cb4 +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: 1 + 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: 100 + 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: 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: WebGL + 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: 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: iPhone + 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: Android + 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: diff --git a/Runtime/Art/Icons/Mint_Icon.png b/Runtime/Art/Icons/Mint_Icon.png new file mode 100644 index 00000000..ef1adafa Binary files /dev/null and b/Runtime/Art/Icons/Mint_Icon.png differ diff --git a/Runtime/Art/Icons/Mint_Icon.png.meta b/Runtime/Art/Icons/Mint_Icon.png.meta new file mode 100644 index 00000000..9f89a9c0 --- /dev/null +++ b/Runtime/Art/Icons/Mint_Icon.png.meta @@ -0,0 +1,166 @@ +fileFormatVersion: 2 +guid: a16ea38d0e70d4fa18bfe4e7db808d16 +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: 1 + 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: 100 + 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: 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: WebGL + 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: 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: iPhone + 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: Android + 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: diff --git a/Runtime/Art/Icons/TezosLogo_Text_Icon_White.png b/Runtime/Art/Icons/TezosLogo_Text_Icon_White.png new file mode 100644 index 00000000..21664199 Binary files /dev/null and b/Runtime/Art/Icons/TezosLogo_Text_Icon_White.png differ diff --git a/Runtime/Art/Icons/TezosLogo_Text_Icon_White.png.meta b/Runtime/Art/Icons/TezosLogo_Text_Icon_White.png.meta new file mode 100644 index 00000000..b8477807 --- /dev/null +++ b/Runtime/Art/Icons/TezosLogo_Text_Icon_White.png.meta @@ -0,0 +1,166 @@ +fileFormatVersion: 2 +guid: 1910d1f1c8bca4ccdaded51f598034f7 +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: 1 + 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: 100 + 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: 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: WebGL + 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: 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: iPhone + 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: Android + 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: diff --git a/Runtime/Art/Icons/Upload_Icon.png b/Runtime/Art/Icons/Upload_Icon.png new file mode 100644 index 00000000..dab1c956 Binary files /dev/null and b/Runtime/Art/Icons/Upload_Icon.png differ diff --git a/Runtime/Art/Icons/Upload_Icon.png.meta b/Runtime/Art/Icons/Upload_Icon.png.meta new file mode 100644 index 00000000..49d090cc --- /dev/null +++ b/Runtime/Art/Icons/Upload_Icon.png.meta @@ -0,0 +1,166 @@ +fileFormatVersion: 2 +guid: a25f34f8e1bff4b13a67670f63e5694e +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: 1 + 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: 100 + 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: 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: WebGL + 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: 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: iPhone + 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: Android + 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: diff --git a/Runtime/Art/Light_BG.png b/Runtime/Art/Light_BG.png new file mode 100644 index 00000000..754828ab Binary files /dev/null and b/Runtime/Art/Light_BG.png differ diff --git a/Runtime/Art/Light_BG.png.meta b/Runtime/Art/Light_BG.png.meta new file mode 100644 index 00000000..8723eb50 --- /dev/null +++ b/Runtime/Art/Light_BG.png.meta @@ -0,0 +1,166 @@ +fileFormatVersion: 2 +guid: 5da0899bf713f4d0ebc0ad8c4360165e +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: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 200 + spriteBorder: {x: 46, y: 46, z: 46, w: 46} + 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: 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: WebGL + 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: 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: iPhone + 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: Android + 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: 1537655665 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Art/Logout_Button.png b/Runtime/Art/Logout_Button.png new file mode 100644 index 00000000..2cc13601 Binary files /dev/null and b/Runtime/Art/Logout_Button.png differ diff --git a/Runtime/Art/Logout_Button.png.meta b/Runtime/Art/Logout_Button.png.meta new file mode 100644 index 00000000..e657d339 --- /dev/null +++ b/Runtime/Art/Logout_Button.png.meta @@ -0,0 +1,166 @@ +fileFormatVersion: 2 +guid: 08973aa58de0c47f685495834972712a +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: 1 + 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: 100 + 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: 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: WebGL + 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: 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: iPhone + 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: Android + 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: diff --git a/Runtime/Art/Transfer_Icon.png b/Runtime/Art/Transfer_Icon.png new file mode 100644 index 00000000..2d3ea5cd Binary files /dev/null and b/Runtime/Art/Transfer_Icon.png differ diff --git a/Runtime/Art/Transfer_Icon.png.meta b/Runtime/Art/Transfer_Icon.png.meta new file mode 100644 index 00000000..9c307ff5 --- /dev/null +++ b/Runtime/Art/Transfer_Icon.png.meta @@ -0,0 +1,166 @@ +fileFormatVersion: 2 +guid: 2ed7fd6abe05a4e989fab9be05800cb0 +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: 1 + 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: 100 + 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: 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: WebGL + 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: 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: iPhone + 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: Android + 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: diff --git a/Runtime/Plugins/Newtonsoft.Json AOT/Newtonsoft.Json.deps.json b/Runtime/Plugins/Newtonsoft.Json AOT/Newtonsoft.Json.deps.json deleted file mode 100644 index d3f3acd3..00000000 --- a/Runtime/Plugins/Newtonsoft.Json AOT/Newtonsoft.Json.deps.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "runtimeTarget": { - "name": ".NETStandard,Version=v2.0/", - "signature": "" - }, - "compilationOptions": {}, - "targets": { - ".NETStandard,Version=v2.0": {}, - ".NETStandard,Version=v2.0/": { - "Newtonsoft.Json/13.0.102": { - "dependencies": { - "Microsoft.CodeAnalysis.NetAnalyzers": "5.0.3", - "NETStandard.Library": "2.0.3" - }, - "runtime": { - "Newtonsoft.Json.dll": {} - } - }, - "Microsoft.CodeAnalysis.NetAnalyzers/5.0.3": {}, - "Microsoft.NETCore.Platforms/1.1.0": {}, - "NETStandard.Library/2.0.3": { - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0" - } - } - } - }, - "libraries": { - "Newtonsoft.Json/13.0.102": { - "type": "project", - "serviceable": false, - "sha512": "" - }, - "Microsoft.CodeAnalysis.NetAnalyzers/5.0.3": { - "type": "package", - "serviceable": true, - "sha512": "sha512-7rw0JUPSAVGR0HPekQiQvwGPor44p/Ek21+wZABraG4bVYNrSkx98ZZsxSxG5jJ4oqjACJxea8E62UO0dsKDBw==", - "path": "microsoft.codeanalysis.netanalyzers/5.0.3", - "hashPath": "microsoft.codeanalysis.netanalyzers.5.0.3.nupkg.sha512" - }, - "Microsoft.NETCore.Platforms/1.1.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==", - "path": "microsoft.netcore.platforms/1.1.0", - "hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512" - }, - "NETStandard.Library/2.0.3": { - "type": "package", - "serviceable": true, - "sha512": "sha512-st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", - "path": "netstandard.library/2.0.3", - "hashPath": "netstandard.library.2.0.3.nupkg.sha512" - } - } -} \ No newline at end of file diff --git a/Runtime/Plugins/Newtonsoft.Json AOT/Newtonsoft.Json.dll b/Runtime/Plugins/Newtonsoft.Json AOT/Newtonsoft.Json.dll deleted file mode 100644 index eba7989e..00000000 Binary files a/Runtime/Plugins/Newtonsoft.Json AOT/Newtonsoft.Json.dll and /dev/null differ diff --git a/Runtime/Plugins/Newtonsoft.Json AOT/Newtonsoft.Json.dll.meta b/Runtime/Plugins/Newtonsoft.Json AOT/Newtonsoft.Json.dll.meta deleted file mode 100644 index f82f2cc1..00000000 --- a/Runtime/Plugins/Newtonsoft.Json AOT/Newtonsoft.Json.dll.meta +++ /dev/null @@ -1,129 +0,0 @@ -fileFormatVersion: 2 -guid: 6c694cfdc33ae264fb33e0cd1c7e25cf -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 1 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - '': Any - second: - enabled: 0 - settings: - Exclude Android: 0 - Exclude Editor: 1 - Exclude Linux: 0 - Exclude Linux64: 0 - Exclude LinuxUniversal: 0 - Exclude OSXUniversal: 0 - Exclude WebGL: 0 - Exclude Win: 0 - Exclude Win64: 0 - Exclude WindowsStoreApps: 0 - Exclude iOS: 0 - Exclude tvOS: 0 - - first: - Android: Android - second: - enabled: 1 - settings: - CPU: ARMv7 - - first: - Any: - second: - enabled: 1 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Facebook: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Linux - second: - enabled: 1 - settings: - CPU: x86 - - first: - Standalone: Linux64 - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Standalone: LinuxUniversal - second: - enabled: 1 - settings: {} - - first: - Standalone: OSXUniversal - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Standalone: Win - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - WebGL: WebGL - second: - enabled: 1 - settings: {} - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 1 - settings: - CPU: AnyCPU - DontProcess: false - PlaceholderPath: - SDK: AnySDK - ScriptingBackend: AnyScriptingBackend - - first: - iPhone: iOS - second: - enabled: 1 - settings: - AddToEmbeddedBinaries: false - CompileFlags: - FrameworkDependencies: - - first: - tvOS: tvOS - second: - enabled: 1 - settings: - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Plugins/Newtonsoft.Json AOT/Newtonsoft.Json.xml b/Runtime/Plugins/Newtonsoft.Json AOT/Newtonsoft.Json.xml deleted file mode 100644 index dc07471a..00000000 --- a/Runtime/Plugins/Newtonsoft.Json AOT/Newtonsoft.Json.xml +++ /dev/null @@ -1,11283 +0,0 @@ - - - - Newtonsoft.Json - - - - - Represents a BSON Oid (object id). - - - - - Gets or sets the value of the Oid. - - The value of the Oid. - - - - Initializes a new instance of the class. - - The Oid value. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. - - - - - Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary. - - - true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. - - - - - Gets or sets a value indicating whether the root object will be read as a JSON array. - - - true if the root object will be read as a JSON array; otherwise, false. - - - - - Gets or sets the used when reading values from BSON. - - The used when reading values from BSON. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. - - - - - Gets or sets the used when writing values to BSON. - When set to no conversion will occur. - - The used when writing values to BSON. - - - - Initializes a new instance of the class. - - The to write to. - - - - Initializes a new instance of the class. - - The to write to. - - - - Flushes whatever is in the buffer to the underlying and also flushes the underlying stream. - - - - - Writes the end. - - The token. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes the beginning of a JSON array. - - - - - Writes the beginning of a JSON object. - - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Closes this writer. - If is set to true, the underlying is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value that represents a BSON object id. - - The Object ID value to write. - - - - Writes a BSON regex. - - The regex pattern. - The regex options. - - - - Specifies how constructors are used when initializing objects during deserialization by the . - - - - - First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor. - - - - - Json.NET will use a non-public default constructor before falling back to a parameterized constructor. - - - - - Converts a binary value to and from a base 64 string value. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Creates a custom object. - - The object type to convert. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Creates an object which will then be populated by the serializer. - - Type of the object. - The created object. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can write JSON. - - - true if this can write JSON; otherwise, false. - - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Provides a base class for converting a to and from JSON. - - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a F# discriminated union type to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an Entity Framework to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can write JSON. - - - true if this can write JSON; otherwise, false. - - - - - Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z"). - - - - - Gets or sets the date time styles used when converting a date to and from JSON. - - The date time styles used when converting a date to and from JSON. - - - - Gets or sets the date time format used when converting a date to and from JSON. - - The date time format used when converting a date to and from JSON. - - - - Gets or sets the culture used when converting a date to and from JSON. - - The culture used when converting a date to and from JSON. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an to and from its name string value. - - - - - Gets or sets a value indicating whether the written enum text should be camel case. - The default value is false. - - true if the written enum text will be camel case; otherwise, false. - - - - Gets or sets the naming strategy used to resolve how enum text is written. - - The naming strategy used to resolve how enum text is written. - - - - Gets or sets a value indicating whether integer values are allowed when serializing and deserializing. - The default value is true. - - true if integers are allowed when serializing and deserializing; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - true if the written enum text will be camel case; otherwise, false. - - - - Initializes a new instance of the class. - - The naming strategy used to resolve how enum text is written. - true if integers are allowed when serializing and deserializing; otherwise, false. - - - - Initializes a new instance of the class. - - The of the used to write enum text. - - - - Initializes a new instance of the class. - - The of the used to write enum text. - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - - Initializes a new instance of the class. - - The of the used to write enum text. - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - true if integers are allowed when serializing and deserializing; otherwise, false. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from Unix epoch time - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Converts a to and from a string (e.g. "1.2.3.4"). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts XML to and from JSON. - - - - - Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements. - - The name of the deserialized root element. - - - - Gets or sets a value to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - true if the array attribute is written to the XML; otherwise, false. - - - - Gets or sets a value indicating whether to write the root JSON object. - - true if the JSON root object is omitted; otherwise, false. - - - - Gets or sets a value indicating whether to encode special characters when converting JSON to XML. - If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify - XML namespaces, attributes or processing directives. Instead special characters are encoded and written - as part of the XML element name. - - true if special characters are encoded; otherwise, false. - - - - Writes the JSON representation of the object. - - The to write to. - The calling serializer. - The value. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Checks if the is a namespace attribute. - - Attribute name to test. - The attribute name prefix if it has one, otherwise an empty string. - true if attribute name is for a namespace attribute, otherwise false. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Specifies how dates are formatted when writing JSON text. - - - - - Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". - - - - - Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". - - - - - Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. - - - - - Date formatted strings are not parsed to a date type and are read as strings. - - - - - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . - - - - - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . - - - - - Specifies how to treat the time value when converting between string and . - - - - - Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. - - - - - Treat as a UTC. If the object represents a local time, it is converted to a UTC. - - - - - Treat as a local time if a is being converted to a string. - If a string is being converted to , convert to a local time if a time zone is specified. - - - - - Time zone information should be preserved when converting. - - - - - The default JSON name table implementation. - - - - - Initializes a new instance of the class. - - - - - Gets a string containing the same characters as the specified range of characters in the given array. - - The character array containing the name to find. - The zero-based index into the array specifying the first character of the name. - The number of characters in the name. - A string containing the same characters as the specified range of characters in the given array. - - - - Adds the specified string into name table. - - The string to add. - This method is not thread-safe. - The resolved string. - - - - Specifies default value handling options for the . - - - - - - - - - Include members where the member value is the same as the member's default value when serializing objects. - Included members are written to JSON. Has no effect when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - so that it is not written to JSON. - This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, - decimals and floating point numbers; and false for booleans). The default value ignored can be changed by - placing the on the property. - - - - - Members with a default value but no JSON will be set to their default value when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - and set members to their default value when deserializing. - - - - - Specifies float format handling options when writing special floating point numbers, e.g. , - and with . - - - - - Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". - - - - - Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. - Note that this will produce non-valid JSON. - - - - - Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property. - - - - - Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Floating point numbers are parsed to . - - - - - Floating point numbers are parsed to . - - - - - Specifies formatting options for the . - - - - - No special formatting is applied. This is the default. - - - - - Causes child objects to be indented according to the and settings. - - - - - Provides an interface for using pooled arrays. - - The array type content. - - - - Rent an array from the pool. This array must be returned when it is no longer needed. - - The minimum required length of the array. The returned array may be longer. - The rented array from the pool. This array must be returned when it is no longer needed. - - - - Return an array to the pool. - - The array that is being returned. - - - - Provides an interface to enable a class to return line and position information. - - - - - Gets a value indicating whether the class can return line information. - - - true if and can be provided; otherwise, false. - - - - - Gets the current line number. - - The current line number or 0 if no line information is available (for example, when returns false). - - - - Gets the current line position. - - The current line position or 0 if no line information is available (for example, when returns false). - - - - Instructs the how to serialize the collection. - - - - - Gets or sets a value indicating whether null items are allowed in the collection. - - true if null items are allowed in the collection; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with a flag indicating whether the array can contain null items. - - A flag indicating whether the array can contain null items. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Instructs the to use the specified constructor when deserializing that object. - - - - - Instructs the how to serialize the object. - - - - - Gets or sets the id. - - The id. - - - - Gets or sets the title. - - The title. - - - - Gets or sets the description. - - The description. - - - - Gets or sets the collection's items converter. - - The collection's items converter. - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets a value that indicates whether to preserve object references. - - - true to keep object reference; otherwise, false. The default is false. - - - - - Gets or sets a value that indicates whether to preserve collection's items references. - - - true to keep collection's items object references; otherwise, false. The default is false. - - - - - Gets or sets the reference loop handling used when serializing the collection's items. - - The reference loop handling. - - - - Gets or sets the type name handling used when serializing the collection's items. - - The type name handling. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Provides methods for converting between .NET types and JSON types. - - - - - - - - Gets or sets a function that creates default . - Default settings are automatically used by serialization methods on , - and and on . - To serialize without using any default settings create a with - . - - - - - Represents JavaScript's boolean value true as a string. This field is read-only. - - - - - Represents JavaScript's boolean value false as a string. This field is read-only. - - - - - Represents JavaScript's null as a string. This field is read-only. - - - - - Represents JavaScript's undefined as a string. This field is read-only. - - - - - Represents JavaScript's positive infinity as a string. This field is read-only. - - - - - Represents JavaScript's negative infinity as a string. This field is read-only. - - - - - Represents JavaScript's NaN as a string. This field is read-only. - - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the specified. - - The value to convert. - The format the date will be converted to. - The time zone handling when the date is converted to a string. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the specified. - - The value to convert. - The format the date will be converted to. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - The string escape handling. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Serializes the specified object to a JSON string. - - The object to serialize. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting. - - The object to serialize. - Indicates how the output should be formatted. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a collection of . - - The object to serialize. - A collection of converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting and a collection of . - - The object to serialize. - Indicates how the output should be formatted. - A collection of converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using formatting and . - - The object to serialize. - Indicates how the output should be formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - Indicates how the output should be formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - A JSON string representation of the object. - - - - - Deserializes the JSON to a .NET object. - - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to a .NET object using . - - The JSON to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The JSON to deserialize. - The of object being deserialized. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The type of the object to deserialize to. - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the given anonymous type. - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be inferred from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the given anonymous type using . - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be inferred from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The type of the object to deserialize to. - The JSON to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The type of the object to deserialize to. - The object to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The JSON to deserialize. - The type of the object to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The JSON to deserialize. - The type of the object to deserialize to. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Populates the object with values from the JSON string. - - The JSON to populate values from. - The target object to populate values onto. - - - - Populates the object with values from the JSON string using . - - The JSON to populate values from. - The target object to populate values onto. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - - - - Serializes the to a JSON string. - - The node to serialize. - A JSON string of the . - - - - Serializes the to a JSON string using formatting. - - The node to serialize. - Indicates how the output should be formatted. - A JSON string of the . - - - - Serializes the to a JSON string using formatting and omits the root object if is true. - - The node to serialize. - Indicates how the output should be formatted. - Omits writing the root object. - A JSON string of the . - - - - Deserializes the from a JSON string. - - The JSON string. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by . - - The JSON string. - The name of the root element to append when deserializing. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by - and writes a Json.NET array attribute for collections. - - The JSON string. - The name of the root element to append when deserializing. - - A value to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by , - writes a Json.NET array attribute for collections, and encodes special characters. - - The JSON string. - The name of the root element to append when deserializing. - - A value to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - - A value to indicate whether to encode special characters when converting JSON to XML. - If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify - XML namespaces, attributes or processing directives. Instead special characters are encoded and written - as part of the XML element name. - - The deserialized . - - - - Serializes the to a JSON string. - - The node to convert to JSON. - A JSON string of the . - - - - Serializes the to a JSON string using formatting. - - The node to convert to JSON. - Indicates how the output should be formatted. - A JSON string of the . - - - - Serializes the to a JSON string using formatting and omits the root object if is true. - - The node to serialize. - Indicates how the output should be formatted. - Omits writing the root object. - A JSON string of the . - - - - Deserializes the from a JSON string. - - The JSON string. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by . - - The JSON string. - The name of the root element to append when deserializing. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by - and writes a Json.NET array attribute for collections. - - The JSON string. - The name of the root element to append when deserializing. - - A value to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by , - writes a Json.NET array attribute for collections, and encodes special characters. - - The JSON string. - The name of the root element to append when deserializing. - - A value to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - - A value to indicate whether to encode special characters when converting JSON to XML. - If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify - XML namespaces, attributes or processing directives. Instead special characters are encoded and written - as part of the XML element name. - - The deserialized . - - - - Converts an object to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can read JSON. - - true if this can read JSON; otherwise, false. - - - - Gets a value indicating whether this can write JSON. - - true if this can write JSON; otherwise, false. - - - - Converts an object to and from JSON. - - The object type to convert. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. If there is no existing value then null will be used. - The existing value has a value. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Instructs the to use the specified when serializing the member or class. - - - - - Gets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - - - - - Initializes a new instance of the class. - - Type of the . - - - - Initializes a new instance of the class. - - Type of the . - Parameter list to use when constructing the . Can be null. - - - - Represents a collection of . - - - - - Instructs the how to serialize the collection. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Instructs the to deserialize properties with no matching class member into the specified collection - and write values during serialization. - - - - - Gets or sets a value that indicates whether to write extension data when serializing the object. - - - true to write extension data when serializing the object; otherwise, false. The default is true. - - - - - Gets or sets a value that indicates whether to read extension data when deserializing the object. - - - true to read extension data when deserializing the object; otherwise, false. The default is true. - - - - - Initializes a new instance of the class. - - - - - Instructs the not to serialize the public field or public read/write property value. - - - - - Base class for a table of atomized string objects. - - - - - Gets a string containing the same characters as the specified range of characters in the given array. - - The character array containing the name to find. - The zero-based index into the array specifying the first character of the name. - The number of characters in the name. - A string containing the same characters as the specified range of characters in the given array. - - - - Instructs the how to serialize the object. - - - - - Gets or sets the member serialization. - - The member serialization. - - - - Gets or sets the missing member handling used when deserializing this object. - - The missing member handling. - - - - Gets or sets how the object's properties with null values are handled during serialization and deserialization. - - How the object's properties with null values are handled during serialization and deserialization. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified member serialization. - - The member serialization. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Instructs the to always serialize the member with the specified name. - - - - - Gets or sets the type used when serializing the property's collection items. - - The collection's items type. - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the null value handling used when serializing this property. - - The null value handling. - - - - Gets or sets the default value handling used when serializing this property. - - The default value handling. - - - - Gets or sets the reference loop handling used when serializing this property. - - The reference loop handling. - - - - Gets or sets the object creation handling used when deserializing this property. - - The object creation handling. - - - - Gets or sets the type name handling used when serializing this property. - - The type name handling. - - - - Gets or sets whether this property's value is serialized as a reference. - - Whether this property's value is serialized as a reference. - - - - Gets or sets the order of serialization of a member. - - The numeric order of serialization. - - - - Gets or sets a value indicating whether this property is required. - - - A value indicating whether this property is required. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - Gets or sets the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified name. - - Name of the property. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Asynchronously reads the next JSON token from the source. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns true if the next token was read successfully; false if there are no more tokens to read. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously skips the children of the current token. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously reads the next JSON token from the source as a []. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the []. This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously reads the next JSON token from the source as a . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Specifies the state of the reader. - - - - - A read method has not been called. - - - - - The end of the file has been reached successfully. - - - - - Reader is at a property. - - - - - Reader is at the start of an object. - - - - - Reader is in an object. - - - - - Reader is at the start of an array. - - - - - Reader is in an array. - - - - - The method has been called. - - - - - Reader has just read a value. - - - - - Reader is at the start of a constructor. - - - - - Reader is in a constructor. - - - - - An error occurred that prevents the read operation from continuing. - - - - - The end of the file has been reached successfully. - - - - - Gets the current reader state. - - The current reader state. - - - - Gets or sets a value indicating whether the source should be closed when this reader is closed. - - - true to close the source when this reader is closed; otherwise false. The default is true. - - - - - Gets or sets a value indicating whether multiple pieces of JSON content can - be read from a continuous stream without erroring. - - - true to support reading multiple pieces of JSON content; otherwise false. - The default is false. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - Gets or sets how time zones are handled when reading JSON. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how custom date formatted strings are parsed when reading JSON. - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - A null value means there is no maximum. - The default value is 128. - - - - - Gets the type of the current JSON token. - - - - - Gets the text value of the current JSON token. - - - - - Gets the .NET type for the current JSON token. - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Initializes a new instance of the class. - - - - - Reads the next JSON token from the source. - - true if the next token was read successfully; false if there are no more tokens to read. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a []. - - A [] or null if the next JSON token is null. This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Skips the children of the current token. - - - - - Sets the current token. - - The new token. - - - - Sets the current token and value. - - The new token. - The value. - - - - Sets the current token and value. - - The new token. - The value. - A flag indicating whether the position index inside an array should be updated. - - - - Sets the state based on current token type. - - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Changes the reader's state to . - If is set to true, the source is also closed. - - - - - The exception thrown when an error occurs while reading JSON text. - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Initializes a new instance of the class - with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The line number indicating where the error occurred. - The line position indicating where the error occurred. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Instructs the to always serialize the member, and to require that the member has a value. - - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Initializes a new instance of the class - with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The line number indicating where the error occurred. - The line position indicating where the error occurred. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Serializes and deserializes objects into and from the JSON format. - The enables you to control how objects are encoded into JSON. - - - - - Occurs when the errors during serialization and deserialization. - - - - - Gets or sets the used by the serializer when resolving references. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets how type name writing and reading is handled by the serializer. - The default value is . - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - The default value is . - - The type name assembly format. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - The default value is . - - The type name assembly format. - - - - Gets or sets how object references are preserved by the serializer. - The default value is . - - - - - Gets or sets how reference loops (e.g. a class referencing itself) is handled. - The default value is . - - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - The default value is . - - - - - Gets or sets how null values are handled during serialization and deserialization. - The default value is . - - - - - Gets or sets how default values are handled during serialization and deserialization. - The default value is . - - - - - Gets or sets how objects are created during deserialization. - The default value is . - - The object creation handling. - - - - Gets or sets how constructors are used during deserialization. - The default value is . - - The constructor handling. - - - - Gets or sets how metadata properties are used during deserialization. - The default value is . - - The metadata properties handling. - - - - Gets a collection that will be used during serialization. - - Collection that will be used during serialization. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Indicates how JSON text output is formatted. - The default value is . - - - - - Gets or sets how dates are written to JSON text. - The default value is . - - - - - Gets or sets how time zones are handled during serialization and deserialization. - The default value is . - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - The default value is . - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - The default value is . - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written as JSON text. - The default value is . - - - - - Gets or sets how strings are escaped when writing JSON text. - The default value is . - - - - - Gets or sets how and values are formatted when writing JSON text, - and the expected date format when reading JSON text. - The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". - - - - - Gets or sets the culture used when reading JSON. - The default value is . - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - A null value means there is no maximum. - The default value is 128. - - - - - Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. - The default value is false. - - - true if there will be a check for additional JSON content after deserializing an object; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Creates a new instance. - The will not use default settings - from . - - - A new instance. - The will not use default settings - from . - - - - - Creates a new instance using the specified . - The will not use default settings - from . - - The settings to be applied to the . - - A new instance using the specified . - The will not use default settings - from . - - - - - Creates a new instance. - The will use default settings - from . - - - A new instance. - The will use default settings - from . - - - - - Creates a new instance using the specified . - The will use default settings - from as well as the specified . - - The settings to be applied to the . - - A new instance using the specified . - The will use default settings - from as well as the specified . - - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to read values from. - The target object to populate values onto. - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to read values from. - The target object to populate values onto. - - - - Deserializes the JSON structure contained by the specified . - - The that contains the JSON structure to deserialize. - The being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The type of the object to deserialize. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is Auto to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Specifies the settings on a object. - - - - - Gets or sets how reference loops (e.g. a class referencing itself) are handled. - The default value is . - - Reference loop handling. - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - The default value is . - - Missing member handling. - - - - Gets or sets how objects are created during deserialization. - The default value is . - - The object creation handling. - - - - Gets or sets how null values are handled during serialization and deserialization. - The default value is . - - Null value handling. - - - - Gets or sets how default values are handled during serialization and deserialization. - The default value is . - - The default value handling. - - - - Gets or sets a collection that will be used during serialization. - - The converters. - - - - Gets or sets how object references are preserved by the serializer. - The default value is . - - The preserve references handling. - - - - Gets or sets how type name writing and reading is handled by the serializer. - The default value is . - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - The type name handling. - - - - Gets or sets how metadata properties are used during deserialization. - The default value is . - - The metadata properties handling. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - The default value is . - - The type name assembly format. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - The default value is . - - The type name assembly format. - - - - Gets or sets how constructors are used during deserialization. - The default value is . - - The constructor handling. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - The contract resolver. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets the used by the serializer when resolving references. - - The reference resolver. - - - - Gets or sets a function that creates the used by the serializer when resolving references. - - A function that creates the used by the serializer when resolving references. - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the error handler called during serialization and deserialization. - - The error handler called during serialization and deserialization. - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Gets or sets how and values are formatted when writing JSON text, - and the expected date format when reading JSON text. - The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - A null value means there is no maximum. - The default value is 128. - - - - - Indicates how JSON text output is formatted. - The default value is . - - - - - Gets or sets how dates are written to JSON text. - The default value is . - - - - - Gets or sets how time zones are handled during serialization and deserialization. - The default value is . - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - The default value is . - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written as JSON. - The default value is . - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - The default value is . - - - - - Gets or sets how strings are escaped when writing JSON text. - The default value is . - - - - - Gets or sets the culture used when reading JSON. - The default value is . - - - - - Gets a value indicating whether there will be a check for additional content after deserializing an object. - The default value is false. - - - true if there will be a check for additional content after deserializing an object; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Represents a reader that provides fast, non-cached, forward-only access to JSON text data. - - - - - Asynchronously reads the next JSON token from the source. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns true if the next token was read successfully; false if there are no more tokens to read. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a []. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the []. This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Initializes a new instance of the class with the specified . - - The containing the JSON data to read. - - - - Gets or sets the reader's property name table. - - - - - Gets or sets the reader's character buffer pool. - - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a []. - - A [] or null if the next JSON token is null. This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Gets a value indicating whether the class can return line information. - - - true if and can be provided; otherwise, false. - - - - - Gets the current line number. - - - The current line number or 0 if no line information is available (for example, returns false). - - - - - Gets the current line position. - - - The current line position or 0 if no line information is available (for example, returns false). - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the JSON value delimiter. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the specified end token. - - The end token to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously closes this writer. - If is set to true, the destination is also closed. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of the current JSON object or array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes indent characters. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes an indent space. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes raw JSON without changing the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a null value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the beginning of a JSON array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the beginning of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the start of a constructor with the given name. - - The name of the constructor. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes an undefined value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the given white space. - - The string of white space characters. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a [] value. - - The [] value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of an array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of a constructor. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Gets or sets the writer's character array pool. - - - - - Gets or sets how many s to write for each level in the hierarchy when is set to . - - - - - Gets or sets which character to use to quote attribute values. - - - - - Gets or sets which character to use for indenting when is set to . - - - - - Gets or sets a value indicating whether object names will be surrounded with quotes. - - - - - Initializes a new instance of the class using the specified . - - The to write to. - - - - Flushes whatever is in the buffer to the underlying and also flushes the underlying . - - - - - Closes this writer. - If is set to true, the underlying is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the specified end token. - - The end token to write. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the given white space. - - The string of white space characters. - - - - Specifies the type of JSON token. - - - - - This is returned by the if a read method has not been called. - - - - - An object start token. - - - - - An array start token. - - - - - A constructor start token. - - - - - An object property name. - - - - - A comment. - - - - - Raw JSON. - - - - - An integer. - - - - - A float. - - - - - A string. - - - - - A boolean. - - - - - A null token. - - - - - An undefined token. - - - - - An object end token. - - - - - An array end token. - - - - - A constructor end token. - - - - - A Date. - - - - - Byte data. - - - - - - Represents a reader that provides validation. - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - Sets an event handler for receiving schema validation errors. - - - - - Gets the text value of the current JSON token. - - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - - Gets the type of the current JSON token. - - - - - - Gets the .NET type for the current JSON token. - - - - - - Initializes a new instance of the class that - validates the content returned from the given . - - The to read from while validating. - - - - Gets or sets the schema. - - The schema. - - - - Gets the used to construct this . - - The specified in the constructor. - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a []. - - - A [] or null if the next JSON token is null. - - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Asynchronously closes this writer. - If is set to true, the destination is also closed. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the specified end token. - - The end token to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes indent characters. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the JSON value delimiter. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes an indent space. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes raw JSON without changing the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the end of the current JSON object or array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the end of an array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the end of a constructor. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the end of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a null value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the beginning of a JSON array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the start of a constructor with the given name. - - The name of the constructor. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the beginning of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the current token. - - The to read the token from. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the current token. - - The to read the token from. - A flag indicating whether the current token's children should be written. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the token and its value. - - The to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the token and its value. - - The to write. - - The value to write. - A value is only required for tokens that have an associated value, e.g. the property name for . - null can be passed to the method for tokens that don't have a value, e.g. . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a [] value. - - The [] value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes an undefined value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the given white space. - - The string of white space characters. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously ets the state of the . - - The being written. - The value being written. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Gets or sets a value indicating whether the destination should be closed when this writer is closed. - - - true to close the destination when this writer is closed; otherwise false. The default is true. - - - - - Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. - - - true to auto-complete the JSON when this writer is closed; otherwise false. The default is true. - - - - - Gets the top. - - The top. - - - - Gets the state of the writer. - - - - - Gets the path of the writer. - - - - - Gets or sets a value indicating how JSON text output should be formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled when writing JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written to JSON text. - - - - - Gets or sets how and values are formatted when writing JSON text. - - - - - Gets or sets the culture used when writing JSON. Defaults to . - - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the destination and also flushes the destination. - - - - - Closes this writer. - If is set to true, the destination is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the end of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the end of an array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end constructor. - - - - - Writes the property name of a name/value pair of a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes the end of the current JSON object or array. - - - - - Writes the current token and its children. - - The to read the token from. - - - - Writes the current token. - - The to read the token from. - A flag indicating whether the current token's children should be written. - - - - Writes the token and its value. - - The to write. - - The value to write. - A value is only required for tokens that have an associated value, e.g. the property name for . - null can be passed to the method for tokens that don't have a value, e.g. . - - - - - Writes the token. - - The to write. - - - - Writes the specified end token. - - The end token to write. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON without changing the writer's state. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the given white space. - - The string of white space characters. - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Sets the state of the . - - The being written. - The value being written. - - - - The exception thrown when an error occurs while writing JSON text. - - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Initializes a new instance of the class - with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Specifies how JSON comments are handled when loading JSON. - - - - - Ignore comments. - - - - - Load comments as a with type . - - - - - Specifies how duplicate property names are handled when loading JSON. - - - - - Replace the existing value when there is a duplicate property. The value of the last property in the JSON object will be used. - - - - - Ignore the new value when there is a duplicate property. The value of the first property in the JSON object will be used. - - - - - Throw a when a duplicate property is encountered. - - - - - Contains the LINQ to JSON extension methods. - - - - - Returns a collection of tokens that contains the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the descendants of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, and the descendants of every token in the source collection. - - - - Returns a collection of child properties of every object in the source collection. - - An of that contains the source collection. - An of that contains the properties of every object in the source collection. - - - - Returns a collection of child values of every object in the source collection with the given key. - - An of that contains the source collection. - The token key. - An of that contains the values of every token in the source collection with the given key. - - - - Returns a collection of child values of every object in the source collection. - - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child values of every object in the source collection with the given key. - - The type to convert the values to. - An of that contains the source collection. - The token key. - An that contains the converted values of every token in the source collection with the given key. - - - - Returns a collection of converted child values of every object in the source collection. - - The type to convert the values to. - An of that contains the source collection. - An that contains the converted values of every token in the source collection. - - - - Converts the value. - - The type to convert the value to. - A cast as a of . - A converted value. - - - - Converts the value. - - The source collection type. - The type to convert the value to. - A cast as a of . - A converted value. - - - - Returns a collection of child tokens of every array in the source collection. - - The source collection type. - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child tokens of every array in the source collection. - - An of that contains the source collection. - The type to convert the values to. - The source collection type. - An that contains the converted values of every token in the source collection. - - - - Returns the input typed as . - - An of that contains the source collection. - The input typed as . - - - - Returns the input typed as . - - The source collection type. - An of that contains the source collection. - The input typed as . - - - - Represents a collection of objects. - - The type of token. - - - - Gets the of with the specified key. - - - - - - Represents a JSON array. - - - - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous load. The property contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous load. The property contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads an from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object. - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the at the specified index. - - - - - - Determines the index of a specific item in the . - - The object to locate in the . - - The index of if found in the list; otherwise, -1. - - - - - Inserts an item to the at the specified index. - - The zero-based index at which should be inserted. - The object to insert into the . - - is not a valid index in the . - - - - - Removes the item at the specified index. - - The zero-based index of the item to remove. - - is not a valid index in the . - - - - - Returns an enumerator that iterates through the collection. - - - A of that can be used to iterate through the collection. - - - - - Adds an item to the . - - The object to add to the . - - - - Removes all items from the . - - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Copies the elements of the to an array, starting at a particular array index. - - The array. - Index of the array. - - - - Gets a value indicating whether the is read-only. - - true if the is read-only; otherwise, false. - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - - - - Represents a JSON constructor. - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets or sets the name of this constructor. - - The constructor name. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name. - - The constructor name. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Represents a token that can contain other tokens. - - - - - Occurs when the list changes or an item in the list changes. - - - - - Occurs before an item is added to the collection. - - - - - Occurs when the items list of the collection has changed, or the collection is reset. - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Get the first child token of this token. - - - A containing the first child token of the . - - - - - Get the last child token of this token. - - - A containing the last child token of the . - - - - - Returns a collection of the child tokens of this token, in document order. - - - An of containing the child tokens of this , in document order. - - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - - A containing the child values of this , in document order. - - - - - Returns a collection of the descendant tokens for this token in document order. - - An of containing the descendant tokens of the . - - - - Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. - - An of containing this token, and all the descendant tokens of the . - - - - Adds the specified content as children of this . - - The content to be added. - - - - Adds the specified content as the first children of this . - - The content to be added. - - - - Creates a that can be used to add tokens to the . - - A that is ready to have content written to it. - - - - Replaces the child nodes of this token with the specified content. - - The content. - - - - Removes the child nodes from this token. - - - - - Merge the specified content into this . - - The content to be merged. - - - - Merge the specified content into this using . - - The content to be merged. - The used to merge the content. - - - - Gets the count of child JSON tokens. - - The count of child JSON tokens. - - - - Represents a collection of objects. - - The type of token. - - - - An empty collection of objects. - - - - - Initializes a new instance of the struct. - - The enumerable. - - - - Returns an enumerator that can be used to iterate through the collection. - - - A that can be used to iterate through the collection. - - - - - Gets the of with the specified key. - - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Represents a JSON object. - - - - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Occurs when a property value changes. - - - - - Occurs when a property value is changing. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Gets the node type for this . - - The type. - - - - Gets an of of this object's properties. - - An of of this object's properties. - - - - Gets a with the specified name. - - The property name. - A with the specified name or null. - - - - Gets the with the specified name. - The exact name will be searched for first and if no matching property is found then - the will be used to match a property. - - The property name. - One of the enumeration values that specifies how the strings will be compared. - A matched with the specified name or null. - - - - Gets a of of this object's property values. - - A of of this object's property values. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the with the specified property name. - - - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - is not valid JSON. - - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - is not valid JSON. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - is not valid JSON. - - - - - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - is not valid JSON. - - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object. - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified property name. - - Name of the property. - The with the specified property name. - - - - Gets the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - One of the enumeration values that specifies how the strings will be compared. - The with the specified property name. - - - - Tries to get the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - The value. - One of the enumeration values that specifies how the strings will be compared. - true if a value was successfully retrieved; otherwise, false. - - - - Adds the specified property name. - - Name of the property. - The value. - - - - Determines whether the JSON object has the specified property name. - - Name of the property. - true if the JSON object has the specified property name; otherwise, false. - - - - Removes the property with the specified name. - - Name of the property. - true if item was successfully removed; otherwise, false. - - - - Tries to get the with the specified property name. - - Name of the property. - The value. - true if a value was successfully retrieved; otherwise, false. - - - - Returns an enumerator that can be used to iterate through the collection. - - - A that can be used to iterate through the collection. - - - - - Raises the event with the provided arguments. - - Name of the property. - - - - Raises the event with the provided arguments. - - Name of the property. - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Represents a JSON property. - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous creation. The - property returns a that contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous creation. The - property returns a that contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the property name. - - The property name. - - - - Gets or sets the property value. - - The property value. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Represents a view of a . - - - - - Initializes a new instance of the class. - - The name. - - - - When overridden in a derived class, returns whether resetting an object changes its value. - - - true if resetting the component changes its value; otherwise, false. - - The component to test for reset capability. - - - - When overridden in a derived class, gets the current value of the property on a component. - - - The value of a property for a given component. - - The component with the property for which to retrieve the value. - - - - When overridden in a derived class, resets the value for this property of the component to the default value. - - The component with the property value that is to be reset to the default value. - - - - When overridden in a derived class, sets the value of the component to a different value. - - The component with the property value that is to be set. - The new value. - - - - When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. - - - true if the property should be persisted; otherwise, false. - - The component with the property to be examined for persistence. - - - - When overridden in a derived class, gets the type of the component this property is bound to. - - - A that represents the type of component this property is bound to. - When the or - - methods are invoked, the object specified might be an instance of this type. - - - - - When overridden in a derived class, gets a value indicating whether this property is read-only. - - - true if the property is read-only; otherwise, false. - - - - - When overridden in a derived class, gets the type of the property. - - - A that represents the type of the property. - - - - - Gets the hash code for the name of the member. - - - - The hash code for the name of the member. - - - - - Represents a raw JSON string. - - - - - Asynchronously creates an instance of with the content of the reader's current token. - - The reader. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous creation. The - property returns an instance of with the content of the reader's current token. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class. - - The raw json. - - - - Creates an instance of with the content of the reader's current token. - - The reader. - An instance of with the content of the reader's current token. - - - - Specifies the settings used when loading JSON. - - - - - Initializes a new instance of the class. - - - - - Gets or sets how JSON comments are handled when loading JSON. - The default value is . - - The JSON comment handling. - - - - Gets or sets how JSON line info is handled when loading JSON. - The default value is . - - The JSON line info handling. - - - - Gets or sets how duplicate property names in JSON objects are handled when loading JSON. - The default value is . - - The JSON duplicate property name handling. - - - - Specifies the settings used when merging JSON. - - - - - Initializes a new instance of the class. - - - - - Gets or sets the method used when merging JSON arrays. - - The method used when merging JSON arrays. - - - - Gets or sets how null value properties are merged. - - How null value properties are merged. - - - - Gets or sets the comparison used to match property names while merging. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - The comparison used to match property names while merging. - - - - Specifies the settings used when selecting JSON. - - - - - Gets or sets a flag that indicates whether an error should be thrown if - no tokens are found when evaluating part of the expression. - - - A flag that indicates whether an error should be thrown if - no tokens are found when evaluating part of the expression. - - - - - Represents an abstract JSON token. - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Writes this token to a asynchronously. - - A into which this method will write. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously creates a from a . - - An positioned at the token to read into this . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains - the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Asynchronously creates a from a . - - An positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains - the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Asynchronously creates a from a . - - A positioned at the token to read into this . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Asynchronously creates a from a . - - A positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Gets a comparer that can compare two tokens for value equality. - - A that can compare two nodes for value equality. - - - - Gets or sets the parent. - - The parent. - - - - Gets the root of this . - - The root of this . - - - - Gets the node type for this . - - The type. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Compares the values of two tokens, including the values of all descendant tokens. - - The first to compare. - The second to compare. - true if the tokens are equal; otherwise false. - - - - Gets the next sibling token of this node. - - The that contains the next sibling token. - - - - Gets the previous sibling token of this node. - - The that contains the previous sibling token. - - - - Gets the path of the JSON token. - - - - - Adds the specified content immediately after this token. - - A content object that contains simple content or a collection of content objects to be added after this token. - - - - Adds the specified content immediately before this token. - - A content object that contains simple content or a collection of content objects to be added before this token. - - - - Returns a collection of the ancestor tokens of this token. - - A collection of the ancestor tokens of this token. - - - - Returns a collection of tokens that contain this token, and the ancestors of this token. - - A collection of tokens that contain this token, and the ancestors of this token. - - - - Returns a collection of the sibling tokens after this token, in document order. - - A collection of the sibling tokens after this tokens, in document order. - - - - Returns a collection of the sibling tokens before this token, in document order. - - A collection of the sibling tokens before this token, in document order. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets the with the specified key converted to the specified type. - - The type to convert the token to. - The token key. - The converted token value. - - - - Get the first child token of this token. - - A containing the first child token of the . - - - - Get the last child token of this token. - - A containing the last child token of the . - - - - Returns a collection of the child tokens of this token, in document order. - - An of containing the child tokens of this , in document order. - - - - Returns a collection of the child tokens of this token, in document order, filtered by the specified type. - - The type to filter the child tokens on. - A containing the child tokens of this , in document order. - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - A containing the child values of this , in document order. - - - - Removes this token from its parent. - - - - - Replaces this token with the specified token. - - The value. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Returns the indented JSON for this token. - - - ToString() returns a non-JSON string value for tokens with a type of . - If you want the JSON for all token types then you should use . - - - The indented JSON for this token. - - - - - Returns the JSON for this token using the given formatting and converters. - - Indicates how the output should be formatted. - A collection of s which will be used when writing the token. - The JSON for this token using the given formatting and converters. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to []. - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from [] to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Creates a for this token. - - A that can be used to read this token and its descendants. - - - - Creates a from an object. - - The object that will be used to create . - A with the value of the specified object. - - - - Creates a from an object using the specified . - - The object that will be used to create . - The that will be used when reading the object. - A with the value of the specified object. - - - - Creates an instance of the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates a from a . - - A positioned at the token to read into this . - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Creates a from a . - - An positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - - - Creates a from a . - - A positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Creates a from a . - - A positioned at the token to read into this . - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Selects a using a JSONPath expression. Selects the token that matches the object path. - - - A that contains a JSONPath expression. - - A , or null. - - - - Selects a using a JSONPath expression. Selects the token that matches the object path. - - - A that contains a JSONPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - A . - - - - Selects a using a JSONPath expression. Selects the token that matches the object path. - - - A that contains a JSONPath expression. - - The used to select tokens. - A . - - - - Selects a collection of elements using a JSONPath expression. - - - A that contains a JSONPath expression. - - An of that contains the selected elements. - - - - Selects a collection of elements using a JSONPath expression. - - - A that contains a JSONPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - An of that contains the selected elements. - - - - Selects a collection of elements using a JSONPath expression. - - - A that contains a JSONPath expression. - - The used to select tokens. - An of that contains the selected elements. - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Creates a new instance of the . All child tokens are recursively cloned. - - A new instance of the . - - - - Adds an object to the annotation list of this . - - The annotation to add. - - - - Get the first annotation object of the specified type from this . - - The type of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets the first annotation object of the specified type from this . - - The of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets a collection of annotations of the specified type for this . - - The type of the annotations to retrieve. - An that contains the annotations for this . - - - - Gets a collection of annotations of the specified type for this . - - The of the annotations to retrieve. - An of that contains the annotations that match the specified type for this . - - - - Removes the annotations of the specified type from this . - - The type of annotations to remove. - - - - Removes the annotations of the specified type from this . - - The of annotations to remove. - - - - Compares tokens to determine whether they are equal. - - - - - Determines whether the specified objects are equal. - - The first object of type to compare. - The second object of type to compare. - - true if the specified objects are equal; otherwise, false. - - - - - Returns a hash code for the specified object. - - The for which a hash code is to be returned. - A hash code for the specified object. - The type of is a reference type and is null. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Gets the at the reader's current position. - - - - - Initializes a new instance of the class. - - The token to read from. - - - - Initializes a new instance of the class. - - The token to read from. - The initial path of the token. It is prepended to the returned . - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Gets the path of the current JSON token. - - - - - Specifies the type of token. - - - - - No token type has been set. - - - - - A JSON object. - - - - - A JSON array. - - - - - A JSON constructor. - - - - - A JSON object property. - - - - - A comment. - - - - - An integer value. - - - - - A float value. - - - - - A string value. - - - - - A boolean value. - - - - - A null value. - - - - - An undefined value. - - - - - A date value. - - - - - A raw JSON value. - - - - - A collection of bytes value. - - - - - A Guid value. - - - - - A Uri value. - - - - - A TimeSpan value. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Gets the at the writer's current position. - - - - - Gets the token being written. - - The token being written. - - - - Initializes a new instance of the class writing to the given . - - The container being written to. - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the underlying . - - - - - Closes this writer. - If is set to true, the JSON is auto-completed. - - - Setting to true has no additional effect, since the underlying is a type that cannot be closed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end. - - The token. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes a value. - An error will be raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Represents a value in JSON (string, integer, date, etc). - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Creates a comment with the given value. - - The value. - A comment with the given value. - - - - Creates a string with the given value. - - The value. - A string with the given value. - - - - Creates a null value. - - A null value. - - - - Creates a undefined value. - - A undefined value. - - - - Gets the node type for this . - - The type. - - - - Gets or sets the underlying token value. - - The underlying token value. - - - - Writes this token to a . - - A into which this method will write. - A collection of s which will be used when writing the token. - - - - Indicates whether the current object is equal to another object of the same type. - - - true if the current object is equal to the parameter; otherwise, false. - - An object to compare with this object. - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - - true if the specified is equal to the current ; otherwise, false. - - - - - Serves as a hash function for a particular type. - - - A hash code for the current . - - - - - Returns a that represents this instance. - - - ToString() returns a non-JSON string value for tokens with a type of . - If you want the JSON for all token types then you should use . - - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format provider. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - The format provider. - - A that represents this instance. - - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. - - An object to compare with this instance. - - A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: - Value - Meaning - Less than zero - This instance is less than . - Zero - This instance is equal to . - Greater than zero - This instance is greater than . - - - is not of the same type as this instance. - - - - - Specifies how line information is handled when loading JSON. - - - - - Ignore line information. - - - - - Load line information. - - - - - Specifies how JSON arrays are merged together. - - - - Concatenate arrays. - - - Union arrays, skipping items that already exist. - - - Replace all array items. - - - Merge array items together, matched by index. - - - - Specifies how null value properties are merged. - - - - - The content's null value properties will be ignored during merging. - - - - - The content's null value properties will be merged. - - - - - Specifies the member serialization options for the . - - - - - All public members are serialized by default. Members can be excluded using or . - This is the default member serialization mode. - - - - - Only members marked with or are serialized. - This member serialization mode can also be set by marking the class with . - - - - - All public and private fields are serialized. Members can be excluded using or . - This member serialization mode can also be set by marking the class with - and setting IgnoreSerializableAttribute on to false. - - - - - Specifies metadata property handling options for the . - - - - - Read metadata properties located at the start of a JSON object. - - - - - Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. - - - - - Do not try to read metadata properties. - - - - - Specifies missing member handling options for the . - - - - - Ignore a missing member and do not attempt to deserialize it. - - - - - Throw a when a missing member is encountered during deserialization. - - - - - Specifies null value handling options for the . - - - - - - - - - Include null values when serializing and deserializing objects. - - - - - Ignore null values when serializing and deserializing objects. - - - - - Specifies how object creation is handled by the . - - - - - Reuse existing objects, create new objects when needed. - - - - - Only reuse existing objects. - - - - - Always create new objects. - - - - - Specifies reference handling options for the . - Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement . - - - - - - - - Do not preserve references when serializing types. - - - - - Preserve references when serializing into a JSON object structure. - - - - - Preserve references when serializing into a JSON array structure. - - - - - Preserve references when serializing. - - - - - Specifies reference loop handling options for the . - - - - - Throw a when a loop is encountered. - - - - - Ignore loop references and do not serialize. - - - - - Serialize loop references. - - - - - Indicating whether a property is required. - - - - - The property is not required. The default state. - - - - - The property must be defined in JSON but can be a null value. - - - - - The property must be defined in JSON and cannot be a null value. - - - - - The property is not required but it cannot be a null value. - - - - - - Contains the JSON schema extension methods. - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - true if the specified is valid; otherwise, false. - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - When this method returns, contains any error messages generated while validating. - - true if the specified is valid; otherwise, false. - - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - The validation event handler. - - - - - An in-memory representation of a JSON Schema. - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets the id. - - - - - Gets or sets the title. - - - - - Gets or sets whether the object is required. - - - - - Gets or sets whether the object is read-only. - - - - - Gets or sets whether the object is visible to users. - - - - - Gets or sets whether the object is transient. - - - - - Gets or sets the description of the object. - - - - - Gets or sets the types of values allowed by the object. - - The type. - - - - Gets or sets the pattern. - - The pattern. - - - - Gets or sets the minimum length. - - The minimum length. - - - - Gets or sets the maximum length. - - The maximum length. - - - - Gets or sets a number that the value should be divisible by. - - A number that the value should be divisible by. - - - - Gets or sets the minimum. - - The minimum. - - - - Gets or sets the maximum. - - The maximum. - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute (). - - A flag indicating whether the value can not equal the number defined by the minimum attribute (). - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute (). - - A flag indicating whether the value can not equal the number defined by the maximum attribute (). - - - - Gets or sets the minimum number of items. - - The minimum number of items. - - - - Gets or sets the maximum number of items. - - The maximum number of items. - - - - Gets or sets the of items. - - The of items. - - - - Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . - - - true if items are validated using their array position; otherwise, false. - - - - - Gets or sets the of additional items. - - The of additional items. - - - - Gets or sets a value indicating whether additional items are allowed. - - - true if additional items are allowed; otherwise, false. - - - - - Gets or sets whether the array items must be unique. - - - - - Gets or sets the of properties. - - The of properties. - - - - Gets or sets the of additional properties. - - The of additional properties. - - - - Gets or sets the pattern properties. - - The pattern properties. - - - - Gets or sets a value indicating whether additional properties are allowed. - - - true if additional properties are allowed; otherwise, false. - - - - - Gets or sets the required property if this property is present. - - The required property if this property is present. - - - - Gets or sets the a collection of valid enum values allowed. - - A collection of valid enum values allowed. - - - - Gets or sets disallowed types. - - The disallowed types. - - - - Gets or sets the default value. - - The default value. - - - - Gets or sets the collection of that this schema extends. - - The collection of that this schema extends. - - - - Gets or sets the format. - - The format. - - - - Initializes a new instance of the class. - - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The object representing the JSON Schema. - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The to use when resolving schema references. - The object representing the JSON Schema. - - - - Load a from a string that contains JSON Schema. - - A that contains JSON Schema. - A populated from the string that contains JSON Schema. - - - - Load a from a string that contains JSON Schema using the specified . - - A that contains JSON Schema. - The resolver. - A populated from the string that contains JSON Schema. - - - - Writes this schema to a . - - A into which this method will write. - - - - Writes this schema to a using the specified . - - A into which this method will write. - The resolver used. - - - - Returns a that represents the current . - - - A that represents the current . - - - - - - Returns detailed information about the schema exception. - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - - Generates a from a specified . - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets how undefined schemas are handled by the serializer. - - - - - Gets or sets the contract resolver. - - The contract resolver. - - - - Generate a from the specified type. - - The type to generate a from. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - - Resolves from an id. - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets the loaded schemas. - - The loaded schemas. - - - - Initializes a new instance of the class. - - - - - Gets a for the specified reference. - - The id. - A for the specified reference. - - - - - The value types allowed by the . - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - No type specified. - - - - - String type. - - - - - Float type. - - - - - Integer type. - - - - - Boolean type. - - - - - Object type. - - - - - Array type. - - - - - Null type. - - - - - Any type. - - - - - - Specifies undefined schema Id handling options for the . - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - Do not infer a schema Id. - - - - - Use the .NET type name as the schema Id. - - - - - Use the assembly qualified .NET type name as the schema Id. - - - - - - Returns detailed information related to the . - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets the associated with the validation error. - - The JsonSchemaException associated with the validation error. - - - - Gets the path of the JSON location where the validation error occurred. - - The path of the JSON location where the validation error occurred. - - - - Gets the text description corresponding to the validation error. - - The text description. - - - - - Represents the callback method that will handle JSON schema validation events and the . - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - A camel case naming strategy. - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Resolves member mappings for a type, camel casing property names. - - - - - Initializes a new instance of the class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Used by to resolve a for a given . - - - - - Gets a value indicating whether members are being get and set using dynamic code generation. - This value is determined by the runtime permissions available. - - - true if using dynamic code generation; otherwise, false. - - - - - Gets or sets the default members search flags. - - The default members search flags. - - - - Gets or sets a value indicating whether compiler generated members should be serialized. - - - true if serialized compiler generated members; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types. - - - true if the interface will be ignored when serializing and deserializing types; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types. - - - true if the attribute will be ignored when serializing and deserializing types; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore IsSpecified members when serializing and deserializing types. - - - true if the IsSpecified members will be ignored when serializing and deserializing types; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore ShouldSerialize members when serializing and deserializing types. - - - true if the ShouldSerialize members will be ignored when serializing and deserializing types; otherwise, false. - - - - - Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. - - The naming strategy used to resolve how property names and dictionary keys are serialized. - - - - Initializes a new instance of the class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Gets the serializable members for the type. - - The type to get serializable members for. - The serializable members for the type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates the constructor parameters. - - The constructor to create properties for. - The type's member properties. - Properties for the given . - - - - Creates a for the given . - - The matching member property. - The constructor parameter. - A created for the given . - - - - Resolves the default for the contract. - - Type of the object. - The contract's default . - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Determines which contract type is created for the given type. - - Type of the object. - A for the given type. - - - - Creates properties for the given . - - The type to create properties for. - /// The member serialization mode for the type. - Properties for the given . - - - - Creates the used by the serializer to get and set values from a member. - - The member. - The used by the serializer to get and set values from a member. - - - - Creates a for the given . - - The member's parent . - The member to create a for. - A created for the given . - - - - Resolves the name of the property. - - Name of the property. - Resolved name of the property. - - - - Resolves the name of the extension data. By default no changes are made to extension data names. - - Name of the extension data. - Resolved name of the extension data. - - - - Resolves the key of the dictionary. By default is used to resolve dictionary keys. - - Key of the dictionary. - Resolved key of the dictionary. - - - - Gets the resolved name of the property. - - Name of the property. - Name of the property. - - - - The default naming strategy. Property names and dictionary keys are unchanged. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - The default serialization binder used when resolving and loading classes from type names. - - - - - Initializes a new instance of the class. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - The type of the object the formatter creates a new instance of. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - Represents a trace writer that writes to the application's instances. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - - The that will be used to filter the trace messages passed to the writer. - - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Provides information surrounding an error. - - - - - Gets the error. - - The error. - - - - Gets the original object that caused the error. - - The original object that caused the error. - - - - Gets the member that caused the error. - - The member that caused the error. - - - - Gets the path of the JSON location where the error occurred. - - The path of the JSON location where the error occurred. - - - - Gets or sets a value indicating whether this is handled. - - true if handled; otherwise, false. - - - - Provides data for the Error event. - - - - - Gets the current object the error event is being raised against. - - The current object the error event is being raised against. - - - - Gets the error context. - - The error context. - - - - Initializes a new instance of the class. - - The current object. - The error context. - - - - Provides methods to get attributes. - - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Used by to resolve a for a given . - - - - - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Used to resolve references when serializing and deserializing JSON by the . - - - - - Resolves a reference to its object. - - The serialization context. - The reference to resolve. - The object that was resolved from the reference. - - - - Gets the reference for the specified object. - - The serialization context. - The object to get a reference for. - The reference to the object. - - - - Determines whether the specified object is referenced. - - The serialization context. - The object to test for a reference. - - true if the specified object is referenced; otherwise, false. - - - - - Adds a reference to the specified object. - - The serialization context. - The reference. - The object to reference. - - - - Allows users to control class loading and mandate what class to load. - - - - - When implemented, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object - The type of the object the formatter creates a new instance of. - - - - When implemented, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - Represents a trace writer. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - The that will be used to filter the trace messages passed to the writer. - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Provides methods to get and set values. - - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Contract details for a used by the . - - - - - Gets the of the collection items. - - The of the collection items. - - - - Gets a value indicating whether the collection type is a multidimensional array. - - true if the collection type is a multidimensional array; otherwise, false. - - - - Gets or sets the function used to create the object. When set this function will override . - - The function used to create the object. - - - - Gets a value indicating whether the creator has a parameter with the collection values. - - true if the creator has a parameter with the collection values; otherwise, false. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the default collection items . - - The converter. - - - - Gets or sets a value indicating whether the collection items preserve object references. - - true if collection items preserve object references; otherwise, false. - - - - Gets or sets the collection item reference loop handling. - - The reference loop handling. - - - - Gets or sets the collection item type name handling. - - The type name handling. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Handles serialization callback events. - - The object that raised the callback event. - The streaming context. - - - - Handles serialization error callback events. - - The object that raised the callback event. - The streaming context. - The error context. - - - - Sets extension data for an object during deserialization. - - The object to set extension data on. - The extension data key. - The extension data value. - - - - Gets extension data for an object during serialization. - - The object to set extension data on. - - - - Contract details for a used by the . - - - - - Gets the underlying type for the contract. - - The underlying type for the contract. - - - - Gets or sets the type created during deserialization. - - The type created during deserialization. - - - - Gets or sets whether this type contract is serialized as a reference. - - Whether this type contract is serialized as a reference. - - - - Gets or sets the default for this contract. - - The converter. - - - - Gets the internally resolved for the contract's type. - This converter is used as a fallback converter when no other converter is resolved. - Setting will always override this converter. - - - - - Gets or sets all methods called immediately after deserialization of the object. - - The methods called immediately after deserialization of the object. - - - - Gets or sets all methods called during deserialization of the object. - - The methods called during deserialization of the object. - - - - Gets or sets all methods called after serialization of the object graph. - - The methods called after serialization of the object graph. - - - - Gets or sets all methods called before serialization of the object. - - The methods called before serialization of the object. - - - - Gets or sets all method called when an error is thrown during the serialization of the object. - - The methods called when an error is thrown during the serialization of the object. - - - - Gets or sets the default creator method used to create the object. - - The default creator method used to create the object. - - - - Gets or sets a value indicating whether the default creator is non-public. - - true if the default object creator is non-public; otherwise, false. - - - - Contract details for a used by the . - - - - - Gets or sets the dictionary key resolver. - - The dictionary key resolver. - - - - Gets the of the dictionary keys. - - The of the dictionary keys. - - - - Gets the of the dictionary values. - - The of the dictionary values. - - - - Gets or sets the function used to create the object. When set this function will override . - - The function used to create the object. - - - - Gets a value indicating whether the creator has a parameter with the dictionary values. - - true if the creator has a parameter with the dictionary values; otherwise, false. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets the object's properties. - - The object's properties. - - - - Gets or sets the property name resolver. - - The property name resolver. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the object constructor. - - The object constructor. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the object member serialization. - - The member object serialization. - - - - Gets or sets the missing member handling used when deserializing this object. - - The missing member handling. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Gets or sets how the object's properties with null values are handled during serialization and deserialization. - - How the object's properties with null values are handled during serialization and deserialization. - - - - Gets the object's properties. - - The object's properties. - - - - Gets a collection of instances that define the parameters used with . - - - - - Gets or sets the function used to create the object. When set this function will override . - This function is called with a collection of arguments which are defined by the collection. - - The function used to create the object. - - - - Gets or sets the extension data setter. - - - - - Gets or sets the extension data getter. - - - - - Gets or sets the extension data value type. - - - - - Gets or sets the extension data name resolver. - - The extension data name resolver. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Maps a JSON property to a .NET member or constructor parameter. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the type that declared this property. - - The type that declared this property. - - - - Gets or sets the order of serialization of a member. - - The numeric order of serialization. - - - - Gets or sets the name of the underlying member or parameter. - - The name of the underlying member or parameter. - - - - Gets the that will get and set the during serialization. - - The that will get and set the during serialization. - - - - Gets or sets the for this property. - - The for this property. - - - - Gets or sets the type of the property. - - The type of the property. - - - - Gets or sets the for the property. - If set this converter takes precedence over the contract converter for the property type. - - The converter. - - - - Gets or sets the member converter. - - The member converter. - - - - Gets or sets a value indicating whether this is ignored. - - true if ignored; otherwise, false. - - - - Gets or sets a value indicating whether this is readable. - - true if readable; otherwise, false. - - - - Gets or sets a value indicating whether this is writable. - - true if writable; otherwise, false. - - - - Gets or sets a value indicating whether this has a member attribute. - - true if has a member attribute; otherwise, false. - - - - Gets the default value. - - The default value. - - - - Gets or sets a value indicating whether this is required. - - A value indicating whether this is required. - - - - Gets a value indicating whether has a value specified. - - - - - Gets or sets a value indicating whether this property preserves object references. - - - true if this instance is reference; otherwise, false. - - - - - Gets or sets the property null value handling. - - The null value handling. - - - - Gets or sets the property default value handling. - - The default value handling. - - - - Gets or sets the property reference loop handling. - - The reference loop handling. - - - - Gets or sets the property object creation handling. - - The object creation handling. - - - - Gets or sets or sets the type name handling. - - The type name handling. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets a predicate used to determine whether the property should be deserialized. - - A predicate used to determine whether the property should be deserialized. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets an action used to set whether the property has been deserialized. - - An action used to set whether the property has been deserialized. - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets the converter used when serializing the property's collection items. - - The collection's items converter. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Gets or sets the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - A collection of objects. - - - - - Initializes a new instance of the class. - - The type. - - - - When implemented in a derived class, extracts the key from the specified element. - - The element from which to extract the key. - The key for the specified element. - - - - Adds a object. - - The property to add to the collection. - - - - Gets the closest matching object. - First attempts to get an exact case match of and then - a case insensitive match. - - Name of the property. - A matching property if found. - - - - Gets a property by property name. - - The name of the property to get. - Type property name string comparison. - A matching property if found. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Lookup and create an instance of the type described by the argument. - - The type to create. - Optional arguments to pass to an initializing constructor of the JsonConverter. - If null, the default constructor is used. - - - - A kebab case naming strategy. - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Represents a trace writer that writes to memory. When the trace message limit is - reached then old trace messages will be removed as new messages are added. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - - The that will be used to filter the trace messages passed to the writer. - - - - - Initializes a new instance of the class. - - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Returns an enumeration of the most recent trace messages. - - An enumeration of the most recent trace messages. - - - - Returns a of the most recent trace messages. - - - A of the most recent trace messages. - - - - - A base class for resolving how property names and dictionary keys are serialized. - - - - - A flag indicating whether dictionary keys should be processed. - Defaults to false. - - - - - A flag indicating whether extension data names should be processed. - Defaults to false. - - - - - A flag indicating whether explicitly specified property names, - e.g. a property name customized with a , should be processed. - Defaults to false. - - - - - Gets the serialized name for a given property name. - - The initial property name. - A flag indicating whether the property has had a name explicitly specified. - The serialized property name. - - - - Gets the serialized name for a given extension data name. - - The initial extension data name. - The serialized extension data name. - - - - Gets the serialized key for a given dictionary key. - - The initial dictionary key. - The serialized dictionary key. - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Hash code calculation - - - - - - Object equality implementation - - - - - - - Compare to another NamingStrategy - - - - - - - Represents a method that constructs an object. - - The object type to create. - - - - When applied to a method, specifies that the method is called when an error occurs serializing an object. - - - - - Provides methods to get attributes from a , , or . - - - - - Initializes a new instance of the class. - - The instance to get attributes for. This parameter should be a , , or . - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Get and set values for a using reflection. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - A snake case naming strategy. - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Specifies how strings are escaped when writing JSON text. - - - - - Only control characters (e.g. newline) are escaped. - - - - - All non-ASCII and control characters (e.g. newline) are escaped. - - - - - HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. - - - - - Indicates the method that will be used during deserialization for locating and loading assemblies. - - - - - In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly. - - - - - In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly. - - - - - Specifies type name handling options for the . - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - - - - Do not include the .NET type name when serializing types. - - - - - Include the .NET type name when serializing into a JSON object structure. - - - - - Include the .NET type name when serializing into a JSON array structure. - - - - - Always include the .NET type name when serializing. - - - - - Include the .NET type name when the type of the object being serialized is not the same as its declared type. - Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON - you must specify a root type object with - or . - - - - - - - - - - Don't run action but let a compiler detect the code in action as an executable block. - - - - - Ensure(() => new T()); - - - - - Ensure generic list type can be (de)deserializable on AOT environment. - - The type of elements in the list - - - - Ensure generic dictionary type can be (de)deserializable on AOT environment. - - The type of the keys in the dictionary. - The type of the values in the dictionary. - - - - Always return false but compiler doesn't know it. - - False - - - - Determines whether the collection is null or empty. - - The collection. - - true if the collection is null or empty; otherwise, false. - - - - - Adds the elements of the specified collection to the specified generic . - - The list to add to. - The collection of elements to add. - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The value to convert. - The culture to use when converting. - The type to convert or cast the value to. - - The converted type. If conversion was unsuccessful, the initial value - is returned if assignable to the target type. - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic that returns a result - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic, but uses one of the arguments for - the result. - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic, but uses one of the arguments for - the result. - - - - - Returns a Restrictions object which includes our current restrictions merged - with a restriction limiting our type - - - - - Helper class for serializing immutable collections. - Note that this is used by all builds, even those that don't support immutable collections, in case the DLL is GACed - https://github.com/JamesNK/Newtonsoft.Json/issues/652 - - - - - Gets the type of the typed collection's items. - - The type. - The type of the typed collection's items. - - - - Gets the member's underlying type. - - The member. - The underlying type of the member. - - - - Determines whether the property is an indexed property. - - The property. - - true if the property is an indexed property; otherwise, false. - - - - - Gets the member's value on the object. - - The member. - The target object. - The member's value on the object. - - - - Sets the member's value on the target object. - - The member. - The target. - The value. - - - - Determines whether the specified MemberInfo can be read. - - The MemberInfo to determine whether can be read. - /// if set to true then allow the member to be gotten non-publicly. - - true if the specified MemberInfo can be read; otherwise, false. - - - - - Determines whether the specified MemberInfo can be set. - - The MemberInfo to determine whether can be set. - if set to true then allow the member to be set non-publicly. - if set to true then allow the member to be set if read-only. - - true if the specified MemberInfo can be set; otherwise, false. - - - - - Builds a string. Unlike this class lets you reuse its internal buffer. - - - - - Determines whether the string is all white space. Empty string will return false. - - The string to test whether it is all white space. - - true if the string is all white space; otherwise, false. - - - - - Specifies the state of the . - - - - - An exception has been thrown, which has left the in an invalid state. - You may call the method to put the in the Closed state. - Any other method calls result in an being thrown. - - - - - The method has been called. - - - - - An object is being written. - - - - - An array is being written. - - - - - A constructor is being written. - - - - - A property is being written. - - - - - A write method has not been called. - - - - Specifies that an output will not be null even if the corresponding type allows it. - - - Specifies that when a method returns , the parameter will not be null even if the corresponding type allows it. - - - Initializes the attribute with the specified return value condition. - - The return value condition. If the method returns this value, the associated parameter will not be null. - - - - Gets the return value condition. - - - Specifies that an output may be null even if the corresponding type disallows it. - - - Specifies that null is allowed as an input even if the corresponding type disallows it. - - - - Specifies that the method will not return if the associated Boolean parameter is passed the specified value. - - - - - Initializes a new instance of the class. - - - The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to - the associated parameter matches this value. - - - - Gets the condition parameter value. - - - diff --git a/Runtime/Plugins/Newtonsoft.Json Editor/Newtonsoft.Json.deps.json b/Runtime/Plugins/Newtonsoft.Json Editor/Newtonsoft.Json.deps.json deleted file mode 100644 index d3f3acd3..00000000 --- a/Runtime/Plugins/Newtonsoft.Json Editor/Newtonsoft.Json.deps.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "runtimeTarget": { - "name": ".NETStandard,Version=v2.0/", - "signature": "" - }, - "compilationOptions": {}, - "targets": { - ".NETStandard,Version=v2.0": {}, - ".NETStandard,Version=v2.0/": { - "Newtonsoft.Json/13.0.102": { - "dependencies": { - "Microsoft.CodeAnalysis.NetAnalyzers": "5.0.3", - "NETStandard.Library": "2.0.3" - }, - "runtime": { - "Newtonsoft.Json.dll": {} - } - }, - "Microsoft.CodeAnalysis.NetAnalyzers/5.0.3": {}, - "Microsoft.NETCore.Platforms/1.1.0": {}, - "NETStandard.Library/2.0.3": { - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0" - } - } - } - }, - "libraries": { - "Newtonsoft.Json/13.0.102": { - "type": "project", - "serviceable": false, - "sha512": "" - }, - "Microsoft.CodeAnalysis.NetAnalyzers/5.0.3": { - "type": "package", - "serviceable": true, - "sha512": "sha512-7rw0JUPSAVGR0HPekQiQvwGPor44p/Ek21+wZABraG4bVYNrSkx98ZZsxSxG5jJ4oqjACJxea8E62UO0dsKDBw==", - "path": "microsoft.codeanalysis.netanalyzers/5.0.3", - "hashPath": "microsoft.codeanalysis.netanalyzers.5.0.3.nupkg.sha512" - }, - "Microsoft.NETCore.Platforms/1.1.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==", - "path": "microsoft.netcore.platforms/1.1.0", - "hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512" - }, - "NETStandard.Library/2.0.3": { - "type": "package", - "serviceable": true, - "sha512": "sha512-st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", - "path": "netstandard.library/2.0.3", - "hashPath": "netstandard.library.2.0.3.nupkg.sha512" - } - } -} \ No newline at end of file diff --git a/Runtime/Plugins/Newtonsoft.Json Editor/Newtonsoft.Json.dll b/Runtime/Plugins/Newtonsoft.Json Editor/Newtonsoft.Json.dll deleted file mode 100644 index cd872940..00000000 Binary files a/Runtime/Plugins/Newtonsoft.Json Editor/Newtonsoft.Json.dll and /dev/null differ diff --git a/Runtime/Plugins/Newtonsoft.Json Editor/Newtonsoft.Json.dll.meta b/Runtime/Plugins/Newtonsoft.Json Editor/Newtonsoft.Json.dll.meta deleted file mode 100644 index a6dbe0df..00000000 --- a/Runtime/Plugins/Newtonsoft.Json Editor/Newtonsoft.Json.dll.meta +++ /dev/null @@ -1,82 +0,0 @@ -fileFormatVersion: 2 -guid: 8c4bfcb5b17948478ccb955bccff9652 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - '': Any - second: - enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Facebook: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Plugins/Newtonsoft.Json Editor/Newtonsoft.Json.xml b/Runtime/Plugins/Newtonsoft.Json Editor/Newtonsoft.Json.xml deleted file mode 100644 index 8ce05db2..00000000 --- a/Runtime/Plugins/Newtonsoft.Json Editor/Newtonsoft.Json.xml +++ /dev/null @@ -1,11308 +0,0 @@ - - - - Newtonsoft.Json - - - - - Represents a BSON Oid (object id). - - - - - Gets or sets the value of the Oid. - - The value of the Oid. - - - - Initializes a new instance of the class. - - The Oid value. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. - - - - - Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary. - - - true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. - - - - - Gets or sets a value indicating whether the root object will be read as a JSON array. - - - true if the root object will be read as a JSON array; otherwise, false. - - - - - Gets or sets the used when reading values from BSON. - - The used when reading values from BSON. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Initializes a new instance of the class. - - The containing the BSON data to read. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. - - - - - Gets or sets the used when writing values to BSON. - When set to no conversion will occur. - - The used when writing values to BSON. - - - - Initializes a new instance of the class. - - The to write to. - - - - Initializes a new instance of the class. - - The to write to. - - - - Flushes whatever is in the buffer to the underlying and also flushes the underlying stream. - - - - - Writes the end. - - The token. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes the beginning of a JSON array. - - - - - Writes the beginning of a JSON object. - - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Closes this writer. - If is set to true, the underlying is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value that represents a BSON object id. - - The Object ID value to write. - - - - Writes a BSON regex. - - The regex pattern. - The regex options. - - - - Specifies how constructors are used when initializing objects during deserialization by the . - - - - - First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor. - - - - - Json.NET will use a non-public default constructor before falling back to a parameterized constructor. - - - - - Converts a binary value to and from a base 64 string value. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Creates a custom object. - - The object type to convert. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Creates an object which will then be populated by the serializer. - - Type of the object. - The created object. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can write JSON. - - - true if this can write JSON; otherwise, false. - - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Provides a base class for converting a to and from JSON. - - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a F# discriminated union type to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an Entity Framework to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can write JSON. - - - true if this can write JSON; otherwise, false. - - - - - Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z"). - - - - - Gets or sets the date time styles used when converting a date to and from JSON. - - The date time styles used when converting a date to and from JSON. - - - - Gets or sets the date time format used when converting a date to and from JSON. - - The date time format used when converting a date to and from JSON. - - - - Gets or sets the culture used when converting a date to and from JSON. - - The culture used when converting a date to and from JSON. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an to and from its name string value. - - - - - Gets or sets a value indicating whether the written enum text should be camel case. - The default value is false. - - true if the written enum text will be camel case; otherwise, false. - - - - Gets or sets the naming strategy used to resolve how enum text is written. - - The naming strategy used to resolve how enum text is written. - - - - Gets or sets a value indicating whether integer values are allowed when serializing and deserializing. - The default value is true. - - true if integers are allowed when serializing and deserializing; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - true if the written enum text will be camel case; otherwise, false. - - - - Initializes a new instance of the class. - - The naming strategy used to resolve how enum text is written. - true if integers are allowed when serializing and deserializing; otherwise, false. - - - - Initializes a new instance of the class. - - The of the used to write enum text. - - - - Initializes a new instance of the class. - - The of the used to write enum text. - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - - Initializes a new instance of the class. - - The of the used to write enum text. - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - true if integers are allowed when serializing and deserializing; otherwise, false. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from Unix epoch time - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Converts a to and from a string (e.g. "1.2.3.4"). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts XML to and from JSON. - - - - - Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements. - - The name of the deserialized root element. - - - - Gets or sets a value to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - true if the array attribute is written to the XML; otherwise, false. - - - - Gets or sets a value indicating whether to write the root JSON object. - - true if the JSON root object is omitted; otherwise, false. - - - - Gets or sets a value indicating whether to encode special characters when converting JSON to XML. - If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify - XML namespaces, attributes or processing directives. Instead special characters are encoded and written - as part of the XML element name. - - true if special characters are encoded; otherwise, false. - - - - Writes the JSON representation of the object. - - The to write to. - The calling serializer. - The value. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Checks if the is a namespace attribute. - - Attribute name to test. - The attribute name prefix if it has one, otherwise an empty string. - true if attribute name is for a namespace attribute, otherwise false. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Specifies how dates are formatted when writing JSON text. - - - - - Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". - - - - - Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". - - - - - Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. - - - - - Date formatted strings are not parsed to a date type and are read as strings. - - - - - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . - - - - - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . - - - - - Specifies how to treat the time value when converting between string and . - - - - - Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. - - - - - Treat as a UTC. If the object represents a local time, it is converted to a UTC. - - - - - Treat as a local time if a is being converted to a string. - If a string is being converted to , convert to a local time if a time zone is specified. - - - - - Time zone information should be preserved when converting. - - - - - The default JSON name table implementation. - - - - - Initializes a new instance of the class. - - - - - Gets a string containing the same characters as the specified range of characters in the given array. - - The character array containing the name to find. - The zero-based index into the array specifying the first character of the name. - The number of characters in the name. - A string containing the same characters as the specified range of characters in the given array. - - - - Adds the specified string into name table. - - The string to add. - This method is not thread-safe. - The resolved string. - - - - Specifies default value handling options for the . - - - - - - - - - Include members where the member value is the same as the member's default value when serializing objects. - Included members are written to JSON. Has no effect when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - so that it is not written to JSON. - This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, - decimals and floating point numbers; and false for booleans). The default value ignored can be changed by - placing the on the property. - - - - - Members with a default value but no JSON will be set to their default value when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - and set members to their default value when deserializing. - - - - - Specifies float format handling options when writing special floating point numbers, e.g. , - and with . - - - - - Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". - - - - - Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. - Note that this will produce non-valid JSON. - - - - - Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property. - - - - - Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Floating point numbers are parsed to . - - - - - Floating point numbers are parsed to . - - - - - Specifies formatting options for the . - - - - - No special formatting is applied. This is the default. - - - - - Causes child objects to be indented according to the and settings. - - - - - Provides an interface for using pooled arrays. - - The array type content. - - - - Rent an array from the pool. This array must be returned when it is no longer needed. - - The minimum required length of the array. The returned array may be longer. - The rented array from the pool. This array must be returned when it is no longer needed. - - - - Return an array to the pool. - - The array that is being returned. - - - - Provides an interface to enable a class to return line and position information. - - - - - Gets a value indicating whether the class can return line information. - - - true if and can be provided; otherwise, false. - - - - - Gets the current line number. - - The current line number or 0 if no line information is available (for example, when returns false). - - - - Gets the current line position. - - The current line position or 0 if no line information is available (for example, when returns false). - - - - Instructs the how to serialize the collection. - - - - - Gets or sets a value indicating whether null items are allowed in the collection. - - true if null items are allowed in the collection; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with a flag indicating whether the array can contain null items. - - A flag indicating whether the array can contain null items. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Instructs the to use the specified constructor when deserializing that object. - - - - - Instructs the how to serialize the object. - - - - - Gets or sets the id. - - The id. - - - - Gets or sets the title. - - The title. - - - - Gets or sets the description. - - The description. - - - - Gets or sets the collection's items converter. - - The collection's items converter. - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets a value that indicates whether to preserve object references. - - - true to keep object reference; otherwise, false. The default is false. - - - - - Gets or sets a value that indicates whether to preserve collection's items references. - - - true to keep collection's items object references; otherwise, false. The default is false. - - - - - Gets or sets the reference loop handling used when serializing the collection's items. - - The reference loop handling. - - - - Gets or sets the type name handling used when serializing the collection's items. - - The type name handling. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Provides methods for converting between .NET types and JSON types. - - - - - - - - Gets or sets a function that creates default . - Default settings are automatically used by serialization methods on , - and and on . - To serialize without using any default settings create a with - . - - - - - Represents JavaScript's boolean value true as a string. This field is read-only. - - - - - Represents JavaScript's boolean value false as a string. This field is read-only. - - - - - Represents JavaScript's null as a string. This field is read-only. - - - - - Represents JavaScript's undefined as a string. This field is read-only. - - - - - Represents JavaScript's positive infinity as a string. This field is read-only. - - - - - Represents JavaScript's negative infinity as a string. This field is read-only. - - - - - Represents JavaScript's NaN as a string. This field is read-only. - - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the specified. - - The value to convert. - The format the date will be converted to. - The time zone handling when the date is converted to a string. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the specified. - - The value to convert. - The format the date will be converted to. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - The string escape handling. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Serializes the specified object to a JSON string. - - The object to serialize. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting. - - The object to serialize. - Indicates how the output should be formatted. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a collection of . - - The object to serialize. - A collection of converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting and a collection of . - - The object to serialize. - Indicates how the output should be formatted. - A collection of converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using formatting and . - - The object to serialize. - Indicates how the output should be formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - Indicates how the output should be formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - A JSON string representation of the object. - - - - - Deserializes the JSON to a .NET object. - - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to a .NET object using . - - The JSON to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The JSON to deserialize. - The of object being deserialized. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The type of the object to deserialize to. - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the given anonymous type. - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be inferred from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the given anonymous type using . - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be inferred from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The type of the object to deserialize to. - The JSON to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The type of the object to deserialize to. - The object to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The JSON to deserialize. - The type of the object to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The JSON to deserialize. - The type of the object to deserialize to. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Populates the object with values from the JSON string. - - The JSON to populate values from. - The target object to populate values onto. - - - - Populates the object with values from the JSON string using . - - The JSON to populate values from. - The target object to populate values onto. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - - - - Serializes the to a JSON string. - - The node to serialize. - A JSON string of the . - - - - Serializes the to a JSON string using formatting. - - The node to serialize. - Indicates how the output should be formatted. - A JSON string of the . - - - - Serializes the to a JSON string using formatting and omits the root object if is true. - - The node to serialize. - Indicates how the output should be formatted. - Omits writing the root object. - A JSON string of the . - - - - Deserializes the from a JSON string. - - The JSON string. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by . - - The JSON string. - The name of the root element to append when deserializing. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by - and writes a Json.NET array attribute for collections. - - The JSON string. - The name of the root element to append when deserializing. - - A value to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by , - writes a Json.NET array attribute for collections, and encodes special characters. - - The JSON string. - The name of the root element to append when deserializing. - - A value to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - - A value to indicate whether to encode special characters when converting JSON to XML. - If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify - XML namespaces, attributes or processing directives. Instead special characters are encoded and written - as part of the XML element name. - - The deserialized . - - - - Serializes the to a JSON string. - - The node to convert to JSON. - A JSON string of the . - - - - Serializes the to a JSON string using formatting. - - The node to convert to JSON. - Indicates how the output should be formatted. - A JSON string of the . - - - - Serializes the to a JSON string using formatting and omits the root object if is true. - - The node to serialize. - Indicates how the output should be formatted. - Omits writing the root object. - A JSON string of the . - - - - Deserializes the from a JSON string. - - The JSON string. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by . - - The JSON string. - The name of the root element to append when deserializing. - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by - and writes a Json.NET array attribute for collections. - - The JSON string. - The name of the root element to append when deserializing. - - A value to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - The deserialized . - - - - Deserializes the from a JSON string nested in a root element specified by , - writes a Json.NET array attribute for collections, and encodes special characters. - - The JSON string. - The name of the root element to append when deserializing. - - A value to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - - A value to indicate whether to encode special characters when converting JSON to XML. - If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify - XML namespaces, attributes or processing directives. Instead special characters are encoded and written - as part of the XML element name. - - The deserialized . - - - - Converts an object to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can read JSON. - - true if this can read JSON; otherwise, false. - - - - Gets a value indicating whether this can write JSON. - - true if this can write JSON; otherwise, false. - - - - Converts an object to and from JSON. - - The object type to convert. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. If there is no existing value then null will be used. - The existing value has a value. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Instructs the to use the specified when serializing the member or class. - - - - - Gets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - - - - - Initializes a new instance of the class. - - Type of the . - - - - Initializes a new instance of the class. - - Type of the . - Parameter list to use when constructing the . Can be null. - - - - Represents a collection of . - - - - - Instructs the how to serialize the collection. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Instructs the to deserialize properties with no matching class member into the specified collection - and write values during serialization. - - - - - Gets or sets a value that indicates whether to write extension data when serializing the object. - - - true to write extension data when serializing the object; otherwise, false. The default is true. - - - - - Gets or sets a value that indicates whether to read extension data when deserializing the object. - - - true to read extension data when deserializing the object; otherwise, false. The default is true. - - - - - Initializes a new instance of the class. - - - - - Instructs the not to serialize the public field or public read/write property value. - - - - - Base class for a table of atomized string objects. - - - - - Gets a string containing the same characters as the specified range of characters in the given array. - - The character array containing the name to find. - The zero-based index into the array specifying the first character of the name. - The number of characters in the name. - A string containing the same characters as the specified range of characters in the given array. - - - - Instructs the how to serialize the object. - - - - - Gets or sets the member serialization. - - The member serialization. - - - - Gets or sets the missing member handling used when deserializing this object. - - The missing member handling. - - - - Gets or sets how the object's properties with null values are handled during serialization and deserialization. - - How the object's properties with null values are handled during serialization and deserialization. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified member serialization. - - The member serialization. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Instructs the to always serialize the member with the specified name. - - - - - Gets or sets the type used when serializing the property's collection items. - - The collection's items type. - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the of the . - - The of the . - - - - The parameter list to use when constructing the described by . - If null, the default constructor is used. - When non-null, there must be a constructor defined in the that exactly matches the number, - order, and type of these parameters. - - - - [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] - - - - - - Gets or sets the null value handling used when serializing this property. - - The null value handling. - - - - Gets or sets the default value handling used when serializing this property. - - The default value handling. - - - - Gets or sets the reference loop handling used when serializing this property. - - The reference loop handling. - - - - Gets or sets the object creation handling used when deserializing this property. - - The object creation handling. - - - - Gets or sets the type name handling used when serializing this property. - - The type name handling. - - - - Gets or sets whether this property's value is serialized as a reference. - - Whether this property's value is serialized as a reference. - - - - Gets or sets the order of serialization of a member. - - The numeric order of serialization. - - - - Gets or sets a value indicating whether this property is required. - - - A value indicating whether this property is required. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - Gets or sets the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified name. - - Name of the property. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Asynchronously reads the next JSON token from the source. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns true if the next token was read successfully; false if there are no more tokens to read. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously skips the children of the current token. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously reads the next JSON token from the source as a []. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the []. This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously reads the next JSON token from the source as a . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the . This result will be null at the end of an array. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Specifies the state of the reader. - - - - - A read method has not been called. - - - - - The end of the file has been reached successfully. - - - - - Reader is at a property. - - - - - Reader is at the start of an object. - - - - - Reader is in an object. - - - - - Reader is at the start of an array. - - - - - Reader is in an array. - - - - - The method has been called. - - - - - Reader has just read a value. - - - - - Reader is at the start of a constructor. - - - - - Reader is in a constructor. - - - - - An error occurred that prevents the read operation from continuing. - - - - - The end of the file has been reached successfully. - - - - - Gets the current reader state. - - The current reader state. - - - - Gets or sets a value indicating whether the source should be closed when this reader is closed. - - - true to close the source when this reader is closed; otherwise false. The default is true. - - - - - Gets or sets a value indicating whether multiple pieces of JSON content can - be read from a continuous stream without erroring. - - - true to support reading multiple pieces of JSON content; otherwise false. - The default is false. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - Gets or sets how time zones are handled when reading JSON. - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Gets or sets how custom date formatted strings are parsed when reading JSON. - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - A null value means there is no maximum. - The default value is 128. - - - - - Gets the type of the current JSON token. - - - - - Gets the text value of the current JSON token. - - - - - Gets the .NET type for the current JSON token. - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Initializes a new instance of the class. - - - - - Reads the next JSON token from the source. - - true if the next token was read successfully; false if there are no more tokens to read. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a []. - - A [] or null if the next JSON token is null. This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the source as a of . - - A of . This method will return null at the end of an array. - - - - Skips the children of the current token. - - - - - Sets the current token. - - The new token. - - - - Sets the current token and value. - - The new token. - The value. - - - - Sets the current token and value. - - The new token. - The value. - A flag indicating whether the position index inside an array should be updated. - - - - Sets the state based on current token type. - - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Changes the reader's state to . - If is set to true, the source is also closed. - - - - - The exception thrown when an error occurs while reading JSON text. - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Initializes a new instance of the class - with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The line number indicating where the error occurred. - The line position indicating where the error occurred. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Instructs the to always serialize the member, and to require that the member has a value. - - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Initializes a new instance of the class - with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The line number indicating where the error occurred. - The line position indicating where the error occurred. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Serializes and deserializes objects into and from the JSON format. - The enables you to control how objects are encoded into JSON. - - - - - Occurs when the errors during serialization and deserialization. - - - - - Gets or sets the used by the serializer when resolving references. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets how type name writing and reading is handled by the serializer. - The default value is . - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - The default value is . - - The type name assembly format. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - The default value is . - - The type name assembly format. - - - - Gets or sets how object references are preserved by the serializer. - The default value is . - - - - - Gets or sets how reference loops (e.g. a class referencing itself) is handled. - The default value is . - - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - The default value is . - - - - - Gets or sets how null values are handled during serialization and deserialization. - The default value is . - - - - - Gets or sets how default values are handled during serialization and deserialization. - The default value is . - - - - - Gets or sets how objects are created during deserialization. - The default value is . - - The object creation handling. - - - - Gets or sets how constructors are used during deserialization. - The default value is . - - The constructor handling. - - - - Gets or sets how metadata properties are used during deserialization. - The default value is . - - The metadata properties handling. - - - - Gets a collection that will be used during serialization. - - Collection that will be used during serialization. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Indicates how JSON text output is formatted. - The default value is . - - - - - Gets or sets how dates are written to JSON text. - The default value is . - - - - - Gets or sets how time zones are handled during serialization and deserialization. - The default value is . - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - The default value is . - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - The default value is . - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written as JSON text. - The default value is . - - - - - Gets or sets how strings are escaped when writing JSON text. - The default value is . - - - - - Gets or sets how and values are formatted when writing JSON text, - and the expected date format when reading JSON text. - The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". - - - - - Gets or sets the culture used when reading JSON. - The default value is . - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - A null value means there is no maximum. - The default value is 128. - - - - - Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. - The default value is false. - - - true if there will be a check for additional JSON content after deserializing an object; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Creates a new instance. - The will not use default settings - from . - - - A new instance. - The will not use default settings - from . - - - - - Creates a new instance using the specified . - The will not use default settings - from . - - The settings to be applied to the . - - A new instance using the specified . - The will not use default settings - from . - - - - - Creates a new instance. - The will use default settings - from . - - - A new instance. - The will use default settings - from . - - - - - Creates a new instance using the specified . - The will use default settings - from as well as the specified . - - The settings to be applied to the . - - A new instance using the specified . - The will use default settings - from as well as the specified . - - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to read values from. - The target object to populate values onto. - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to read values from. - The target object to populate values onto. - - - - Deserializes the JSON structure contained by the specified . - - The that contains the JSON structure to deserialize. - The being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The type of the object to deserialize. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is Auto to write out the type name if the type of the value does not match. - Specifying the type is optional. - - - - - Serializes the specified and writes the JSON structure - using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Specifies the settings on a object. - - - - - Gets or sets how reference loops (e.g. a class referencing itself) are handled. - The default value is . - - Reference loop handling. - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - The default value is . - - Missing member handling. - - - - Gets or sets how objects are created during deserialization. - The default value is . - - The object creation handling. - - - - Gets or sets how null values are handled during serialization and deserialization. - The default value is . - - Null value handling. - - - - Gets or sets how default values are handled during serialization and deserialization. - The default value is . - - The default value handling. - - - - Gets or sets a collection that will be used during serialization. - - The converters. - - - - Gets or sets how object references are preserved by the serializer. - The default value is . - - The preserve references handling. - - - - Gets or sets how type name writing and reading is handled by the serializer. - The default value is . - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - The type name handling. - - - - Gets or sets how metadata properties are used during deserialization. - The default value is . - - The metadata properties handling. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - The default value is . - - The type name assembly format. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - The default value is . - - The type name assembly format. - - - - Gets or sets how constructors are used during deserialization. - The default value is . - - The constructor handling. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - The contract resolver. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets the used by the serializer when resolving references. - - The reference resolver. - - - - Gets or sets a function that creates the used by the serializer when resolving references. - - A function that creates the used by the serializer when resolving references. - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the error handler called during serialization and deserialization. - - The error handler called during serialization and deserialization. - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Gets or sets how and values are formatted when writing JSON text, - and the expected date format when reading JSON text. - The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - A null value means there is no maximum. - The default value is 128. - - - - - Indicates how JSON text output is formatted. - The default value is . - - - - - Gets or sets how dates are written to JSON text. - The default value is . - - - - - Gets or sets how time zones are handled during serialization and deserialization. - The default value is . - - - - - Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - The default value is . - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written as JSON. - The default value is . - - - - - Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - The default value is . - - - - - Gets or sets how strings are escaped when writing JSON text. - The default value is . - - - - - Gets or sets the culture used when reading JSON. - The default value is . - - - - - Gets a value indicating whether there will be a check for additional content after deserializing an object. - The default value is false. - - - true if there will be a check for additional content after deserializing an object; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Represents a reader that provides fast, non-cached, forward-only access to JSON text data. - - - - - Asynchronously reads the next JSON token from the source. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns true if the next token was read successfully; false if there are no more tokens to read. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a []. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the []. This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a of . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the of . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously reads the next JSON token from the source as a . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous read. The - property returns the . This result will be null at the end of an array. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Initializes a new instance of the class with the specified . - - The containing the JSON data to read. - - - - Gets or sets the reader's property name table. - - - - - Gets or sets the reader's character buffer pool. - - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a []. - - A [] or null if the next JSON token is null. This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Gets a value indicating whether the class can return line information. - - - true if and can be provided; otherwise, false. - - - - - Gets the current line number. - - - The current line number or 0 if no line information is available (for example, returns false). - - - - - Gets the current line position. - - - The current line position or 0 if no line information is available (for example, returns false). - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the JSON value delimiter. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the specified end token. - - The end token to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously closes this writer. - If is set to true, the destination is also closed. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of the current JSON object or array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes indent characters. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes an indent space. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes raw JSON without changing the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a null value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the beginning of a JSON array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the beginning of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the start of a constructor with the given name. - - The name of the constructor. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes an undefined value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the given white space. - - The string of white space characters. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a [] value. - - The [] value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of an array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of a constructor. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes the end of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Asynchronously writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - Derived classes must override this method to get asynchronous behaviour. Otherwise it will - execute synchronously, returning an already-completed task. - - - - Gets or sets the writer's character array pool. - - - - - Gets or sets how many s to write for each level in the hierarchy when is set to . - - - - - Gets or sets which character to use to quote attribute values. - - - - - Gets or sets which character to use for indenting when is set to . - - - - - Gets or sets a value indicating whether object names will be surrounded with quotes. - - - - - Initializes a new instance of the class using the specified . - - The to write to. - - - - Flushes whatever is in the buffer to the underlying and also flushes the underlying . - - - - - Closes this writer. - If is set to true, the underlying is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the specified end token. - - The end token to write. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the given white space. - - The string of white space characters. - - - - Specifies the type of JSON token. - - - - - This is returned by the if a read method has not been called. - - - - - An object start token. - - - - - An array start token. - - - - - A constructor start token. - - - - - An object property name. - - - - - A comment. - - - - - Raw JSON. - - - - - An integer. - - - - - A float. - - - - - A string. - - - - - A boolean. - - - - - A null token. - - - - - An undefined token. - - - - - An object end token. - - - - - An array end token. - - - - - A constructor end token. - - - - - A Date. - - - - - Byte data. - - - - - - Represents a reader that provides validation. - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - Sets an event handler for receiving schema validation errors. - - - - - Gets the text value of the current JSON token. - - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - - Gets the type of the current JSON token. - - - - - - Gets the .NET type for the current JSON token. - - - - - - Initializes a new instance of the class that - validates the content returned from the given . - - The to read from while validating. - - - - Gets or sets the schema. - - The schema. - - - - Gets the used to construct this . - - The specified in the constructor. - - - - Changes the reader's state to . - If is set to true, the underlying is also closed. - - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a []. - - - A [] or null if the next JSON token is null. - - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . This method will return null at the end of an array. - - - - Reads the next JSON token from the underlying as a of . - - A of . - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Asynchronously closes this writer. - If is set to true, the destination is also closed. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the specified end token. - - The end token to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes indent characters. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the JSON value delimiter. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes an indent space. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes raw JSON without changing the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the end of the current JSON object or array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the end of an array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the end of a constructor. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the end of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a null value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the beginning of a JSON array. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the start of a constructor with the given name. - - The name of the constructor. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the beginning of a JSON object. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the current token. - - The to read the token from. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the current token. - - The to read the token from. - A flag indicating whether the current token's children should be written. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the token and its value. - - The to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the token and its value. - - The to write. - - The value to write. - A value is only required for tokens that have an associated value, e.g. the property name for . - null can be passed to the method for tokens that don't have a value, e.g. . - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a [] value. - - The [] value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a value. - - The value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes a of value. - - The of value to write. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes an undefined value. - - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously writes the given white space. - - The string of white space characters. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Asynchronously ets the state of the . - - The being written. - The value being written. - The token to monitor for cancellation requests. The default value is . - A that represents the asynchronous operation. - The default behaviour is to execute synchronously, returning an already-completed task. Derived - classes can override this behaviour for true asynchronicity. - - - - Gets or sets a value indicating whether the destination should be closed when this writer is closed. - - - true to close the destination when this writer is closed; otherwise false. The default is true. - - - - - Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. - - - true to auto-complete the JSON when this writer is closed; otherwise false. The default is true. - - - - - Gets the top. - - The top. - - - - Gets the state of the writer. - - - - - Gets the path of the writer. - - - - - Gets or sets a value indicating how JSON text output should be formatted. - - - - - Gets or sets how dates are written to JSON text. - - - - - Gets or sets how time zones are handled when writing JSON text. - - - - - Gets or sets how strings are escaped when writing JSON text. - - - - - Gets or sets how special floating point numbers, e.g. , - and , - are written to JSON text. - - - - - Gets or sets how and values are formatted when writing JSON text. - - - - - Gets or sets the culture used when writing JSON. Defaults to . - - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the destination and also flushes the destination. - - - - - Closes this writer. - If is set to true, the destination is also closed. - If is set to true, the JSON is auto-completed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the end of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the end of an array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end constructor. - - - - - Writes the property name of a name/value pair of a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair of a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes the end of the current JSON object or array. - - - - - Writes the current token and its children. - - The to read the token from. - - - - Writes the current token. - - The to read the token from. - A flag indicating whether the current token's children should be written. - - - - Writes the token and its value. - - The to write. - - The value to write. - A value is only required for tokens that have an associated value, e.g. the property name for . - null can be passed to the method for tokens that don't have a value, e.g. . - - - - - Writes the token. - - The to write. - - - - Writes the specified end token. - - The end token to write. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON without changing the writer's state. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a of value. - - The of value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the given white space. - - The string of white space characters. - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Sets the state of the . - - The being written. - The value being written. - - - - The exception thrown when an error occurs while writing JSON text. - - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Initializes a new instance of the class - with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The path to the JSON where the error occurred. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Specifies how JSON comments are handled when loading JSON. - - - - - Ignore comments. - - - - - Load comments as a with type . - - - - - Specifies how duplicate property names are handled when loading JSON. - - - - - Replace the existing value when there is a duplicate property. The value of the last property in the JSON object will be used. - - - - - Ignore the new value when there is a duplicate property. The value of the first property in the JSON object will be used. - - - - - Throw a when a duplicate property is encountered. - - - - - Contains the LINQ to JSON extension methods. - - - - - Returns a collection of tokens that contains the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the descendants of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, and the descendants of every token in the source collection. - - - - Returns a collection of child properties of every object in the source collection. - - An of that contains the source collection. - An of that contains the properties of every object in the source collection. - - - - Returns a collection of child values of every object in the source collection with the given key. - - An of that contains the source collection. - The token key. - An of that contains the values of every token in the source collection with the given key. - - - - Returns a collection of child values of every object in the source collection. - - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child values of every object in the source collection with the given key. - - The type to convert the values to. - An of that contains the source collection. - The token key. - An that contains the converted values of every token in the source collection with the given key. - - - - Returns a collection of converted child values of every object in the source collection. - - The type to convert the values to. - An of that contains the source collection. - An that contains the converted values of every token in the source collection. - - - - Converts the value. - - The type to convert the value to. - A cast as a of . - A converted value. - - - - Converts the value. - - The source collection type. - The type to convert the value to. - A cast as a of . - A converted value. - - - - Returns a collection of child tokens of every array in the source collection. - - The source collection type. - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child tokens of every array in the source collection. - - An of that contains the source collection. - The type to convert the values to. - The source collection type. - An that contains the converted values of every token in the source collection. - - - - Returns the input typed as . - - An of that contains the source collection. - The input typed as . - - - - Returns the input typed as . - - The source collection type. - An of that contains the source collection. - The input typed as . - - - - Represents a collection of objects. - - The type of token. - - - - Gets the of with the specified key. - - - - - - Represents a JSON array. - - - - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous load. The property contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous load. The property contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads an from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object. - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the at the specified index. - - - - - - Determines the index of a specific item in the . - - The object to locate in the . - - The index of if found in the list; otherwise, -1. - - - - - Inserts an item to the at the specified index. - - The zero-based index at which should be inserted. - The object to insert into the . - - is not a valid index in the . - - - - - Removes the item at the specified index. - - The zero-based index of the item to remove. - - is not a valid index in the . - - - - - Returns an enumerator that iterates through the collection. - - - A of that can be used to iterate through the collection. - - - - - Adds an item to the . - - The object to add to the . - - - - Removes all items from the . - - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Copies the elements of the to an array, starting at a particular array index. - - The array. - Index of the array. - - - - Gets a value indicating whether the is read-only. - - true if the is read-only; otherwise, false. - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - - - - Represents a JSON constructor. - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets or sets the name of this constructor. - - The constructor name. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name. - - The constructor name. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Represents a token that can contain other tokens. - - - - - Occurs when the list changes or an item in the list changes. - - - - - Occurs before an item is added to the collection. - - - - - Occurs when the items list of the collection has changed, or the collection is reset. - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Get the first child token of this token. - - - A containing the first child token of the . - - - - - Get the last child token of this token. - - - A containing the last child token of the . - - - - - Returns a collection of the child tokens of this token, in document order. - - - An of containing the child tokens of this , in document order. - - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - - A containing the child values of this , in document order. - - - - - Returns a collection of the descendant tokens for this token in document order. - - An of containing the descendant tokens of the . - - - - Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. - - An of containing this token, and all the descendant tokens of the . - - - - Adds the specified content as children of this . - - The content to be added. - - - - Adds the specified content as the first children of this . - - The content to be added. - - - - Creates a that can be used to add tokens to the . - - A that is ready to have content written to it. - - - - Replaces the child nodes of this token with the specified content. - - The content. - - - - Removes the child nodes from this token. - - - - - Merge the specified content into this . - - The content to be merged. - - - - Merge the specified content into this using . - - The content to be merged. - The used to merge the content. - - - - Gets the count of child JSON tokens. - - The count of child JSON tokens. - - - - Represents a collection of objects. - - The type of token. - - - - An empty collection of objects. - - - - - Initializes a new instance of the struct. - - The enumerable. - - - - Returns an enumerator that can be used to iterate through the collection. - - - A that can be used to iterate through the collection. - - - - - Gets the of with the specified key. - - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Represents a JSON object. - - - - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous load. The - property returns a that contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Occurs when a property value changes. - - - - - Occurs when a property value is changing. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Gets the node type for this . - - The type. - - - - Gets an of of this object's properties. - - An of of this object's properties. - - - - Gets a with the specified name. - - The property name. - A with the specified name or null. - - - - Gets the with the specified name. - The exact name will be searched for first and if no matching property is found then - the will be used to match a property. - - The property name. - One of the enumeration values that specifies how the strings will be compared. - A matched with the specified name or null. - - - - Gets a of of this object's property values. - - A of of this object's property values. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the with the specified property name. - - - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - is not valid JSON. - - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - is not valid JSON. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - is not valid JSON. - - - - - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - is not valid JSON. - - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object. - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified property name. - - Name of the property. - The with the specified property name. - - - - Gets the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - One of the enumeration values that specifies how the strings will be compared. - The with the specified property name. - - - - Tries to get the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - The value. - One of the enumeration values that specifies how the strings will be compared. - true if a value was successfully retrieved; otherwise, false. - - - - Adds the specified property name. - - Name of the property. - The value. - - - - Determines whether the JSON object has the specified property name. - - Name of the property. - true if the JSON object has the specified property name; otherwise, false. - - - - Removes the property with the specified name. - - Name of the property. - true if item was successfully removed; otherwise, false. - - - - Tries to get the with the specified property name. - - Name of the property. - The value. - true if a value was successfully retrieved; otherwise, false. - - - - Returns an enumerator that can be used to iterate through the collection. - - - A that can be used to iterate through the collection. - - - - - Raises the event with the provided arguments. - - Name of the property. - - - - Raises the event with the provided arguments. - - Name of the property. - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Represents a JSON property. - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous creation. The - property returns a that contains the JSON that was read from the specified . - - - - Asynchronously loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous creation. The - property returns a that contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the property name. - - The property name. - - - - Gets or sets the property value. - - The property value. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Gets the node type for this . - - The type. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Loads a from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Loads a from a . - - A that will be read for the content of the . - The used to load the JSON. - If this is null, default load settings will be used. - A that contains the JSON that was read from the specified . - - - - Represents a view of a . - - - - - Initializes a new instance of the class. - - The name. - - - - When overridden in a derived class, returns whether resetting an object changes its value. - - - true if resetting the component changes its value; otherwise, false. - - The component to test for reset capability. - - - - When overridden in a derived class, gets the current value of the property on a component. - - - The value of a property for a given component. - - The component with the property for which to retrieve the value. - - - - When overridden in a derived class, resets the value for this property of the component to the default value. - - The component with the property value that is to be reset to the default value. - - - - When overridden in a derived class, sets the value of the component to a different value. - - The component with the property value that is to be set. - The new value. - - - - When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. - - - true if the property should be persisted; otherwise, false. - - The component with the property to be examined for persistence. - - - - When overridden in a derived class, gets the type of the component this property is bound to. - - - A that represents the type of component this property is bound to. - When the or - - methods are invoked, the object specified might be an instance of this type. - - - - - When overridden in a derived class, gets a value indicating whether this property is read-only. - - - true if the property is read-only; otherwise, false. - - - - - When overridden in a derived class, gets the type of the property. - - - A that represents the type of the property. - - - - - Gets the hash code for the name of the member. - - - - The hash code for the name of the member. - - - - - Represents a raw JSON string. - - - - - Asynchronously creates an instance of with the content of the reader's current token. - - The reader. - The token to monitor for cancellation requests. The default value is . - A representing the asynchronous creation. The - property returns an instance of with the content of the reader's current token. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class. - - The raw json. - - - - Creates an instance of with the content of the reader's current token. - - The reader. - An instance of with the content of the reader's current token. - - - - Specifies the settings used when loading JSON. - - - - - Initializes a new instance of the class. - - - - - Gets or sets how JSON comments are handled when loading JSON. - The default value is . - - The JSON comment handling. - - - - Gets or sets how JSON line info is handled when loading JSON. - The default value is . - - The JSON line info handling. - - - - Gets or sets how duplicate property names in JSON objects are handled when loading JSON. - The default value is . - - The JSON duplicate property name handling. - - - - Specifies the settings used when merging JSON. - - - - - Initializes a new instance of the class. - - - - - Gets or sets the method used when merging JSON arrays. - - The method used when merging JSON arrays. - - - - Gets or sets how null value properties are merged. - - How null value properties are merged. - - - - Gets or sets the comparison used to match property names while merging. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - The comparison used to match property names while merging. - - - - Specifies the settings used when selecting JSON. - - - - - Gets or sets a flag that indicates whether an error should be thrown if - no tokens are found when evaluating part of the expression. - - - A flag that indicates whether an error should be thrown if - no tokens are found when evaluating part of the expression. - - - - - Represents an abstract JSON token. - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Writes this token to a asynchronously. - - A into which this method will write. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Asynchronously creates a from a . - - An positioned at the token to read into this . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains - the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Asynchronously creates a from a . - - An positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains - the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Asynchronously creates a from a . - - A positioned at the token to read into this . - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Asynchronously creates a from a . - - A positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - The token to monitor for cancellation requests. The default value is . - - A that represents the asynchronous creation. The - property returns a that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Gets a comparer that can compare two tokens for value equality. - - A that can compare two nodes for value equality. - - - - Gets or sets the parent. - - The parent. - - - - Gets the root of this . - - The root of this . - - - - Gets the node type for this . - - The type. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Compares the values of two tokens, including the values of all descendant tokens. - - The first to compare. - The second to compare. - true if the tokens are equal; otherwise false. - - - - Gets the next sibling token of this node. - - The that contains the next sibling token. - - - - Gets the previous sibling token of this node. - - The that contains the previous sibling token. - - - - Gets the path of the JSON token. - - - - - Adds the specified content immediately after this token. - - A content object that contains simple content or a collection of content objects to be added after this token. - - - - Adds the specified content immediately before this token. - - A content object that contains simple content or a collection of content objects to be added before this token. - - - - Returns a collection of the ancestor tokens of this token. - - A collection of the ancestor tokens of this token. - - - - Returns a collection of tokens that contain this token, and the ancestors of this token. - - A collection of tokens that contain this token, and the ancestors of this token. - - - - Returns a collection of the sibling tokens after this token, in document order. - - A collection of the sibling tokens after this tokens, in document order. - - - - Returns a collection of the sibling tokens before this token, in document order. - - A collection of the sibling tokens before this token, in document order. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets the with the specified key converted to the specified type. - - The type to convert the token to. - The token key. - The converted token value. - - - - Get the first child token of this token. - - A containing the first child token of the . - - - - Get the last child token of this token. - - A containing the last child token of the . - - - - Returns a collection of the child tokens of this token, in document order. - - An of containing the child tokens of this , in document order. - - - - Returns a collection of the child tokens of this token, in document order, filtered by the specified type. - - The type to filter the child tokens on. - A containing the child tokens of this , in document order. - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - A containing the child values of this , in document order. - - - - Removes this token from its parent. - - - - - Replaces this token with the specified token. - - The value. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Returns the indented JSON for this token. - - - ToString() returns a non-JSON string value for tokens with a type of . - If you want the JSON for all token types then you should use . - - - The indented JSON for this token. - - - - - Returns the JSON for this token using the given formatting and converters. - - Indicates how the output should be formatted. - A collection of s which will be used when writing the token. - The JSON for this token using the given formatting and converters. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to []. - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to of . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from [] to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from of to . - - The value to create a from. - The initialized with the specified value. - - - - Creates a for this token. - - A that can be used to read this token and its descendants. - - - - Creates a from an object. - - The object that will be used to create . - A with the value of the specified object. - - - - Creates a from an object using the specified . - - The object that will be used to create . - The that will be used when reading the object. - A with the value of the specified object. - - - - Creates an instance of the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates an instance of the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates a from a . - - A positioned at the token to read into this . - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Creates a from a . - - An positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - Load a from a string that contains JSON. - - A that contains JSON. - The used to load the JSON. - If this is null, default load settings will be used. - A populated from the string that contains JSON. - - - - Creates a from a . - - A positioned at the token to read into this . - The used to load the JSON. - If this is null, default load settings will be used. - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Creates a from a . - - A positioned at the token to read into this . - - A that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Selects a using a JSONPath expression. Selects the token that matches the object path. - - - A that contains a JSONPath expression. - - A , or null. - - - - Selects a using a JSONPath expression. Selects the token that matches the object path. - - - A that contains a JSONPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - A . - - - - Selects a using a JSONPath expression. Selects the token that matches the object path. - - - A that contains a JSONPath expression. - - The used to select tokens. - A . - - - - Selects a collection of elements using a JSONPath expression. - - - A that contains a JSONPath expression. - - An of that contains the selected elements. - - - - Selects a collection of elements using a JSONPath expression. - - - A that contains a JSONPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - An of that contains the selected elements. - - - - Selects a collection of elements using a JSONPath expression. - - - A that contains a JSONPath expression. - - The used to select tokens. - An of that contains the selected elements. - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Creates a new instance of the . All child tokens are recursively cloned. - - A new instance of the . - - - - Adds an object to the annotation list of this . - - The annotation to add. - - - - Get the first annotation object of the specified type from this . - - The type of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets the first annotation object of the specified type from this . - - The of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets a collection of annotations of the specified type for this . - - The type of the annotations to retrieve. - An that contains the annotations for this . - - - - Gets a collection of annotations of the specified type for this . - - The of the annotations to retrieve. - An of that contains the annotations that match the specified type for this . - - - - Removes the annotations of the specified type from this . - - The type of annotations to remove. - - - - Removes the annotations of the specified type from this . - - The of annotations to remove. - - - - Compares tokens to determine whether they are equal. - - - - - Determines whether the specified objects are equal. - - The first object of type to compare. - The second object of type to compare. - - true if the specified objects are equal; otherwise, false. - - - - - Returns a hash code for the specified object. - - The for which a hash code is to be returned. - A hash code for the specified object. - The type of is a reference type and is null. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Gets the at the reader's current position. - - - - - Initializes a new instance of the class. - - The token to read from. - - - - Initializes a new instance of the class. - - The token to read from. - The initial path of the token. It is prepended to the returned . - - - - Reads the next JSON token from the underlying . - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Gets the path of the current JSON token. - - - - - Specifies the type of token. - - - - - No token type has been set. - - - - - A JSON object. - - - - - A JSON array. - - - - - A JSON constructor. - - - - - A JSON object property. - - - - - A comment. - - - - - An integer value. - - - - - A float value. - - - - - A string value. - - - - - A boolean value. - - - - - A null value. - - - - - An undefined value. - - - - - A date value. - - - - - A raw JSON value. - - - - - A collection of bytes value. - - - - - A Guid value. - - - - - A Uri value. - - - - - A TimeSpan value. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Gets the at the writer's current position. - - - - - Gets the token being written. - - The token being written. - - - - Initializes a new instance of the class writing to the given . - - The container being written to. - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the underlying . - - - - - Closes this writer. - If is set to true, the JSON is auto-completed. - - - Setting to true has no additional effect, since the underlying is a type that cannot be closed. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end. - - The token. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes a value. - An error will be raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Represents a value in JSON (string, integer, date, etc). - - - - - Writes this token to a asynchronously. - - A into which this method will write. - The token to monitor for cancellation requests. - A collection of which will be used when writing the token. - A that represents the asynchronous write operation. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Creates a comment with the given value. - - The value. - A comment with the given value. - - - - Creates a string with the given value. - - The value. - A string with the given value. - - - - Creates a null value. - - A null value. - - - - Creates a undefined value. - - A undefined value. - - - - Gets the node type for this . - - The type. - - - - Gets or sets the underlying token value. - - The underlying token value. - - - - Writes this token to a . - - A into which this method will write. - A collection of s which will be used when writing the token. - - - - Indicates whether the current object is equal to another object of the same type. - - - true if the current object is equal to the parameter; otherwise, false. - - An object to compare with this object. - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - - true if the specified is equal to the current ; otherwise, false. - - - - - Serves as a hash function for a particular type. - - - A hash code for the current . - - - - - Returns a that represents this instance. - - - ToString() returns a non-JSON string value for tokens with a type of . - If you want the JSON for all token types then you should use . - - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format provider. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - The format provider. - - A that represents this instance. - - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. - - An object to compare with this instance. - - A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: - Value - Meaning - Less than zero - This instance is less than . - Zero - This instance is equal to . - Greater than zero - This instance is greater than . - - - is not of the same type as this instance. - - - - - Specifies how line information is handled when loading JSON. - - - - - Ignore line information. - - - - - Load line information. - - - - - Specifies how JSON arrays are merged together. - - - - Concatenate arrays. - - - Union arrays, skipping items that already exist. - - - Replace all array items. - - - Merge array items together, matched by index. - - - - Specifies how null value properties are merged. - - - - - The content's null value properties will be ignored during merging. - - - - - The content's null value properties will be merged. - - - - - Specifies the member serialization options for the . - - - - - All public members are serialized by default. Members can be excluded using or . - This is the default member serialization mode. - - - - - Only members marked with or are serialized. - This member serialization mode can also be set by marking the class with . - - - - - All public and private fields are serialized. Members can be excluded using or . - This member serialization mode can also be set by marking the class with - and setting IgnoreSerializableAttribute on to false. - - - - - Specifies metadata property handling options for the . - - - - - Read metadata properties located at the start of a JSON object. - - - - - Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. - - - - - Do not try to read metadata properties. - - - - - Specifies missing member handling options for the . - - - - - Ignore a missing member and do not attempt to deserialize it. - - - - - Throw a when a missing member is encountered during deserialization. - - - - - Specifies null value handling options for the . - - - - - - - - - Include null values when serializing and deserializing objects. - - - - - Ignore null values when serializing and deserializing objects. - - - - - Specifies how object creation is handled by the . - - - - - Reuse existing objects, create new objects when needed. - - - - - Only reuse existing objects. - - - - - Always create new objects. - - - - - Specifies reference handling options for the . - Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement . - - - - - - - - Do not preserve references when serializing types. - - - - - Preserve references when serializing into a JSON object structure. - - - - - Preserve references when serializing into a JSON array structure. - - - - - Preserve references when serializing. - - - - - Specifies reference loop handling options for the . - - - - - Throw a when a loop is encountered. - - - - - Ignore loop references and do not serialize. - - - - - Serialize loop references. - - - - - Indicating whether a property is required. - - - - - The property is not required. The default state. - - - - - The property must be defined in JSON but can be a null value. - - - - - The property must be defined in JSON and cannot be a null value. - - - - - The property is not required but it cannot be a null value. - - - - - - Contains the JSON schema extension methods. - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - true if the specified is valid; otherwise, false. - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - When this method returns, contains any error messages generated while validating. - - true if the specified is valid; otherwise, false. - - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - The validation event handler. - - - - - An in-memory representation of a JSON Schema. - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets the id. - - - - - Gets or sets the title. - - - - - Gets or sets whether the object is required. - - - - - Gets or sets whether the object is read-only. - - - - - Gets or sets whether the object is visible to users. - - - - - Gets or sets whether the object is transient. - - - - - Gets or sets the description of the object. - - - - - Gets or sets the types of values allowed by the object. - - The type. - - - - Gets or sets the pattern. - - The pattern. - - - - Gets or sets the minimum length. - - The minimum length. - - - - Gets or sets the maximum length. - - The maximum length. - - - - Gets or sets a number that the value should be divisible by. - - A number that the value should be divisible by. - - - - Gets or sets the minimum. - - The minimum. - - - - Gets or sets the maximum. - - The maximum. - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute (). - - A flag indicating whether the value can not equal the number defined by the minimum attribute (). - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute (). - - A flag indicating whether the value can not equal the number defined by the maximum attribute (). - - - - Gets or sets the minimum number of items. - - The minimum number of items. - - - - Gets or sets the maximum number of items. - - The maximum number of items. - - - - Gets or sets the of items. - - The of items. - - - - Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . - - - true if items are validated using their array position; otherwise, false. - - - - - Gets or sets the of additional items. - - The of additional items. - - - - Gets or sets a value indicating whether additional items are allowed. - - - true if additional items are allowed; otherwise, false. - - - - - Gets or sets whether the array items must be unique. - - - - - Gets or sets the of properties. - - The of properties. - - - - Gets or sets the of additional properties. - - The of additional properties. - - - - Gets or sets the pattern properties. - - The pattern properties. - - - - Gets or sets a value indicating whether additional properties are allowed. - - - true if additional properties are allowed; otherwise, false. - - - - - Gets or sets the required property if this property is present. - - The required property if this property is present. - - - - Gets or sets the a collection of valid enum values allowed. - - A collection of valid enum values allowed. - - - - Gets or sets disallowed types. - - The disallowed types. - - - - Gets or sets the default value. - - The default value. - - - - Gets or sets the collection of that this schema extends. - - The collection of that this schema extends. - - - - Gets or sets the format. - - The format. - - - - Initializes a new instance of the class. - - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The object representing the JSON Schema. - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The to use when resolving schema references. - The object representing the JSON Schema. - - - - Load a from a string that contains JSON Schema. - - A that contains JSON Schema. - A populated from the string that contains JSON Schema. - - - - Load a from a string that contains JSON Schema using the specified . - - A that contains JSON Schema. - The resolver. - A populated from the string that contains JSON Schema. - - - - Writes this schema to a . - - A into which this method will write. - - - - Writes this schema to a using the specified . - - A into which this method will write. - The resolver used. - - - - Returns a that represents the current . - - - A that represents the current . - - - - - - Returns detailed information about the schema exception. - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or null if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - - Generates a from a specified . - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets how undefined schemas are handled by the serializer. - - - - - Gets or sets the contract resolver. - - The contract resolver. - - - - Generate a from the specified type. - - The type to generate a from. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - - Resolves from an id. - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets or sets the loaded schemas. - - The loaded schemas. - - - - Initializes a new instance of the class. - - - - - Gets a for the specified reference. - - The id. - A for the specified reference. - - - - - The value types allowed by the . - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - No type specified. - - - - - String type. - - - - - Float type. - - - - - Integer type. - - - - - Boolean type. - - - - - Object type. - - - - - Array type. - - - - - Null type. - - - - - Any type. - - - - - - Specifies undefined schema Id handling options for the . - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - Do not infer a schema Id. - - - - - Use the .NET type name as the schema Id. - - - - - Use the assembly qualified .NET type name as the schema Id. - - - - - - Returns detailed information related to the . - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets the associated with the validation error. - - The JsonSchemaException associated with the validation error. - - - - Gets the path of the JSON location where the validation error occurred. - - The path of the JSON location where the validation error occurred. - - - - Gets the text description corresponding to the validation error. - - The text description. - - - - - Represents the callback method that will handle JSON schema validation events and the . - - - JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. - - - - - - A camel case naming strategy. - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Resolves member mappings for a type, camel casing property names. - - - - - Initializes a new instance of the class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Used by to resolve a for a given . - - - - - Gets a value indicating whether members are being get and set using dynamic code generation. - This value is determined by the runtime permissions available. - - - true if using dynamic code generation; otherwise, false. - - - - - Gets or sets the default members search flags. - - The default members search flags. - - - - Gets or sets a value indicating whether compiler generated members should be serialized. - - - true if serialized compiler generated members; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types. - - - true if the interface will be ignored when serializing and deserializing types; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types. - - - true if the attribute will be ignored when serializing and deserializing types; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore IsSpecified members when serializing and deserializing types. - - - true if the IsSpecified members will be ignored when serializing and deserializing types; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore ShouldSerialize members when serializing and deserializing types. - - - true if the ShouldSerialize members will be ignored when serializing and deserializing types; otherwise, false. - - - - - Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. - - The naming strategy used to resolve how property names and dictionary keys are serialized. - - - - Initializes a new instance of the class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Gets the serializable members for the type. - - The type to get serializable members for. - The serializable members for the type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates the constructor parameters. - - The constructor to create properties for. - The type's member properties. - Properties for the given . - - - - Creates a for the given . - - The matching member property. - The constructor parameter. - A created for the given . - - - - Resolves the default for the contract. - - Type of the object. - The contract's default . - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Determines which contract type is created for the given type. - - Type of the object. - A for the given type. - - - - Creates properties for the given . - - The type to create properties for. - /// The member serialization mode for the type. - Properties for the given . - - - - Creates the used by the serializer to get and set values from a member. - - The member. - The used by the serializer to get and set values from a member. - - - - Creates a for the given . - - The member's parent . - The member to create a for. - A created for the given . - - - - Resolves the name of the property. - - Name of the property. - Resolved name of the property. - - - - Resolves the name of the extension data. By default no changes are made to extension data names. - - Name of the extension data. - Resolved name of the extension data. - - - - Resolves the key of the dictionary. By default is used to resolve dictionary keys. - - Key of the dictionary. - Resolved key of the dictionary. - - - - Gets the resolved name of the property. - - Name of the property. - Name of the property. - - - - The default naming strategy. Property names and dictionary keys are unchanged. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - The default serialization binder used when resolving and loading classes from type names. - - - - - Initializes a new instance of the class. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - The type of the object the formatter creates a new instance of. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - Represents a trace writer that writes to the application's instances. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - - The that will be used to filter the trace messages passed to the writer. - - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Provides information surrounding an error. - - - - - Gets the error. - - The error. - - - - Gets the original object that caused the error. - - The original object that caused the error. - - - - Gets the member that caused the error. - - The member that caused the error. - - - - Gets the path of the JSON location where the error occurred. - - The path of the JSON location where the error occurred. - - - - Gets or sets a value indicating whether this is handled. - - true if handled; otherwise, false. - - - - Provides data for the Error event. - - - - - Gets the current object the error event is being raised against. - - The current object the error event is being raised against. - - - - Gets the error context. - - The error context. - - - - Initializes a new instance of the class. - - The current object. - The error context. - - - - Get and set values for a using dynamic methods. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Provides methods to get attributes. - - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Used by to resolve a for a given . - - - - - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Used to resolve references when serializing and deserializing JSON by the . - - - - - Resolves a reference to its object. - - The serialization context. - The reference to resolve. - The object that was resolved from the reference. - - - - Gets the reference for the specified object. - - The serialization context. - The object to get a reference for. - The reference to the object. - - - - Determines whether the specified object is referenced. - - The serialization context. - The object to test for a reference. - - true if the specified object is referenced; otherwise, false. - - - - - Adds a reference to the specified object. - - The serialization context. - The reference. - The object to reference. - - - - Allows users to control class loading and mandate what class to load. - - - - - When implemented, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object - The type of the object the formatter creates a new instance of. - - - - When implemented, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - Represents a trace writer. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - The that will be used to filter the trace messages passed to the writer. - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Provides methods to get and set values. - - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Contract details for a used by the . - - - - - Gets the of the collection items. - - The of the collection items. - - - - Gets a value indicating whether the collection type is a multidimensional array. - - true if the collection type is a multidimensional array; otherwise, false. - - - - Gets or sets the function used to create the object. When set this function will override . - - The function used to create the object. - - - - Gets a value indicating whether the creator has a parameter with the collection values. - - true if the creator has a parameter with the collection values; otherwise, false. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the default collection items . - - The converter. - - - - Gets or sets a value indicating whether the collection items preserve object references. - - true if collection items preserve object references; otherwise, false. - - - - Gets or sets the collection item reference loop handling. - - The reference loop handling. - - - - Gets or sets the collection item type name handling. - - The type name handling. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Handles serialization callback events. - - The object that raised the callback event. - The streaming context. - - - - Handles serialization error callback events. - - The object that raised the callback event. - The streaming context. - The error context. - - - - Sets extension data for an object during deserialization. - - The object to set extension data on. - The extension data key. - The extension data value. - - - - Gets extension data for an object during serialization. - - The object to set extension data on. - - - - Contract details for a used by the . - - - - - Gets the underlying type for the contract. - - The underlying type for the contract. - - - - Gets or sets the type created during deserialization. - - The type created during deserialization. - - - - Gets or sets whether this type contract is serialized as a reference. - - Whether this type contract is serialized as a reference. - - - - Gets or sets the default for this contract. - - The converter. - - - - Gets the internally resolved for the contract's type. - This converter is used as a fallback converter when no other converter is resolved. - Setting will always override this converter. - - - - - Gets or sets all methods called immediately after deserialization of the object. - - The methods called immediately after deserialization of the object. - - - - Gets or sets all methods called during deserialization of the object. - - The methods called during deserialization of the object. - - - - Gets or sets all methods called after serialization of the object graph. - - The methods called after serialization of the object graph. - - - - Gets or sets all methods called before serialization of the object. - - The methods called before serialization of the object. - - - - Gets or sets all method called when an error is thrown during the serialization of the object. - - The methods called when an error is thrown during the serialization of the object. - - - - Gets or sets the default creator method used to create the object. - - The default creator method used to create the object. - - - - Gets or sets a value indicating whether the default creator is non-public. - - true if the default object creator is non-public; otherwise, false. - - - - Contract details for a used by the . - - - - - Gets or sets the dictionary key resolver. - - The dictionary key resolver. - - - - Gets the of the dictionary keys. - - The of the dictionary keys. - - - - Gets the of the dictionary values. - - The of the dictionary values. - - - - Gets or sets the function used to create the object. When set this function will override . - - The function used to create the object. - - - - Gets a value indicating whether the creator has a parameter with the dictionary values. - - true if the creator has a parameter with the dictionary values; otherwise, false. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets the object's properties. - - The object's properties. - - - - Gets or sets the property name resolver. - - The property name resolver. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the object constructor. - - The object constructor. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Gets or sets the object member serialization. - - The member object serialization. - - - - Gets or sets the missing member handling used when deserializing this object. - - The missing member handling. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Gets or sets how the object's properties with null values are handled during serialization and deserialization. - - How the object's properties with null values are handled during serialization and deserialization. - - - - Gets the object's properties. - - The object's properties. - - - - Gets a collection of instances that define the parameters used with . - - - - - Gets or sets the function used to create the object. When set this function will override . - This function is called with a collection of arguments which are defined by the collection. - - The function used to create the object. - - - - Gets or sets the extension data setter. - - - - - Gets or sets the extension data getter. - - - - - Gets or sets the extension data value type. - - - - - Gets or sets the extension data name resolver. - - The extension data name resolver. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Maps a JSON property to a .NET member or constructor parameter. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the type that declared this property. - - The type that declared this property. - - - - Gets or sets the order of serialization of a member. - - The numeric order of serialization. - - - - Gets or sets the name of the underlying member or parameter. - - The name of the underlying member or parameter. - - - - Gets the that will get and set the during serialization. - - The that will get and set the during serialization. - - - - Gets or sets the for this property. - - The for this property. - - - - Gets or sets the type of the property. - - The type of the property. - - - - Gets or sets the for the property. - If set this converter takes precedence over the contract converter for the property type. - - The converter. - - - - Gets or sets the member converter. - - The member converter. - - - - Gets or sets a value indicating whether this is ignored. - - true if ignored; otherwise, false. - - - - Gets or sets a value indicating whether this is readable. - - true if readable; otherwise, false. - - - - Gets or sets a value indicating whether this is writable. - - true if writable; otherwise, false. - - - - Gets or sets a value indicating whether this has a member attribute. - - true if has a member attribute; otherwise, false. - - - - Gets the default value. - - The default value. - - - - Gets or sets a value indicating whether this is required. - - A value indicating whether this is required. - - - - Gets a value indicating whether has a value specified. - - - - - Gets or sets a value indicating whether this property preserves object references. - - - true if this instance is reference; otherwise, false. - - - - - Gets or sets the property null value handling. - - The null value handling. - - - - Gets or sets the property default value handling. - - The default value handling. - - - - Gets or sets the property reference loop handling. - - The reference loop handling. - - - - Gets or sets the property object creation handling. - - The object creation handling. - - - - Gets or sets or sets the type name handling. - - The type name handling. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets a predicate used to determine whether the property should be deserialized. - - A predicate used to determine whether the property should be deserialized. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets an action used to set whether the property has been deserialized. - - An action used to set whether the property has been deserialized. - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets the converter used when serializing the property's collection items. - - The collection's items converter. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Gets or sets the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - A collection of objects. - - - - - Initializes a new instance of the class. - - The type. - - - - When implemented in a derived class, extracts the key from the specified element. - - The element from which to extract the key. - The key for the specified element. - - - - Adds a object. - - The property to add to the collection. - - - - Gets the closest matching object. - First attempts to get an exact case match of and then - a case insensitive match. - - Name of the property. - A matching property if found. - - - - Gets a property by property name. - - The name of the property to get. - Type property name string comparison. - A matching property if found. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Lookup and create an instance of the type described by the argument. - - The type to create. - Optional arguments to pass to an initializing constructor of the JsonConverter. - If null, the default constructor is used. - - - - A kebab case naming strategy. - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Represents a trace writer that writes to memory. When the trace message limit is - reached then old trace messages will be removed as new messages are added. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of will exclude messages and include , - and messages. - - - The that will be used to filter the trace messages passed to the writer. - - - - - Initializes a new instance of the class. - - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Returns an enumeration of the most recent trace messages. - - An enumeration of the most recent trace messages. - - - - Returns a of the most recent trace messages. - - - A of the most recent trace messages. - - - - - A base class for resolving how property names and dictionary keys are serialized. - - - - - A flag indicating whether dictionary keys should be processed. - Defaults to false. - - - - - A flag indicating whether extension data names should be processed. - Defaults to false. - - - - - A flag indicating whether explicitly specified property names, - e.g. a property name customized with a , should be processed. - Defaults to false. - - - - - Gets the serialized name for a given property name. - - The initial property name. - A flag indicating whether the property has had a name explicitly specified. - The serialized property name. - - - - Gets the serialized name for a given extension data name. - - The initial extension data name. - The serialized extension data name. - - - - Gets the serialized key for a given dictionary key. - - The initial dictionary key. - The serialized dictionary key. - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Hash code calculation - - - - - - Object equality implementation - - - - - - - Compare to another NamingStrategy - - - - - - - Represents a method that constructs an object. - - The object type to create. - - - - When applied to a method, specifies that the method is called when an error occurs serializing an object. - - - - - Provides methods to get attributes from a , , or . - - - - - Initializes a new instance of the class. - - The instance to get attributes for. This parameter should be a , , or . - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Get and set values for a using reflection. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - A snake case naming strategy. - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - - - Initializes a new instance of the class. - - - A flag indicating whether dictionary keys should be processed. - - - A flag indicating whether explicitly specified property names should be processed, - e.g. a property name customized with a . - - - A flag indicating whether extension data names should be processed. - - - - - Initializes a new instance of the class. - - - - - Resolves the specified property name. - - The property name to resolve. - The resolved property name. - - - - Specifies how strings are escaped when writing JSON text. - - - - - Only control characters (e.g. newline) are escaped. - - - - - All non-ASCII and control characters (e.g. newline) are escaped. - - - - - HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. - - - - - Indicates the method that will be used during deserialization for locating and loading assemblies. - - - - - In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly. - - - - - In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly. - - - - - Specifies type name handling options for the . - - - should be used with caution when your application deserializes JSON from an external source. - Incoming types should be validated with a custom - when deserializing with a value other than . - - - - - Do not include the .NET type name when serializing types. - - - - - Include the .NET type name when serializing into a JSON object structure. - - - - - Include the .NET type name when serializing into a JSON array structure. - - - - - Always include the .NET type name when serializing. - - - - - Include the .NET type name when the type of the object being serialized is not the same as its declared type. - Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON - you must specify a root type object with - or . - - - - - - - - - - Don't run action but let a compiler detect the code in action as an executable block. - - - - - Ensure(() => new T()); - - - - - Ensure generic list type can be (de)deserializable on AOT environment. - - The type of elements in the list - - - - Ensure generic dictionary type can be (de)deserializable on AOT environment. - - The type of the keys in the dictionary. - The type of the values in the dictionary. - - - - Always return false but compiler doesn't know it. - - False - - - - Determines whether the collection is null or empty. - - The collection. - - true if the collection is null or empty; otherwise, false. - - - - - Adds the elements of the specified collection to the specified generic . - - The list to add to. - The collection of elements to add. - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The value to convert. - The culture to use when converting. - The type to convert or cast the value to. - - The converted type. If conversion was unsuccessful, the initial value - is returned if assignable to the target type. - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic that returns a result - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic, but uses one of the arguments for - the result. - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic, but uses one of the arguments for - the result. - - - - - Returns a Restrictions object which includes our current restrictions merged - with a restriction limiting our type - - - - - Helper class for serializing immutable collections. - Note that this is used by all builds, even those that don't support immutable collections, in case the DLL is GACed - https://github.com/JamesNK/Newtonsoft.Json/issues/652 - - - - - Gets the type of the typed collection's items. - - The type. - The type of the typed collection's items. - - - - Gets the member's underlying type. - - The member. - The underlying type of the member. - - - - Determines whether the property is an indexed property. - - The property. - - true if the property is an indexed property; otherwise, false. - - - - - Gets the member's value on the object. - - The member. - The target object. - The member's value on the object. - - - - Sets the member's value on the target object. - - The member. - The target. - The value. - - - - Determines whether the specified MemberInfo can be read. - - The MemberInfo to determine whether can be read. - /// if set to true then allow the member to be gotten non-publicly. - - true if the specified MemberInfo can be read; otherwise, false. - - - - - Determines whether the specified MemberInfo can be set. - - The MemberInfo to determine whether can be set. - if set to true then allow the member to be set non-publicly. - if set to true then allow the member to be set if read-only. - - true if the specified MemberInfo can be set; otherwise, false. - - - - - Builds a string. Unlike this class lets you reuse its internal buffer. - - - - - Determines whether the string is all white space. Empty string will return false. - - The string to test whether it is all white space. - - true if the string is all white space; otherwise, false. - - - - - Specifies the state of the . - - - - - An exception has been thrown, which has left the in an invalid state. - You may call the method to put the in the Closed state. - Any other method calls result in an being thrown. - - - - - The method has been called. - - - - - An object is being written. - - - - - An array is being written. - - - - - A constructor is being written. - - - - - A property is being written. - - - - - A write method has not been called. - - - - Specifies that an output will not be null even if the corresponding type allows it. - - - Specifies that when a method returns , the parameter will not be null even if the corresponding type allows it. - - - Initializes the attribute with the specified return value condition. - - The return value condition. If the method returns this value, the associated parameter will not be null. - - - - Gets the return value condition. - - - Specifies that an output may be null even if the corresponding type disallows it. - - - Specifies that null is allowed as an input even if the corresponding type disallows it. - - - - Specifies that the method will not return if the associated Boolean parameter is passed the specified value. - - - - - Initializes a new instance of the class. - - - The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to - the associated parameter matches this value. - - - - Gets the condition parameter value. - - - diff --git a/Runtime/Plugins/Newtonsoft.Json Editor/Newtonsoft.Json.xml.meta b/Runtime/Plugins/Newtonsoft.Json Editor/Newtonsoft.Json.xml.meta deleted file mode 100644 index 597d5a0b..00000000 --- a/Runtime/Plugins/Newtonsoft.Json Editor/Newtonsoft.Json.xml.meta +++ /dev/null @@ -1,10 +0,0 @@ - -fileFormatVersion: 2 -guid: 96ce21d7a7eb498e9376cadf61f86f17 - -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: - diff --git a/Runtime/Prefabs/Authentication.prefab b/Runtime/Prefabs/TezosAuthenticator.prefab similarity index 56% rename from Runtime/Prefabs/Authentication.prefab rename to Runtime/Prefabs/TezosAuthenticator.prefab index 27e57170..391af5c9 100644 --- a/Runtime/Prefabs/Authentication.prefab +++ b/Runtime/Prefabs/TezosAuthenticator.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &3121589126738375249 +--- !u!1 &2221511951727132525 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,46 +8,399 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3121589126738375253} - - component: {fileID: 3121589126738375252} - - component: {fileID: 3121589126738375251} - - component: {fileID: 3121589126738375250} - - component: {fileID: 3713326636857166855} + - component: {fileID: 2221511951727132524} + - component: {fileID: 2221511951727132526} + - component: {fileID: 2221511951727132527} m_Layer: 5 - m_Name: Authentication + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2221511951727132524 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2221511951727132525} + 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: 1 + m_Children: [] + m_Father: {fileID: 2221511952828651888} + 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!222 &2221511951727132526 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2221511951727132525} + m_CullTransparentMesh: 1 +--- !u!114 &2221511951727132527 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2221511951727132525} + 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: Logout + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, 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: 16 + m_fontSizeBase: 16 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 33 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + 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.21484756, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &2221511951988164626 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2221511951988164653} + - component: {fileID: 2221511951988164655} + - component: {fileID: 2221511951988164652} + m_Layer: 5 + m_Name: Text (TMP) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &3121589126738375253 +--- !u!224 &2221511951988164653 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2221511951988164626} + 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: 2221511952751916817} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2221511951988164655 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2221511951988164626} + m_CullTransparentMesh: 1 +--- !u!114 &2221511951988164652 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2221511951988164626} + 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: Login With Social + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, 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: 21.7 + m_fontSizeBase: 20 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 0 + m_fontSizeMax: 24 + m_fontStyle: 17 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + 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: 20, y: 20, z: 20, w: 20} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &2221511952106025721 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2221511952106025722} + - component: {fileID: 2221511952106025723} + - component: {fileID: 2221511952106025720} + - component: {fileID: 2221511952106025717} + m_Layer: 5 + m_Name: QRCode + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &2221511952106025722 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3121589126738375249} + m_GameObject: {fileID: 2221511952106025721} + 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: 2221511952716474937} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 320, y: 320} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2221511952106025723 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2221511952106025721} + m_CullTransparentMesh: 1 +--- !u!114 &2221511952106025720 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2221511952106025721} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, 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_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!114 &2221511952106025717 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2221511952106025721} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a6b34a11c0bbb4c9e9c3c933d831d3e9, type: 3} + m_Name: + m_EditorClassIdentifier: + rawImage: {fileID: 2221511952106025720} +--- !u!1 &2221511952331529762 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2221511952331529785} + - component: {fileID: 2221511952331529790} + - component: {fileID: 2221511952331529791} + - component: {fileID: 2221511952331529788} + - component: {fileID: 2221511952331529789} + m_Layer: 5 + m_Name: TezosAuthenticator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2221511952331529785 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2221511952331529762} 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: 3121589127431171062} + - {fileID: 2221511952907291948} m_Father: {fileID: 0} - m_RootOrder: 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!223 &3121589126738375252 +--- !u!223 &2221511952331529790 Canvas: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3121589126738375249} + m_GameObject: {fileID: 2221511952331529762} m_Enabled: 1 serializedVersion: 3 m_RenderMode: 0 @@ -58,17 +411,19 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 1 m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 - m_SortingOrder: 0 + m_SortingOrder: 100 m_TargetDisplay: 0 ---- !u!114 &3121589126738375251 +--- !u!114 &2221511952331529791 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3121589126738375249} + m_GameObject: {fileID: 2221511952331529762} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} @@ -77,21 +432,21 @@ MonoBehaviour: m_UiScaleMode: 1 m_ReferencePixelsPerUnit: 100 m_ScaleFactor: 1 - m_ReferenceResolution: {x: 800, y: 600} + m_ReferenceResolution: {x: 1280, y: 720} m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0 + m_MatchWidthOrHeight: 0.5 m_PhysicalUnit: 3 m_FallbackScreenDPI: 96 m_DefaultSpriteDPI: 96 m_DynamicPixelsPerUnit: 1 m_PresetInfoIsWorld: 0 ---- !u!114 &3121589126738375250 +--- !u!114 &2221511952331529788 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3121589126738375249} + m_GameObject: {fileID: 2221511952331529762} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} @@ -102,24 +457,24 @@ MonoBehaviour: m_BlockingMask: serializedVersion: 2 m_Bits: 4294967295 ---- !u!114 &3713326636857166855 +--- !u!114 &2221511952331529789 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3121589126738375249} + m_GameObject: {fileID: 2221511952331529762} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: a36293c38484941be89b83a6e75aadaa, type: 3} m_Name: m_EditorClassIdentifier: - qrCodeView: {fileID: 786061167812959950} - contentPanel: {fileID: 0} - deepLinkButton: {fileID: 4861287952596017711} - logoutButton: {fileID: 8163905288335366993} - qrCodePanel: {fileID: 3201536582223850208} ---- !u!1 &3121589127431171061 + qrCodeGenerator: {fileID: 2221511952106025717} + deepLinkButton: {fileID: 2221511952733773064} + socialLoginButton: {fileID: 2221511952751916822} + logoutButton: {fileID: 2221511952828651889} + darkBG: {fileID: 6675340471920486954} +--- !u!1 &2221511952716474942 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -127,96 +482,61 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3121589127431171062} + - component: {fileID: 2221511952716474937} + - component: {fileID: 2221511952716474938} + - component: {fileID: 2221511952716474939} + - component: {fileID: 2221511952716474936} m_Layer: 5 - m_Name: ScreenSpace + m_Name: LoginPanel m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &3121589127431171062 +--- !u!224 &2221511952716474937 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3121589127431171061} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_GameObject: {fileID: 2221511952716474942} + 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: 3121589128085408714} - - {fileID: 3216458246497218316} - m_Father: {fileID: 3121589126738375253} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &3121589128085408713 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3121589128085408714} - - component: {fileID: 3121589128085408716} - - component: {fileID: 3121589128085408715} - m_Layer: 5 - m_Name: Background - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &3121589128085408714 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3121589128085408713} - 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: 3121589127431171062} - m_RootOrder: 0 + - {fileID: 2221511952733773067} + - {fileID: 2221511952751916817} + - {fileID: 2221511952106025722} + m_Father: {fileID: 2221511952907291948} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &3121589128085408716 +--- !u!222 &2221511952716474938 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3121589128085408713} + m_GameObject: {fileID: 2221511952716474942} m_CullTransparentMesh: 1 ---- !u!114 &3121589128085408715 +--- !u!114 &2221511952716474939 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3121589128085408713} - m_Enabled: 1 + m_GameObject: {fileID: 2221511952716474942} + m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0.14150941, g: 0.11547702, b: 0.11547702, a: 0.7529412} + m_Color: {r: 0, g: 0, b: 0, a: 0.9019608} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 @@ -224,7 +544,7 @@ MonoBehaviour: m_PersistentCalls: m_Calls: [] m_Sprite: {fileID: 0} - m_Type: 0 + m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 @@ -233,7 +553,33 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!1 &3201536582223850208 +--- !u!114 &2221511952716474936 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2221511952716474942} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &2221511952733773064 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -241,86 +587,132 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1311348300197142675} - - component: {fileID: 6543230242619544066} - - component: {fileID: 5061288848528201757} - - component: {fileID: 786061167812959950} + - component: {fileID: 2221511952733773067} + - component: {fileID: 2221511952733773060} + - component: {fileID: 2221511952733773061} + - component: {fileID: 2221511952733773066} m_Layer: 5 - m_Name: QRCode + m_Name: LoginButtonDeepLink m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 0 ---- !u!224 &1311348300197142675 +--- !u!224 &2221511952733773067 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3201536582223850208} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_GameObject: {fileID: 2221511952733773064} + 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: 3216458246497218316} - m_RootOrder: 1 + m_Children: + - {fileID: 2221511952988034936} + m_Father: {fileID: 2221511952716474937} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 256, y: 256} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 322.25485, y: -667.8606} + m_SizeDelta: {x: 248.11633, y: 89.2032} m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &6543230242619544066 +--- !u!222 &2221511952733773060 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3201536582223850208} + m_GameObject: {fileID: 2221511952733773064} m_CullTransparentMesh: 1 ---- !u!114 &5061288848528201757 +--- !u!114 &2221511952733773061 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3201536582223850208} + m_GameObject: {fileID: 2221511952733773064} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3} + 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_Color: {r: 0.3018868, g: 0.20647916, b: 0.20647916, 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_Texture: {fileID: 0} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!114 &786061167812959950 + m_Sprite: {fileID: 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!114 &2221511952733773066 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3201536582223850208} + m_GameObject: {fileID: 2221511952733773064} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a6b34a11c0bbb4c9e9c3c933d831d3e9, type: 3} + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} m_Name: m_EditorClassIdentifier: - _rawImage: {fileID: 5061288848528201757} ---- !u!1 &3474583775853282475 + 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: 1 + m_TargetGraphic: {fileID: 2221511952733773061} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2221511952331529789} + m_TargetAssemblyTypeName: AuthenticationManager, com.trilitech.tezos-unity-sdk + m_MethodName: ConnectByDeeplink + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &2221511952751916822 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -328,63 +720,60 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3216458246497218316} - - component: {fileID: 7911545692183200192} - - component: {fileID: 3906995141817899528} - - component: {fileID: 7961553561865963777} + - component: {fileID: 2221511952751916817} + - component: {fileID: 2221511952751916818} + - component: {fileID: 2221511952751916819} + - component: {fileID: 2221511952751916816} m_Layer: 5 - m_Name: LoginPanel + m_Name: SocialLoginButton m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &3216458246497218316 + m_IsActive: 0 +--- !u!224 &2221511952751916817 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3474583775853282475} + m_GameObject: {fileID: 2221511952751916822} 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: 5148721583461373710} - - {fileID: 1311348300197142675} - - {fileID: 8163905288335366994} - m_Father: {fileID: 3121589127431171062} - m_RootOrder: 1 + - {fileID: 2221511951988164653} + m_Father: {fileID: 2221511952716474937} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.02, y: 0.02} - m_AnchorMax: {x: 0.98, y: 0.98} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -0.0000071525574, y: 0.00000667572} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 322.25485, y: -762.0638} + m_SizeDelta: {x: 248.11633, y: 89.2032} m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &7911545692183200192 +--- !u!222 &2221511952751916818 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3474583775853282475} + m_GameObject: {fileID: 2221511952751916822} m_CullTransparentMesh: 1 ---- !u!114 &3906995141817899528 +--- !u!114 &2221511952751916819 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3474583775853282475} - m_Enabled: 0 + m_GameObject: {fileID: 2221511952751916822} + 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: 0.392} - m_RaycastTarget: 0 + m_Color: {r: 0.3018868, g: 0.20647916, b: 0.20647916, a: 1} + m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: @@ -400,33 +789,63 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &7961553561865963777 +--- !u!114 &2221511952751916816 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3474583775853282475} - m_Enabled: 0 + m_GameObject: {fileID: 2221511952751916822} + m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} m_Name: m_EditorClassIdentifier: - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 4 - m_Spacing: 5 - m_ChildForceExpandWidth: 1 - m_ChildForceExpandHeight: 0 - m_ChildControlWidth: 0 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 - m_ReverseArrangement: 0 ---- !u!1 &4861287952596017711 + 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: 1 + m_TargetGraphic: {fileID: 2221511952751916819} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2221511952331529789} + m_TargetAssemblyTypeName: TezosSDK.View.AuthenticationManager, com.trilitech.tezos-unity-sdk + m_MethodName: ConnectWithSocial + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &2221511952828651889 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -434,60 +853,61 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5148721583461373710} - - component: {fileID: 9029068484046731587} - - component: {fileID: 3016668596327292709} - - component: {fileID: 2644164856126492404} + - component: {fileID: 2221511952828651888} + - component: {fileID: 2221511952828651789} + - component: {fileID: 2221511952828651890} + - component: {fileID: 2221511952828651891} + - component: {fileID: 8000319178708936762} m_Layer: 5 - m_Name: LoginButtonDeepLink + m_Name: LogoutButton m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &5148721583461373710 + m_IsActive: 1 +--- !u!224 &2221511952828651888 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4861287952596017711} + m_GameObject: {fileID: 2221511952828651889} 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: 7209149153837375875} - m_Father: {fileID: 3216458246497218316} - m_RootOrder: 0 + - {fileID: 8967202891732467080} + - {fileID: 2221511951727132524} + m_Father: {fileID: 2221511952907291948} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 248.11633, y: 89.2032} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &9029068484046731587 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 10, y: 10} + m_SizeDelta: {x: 85.501, y: 30} + m_Pivot: {x: 0, y: 0} +--- !u!222 &2221511952828651789 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4861287952596017711} + m_GameObject: {fileID: 2221511952828651889} m_CullTransparentMesh: 1 ---- !u!114 &3016668596327292709 +--- !u!114 &2221511952828651890 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4861287952596017711} + m_GameObject: {fileID: 2221511952828651889} 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.3018868, g: 0.20647916, b: 0.20647916, a: 1} + m_Color: {r: 0.3019608, g: 0.20784314, b: 0.20784314, a: 1} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 @@ -495,7 +915,7 @@ MonoBehaviour: m_PersistentCalls: m_Calls: [] m_Sprite: {fileID: 0} - m_Type: 1 + m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 @@ -504,13 +924,13 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &2644164856126492404 +--- !u!114 &2221511952828651891 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4861287952596017711} + m_GameObject: {fileID: 2221511952828651889} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} @@ -526,8 +946,8 @@ MonoBehaviour: 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_HighlightedColor: {r: 0.8018868, g: 0.8018868, b: 0.8018868, a: 1} + m_PressedColor: {r: 0.6792453, g: 0.6792453, b: 0.6792453, 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 @@ -544,13 +964,13 @@ MonoBehaviour: m_SelectedTrigger: Selected m_DisabledTrigger: Disabled m_Interactable: 1 - m_TargetGraphic: {fileID: 3016668596327292709} + m_TargetGraphic: {fileID: 2221511952828651890} m_OnClick: m_PersistentCalls: m_Calls: - - m_Target: {fileID: 3713326636857166855} + - m_Target: {fileID: 2221511952331529789} m_TargetAssemblyTypeName: AuthenticationManager, com.trilitech.tezos-unity-sdk - m_MethodName: ConnectByDeeplink + m_MethodName: DisconnectWallet m_Mode: 1 m_Arguments: m_ObjectArgument: {fileID: 0} @@ -560,7 +980,71 @@ MonoBehaviour: m_StringArgument: m_BoolArgument: 0 m_CallState: 2 ---- !u!1 &7608403551692849041 +--- !u!114 &8000319178708936762 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2221511952828651889} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 5 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 1 + m_ReverseArrangement: 0 +--- !u!1 &2221511952907291949 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2221511952907291948} + m_Layer: 5 + m_Name: ScreenSpace + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2221511952907291948 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2221511952907291949} + 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: 820034625241733324} + - {fileID: 2221511952828651888} + - {fileID: 2221511952716474937} + m_Father: {fileID: 2221511952331529785} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &2221511952988034937 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -568,9 +1052,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7608403551692849042} - - component: {fileID: 7608403551692849044} - - component: {fileID: 7608403551692849043} + - component: {fileID: 2221511952988034936} + - component: {fileID: 2221511952988034938} + - component: {fileID: 2221511952988034939} m_Layer: 5 m_Name: Text (TMP) m_TagString: Untagged @@ -578,41 +1062,40 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &7608403551692849042 +--- !u!224 &2221511952988034936 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7608403551692849041} + m_GameObject: {fileID: 2221511952988034937} 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: 8163905288335366994} - m_RootOrder: 0 + m_Father: {fileID: 2221511952733773067} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &7608403551692849044 +--- !u!222 &2221511952988034938 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7608403551692849041} + m_GameObject: {fileID: 2221511952988034937} m_CullTransparentMesh: 1 ---- !u!114 &7608403551692849043 +--- !u!114 &2221511952988034939 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7608403551692849041} + m_GameObject: {fileID: 2221511952988034937} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} @@ -626,7 +1109,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_text: Logout + m_text: Login With Beacon m_isRightToLeft: 0 m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} @@ -653,13 +1136,13 @@ MonoBehaviour: m_faceColor: serializedVersion: 2 rgba: 4294967295 - m_fontSize: 16 - m_fontSizeBase: 16 + m_fontSize: 21.7 + m_fontSizeBase: 20 m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 + m_enableAutoSizing: 1 + m_fontSizeMin: 0 + m_fontSizeMax: 24 + m_fontStyle: 17 m_HorizontalAlignment: 2 m_VerticalAlignment: 512 m_textAlignment: 65535 @@ -689,13 +1172,13 @@ MonoBehaviour: m_VertexBufferAutoSizeReduction: 0 m_useMaxVisibleDescender: 1 m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} + m_margin: {x: 20, y: 20, z: 20, w: 20} m_isUsingLegacyAnimationComponent: 0 m_isVolumetricText: 0 m_hasFontAssetChanged: 0 m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!1 &7983304630101643237 +--- !u!1 &2427647086758772485 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -703,54 +1186,54 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7209149153837375875} - - component: {fileID: 6871507225183346606} - - component: {fileID: 6125937097836533730} + - component: {fileID: 8967202891732467080} + - component: {fileID: 3054594516103931737} + - component: {fileID: 4216965966404991761} + - component: {fileID: 9001245295465471916} m_Layer: 5 - m_Name: Text (TMP) + m_Name: Image m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &7209149153837375875 + m_IsActive: 0 +--- !u!224 &8967202891732467080 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7983304630101643237} + m_GameObject: {fileID: 2427647086758772485} 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_ConstrainProportionsScale: 1 m_Children: [] - m_Father: {fileID: 5148721583461373710} - m_RootOrder: 0 + m_Father: {fileID: 2221511952828651888} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &6871507225183346606 + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 2.0405006, y: -15} + m_SizeDelta: {x: 15, y: 15} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &3054594516103931737 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7983304630101643237} + m_GameObject: {fileID: 2427647086758772485} m_CullTransparentMesh: 1 ---- !u!114 &6125937097836533730 +--- !u!114 &4216965966404991761 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7983304630101643237} + m_GameObject: {fileID: 2427647086758772485} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} @@ -761,76 +1244,37 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_text: Login With Deeplink - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4294967295 - m_fontColor: {r: 1, g: 1, b: 1, 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: 21.7 - m_fontSizeBase: 20 - m_fontWeight: 400 - m_enableAutoSizing: 1 - m_fontSizeMin: 0 - m_fontSizeMax: 24 - m_fontStyle: 17 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 512 - 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: 20, y: 20, z: 20, w: 20} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!1 &8163905288335366993 + m_Sprite: {fileID: 21300000, guid: 98b83bfbaeea344b88b7673df90342e5, 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!114 &9001245295465471916 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2427647086758772485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: 15 + m_MinHeight: 15 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &6558023319763147133 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -838,60 +1282,57 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8163905288335366994} - - component: {fileID: 8163905288335366989} - - component: {fileID: 8163905288335366988} - - component: {fileID: 8163905288335366995} + - component: {fileID: 820034625241733324} + - component: {fileID: 5798812697836015663} + - component: {fileID: 6675340471920486954} m_Layer: 5 - m_Name: LogoutButton + m_Name: DarkBG m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 0 ---- !u!224 &8163905288335366994 +--- !u!224 &820034625241733324 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8163905288335366993} + m_GameObject: {fileID: 6558023319763147133} 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: 7608403551692849042} - m_Father: {fileID: 3216458246497218316} - m_RootOrder: 2 + m_Children: [] + m_Father: {fileID: 2221511952907291948} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 1} + m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -120, y: -120} - m_SizeDelta: {x: 90, y: 30} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &8163905288335366989 +--- !u!222 &5798812697836015663 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8163905288335366993} + m_GameObject: {fileID: 6558023319763147133} m_CullTransparentMesh: 1 ---- !u!114 &8163905288335366988 +--- !u!114 &6675340471920486954 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8163905288335366993} + m_GameObject: {fileID: 6558023319763147133} 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.3019608, g: 0.20784314, b: 0.20784314, a: 1} + m_Color: {r: 0, g: 0, b: 0, a: 0.9019608} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 @@ -908,59 +1349,3 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &8163905288335366995 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8163905288335366993} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, 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: 1 - m_TargetGraphic: {fileID: 8163905288335366988} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 3713326636857166855} - m_TargetAssemblyTypeName: AuthenticationManager, com.trilitech.tezos-unity-sdk - m_MethodName: DisconnectWallet - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 diff --git a/Runtime/Prefabs/Authentication.prefab.meta b/Runtime/Prefabs/TezosAuthenticator.prefab.meta similarity index 100% rename from Runtime/Prefabs/Authentication.prefab.meta rename to Runtime/Prefabs/TezosAuthenticator.prefab.meta diff --git a/Runtime/Prefabs/MainThreadExecutor.prefab b/Runtime/Prefabs/TezosManager.prefab similarity index 59% rename from Runtime/Prefabs/MainThreadExecutor.prefab rename to Runtime/Prefabs/TezosManager.prefab index f7a18a0f..0390c5d9 100644 --- a/Runtime/Prefabs/MainThreadExecutor.prefab +++ b/Runtime/Prefabs/TezosManager.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &4616586832780915041 +--- !u!1 &4898021624847171558 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,39 +8,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3634858576511064492} - - component: {fileID: 4479231330679373428} + - component: {fileID: 3340385179467995793} + - component: {fileID: 7709730176731183433} m_Layer: 0 - m_Name: MainThreadExecutor + m_Name: TezosManager m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3634858576511064492 +--- !u!4 &3340385179467995793 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4616586832780915041} + m_GameObject: {fileID: 4898021624847171558} + 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_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &4479231330679373428 +--- !u!114 &7709730176731183433 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4616586832780915041} + m_GameObject: {fileID: 4898021624847171558} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: ecaf9fdc0b5544fa6a6fbf95df1af2e9, type: 3} + m_Script: {fileID: 11500000, guid: f9e320857b38440ba4ec94ca9b329f4d, type: 3} m_Name: m_EditorClassIdentifier: + appName: Starter Sample + appUrl: https://tezos.com + appIcon: https://tezos.com/favicon.ico + appDescription: Tezos Starter Sample + logLevel: 4 + pinataApiKey: + config: {fileID: 11400000, guid: 9b177380eac964750bfb2ad37a50c9cc, type: 2} diff --git a/Runtime/Prefabs/MainThreadExecutor.prefab.meta b/Runtime/Prefabs/TezosManager.prefab.meta similarity index 74% rename from Runtime/Prefabs/MainThreadExecutor.prefab.meta rename to Runtime/Prefabs/TezosManager.prefab.meta index 7db029a9..66defd0f 100644 --- a/Runtime/Prefabs/MainThreadExecutor.prefab.meta +++ b/Runtime/Prefabs/TezosManager.prefab.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ebe42ae2197554a718feda9bdc452a79 +guid: 05a6ebf6c729446cc8458943256b9209 PrefabImporter: externalObjects: {} userData: diff --git a/Runtime/Scripts.meta b/Runtime/Scripts.meta index 30cd2129..b3565bcc 100644 --- a/Runtime/Scripts.meta +++ b/Runtime/Scripts.meta @@ -1,8 +1,3 @@ fileFormatVersion: 2 -guid: ad6e63baafaefd94ea423508a839a691 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: +guid: 7e881122191641bb94a4b803ae14805f +timeCreated: 1704711270 \ No newline at end of file diff --git a/Runtime/Scripts/Beacon.meta b/Runtime/Scripts/Beacon.meta index 050a9c56..fe96f9b1 100644 --- a/Runtime/Scripts/Beacon.meta +++ b/Runtime/Scripts/Beacon.meta @@ -1,8 +1,3 @@ fileFormatVersion: 2 -guid: 70bd658543b8c471ebda59d692eb6247 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: +guid: f114261ec65440eebf53abb68892ae58 +timeCreated: 1704711334 \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/BeaconConnectorDotNet.cs b/Runtime/Scripts/Beacon/BeaconConnectorDotNet.cs deleted file mode 100644 index 20c0eba7..00000000 --- a/Runtime/Scripts/Beacon/BeaconConnectorDotNet.cs +++ /dev/null @@ -1,344 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using Beacon.Sdk; -using Beacon.Sdk.Beacon; -using Beacon.Sdk.Beacon.Operation; -using Beacon.Sdk.Beacon.Permission; -using Beacon.Sdk.Beacon.Sign; -using Beacon.Sdk.BeaconClients; -using Beacon.Sdk.BeaconClients.Abstract; -using Beacon.Sdk.Core.Domain.Services; -using Microsoft.Extensions.Logging; -using Netezos.Keys; -using Newtonsoft.Json.Linq; -using TezosSDK.Helpers; -using TezosSDK.Tezos; -using TezosSDK.Tezos.Wallet; -using UnityEngine; -using ILogger = Microsoft.Extensions.Logging.ILogger; -using Logger = TezosSDK.Helpers.Logger; -using BeaconNetwork = global::Beacon.Sdk.Beacon.Permission.Network; - -namespace TezosSDK.Beacon -{ - public class BeaconConnectorDotNet : IBeaconConnector, IDisposable - { - private static WalletMessageReceiver _walletMessageReceiver; - private DappBeaconClient BeaconDappClient { get; set; } - private string _network; - private string _rpc; - private DAppMetadata _dAppMetadata; - - #region IBeaconConnector - - public async void ConnectAccount() - { - if (BeaconDappClient != null) return; - - var pathToDb = Path.Combine(Application.persistentDataPath, "beacon.db"); - Logger.LogDebug($"DB file stored in {pathToDb}"); - - var options = new BeaconOptions - { - AppName = _dAppMetadata.Name, - AppUrl = _dAppMetadata.Url, - IconUrl = _dAppMetadata.Icon, - KnownRelayServers = Constants.KnownRelayServers, - DatabaseConnectionString = $"Filename={pathToDb};Connection=direct;Upgrade=true" - }; - - BeaconDappClient = (DappBeaconClient)BeaconClientFactory - .Create(options, new MyLoggerProvider()); - BeaconDappClient.OnBeaconMessageReceived += OnBeaconDappClientMessageReceived; - - await BeaconDappClient.InitAsync(); - Logger.LogInfo($"Dapp initialized: {BeaconDappClient.LoggedIn}"); - BeaconDappClient.Connect(); - Logger.LogInfo($"Dapp connected: {BeaconDappClient.Connected}"); - - var activeAccountPermissions = BeaconDappClient.GetActiveAccount(); - if (activeAccountPermissions != null) - { - var permissionsString = activeAccountPermissions.Scopes.Aggregate(string.Empty, - (res, scope) => res + $"{scope}, ") ?? string.Empty; - Logger.LogInfo( - $"We have active peer {activeAccountPermissions.AppMetadata.Name} with permissions {permissionsString}"); - - UnityMainThreadDispatcher.Enqueue( - _walletMessageReceiver.OnAccountConnected, - new JObject - { - ["accountInfo"] = new JObject - { - ["address"] = activeAccountPermissions.Address, - ["publicKey"] = activeAccountPermissions.PublicKey - } - }.ToString()); - } - else - { - _walletMessageReceiver.OnHandshakeReceived(BeaconDappClient.GetPairingRequestInfo()); - } - } - - public string GetActiveAccountAddress() => BeaconDappClient?.GetActiveAccount()?.Address ?? string.Empty; - - public void DisconnectAccount() - { - BeaconDappClient.RemoveActiveAccounts(); - var pairingRequestQrData = BeaconDappClient.GetPairingRequestInfo(); - _walletMessageReceiver.OnHandshakeReceived(pairingRequestQrData); - UnityMainThreadDispatcher.Enqueue(_walletMessageReceiver.OnAccountDisconnected, string.Empty); - } - - public void InitWalletProvider( - string network, - string rpc, - WalletProviderType walletProviderType, - DAppMetadata dAppMetadata) - { - _network = network; - _rpc = rpc; - _dAppMetadata = dAppMetadata; - } - - public void SetWalletMessageReceiver(WalletMessageReceiver messageReceiver) - { - _walletMessageReceiver = messageReceiver; - } - - public async void RequestTezosPermission(string networkName = "", string networkRPC = "") - { - if (!Enum.TryParse(networkName, out NetworkType networkType)) - networkType = TezosConfig.Instance.Network; - - var network = new BeaconNetwork - { - Type = networkType, - Name = _network, - RpcUrl = _rpc - }; - - var permissionScopes = new List - { - PermissionScope.operation_request, - PermissionScope.sign - }; - - var permissionRequest = new PermissionRequest( - type: BeaconMessageType.permission_request, - version: Constants.BeaconVersion, - id: KeyPairService.CreateGuid(), - senderId: BeaconDappClient.SenderId, - appMetadata: BeaconDappClient.Metadata, - network: network, - scopes: permissionScopes - ); - - var activePeer = BeaconDappClient.GetActivePeer(); - if (activePeer != null) - { - await BeaconDappClient.SendResponseAsync(activePeer.SenderId, permissionRequest); - Logger.LogInfo("Permission request sent"); - } - else - { - Logger.LogError("No active peer found"); - } - } - - public async void RequestTezosOperation( - string destination, - string entryPoint = "default", - string arg = null, - ulong amount = 0, - string networkName = "", - string networkRPC = "") - { - var activeAccountPermissions = BeaconDappClient.GetActiveAccount(); - if (activeAccountPermissions == null) - { - Logger.LogError("No active permissions"); - return; - } - var pubKey = PubKey.FromBase58(activeAccountPermissions.PublicKey); - - var operationDetails = new List(); - var partialTezosTransactionOperation = new PartialTezosTransactionOperation( - amount.ToString(), - destination, - new JObject - { - ["entrypoint"] = entryPoint, - ["value"] = JToken.Parse(arg) - } - ); - - operationDetails.Add(partialTezosTransactionOperation); - - var operationRequest = new OperationRequest( - type: BeaconMessageType.operation_request, - version: Constants.BeaconVersion, - id: KeyPairService.CreateGuid(), - senderId: BeaconDappClient.SenderId, - network: activeAccountPermissions.Network, - operationDetails: operationDetails, - sourceAddress: pubKey.Address); - - Logger.LogDebug("requesting operation: " + operationRequest); - await BeaconDappClient.SendResponseAsync(activeAccountPermissions.SenderId, operationRequest); - } - - public async void RequestContractOrigination(string script, string delegateAddress) - { - var activeAccountPermissions = BeaconDappClient.GetActiveAccount(); - if (activeAccountPermissions == null) - { - Logger.LogError("No active permissions"); - return; - } - var pubKey = PubKey.FromBase58(activeAccountPermissions.PublicKey); - - var operationDetails = new List(); - var partialTezosTransactionOperation = new PartialTezosOriginationOperation( - Balance: "0", - Script: JObject.Parse(script), - Delegate: delegateAddress - ); - - operationDetails.Add(partialTezosTransactionOperation); - - var operationRequest = new OperationRequest( - type: BeaconMessageType.operation_request, - version: Constants.BeaconVersion, - id: KeyPairService.CreateGuid(), - senderId: BeaconDappClient.SenderId, - network: activeAccountPermissions.Network, - operationDetails: operationDetails, - sourceAddress: pubKey.Address); - - Logger.LogDebug("requesting operation: " + operationRequest); - await BeaconDappClient.SendResponseAsync(activeAccountPermissions.SenderId, operationRequest); - } - - public void RequestTezosSignPayload(SignPayloadType signingType, string payload) - { - BeaconDappClient.RequestSign(NetezosExtensions.GetPayloadString(signingType, payload), signingType); - } - - #endregion - - #region BeaconSDK - - private async void OnBeaconDappClientMessageReceived(object sender, BeaconMessageEventArgs e) - { - if (e.PairingDone) - { - _walletMessageReceiver.OnPairingCompleted("paired"); - return; - } - - var message = e.Request; - switch (message.Type) - { - case BeaconMessageType.permission_response: - { - if (message is not PermissionResponse permissionResponse) - return; - - var permissionsString = permissionResponse.Scopes.Aggregate(string.Empty, - (res, scope) => res + $"{scope}, "); - Logger.LogDebug( - $"{BeaconDappClient.AppName} received permissions {permissionsString} from {permissionResponse.AppMetadata.Name} with public key {permissionResponse.PublicKey}"); - - UnityMainThreadDispatcher.Enqueue( - _walletMessageReceiver.OnAccountConnected, //permissionResponse.PublicKey); - new JObject - { - ["accountInfo"] = new JObject - { - ["address"] = PubKey.FromBase58(permissionResponse.PublicKey).Address, - ["publicKey"] = permissionResponse.PublicKey - } - }.ToString()); - - break; - } - - case BeaconMessageType.operation_response: - { - if (message is not OperationResponse operationResponse) - return; - - UnityMainThreadDispatcher.Enqueue( - _walletMessageReceiver.OnContractCallInjected, - new JObject - { - ["transactionHash"] = operationResponse.TransactionHash, - ["success"] = "true" - }.ToString()); - - Logger.LogDebug($"Received operation with hash {operationResponse.TransactionHash}"); - break; - } - - case BeaconMessageType.sign_payload_response: - { - if (message is not SignPayloadResponse signPayloadResponse) - return; - - var senderPermissions = await BeaconDappClient - .PermissionInfoRepository - .TryReadBySenderIdAsync(signPayloadResponse.SenderId); - if (senderPermissions == null) return; - - _walletMessageReceiver.OnPayloadSigned( //signPayloadResponse.Signature); - new JObject - { - ["signature"] = signPayloadResponse.Signature - }.ToString()); - - break; - } - } - } - - public void OnReady() - { - } - - #endregion - - public void Dispose() - { - BeaconDappClient.Disconnect(); - } - } - - // todo: this logger didn't work inside Beacon, improve this. - public class MyLoggerProvider : ILoggerProvider - { - public class MyLogger : ILogger - { - public void Log(LogLevel logLevel, EventId eventId, TState state, Exception exception, - Func formatter) - { - if (exception != null) - Debug.LogException(exception); - - //Debug.Log(state.ToString()); - } - - public bool IsEnabled(LogLevel logLevel) => true; - public IDisposable BeginScope(TState state) => null; - } - - public void Dispose() - { - } - - public ILogger CreateLogger(string categoryName) => new MyLogger(); - } -} \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/BeaconConnectorWebGl.cs b/Runtime/Scripts/Beacon/BeaconConnectorWebGl.cs deleted file mode 100644 index 176715e8..00000000 --- a/Runtime/Scripts/Beacon/BeaconConnectorWebGl.cs +++ /dev/null @@ -1,108 +0,0 @@ -#if UNITY_WEBGL - -using System.Runtime.InteropServices; -using Beacon.Sdk.Beacon.Sign; -using TezosSDK.Tezos; -using TezosSDK.Tezos.Wallet; - -namespace TezosSDK.Beacon -{ - /// - /// WebGL implementation of the BeaconConnector. - /// Binds the functions implemented inside the file BeaconConnection.jslib - /// - public class BeaconConnectorWebGl : IBeaconConnector - { - #region Bridge to external functions - - [DllImport("__Internal")] - private static extern void JsInitWallet( - string network, - string rpc, - string walletProvider, - string appName, - string appUrl, - string iconUrl); - - [DllImport("__Internal")] - private static extern void JsConnectAccount(); - - [DllImport("__Internal")] - private static extern void JsDisconnectAccount(); - - [DllImport("__Internal")] - private static extern void JsSendContractCall(string destination, string amount, string entryPoint, string arg); - - [DllImport("__Internal")] - private static extern void JsSignPayload(int signingType, string payload); - - [DllImport("__Internal")] - private static extern string JsGetActiveAccountAddress(); - - [DllImport("__Internal")] - private static extern string JsRequestContractOrigination(string script, string delegateAddress); - - [DllImport("__Internal")] - private static extern string JsUnityReadyEvent(); - - #endregion - - private string _activeAccountAddress; - - public void InitWalletProvider( - string network, - string rpc, - WalletProviderType walletProviderType, - DAppMetadata dAppMetadata) - { - JsInitWallet( - network, - rpc, - walletProviderType.ToString(), - dAppMetadata.Name, - dAppMetadata.Url, - dAppMetadata.Icon); - } - - public void OnReady() - { - JsUnityReadyEvent(); - } - - public void ConnectAccount() - { - JsConnectAccount(); - } - - public void DisconnectAccount() - { - JsDisconnectAccount(); - } - - public string GetActiveAccountAddress() - { - return JsGetActiveAccountAddress(); - } - - public void RequestTezosPermission(string networkName = "", string networkRPC = "") - { - } - - public void RequestTezosOperation(string destination, string entryPoint = "default", string arg = null, - ulong amount = 0, string networkName = "", string networkRPC = "") - { - JsSendContractCall(destination, amount.ToString(), entryPoint, arg); - } - - public void RequestTezosSignPayload(SignPayloadType signingType, string payload) - { - JsSignPayload((int)signingType, payload); - } - - public void RequestContractOrigination(string script, string delegateAddress = null) - { - JsRequestContractOrigination(script, delegateAddress); - } - } -} -#endif \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/BeaconMessageReceiver.cs b/Runtime/Scripts/Beacon/BeaconMessageReceiver.cs deleted file mode 100644 index e8a3ea4c..00000000 --- a/Runtime/Scripts/Beacon/BeaconMessageReceiver.cs +++ /dev/null @@ -1,226 +0,0 @@ -using System; -using System.Collections; -using System.Linq; -using System.Text.Json; -using TezosSDK.Tezos; -using UnityEngine; -using Logger = TezosSDK.Helpers.Logger; - -namespace TezosSDK.Beacon -{ - /// - /// Receives external messages - /// - public class WalletMessageReceiver : MonoBehaviour - { - private Action _accountConnected; - - public event Action AccountConnected - { - add - { - if (_accountConnected == null || !_accountConnected.GetInvocationList().Contains(value)) - _accountConnected += value; - } - remove => _accountConnected -= value; - } - - private Action _accountConnectionFailed; - - public event Action AccountConnectionFailed - { - add - { - if (_accountConnectionFailed == null || !_accountConnectionFailed.GetInvocationList().Contains(value)) - _accountConnectionFailed += value; - } - remove => _accountConnectionFailed -= value; - } - - private Action _accountDisconnected; - - public event Action AccountDisconnected - { - add - { - if (_accountDisconnected == null || !_accountDisconnected.GetInvocationList().Contains(value)) - _accountDisconnected += value; - } - remove => _accountDisconnected -= value; - } - - private Action _contractCallCompleted; - - public event Action ContractCallCompleted - { - add - { - if (_contractCallCompleted == null || !_contractCallCompleted.GetInvocationList().Contains(value)) - _contractCallCompleted += value; - } - remove => _contractCallCompleted -= value; - } - - private Action _contractCallInjected; - - public event Action ContractCallInjected - { - add - { - if (_contractCallInjected == null || !_contractCallInjected.GetInvocationList().Contains(value)) - _contractCallInjected += value; - } - remove => _contractCallInjected -= value; - } - - private Action _contractCallFailed; - - public event Action ContractCallFailed - { - add - { - if (_contractCallFailed == null || !_contractCallFailed.GetInvocationList().Contains(value)) - _contractCallFailed += value; - } - remove => _contractCallFailed -= value; - } - - private Action _payloadSigned; - - public event Action PayloadSigned - { - add - { - if (_payloadSigned == null || !_payloadSigned.GetInvocationList().Contains(value)) - _payloadSigned += value; - } - remove => _payloadSigned -= value; - } - - private Action _handshakeReceived; - - public event Action HandshakeReceived - { - add - { - if (_handshakeReceived == null || !_handshakeReceived.GetInvocationList().Contains(value)) - _handshakeReceived += value; - } - remove => _handshakeReceived -= value; - } - - private Action _pairingCompleted; - - public event Action PairingCompleted - { - add - { - if (_pairingCompleted == null || !_pairingCompleted.GetInvocationList().Contains(value)) - _pairingCompleted += value; - } - remove => _pairingCompleted -= value; - } - - - public void OnAccountConnected(string address) - { - // result is the json permission response - Logger.LogDebug("From unity, OnAccountConnected: " + address); - _accountConnected?.Invoke(address); - } - - public void OnAccountFailedToConnect(string result) - { - // result is the json error - Logger.LogDebug("From unity, OnAccountFailedToConnect: " + result); - _accountConnectionFailed?.Invoke(result); - } - - public void OnAccountDisconnected(string result) - { - Logger.LogDebug("From unity, OnAccountDisconnect: " + result); - _accountDisconnected?.Invoke(result); - } - - public void OnContractCallCompleted(string result) - { - // result is the json of transaction response - Logger.LogDebug("From unity, OnContractCallCompleted: " + result); - _contractCallCompleted?.Invoke(result); - } - - public void OnContractCallInjected(string result) - { - // result is the json of transaction response - Logger.LogDebug("From unity, OnContractCallInjected: " + result); - _contractCallInjected?.Invoke(result); - } - - private void Awake() - { - DontDestroyOnLoad(gameObject); - } - - [Serializable] - struct ContractCallInjectionResult - { - public bool success; - public string transactionHash; - } - - public IEnumerator TrackTransaction(string transactionHash) - { - var success = false; - const float timeout = 30f; // seconds - var timestamp = Time.time; - - // keep making requests until time out or success - while (!success && Time.time - timestamp < timeout) - { - Logger.LogDebug($"Checking tx status: {transactionHash}"); - yield return TezosSingleton - .Instance - .API - .GetOperationStatus(result => - { - if (result != null) - success = JsonSerializer.Deserialize(result); - }, transactionHash); - - yield return new WaitForSecondsRealtime(3); - } - - ContractCallInjectionResult result; - result.success = success; - result.transactionHash = transactionHash; - _contractCallCompleted?.Invoke(JsonUtility.ToJson(result)); - } - - public void OnContractCallFailed(string result) - { - // result is error or empty - Logger.LogDebug("From unity, OnContractCallFailed: " + result); - _contractCallFailed?.Invoke(result); - } - - public void OnPayloadSigned(string signature) - { - // result is the json string of payload signing result - Logger.LogDebug("From unity, OnPayloadSigned: " + signature); - _payloadSigned?.Invoke(signature); - } - - public void OnHandshakeReceived(string handshake) - { - // result is serialized p2p pairing request - Logger.LogDebug("From unity, OnHandshakeReceived: " + handshake); - _handshakeReceived?.Invoke(handshake); - } - - public void OnPairingCompleted(string message) - { - Logger.LogDebug("From unity, OnPairingCompleted: " + message); - _pairingCompleted?.Invoke(message); - } - } -} \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/Connectors.meta b/Runtime/Scripts/Beacon/Connectors.meta new file mode 100644 index 00000000..b1c7668b --- /dev/null +++ b/Runtime/Scripts/Beacon/Connectors.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1f8303d12cf543428ffec4ccfcf01006 +timeCreated: 1704714831 \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/Connectors/BeaconConnectorFactory.cs b/Runtime/Scripts/Beacon/Connectors/BeaconConnectorFactory.cs new file mode 100644 index 00000000..cdecd041 --- /dev/null +++ b/Runtime/Scripts/Beacon/Connectors/BeaconConnectorFactory.cs @@ -0,0 +1,30 @@ +using System; +using TezosSDK.Tezos; +using UnityEngine; + +namespace TezosSDK.Beacon +{ + + public static class BeaconConnectorFactory + { + public static IBeaconConnector CreateConnector(RuntimePlatform platform, WalletEventManager eventManager) + { + switch (platform) + { + case RuntimePlatform.WebGLPlayer: + return new BeaconConnectorWebGl(); + case RuntimePlatform.IPhonePlayer: + case RuntimePlatform.Android: + case RuntimePlatform.WindowsPlayer: + case RuntimePlatform.WindowsEditor: + case RuntimePlatform.LinuxPlayer: + case RuntimePlatform.OSXPlayer: + case RuntimePlatform.OSXEditor: + return new BeaconConnectorDotNet(eventManager); + default: + throw new ArgumentException("Unsupported platform"); + } + } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/Connectors/BeaconConnectorFactory.cs.meta b/Runtime/Scripts/Beacon/Connectors/BeaconConnectorFactory.cs.meta new file mode 100644 index 00000000..d52f8d4a --- /dev/null +++ b/Runtime/Scripts/Beacon/Connectors/BeaconConnectorFactory.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: dfbad59504d346b6b9597ab379abc19d +timeCreated: 1703963906 \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/Connectors/DotNet.meta b/Runtime/Scripts/Beacon/Connectors/DotNet.meta new file mode 100644 index 00000000..32eca3cc --- /dev/null +++ b/Runtime/Scripts/Beacon/Connectors/DotNet.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b349608851b44606b7c8b3c5f361cc30 +timeCreated: 1704714886 \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/Connectors/DotNet/BeaconConnectorDotNet.cs b/Runtime/Scripts/Beacon/Connectors/DotNet/BeaconConnectorDotNet.cs new file mode 100644 index 00000000..e3e49ec3 --- /dev/null +++ b/Runtime/Scripts/Beacon/Connectors/DotNet/BeaconConnectorDotNet.cs @@ -0,0 +1,88 @@ +using System; +using Beacon.Sdk.Beacon; +using Beacon.Sdk.Beacon.Sign; +using TezosSDK.Helpers; +using TezosSDK.Helpers.Extensions; +using TezosSDK.Tezos; + +namespace TezosSDK.Beacon +{ + + public class BeaconConnectorDotNet : IBeaconConnector, IDisposable + { + private readonly BeaconClientManager _beaconClientManager; + private readonly OperationRequestHandler _operationRequestHandler; + + public BeaconConnectorDotNet(WalletEventManager eventManager) + { + _beaconClientManager = new BeaconClientManager(eventManager); + _operationRequestHandler = new OperationRequestHandler(); + _operationRequestHandler.MessageSent += OnBeaconMessageSent; + _beaconClientManager.Create(); + } + + public event Action OperationRequested; + + public void ConnectWallet(WalletProviderType? _) + { + _beaconClientManager.InitAsyncAndConnect(); + } + + public string GetWalletAddress() + { + return _beaconClientManager.GetActiveWalletAddress(); + } + + public void DisconnectWallet() + { + _beaconClientManager.DisconnectWallet(); + } + + public async void RequestWalletConnection() + { + Logger.LogDebug("RequestWalletConnection"); + await _operationRequestHandler.RequestTezosPermission(_beaconClientManager.BeaconDappClient); + } + + public async void RequestOperation( + string destination, + string entryPoint = "default", + string input = null, + ulong amount = 0) + { + Logger.LogDebug("RequestOperation"); + + await _operationRequestHandler.RequestTezosOperation(destination, entryPoint, input, amount, + _beaconClientManager.BeaconDappClient); + } + + public async void RequestContractOrigination(string script, string delegateAddress) + { + Logger.LogDebug("RequestContractOrigination"); + + await _operationRequestHandler.RequestContractOrigination(script, delegateAddress, + _beaconClientManager.BeaconDappClient); + } + + public async void RequestSignPayload(SignPayloadType signingType, string payload) + { + await _beaconClientManager.BeaconDappClient.RequestSign( + NetezosExtensions.GetPayloadString(signingType, payload), signingType); + } + + public void Dispose() + { + _beaconClientManager.BeaconDappClient.Disconnect(); + } + + /// + /// Triggered when a message/operation is sent to the wallet. + /// We simply forward the event to any listeners. + /// + private void OnBeaconMessageSent(BeaconMessageType beaconMessageType) + { + OperationRequested?.Invoke(beaconMessageType); + } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/BeaconConnectorDotNet.cs.meta b/Runtime/Scripts/Beacon/Connectors/DotNet/BeaconConnectorDotNet.cs.meta similarity index 100% rename from Runtime/Scripts/Beacon/BeaconConnectorDotNet.cs.meta rename to Runtime/Scripts/Beacon/Connectors/DotNet/BeaconConnectorDotNet.cs.meta diff --git a/Runtime/Scripts/Beacon/Connectors/WebGL.meta b/Runtime/Scripts/Beacon/Connectors/WebGL.meta new file mode 100644 index 00000000..a5df6fad --- /dev/null +++ b/Runtime/Scripts/Beacon/Connectors/WebGL.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 886cb3a831be47cba95357bc4557ef54 +timeCreated: 1704714872 \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/BeaconConnection.jslib b/Runtime/Scripts/Beacon/Connectors/WebGL/BeaconConnection.jslib similarity index 100% rename from Runtime/Scripts/Beacon/BeaconConnection.jslib rename to Runtime/Scripts/Beacon/Connectors/WebGL/BeaconConnection.jslib diff --git a/Runtime/Scripts/Beacon/BeaconConnection.jslib.meta b/Runtime/Scripts/Beacon/Connectors/WebGL/BeaconConnection.jslib.meta similarity index 100% rename from Runtime/Scripts/Beacon/BeaconConnection.jslib.meta rename to Runtime/Scripts/Beacon/Connectors/WebGL/BeaconConnection.jslib.meta diff --git a/Runtime/Scripts/Beacon/Connectors/WebGL/BeaconConnectorWebGl.cs b/Runtime/Scripts/Beacon/Connectors/WebGL/BeaconConnectorWebGl.cs new file mode 100644 index 00000000..73ac7c1b --- /dev/null +++ b/Runtime/Scripts/Beacon/Connectors/WebGL/BeaconConnectorWebGl.cs @@ -0,0 +1,148 @@ +#if UNITY_WEBGL +using System.Runtime.InteropServices; +#endif +using System; +using Beacon.Sdk.Beacon; +using Beacon.Sdk.Beacon.Sign; +using TezosSDK.Helpers; +using TezosSDK.Tezos; + +namespace TezosSDK.Beacon +{ + + /// + /// WebGL implementation of the BeaconConnector. + /// + public class BeaconConnectorWebGl : IBeaconConnector + { + private string _activeWalletAddress; + + public event Action OperationRequested; + + public void ConnectWallet(WalletProviderType? walletProviderType) + { + if (walletProviderType == null) + { + Logger.LogError("WalletProviderType is null"); + return; + } + + JsInitWallet(TezosManager.Instance.Config.Network.ToString(), TezosManager.Instance.Config.Rpc, + walletProviderType.ToString(), TezosManager.Instance.DAppMetadata.Name, + TezosManager.Instance.DAppMetadata.Url, TezosManager.Instance.DAppMetadata.Icon); + + JsConnectAccount(); + } + + public void DisconnectWallet() + { + JsDisconnectAccount(); + } + + public string GetWalletAddress() + { + return JsGetActiveAccountAddress(); + } + + public void RequestWalletConnection() + { + OperationRequested?.Invoke(BeaconMessageType.permission_request); + } + + public void RequestOperation( + string destination, + string entryPoint = "default", + string input = null, + ulong amount = 0) + { + JsSendContractCall(destination, amount.ToString(), entryPoint, input); + OperationRequested?.Invoke(BeaconMessageType.operation_request); + } + + public void RequestSignPayload(SignPayloadType signingType, string payload) + { + JsSignPayload((int)signingType, payload); + OperationRequested?.Invoke(BeaconMessageType.sign_payload_request); + } + + public void RequestContractOrigination(string script, string delegateAddress = null) + { + JsRequestContractOrigination(script, delegateAddress); + OperationRequested?.Invoke(BeaconMessageType.operation_request); + } + +#if UNITY_WEBGL + + [DllImport("__Internal")] + private static extern void JsInitWallet(string network, string rpc, string walletProvider, string appName, string appUrl, string iconUrl); + + [DllImport("__Internal")] + private static extern void JsConnectAccount(); + + [DllImport("__Internal")] + private static extern void JsDisconnectAccount(); + + [DllImport("__Internal")] + private static extern void JsSendContractCall(string destination, string amount, string entryPoint, string arg); + + [DllImport("__Internal")] + private static extern void JsSignPayload(int signingType, string payload); + + [DllImport("__Internal")] + private static extern string JsGetActiveAccountAddress(); + + [DllImport("__Internal")] + private static extern string JsRequestContractOrigination(string script, string delegateAddress); + + [DllImport("__Internal")] + private static extern string JsUnityReadyEvent(); + +#else + + #region Stub functions + + private void JsRequestContractOrigination(string script, string delegateAddress) + { + } + + private void JsInitWallet( + string network, + string rpc, + string toString, + string metadataName, + string metadataUrl, + string metadataIcon) + { + } + + private void JsUnityReadyEvent() + { + } + + private void JsConnectAccount() + { + } + + private void JsDisconnectAccount() + { + } + + private void JsSendContractCall(string destination, string toString, string entryPoint, string input) + { + } + + private string JsGetActiveAccountAddress() + { + return ""; + } + + private void JsSignPayload(int signingType, string payload) + { + } + + #endregion + +#endif + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/BeaconConnectorWebGl.cs.meta b/Runtime/Scripts/Beacon/Connectors/WebGL/BeaconConnectorWebGl.cs.meta similarity index 100% rename from Runtime/Scripts/Beacon/BeaconConnectorWebGl.cs.meta rename to Runtime/Scripts/Beacon/Connectors/WebGL/BeaconConnectorWebGl.cs.meta diff --git a/Runtime/Scripts/Beacon/Helpers.meta b/Runtime/Scripts/Beacon/Helpers.meta new file mode 100644 index 00000000..7ef0bc60 --- /dev/null +++ b/Runtime/Scripts/Beacon/Helpers.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 976ed556011d41bf8d2346c3b90d7529 +timeCreated: 1704714702 \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/Helpers/EventDispatcher.cs b/Runtime/Scripts/Beacon/Helpers/EventDispatcher.cs new file mode 100644 index 00000000..0de6f3d6 --- /dev/null +++ b/Runtime/Scripts/Beacon/Helpers/EventDispatcher.cs @@ -0,0 +1,133 @@ +using System; +using Beacon.Sdk.Beacon.Operation; +using Beacon.Sdk.Beacon.Sign; +using Beacon.Sdk.BeaconClients; +using Beacon.Sdk.Core.Domain.Entities; +using Netezos.Keys; +using TezosSDK.Helpers; +using TezosSDK.Tezos; +using UnityEngine; +using Logger = TezosSDK.Helpers.Logger; + +namespace TezosSDK.Beacon +{ + + /// + /// A helper class to dispatch events to the Unity main thread. + /// This is necessary because the Beacon SDK is running on + /// a background thread, and when we receive events from it, we need to dispatch them or deal with them on the main + /// thread. + /// + public class EventDispatcher + { + private readonly WalletEventManager _eventManager; + + public EventDispatcher(WalletEventManager eventManager) + { + _eventManager = eventManager; + } + + public void DispatchWalletDisconnectedEvent(WalletInfo activeWallet) + { + Logger.Log($"Dispatching WalletDisconnectedEvent for {activeWallet?.PublicKey}"); + + var walletDisconnectedEvent = new UnifiedEvent(WalletEventManager.EventTypeWalletDisconnected, + JsonUtility.ToJson(activeWallet)); + + DispatchEvent(walletDisconnectedEvent); + } + + /// + /// Dispatches an event to the Unity main thread. + /// + /// + private void DispatchEvent(UnifiedEvent eventData) + { + Logger.Log("Dispatching event"); + UnityMainThreadDispatcher.Enqueue(() => _eventManager.HandleEvent(eventData)); + } + + public void DispatchWalletConnectedEvent(DappBeaconClient beaconDappClient) + { + Logger.Log("Dispatching WalletConnectedEvent"); + var accountConnectedEvent = CreateWalletConnectedEvent(beaconDappClient.GetActiveAccount()); + DispatchEvent(accountConnectedEvent); + } + + private UnifiedEvent CreateWalletConnectedEvent(PermissionInfo activeAccountPermissions) + { + var walletInfo = CreateWalletInfo(activeAccountPermissions); + + return new UnifiedEvent(WalletEventManager.EventTypeWalletConnected, JsonUtility.ToJson(walletInfo)); + } + + private WalletInfo CreateWalletInfo(PermissionInfo activeWalletPermissions) + { + var pubKey = PubKey.FromBase58(activeWalletPermissions.PublicKey); + + return new WalletInfo + { + Address = pubKey.Address, + PublicKey = activeWalletPermissions.PublicKey + }; + } + + public void DispatchPairingCompletedEvent(DappBeaconClient beaconDappClient) + { + Logger.Log("Dispatching PairingCompletedEvent"); + + var pairingDoneData = new PairingDoneData + { + DAppPublicKey = beaconDappClient.GetActiveAccount()?.PublicKey, + Timestamp = DateTime.UtcNow.ToString("o") + }; + + var pairingDoneEvent = new UnifiedEvent(WalletEventManager.EventTypePairingDone, + JsonUtility.ToJson(pairingDoneData)); + + DispatchEvent(pairingDoneEvent); + } + + public void DispatchContractCallInjectedEvent(OperationResponse operationResponse) + { + var operationResult = new OperationResult + { + TransactionHash = operationResponse.TransactionHash + }; + + var contractEvent = new UnifiedEvent(WalletEventManager.EventTypeContractCallInjected, + JsonUtility.ToJson(operationResult)); + + DispatchEvent(contractEvent); + } + + public void DispatchPayloadSignedEvent(SignPayloadResponse signPayloadResponse) + { + var signResult = new SignResult + { + Signature = signPayloadResponse.Signature + }; + + var signedEvent = + new UnifiedEvent(WalletEventManager.EventTypePayloadSigned, JsonUtility.ToJson(signResult)); + + DispatchEvent(signedEvent); + } + + public void DispatchHandshakeEvent(string pairingData) + { + Logger.Log("Dispatching HandshakeEvent"); + + var handshakeData = new HandshakeData + { + PairingData = pairingData + }; + + var handshakeEvent = new UnifiedEvent(WalletEventManager.EventTypeHandshakeReceived, + JsonUtility.ToJson(handshakeData)); + + DispatchEvent(handshakeEvent); + } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/Helpers/EventDispatcher.cs.meta b/Runtime/Scripts/Beacon/Helpers/EventDispatcher.cs.meta new file mode 100644 index 00000000..faca39b8 --- /dev/null +++ b/Runtime/Scripts/Beacon/Helpers/EventDispatcher.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e856bb5e108c4d7db133bd1f28c90669 +timeCreated: 1703205406 \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/Helpers/Loggers.meta b/Runtime/Scripts/Beacon/Helpers/Loggers.meta new file mode 100644 index 00000000..d002e154 --- /dev/null +++ b/Runtime/Scripts/Beacon/Helpers/Loggers.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1dda4f8d85864d24aab677817d9bf240 +timeCreated: 1704714929 \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/Helpers/Loggers/BeaconLogger.cs b/Runtime/Scripts/Beacon/Helpers/Loggers/BeaconLogger.cs new file mode 100644 index 00000000..23edd132 --- /dev/null +++ b/Runtime/Scripts/Beacon/Helpers/Loggers/BeaconLogger.cs @@ -0,0 +1,54 @@ +using System; +using Microsoft.Extensions.Logging; +using UnityEngine; +using ILogger = Microsoft.Extensions.Logging.ILogger; + +namespace TezosSDK.Beacon.Loggers +{ + + public class BeaconLogger : ILogger + { + public IDisposable BeginScope(TState state) + { + return null; + } + + public bool IsEnabled(LogLevel logLevel) + { + return true; + } + + public void Log( + LogLevel logLevel, + EventId eventId, + TState state, + Exception exception, + Func formatter) + { + if (!IsEnabled(logLevel)) + { + return; + } + + if (formatter == null) + { + throw new ArgumentNullException(nameof(formatter)); + } + + var message = formatter(state, exception); + + if (string.IsNullOrEmpty(message)) + { + return; + } + + if (exception != null) + { + message += "\nException: " + exception; + } + + Debug.Log(message); + } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/Helpers/Loggers/BeaconLogger.cs.meta b/Runtime/Scripts/Beacon/Helpers/Loggers/BeaconLogger.cs.meta new file mode 100644 index 00000000..01dc0b90 --- /dev/null +++ b/Runtime/Scripts/Beacon/Helpers/Loggers/BeaconLogger.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a0efcd91e52a4ad7874c326e22b2dfc6 +timeCreated: 1704714952 \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/Helpers/Loggers/BeaconLoggerProvider.cs b/Runtime/Scripts/Beacon/Helpers/Loggers/BeaconLoggerProvider.cs new file mode 100644 index 00000000..c002dbbb --- /dev/null +++ b/Runtime/Scripts/Beacon/Helpers/Loggers/BeaconLoggerProvider.cs @@ -0,0 +1,19 @@ +using Microsoft.Extensions.Logging; +using ILogger = Microsoft.Extensions.Logging.ILogger; + +namespace TezosSDK.Beacon.Loggers +{ + + public class BeaconLoggerProvider : ILoggerProvider + { + public void Dispose() + { + } + + public ILogger CreateLogger(string categoryName) + { + return new BeaconLogger(); + } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/Helpers/Loggers/BeaconLoggerProvider.cs.meta b/Runtime/Scripts/Beacon/Helpers/Loggers/BeaconLoggerProvider.cs.meta new file mode 100644 index 00000000..9d96dbe8 --- /dev/null +++ b/Runtime/Scripts/Beacon/Helpers/Loggers/BeaconLoggerProvider.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b91eaf7ceb044991b62f167b7b9a6f82 +timeCreated: 1703205406 \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/Helpers/OperationRequestHandler.cs b/Runtime/Scripts/Beacon/Helpers/OperationRequestHandler.cs new file mode 100644 index 00000000..3f435b7d --- /dev/null +++ b/Runtime/Scripts/Beacon/Helpers/OperationRequestHandler.cs @@ -0,0 +1,258 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Beacon.Sdk; +using Beacon.Sdk.Beacon; +using Beacon.Sdk.Beacon.Operation; +using Beacon.Sdk.Beacon.Permission; +using Beacon.Sdk.BeaconClients; +using Beacon.Sdk.BeaconClients.Abstract; +using Beacon.Sdk.Core.Domain.Entities; +using Beacon.Sdk.Core.Domain.Services; +using Netezos.Keys; +using Newtonsoft.Json.Linq; +using TezosSDK.Helpers; +using TezosSDK.Helpers.Extensions; +using TezosSDK.Tezos; + +namespace TezosSDK.Beacon +{ + + /// + /// A helper class to handle operation requests for the Tezos blockchain via the Dapp Beacon client. + /// + public class OperationRequestHandler + { + /// + /// Raised when a message is sent using the Beacon client's SendResponseAsync method. + /// + /// Can be listened to trigger UI updates or to open the wallet. + /// + /// + public event Action MessageSent; + + /// + /// Requests Tezos permissions asynchronously. + /// + /// The Dapp Beacon client instance. + /// + /// This method attempts to get the active peer from the beacon client. If found, + /// it creates a permission request and sends it to the active peer. + /// + public async Task RequestTezosPermission(DappBeaconClient beaconDappClient) + { + // Check for active peer and log error if not found + var activePeer = beaconDappClient.GetActivePeer(); + + if (activePeer == null) + { + Logger.LogError("No active peer found"); + return; + } + + var network = CreateNetwork(); + var permissionRequest = CreatePermissionRequest(beaconDappClient, network); + await SendBeaconClientResponseAsync(beaconDappClient, activePeer.SenderId, permissionRequest); + Logger.LogInfo("Permission request sent"); + } + + /// + /// Initiates a Tezos operation request asynchronously. + /// + /// The destination address of the transaction. + /// The entry point for the transaction. + /// The input data for the transaction. + /// The amount to be transferred. + /// The Dapp Beacon client instance. + /// A Task representing the asynchronous operation. + public Task RequestTezosOperation( + string destination, + string entryPoint, + string input, + ulong amount, + DappBeaconClient beaconDappClient) + { + return RequestOperation(beaconDappClient, + () => CreateTransactionOperation(destination, entryPoint, input, amount), + BeaconMessageType.operation_request); + } + + /// + /// Requests contract origination in Tezos asynchronously. + /// + /// The script of the contract to be originated. + /// The delegate address for the contract. + /// The Dapp Beacon client instance. + /// A Task representing the asynchronous operation. + public Task RequestContractOrigination(string script, string delegateAddress, DappBeaconClient beaconDappClient) + { + return RequestOperation(beaconDappClient, () => CreateOriginationOperation(script, delegateAddress), + BeaconMessageType.operation_request); + } + + /// + /// Handles the request for an operation in Tezos. + /// + /// The Dapp Beacon client instance. + /// + /// A function that returns a list of Tezos base operations. This factory pattern is used + /// to create different types of operations (e.g., transaction, origination) based on the context. + /// + /// The type of the beacon message. + /// A Task representing the asynchronous operation. + /// + /// This method checks for active account permissions and then uses the provided + /// operationFactory function to generate a list of operations which are then used + /// to create and send an operation request. + /// + private Task RequestOperation( + IDappBeaconClient beaconDappClient, + Func> operationFactory, + BeaconMessageType messageType) + { + // Check for active account permissions and return if not found + var activeAccountPermissions = beaconDappClient.GetActiveAccount(); + + if (activeAccountPermissions == null) + { + Logger.LogError("No active peer found"); + return Task.CompletedTask; + } + + // Invoke the operation factory to create operation details + var operationDetails = operationFactory.Invoke(); + + // Create and log the operation request + var operationRequest = CreateOperationRequest(beaconDappClient, activeAccountPermissions, operationDetails, + messageType); + + Logger.LogDebug("Requesting Operation: " + operationRequest.Print()); + + // Send the operation request + return SendBeaconClientResponseAsync(beaconDappClient, activeAccountPermissions.SenderId, operationRequest); + } + + /// + /// Creates an origination operation for Tezos. + /// + /// The script for the contract origination. + /// The delegate address for the contract. + /// A list of Tezos base operations for origination. + /// + /// This method prepares an origination operation with the given script and delegate address. + /// + private List CreateOriginationOperation(string script, string delegateAddress) + { + var operationDetails = new List(); + + var partialTezosOriginationOperation = + new PartialTezosOriginationOperation("0", JObject.Parse(script), delegateAddress); + + operationDetails.Add(partialTezosOriginationOperation); + + return operationDetails; + } + + /// + /// Creates a transaction operation for Tezos. + /// + /// The transaction's destination address. + /// The entry point for the transaction. + /// The input data for the transaction. + /// The transaction amount. + /// A list of Tezos base operations for the transaction. + /// + /// This method sets up a transaction operation with the provided parameters, + /// creating a partial transaction operation object and adding it to the list. + /// + private List CreateTransactionOperation( + string destination, + string entryPoint, + string input, + ulong amount) + { + var operationDetails = new List(); + + // Create partial Tezos transaction operation with provided details + var partialTezosTransactionOperation = new PartialTezosTransactionOperation(amount.ToString(), destination, + new JObject + { + ["entrypoint"] = entryPoint, + ["value"] = JToken.Parse(input) + }); + + operationDetails.Add(partialTezosTransactionOperation); + + return operationDetails; + } + + /// + /// Creates an operation request for Tezos. + /// + /// The Dapp Beacon client instance. + /// Information about the active account's permissions. + /// Details of the Tezos base operations. + /// The type of the beacon message. + /// An OperationRequest object configured with the provided details. + /// + /// This method constructs an operation request using the client's sender ID, active account permissions, + /// and the details of the operation to be performed. + /// + private OperationRequest CreateOperationRequest( + IBaseBeaconClient beaconDappClient, + PermissionInfo activeAccountPermissions, + List operationDetails, + BeaconMessageType messageType) + { + var pubKey = PubKey.FromBase58(activeAccountPermissions.PublicKey); + + var operationRequest = new OperationRequest(messageType, Constants.BeaconVersion, + KeyPairService.CreateGuid(), beaconDappClient.SenderId, activeAccountPermissions.Network, + operationDetails, pubKey.Address); + + return operationRequest; + } + + private Network CreateNetwork() + { + return new Network + { + Type = TezosManager.Instance.Config.Network, + Name = TezosManager.Instance.Config.Network.ToString(), + RpcUrl = TezosManager.Instance.Config.Rpc + }; + } + + /// + /// Creates a permission request for the Tezos blockchain. + /// + /// The Dapp Beacon client instance. + /// The network information for the request. + /// A PermissionRequest object configured with the provided details. + private PermissionRequest CreatePermissionRequest(IBaseBeaconClient beaconDappClient, Network network) + { + var permissionScopes = new List + { + PermissionScope.operation_request, + PermissionScope.sign + }; + + return new PermissionRequest(BeaconMessageType.permission_request, Constants.BeaconVersion, + KeyPairService.CreateGuid(), beaconDappClient.SenderId, beaconDappClient.Metadata, network, + permissionScopes); + } + + /// + /// Sends a response asynchronously via the Beacon client. + /// + private async Task SendBeaconClientResponseAsync( + IBaseBeaconClient beaconDappClient, + string receiverId, + BaseBeaconMessage message) + { + await beaconDappClient.SendResponseAsync(receiverId, message); + MessageSent?.Invoke(message.Type); + } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/Helpers/OperationRequestHandler.cs.meta b/Runtime/Scripts/Beacon/Helpers/OperationRequestHandler.cs.meta new file mode 100644 index 00000000..720ca79c --- /dev/null +++ b/Runtime/Scripts/Beacon/Helpers/OperationRequestHandler.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0df0368913c147cdae7078d24f99db8c +timeCreated: 1703205406 \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/IBeaconConnector.cs b/Runtime/Scripts/Beacon/IBeaconConnector.cs deleted file mode 100644 index 24dd8e03..00000000 --- a/Runtime/Scripts/Beacon/IBeaconConnector.cs +++ /dev/null @@ -1,82 +0,0 @@ -using Beacon.Sdk.Beacon.Sign; -using Netezos.Forging.Models; -using TezosSDK.Tezos; -using TezosSDK.Tezos.Wallet; - -namespace TezosSDK.Beacon -{ - /// - /// Implement this interface to create a class that can connect to native code - /// on a specific platform using the Beacon Sdk - /// - public interface IBeaconConnector - { - /// - /// Initially configure wallet before using. - /// - /// Name of the network to connect - /// Uri of an specific RPC. - /// Type of wallet, e.g. "beacon" or "kukai" - /// Metadata of SDK consumer DApp - void InitWalletProvider( - string network, - string rpc, - WalletProviderType walletProviderType, - DAppMetadata dAppMetadata); - - /// - /// Callback that needed in WebGL to determine that UI is rendered - /// - void OnReady(); - - /// - /// Starts the connection between Beacon SDK and a wallet to connect to - /// an account - /// - void ConnectAccount(); - - /// - /// Checks if there is an active account paired. - /// - /// Returns only the account address as a string. - public string GetActiveAccountAddress(); - - /// - /// Allows waiting for permissions to be granted for pairing. - /// - /// The name of the desired network. - /// The RPC to the desired network - public void RequestTezosPermission(string networkName = "", string networkRPC = ""); - - /// - /// Allows requesting a new operation such as sending tezos or initiating a smart contract. - /// - /// The public ID to make a transaction to - /// The entry point if one needs to be specified - /// The arguments if any are needed - /// Ammount to be sent, if Tez, it's calculated in MuTez - /// The name of the desired network. - /// The RPC to the desired network - public void RequestTezosOperation(string destination, string entryPoint = "default", string arg = null, - ulong amount = 0, string networkName = "", string networkRPC = ""); - - /// - /// Originate new contract - /// - /// Contract code. - /// Delegator address - public void RequestContractOrigination(string script, string delegateAddress = null); - - /// - /// To make a request to sign a payload - /// - /// An integer to select a SigningType: 0=Raw 1=Operation 2=Micheline allelse=Micheline - /// - public void RequestTezosSignPayload(SignPayloadType signingType, string payload); - - /// - /// Removes the connection to the current active account. - /// - void DisconnectAccount(); - } -} diff --git a/Runtime/Scripts/Beacon/Interfaces.meta b/Runtime/Scripts/Beacon/Interfaces.meta new file mode 100644 index 00000000..833c847d --- /dev/null +++ b/Runtime/Scripts/Beacon/Interfaces.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1c71b420fb4841879c8685ad8643f5f8 +timeCreated: 1704712587 \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/Interfaces/IBeaconConnector.cs b/Runtime/Scripts/Beacon/Interfaces/IBeaconConnector.cs new file mode 100644 index 00000000..9d1eaccf --- /dev/null +++ b/Runtime/Scripts/Beacon/Interfaces/IBeaconConnector.cs @@ -0,0 +1,70 @@ +using System; +using Beacon.Sdk.Beacon; +using Beacon.Sdk.Beacon.Sign; +using TezosSDK.Tezos; + +namespace TezosSDK.Beacon +{ + + /// + /// Implement this interface to create a class that can connect to native code + /// on a specific platform using the Beacon Sdk + /// + public interface IBeaconConnector + { + /// + /// Raised when any wallet operation is requested + /// + event Action OperationRequested; + + /// + /// Starts the connection between Beacon SDK and a wallet to connect to + /// an account + /// + void ConnectWallet(WalletProviderType? walletProviderType); + + /// + /// Checks if there is an active account paired. + /// + /// Returns only the account address as a string. + public string GetWalletAddress(); + + /// + /// Allows waiting for permissions to be granted for pairing. + /// + public void RequestWalletConnection(); + + /// + /// Allows requesting a new operation such as sending tezos or initiating a smart contract. + /// + /// The public ID to make a transaction to + /// The entry point if one needs to be specified + /// The arguments if any are needed + /// Ammount to be sent, if Tez, it's calculated in MuTez + public void RequestOperation( + string destination, + string entryPoint = "default", + string arg = null, + ulong amount = 0); + + /// + /// Originate new contract + /// + /// Contract code. + /// Delegator address + public void RequestContractOrigination(string script, string delegateAddress = null); + + /// + /// To make a request to sign a payload + /// + /// An integer to select a SigningType: 0=Raw 1=Operation 2=Micheline allelse=Micheline + /// + public void RequestSignPayload(SignPayloadType signingType, string payload); + + /// + /// Removes the connection to the current active account. + /// + void DisconnectWallet(); + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/IBeaconConnector.cs.meta b/Runtime/Scripts/Beacon/Interfaces/IBeaconConnector.cs.meta similarity index 100% rename from Runtime/Scripts/Beacon/IBeaconConnector.cs.meta rename to Runtime/Scripts/Beacon/Interfaces/IBeaconConnector.cs.meta diff --git a/Runtime/Scripts/Beacon/Managers.meta b/Runtime/Scripts/Beacon/Managers.meta new file mode 100644 index 00000000..7f6bff7a --- /dev/null +++ b/Runtime/Scripts/Beacon/Managers.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9775fb5bbbac4d2c9ec5996e7362e5a3 +timeCreated: 1704714688 \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/Managers/BeaconClientManager.cs b/Runtime/Scripts/Beacon/Managers/BeaconClientManager.cs new file mode 100644 index 00000000..4a009017 --- /dev/null +++ b/Runtime/Scripts/Beacon/Managers/BeaconClientManager.cs @@ -0,0 +1,344 @@ +using System; +using System.IO; +using System.Threading.Tasks; +using Beacon.Sdk; +using Beacon.Sdk.Beacon; +using Beacon.Sdk.Beacon.Operation; +using Beacon.Sdk.Beacon.Permission; +using Beacon.Sdk.Beacon.Sign; +using Beacon.Sdk.BeaconClients; +using Beacon.Sdk.BeaconClients.Abstract; +using TezosSDK.Beacon.Loggers; +using TezosSDK.Helpers.Extensions; +using TezosSDK.Tezos; +using UnityEngine; +using Logger = TezosSDK.Helpers.Logger; + +namespace TezosSDK.Beacon +{ + + public class BeaconClientManager : IDisposable + { + private readonly EventDispatcher _eventDispatcher; + private WalletInfo _activeWallet; // Keep track of the active wallet + + public BeaconClientManager(WalletEventManager eventManager) + { + _eventDispatcher = new EventDispatcher(eventManager); + eventManager.WalletConnected += OnWalletConnected; + eventManager.WalletDisconnected += OnWalletDisconnected; + } + + public DappBeaconClient BeaconDappClient { get; private set; } + + public void Dispose() + { + BeaconDappClient?.Disconnect(); + } + + private void OnWalletDisconnected(WalletInfo obj) + { + _activeWallet = null; // Reset active wallet + } + + private void OnWalletConnected(WalletInfo wallet) + { + _activeWallet = wallet; // Set active wallet + } + + public async void InitAsyncAndConnect() + { + try + { + if (BeaconDappClient == null) + { + Logger.LogError("BeaconDappClient is null - Call CreateBeaconClient() first!"); + return; + } + + Logger.LogInfo("Initializing BeaconDappClient"); + + await BeaconDappClient.InitAsync(); + BeaconDappClient.Connect(); + + var activePeer = BeaconDappClient.GetActivePeer(); + + Logger.LogInfo($"BeaconDappClient initialized. Logged in: {BeaconDappClient.LoggedIn} - " + + $"Connected: {BeaconDappClient.Connected} - " + $"Active peer: {activePeer?.Name}"); + + if (HasExistingConnection()) + { + _eventDispatcher.DispatchWalletConnectedEvent(BeaconDappClient); + } + else + { + var pairingRequestInfo = BeaconDappClient.GetPairingRequestInfo(); + _eventDispatcher.DispatchHandshakeEvent(pairingRequestInfo); + } + } + catch (Exception e) + { + Logger.LogError($"Error during dapp initialization: {e.Message}"); + } + } + + /// + /// Checks if there is an existing connection with a wallet. + /// + /// Returns true if an active connection exists, otherwise false. + private bool HasExistingConnection() + { + var activeAccountPermissions = BeaconDappClient.GetActiveAccount(); + + if (activeAccountPermissions == null) + { + Logger.LogInfo("No already active wallet"); + return false; + } + + Logger.LogInfo("We already have connection with wallet:"); + Logger.LogInfo(activeAccountPermissions.Print()); + return true; + } + + /// + /// Creates and initializes the Beacon client. + /// + public void Create() + { + Logger.LogDebug("Creating Beacon client"); + var options = CreateBeaconOptions(); + + BeaconDappClient = + BeaconClientFactory.Create(options, new BeaconLoggerProvider()) as DappBeaconClient; + + if (BeaconDappClient == null) + { + throw new Exception("Failed to create Beacon client"); + } + + BeaconDappClient.OnBeaconMessageReceived += OnBeaconDappClientMessageReceived; + BeaconDappClient.OnDisconnected += OnBeaconDappClientDisconnected; + BeaconDappClient.OnConnectedClientsListChanged += OnConnectedClientsListChanged; + } + + /// + /// Handles the event when the list of connected clients changes. + /// + /// The source of the event. + /// Null when a client disconnects + private void OnConnectedClientsListChanged(object sender, ConnectedClientsListChangedEventArgs e) + { + if (e != null) + { + Logger.LogDebug("OnConnectedClientsListChanged - Connected clients list changed"); + _eventDispatcher.DispatchWalletConnectedEvent(BeaconDappClient); + } + else + { + Logger.LogDebug("OnConnectedClientsListChanged - Connected clients list is empty"); + _eventDispatcher.DispatchWalletDisconnectedEvent(_activeWallet); + } + } + + /// + /// Handles the event of the Beacon Dapp client getting disconnected. + /// + private void OnBeaconDappClientDisconnected() + { + Logger.LogDebug("OnBeaconDappClientDisconnected - Dapp disconnected"); + _eventDispatcher.DispatchWalletDisconnectedEvent(_activeWallet); + } + + /// + /// Receives and processes Beacon messages asynchronously. + /// + /// The source of the event. + /// Event arguments containing the received Beacon message. + /// The event is raised on a background thread and must be marshalled to the UI thread. + private async void OnBeaconDappClientMessageReceived(object sender, BeaconMessageEventArgs e) + { + if (e == null) + { + return; + } + + Logger.LogDebug($"Received message of type: {e.Request?.Type}"); + + if (e.PairingDone) + { + HandlePairingDone(); + return; + } + + switch (e.Request?.Type) + { + case BeaconMessageType.permission_response: + HandlePermissionResponse(e.Request as PermissionResponse); + break; + case BeaconMessageType.operation_response: + HandleOperationResponse(e.Request as OperationResponse); + break; + case BeaconMessageType.sign_payload_response: + await HandleSignPayloadResponse(e.Request as SignPayloadResponse); + break; + case BeaconMessageType.disconnect: + HandleDisconnect(); + break; + } + } + + /// + /// Handles a permission response message. + /// + /// The permission response message to handle. + /// + /// Simply logs the permission response message. + /// + private void HandlePermissionResponse(PermissionResponse permissionResponse) + { + if (permissionResponse == null) + { + return; + } + + Logger.LogDebug(permissionResponse.Print()); + } + + /// + /// Handles an operation response message. + /// + /// The operation response message to handle. + /// + /// Dispatches a contract call injected event on the main (UI) thread. + /// + private void HandleOperationResponse(OperationResponse operationResponse) + { + if (operationResponse == null) + { + return; + } + + Logger.LogDebug($"Received operation response with hash {operationResponse.TransactionHash}"); + _eventDispatcher.DispatchContractCallInjectedEvent(operationResponse); + } + + /// + /// Asynchronously handles a sign payload response message. + /// + /// The sign payload response message to handle. + /// + /// Checks sender permissions and dispatches a payload signed event on the main (UI) thread. + /// + private async Task HandleSignPayloadResponse(SignPayloadResponse signPayloadResponse) + { + if (signPayloadResponse == null) + { + return; + } + + var senderPermissions = + await BeaconDappClient.PermissionInfoRepository.TryReadBySenderIdAsync(signPayloadResponse.SenderId); + + if (senderPermissions == null) + { + return; + } + + _eventDispatcher.DispatchPayloadSignedEvent(signPayloadResponse); + } + + /// + /// Handles a disconnect type Beacon message. + /// + /// + /// Dispatches a wallet disconnected event on the main (UI) thread. + /// + private void HandleDisconnect() + { + _eventDispatcher.DispatchWalletDisconnectedEvent(_activeWallet); + } + + /// + /// Handles the 'Pairing Done' type Beacon message. + /// + /// + /// Checks for active wallet and dispatches pairing done event on the main (UI) thread, if no active wallet is found. + /// Pairing happens either through QR code scanning or deep linking. + /// + private void HandlePairingDone() + { + Logger.LogDebug("Received message of type Pairing done"); + + if (_activeWallet != null) + { + Logger.LogDebug("Active wallet already exists, ignoring duplicate pairing done event"); + return; + } + + TezosManager.Instance.BeaconConnector.RequestWalletConnection(); + _eventDispatcher.DispatchPairingCompletedEvent(BeaconDappClient); + } + + /// + /// Creates a new instance of BeaconOptions for the Beacon client. + /// + /// A configured instance of BeaconOptions. + private BeaconOptions CreateBeaconOptions() + { + return new BeaconOptions + { + AppName = TezosManager.Instance.DAppMetadata.Name, + AppUrl = TezosManager.Instance.DAppMetadata.Url, + IconUrl = TezosManager.Instance.DAppMetadata.Icon, + KnownRelayServers = Constants.KnownRelayServers, + DatabaseConnectionString = BuildDatabaseConnectionString() + }; + } + + /// + /// Builds the connection string for the Beacon client's database. + /// + /// The constructed database connection string. + private string BuildDatabaseConnectionString() + { + var dbPath = GetDbPath(); + return $"Filename={dbPath};Connection=direct;Upgrade=true"; + } + + /// + /// Gets the path to the database used by the Beacon client. + /// + /// The file path to the database file. + private string GetDbPath() + { + return Path.Combine(Application.persistentDataPath, "beacon.db"); + } + + /// + /// Disconnects the wallet from the Beacon Dapp client. + /// + public void DisconnectWallet() + { + if (!BeaconDappClient.Connected) + { + Logger.LogWarning("Dapp is not connected - nothing to disconnect"); + return; + } + + Logger.LogDebug("Disconnecting wallet"); + BeaconDappClient.RemoveActiveAccounts(); + BeaconDappClient.Disconnect(); + } + + /// + /// Retrieves the address of the active wallet. + /// + /// The address of the active wallet if any, otherwise an empty string. + public string GetActiveWalletAddress() + { + return BeaconDappClient?.GetActiveAccount()?.Address ?? string.Empty; + } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/Managers/BeaconClientManager.cs.meta b/Runtime/Scripts/Beacon/Managers/BeaconClientManager.cs.meta new file mode 100644 index 00000000..109329de --- /dev/null +++ b/Runtime/Scripts/Beacon/Managers/BeaconClientManager.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7aede5eb13bb44cebec5f8579b4d6230 +timeCreated: 1703205406 \ No newline at end of file diff --git a/Runtime/Scripts/DesignPattern/Singleton/SingletonMonoBehaviour.cs b/Runtime/Scripts/DesignPattern/Singleton/SingletonMonoBehaviour.cs deleted file mode 100644 index f74127d0..00000000 --- a/Runtime/Scripts/DesignPattern/Singleton/SingletonMonoBehaviour.cs +++ /dev/null @@ -1,116 +0,0 @@ -using UnityEngine; - -namespace TezosSDK.DesignPattern.Singleton -{ - public abstract class SingletonMonoBehaviour : MonoBehaviour { } - - /// - /// Easily allow a Singleton to be added to hierarchy at runtime with full MonoBehavior access and predictable lifecycle. - /// - public abstract class SingletonMonoBehaviour : SingletonMonoBehaviour - where T : MonoBehaviour - { - /// - /// Do not call this from another scope within OnDestroy(). Instead use IsInstantiated() - /// - private static T _Instance; //Harmless 'suggestion' appears here in some code-editors. Known issue. - public static T Instance - { - //NOTE: Its recommended to wrap any calls to this getter with a IsInstanced() to prevent undesired instantiation. Optional. - get - { - if (!IsInstantiated()) - { - Instantiate(); - } - return _Instance; - } - set { _Instance = value; } - } - - /// - /// NOTE: Calling this will NEVER instantiate a new instance. That is useful and safe to call in any destructors / OnDestroy() - /// - /// true if is instantiated; otherwise, false. - public static bool IsInstantiated() - { - return _Instance != null; - } - - public delegate void OnInstantiateCompletedDelegate(T instance); - public static OnInstantiateCompletedDelegate OnInstantiateCompleted; - - public delegate void OnDestroyingDelegate(T instance); - public static OnDestroyingDelegate OnDestroying; - - /// - /// Instantiate this instance. - /// 1. Attempts to find an existing GameObject that matches (There will be 0 or 1 at any time) - /// 2. Creates GameObject with name of subclass - /// 3. Persists by default (optional) - /// 4. Predictable life-cycle. - /// - public static T Instantiate() - { - if (!IsInstantiated()) - { - T t = GameObject.FindObjectOfType(); - GameObject go = null; - if (t != null) - { - go = t.gameObject; - } - - if (go == null) - { - go = new GameObject(); - _Instance = go.AddComponent(); - } - else - { - _Instance = go.GetComponent(); - } - - go.name = _Instance.GetType().Name; - - //KLUGE: Must unparent/reparent before DontDestroyOnLoad to avoid error - Transform parent = go.transform.parent; - go.transform.SetParent(null); - DontDestroyOnLoad(go); - go.transform.SetParent(parent); - - if (OnInstantiateCompleted != null) - { - OnInstantiateCompleted(_Instance); - } - } - return _Instance; - } - - protected virtual void Awake() - { - Instantiate(); - } - - /// - /// Destroys all memory/references associated with the instance - /// - public static void Destroy() - { - if (IsInstantiated()) - { - if (OnDestroying != null) - { - OnDestroying(_Instance); - } - - // NOTE: Use 'DestroyImmediate'. At runtime its less important, but occasionally editor classes will call Destroy(); - DestroyImmediate(_Instance.gameObject); - - _Instance = null; - } - } - - protected virtual void OnDestroy() { } - } -} \ No newline at end of file diff --git a/Runtime/Scripts/FileUploaders/BaseUploader.cs b/Runtime/Scripts/FileUploaders/BaseUploader.cs index 6af506c3..5c8cc307 100644 --- a/Runtime/Scripts/FileUploaders/BaseUploader.cs +++ b/Runtime/Scripts/FileUploaders/BaseUploader.cs @@ -1,35 +1,40 @@ using System; using System.Collections; -using TezosSDK.Scripts.FileUploaders.IPFS; +using TezosSDK.FileUploaders.IPFS; using UnityEngine; -namespace TezosSDK.Scripts.FileUploaders +namespace TezosSDK.FileUploaders { - public abstract class BaseUploader : MonoBehaviour - { - public string SupportedFileExtensions { get; } = ".jpg, .jpeg, .png"; - private void Start() - { - DontDestroyOnLoad(gameObject); - } - } + public abstract class BaseUploader : MonoBehaviour + { + public string SupportedFileExtensions + { + get => ".jpg, .jpeg, .png"; + } - public interface IPinataUploader : IBaseUploader - { - PinataCredentials PinataCredentials { get; set; } - } + private void Start() + { + DontDestroyOnLoad(gameObject); + } + } - public interface IBaseUploader - { - string SupportedFileExtensions { get; } + public interface IPinataUploader : IBaseUploader + { + PinataCredentials PinataCredentials { get; set; } + } + + public interface IBaseUploader + { + string SupportedFileExtensions { get; } + + /// + /// Upload file that user will select through native menu file picker. + /// + /// + /// Executes after asset uploaded with data address. + /// + IEnumerator UploadFile(Action callback); + } - /// - /// Upload file that user will select through native menu file picker. - /// - /// - /// Executes after asset uploaded with data address. - /// - IEnumerator UploadFile(Action callback); - } } \ No newline at end of file diff --git a/Runtime/Scripts/FileUploaders/IPFS/EditorPinataUploader.cs b/Runtime/Scripts/FileUploaders/IPFS/EditorPinataUploader.cs index f029193f..400744a2 100644 --- a/Runtime/Scripts/FileUploaders/IPFS/EditorPinataUploader.cs +++ b/Runtime/Scripts/FileUploaders/IPFS/EditorPinataUploader.cs @@ -3,48 +3,52 @@ using System.Collections; using System.IO; using System.Text.Json; -using TezosSDK.Scripts.IpfsUploader; using UnityEditor; using UnityEngine; using UnityEngine.Networking; using Logger = TezosSDK.Helpers.Logger; -namespace TezosSDK.Scripts.FileUploaders.IPFS +namespace TezosSDK.FileUploaders.IPFS { - public class EditorPinataUploader : BaseUploader, IPinataUploader - { - public PinataCredentials PinataCredentials { get; set; } - - public IEnumerator UploadFile(Action callback) - { - yield return null; - - var path = EditorUtility.OpenFilePanel( - "Select image", - string.Empty, - SupportedFileExtensions - .Replace(".", string.Empty) - .Replace(" ", string.Empty) - ); - - var filename = Path.GetFileName(path); - var form = new WWWForm(); - form.AddBinaryData("file", File.ReadAllBytes(path), filename); - - var request = UnityWebRequest.Post(PinataCredentials.ApiUrl, form); - request.SetRequestHeader("Authorization", $"Bearer {PinataCredentials.ApiKey}"); - yield return request.SendWebRequest(); - - if (request.result == UnityWebRequest.Result.Success) - { - var ipfsResponse = JsonSerializer.Deserialize(request.downloadHandler.text); - callback.Invoke($"ipfs://{ipfsResponse.IpfsHash}"); - } - else - { - Logger.LogError($"Error during upload to IPFS {request.downloadHandler.error}"); - } - } - } + + public class EditorPinataUploader : BaseUploader, IPinataUploader + { + #region IBaseUploader Implementation + + public IEnumerator UploadFile(Action callback) + { + yield return null; + + var path = EditorUtility.OpenFilePanel("Select image", string.Empty, + SupportedFileExtensions.Replace(".", string.Empty).Replace(" ", string.Empty)); + + var filename = Path.GetFileName(path); + var form = new WWWForm(); + form.AddBinaryData("file", File.ReadAllBytes(path), filename); + + var request = UnityWebRequest.Post(PinataCredentials.ApiUrl, form); + request.SetRequestHeader("Authorization", $"Bearer {PinataCredentials.ApiKey}"); + yield return request.SendWebRequest(); + + if (request.result == UnityWebRequest.Result.Success) + { + var ipfsResponse = JsonSerializer.Deserialize(request.downloadHandler.text); + callback.Invoke($"ipfs://{ipfsResponse.IpfsHash}"); + } + else + { + Logger.LogError($"Error during upload to IPFS {request.downloadHandler.text}"); + } + } + + #endregion + + #region IPinataUploader Implementation + + public PinataCredentials PinataCredentials { get; set; } + + #endregion + } + } #endif \ No newline at end of file diff --git a/Runtime/Scripts/FileUploaders/IPFS/IpfsResponse.cs b/Runtime/Scripts/FileUploaders/IPFS/IpfsResponse.cs index 5b8404e2..d3eb4f2b 100644 --- a/Runtime/Scripts/FileUploaders/IPFS/IpfsResponse.cs +++ b/Runtime/Scripts/FileUploaders/IPFS/IpfsResponse.cs @@ -1,17 +1,19 @@ using System; using System.Text.Json.Serialization; -namespace TezosSDK.Scripts.IpfsUploader +namespace TezosSDK.FileUploaders.IPFS { - public class IpfsResponse - { - public string IpfsHash { get; set; } - public int PinSize { get; set; } + public class IpfsResponse + { + public string IpfsHash { get; set; } - public DateTime Timestamp { get; set; } + public int PinSize { get; set; } - [JsonPropertyName("isDuplicate")] - public bool IsDuplicate { get; set; } - } -} + public DateTime Timestamp { get; set; } + + [JsonPropertyName("isDuplicate")] + public bool IsDuplicate { get; set; } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/FileUploaders/IPFS/PinataCredentials.cs b/Runtime/Scripts/FileUploaders/IPFS/PinataCredentials.cs index 05dec7e4..ec56f959 100644 --- a/Runtime/Scripts/FileUploaders/IPFS/PinataCredentials.cs +++ b/Runtime/Scripts/FileUploaders/IPFS/PinataCredentials.cs @@ -1,14 +1,16 @@ -namespace TezosSDK.Scripts.FileUploaders.IPFS +namespace TezosSDK.FileUploaders.IPFS { - public class PinataCredentials - { - public string ApiUrl { get; } - public string ApiKey { get; } - public PinataCredentials(string apiKey) - { - ApiUrl = "https://api.pinata.cloud/pinning/pinFileToIPFS"; - ApiKey = apiKey; - } - } + public class PinataCredentials + { + public PinataCredentials(string apiKey) + { + ApiUrl = "https://api.pinata.cloud/pinning/pinFileToIPFS"; + ApiKey = apiKey; + } + + public string ApiUrl { get; } + public string ApiKey { get; } + } + } \ No newline at end of file diff --git a/Runtime/Scripts/FileUploaders/IPFS/WebPinataUploader.cs b/Runtime/Scripts/FileUploaders/IPFS/WebPinataUploader.cs index 6d107f59..2895d66c 100644 --- a/Runtime/Scripts/FileUploaders/IPFS/WebPinataUploader.cs +++ b/Runtime/Scripts/FileUploaders/IPFS/WebPinataUploader.cs @@ -1,81 +1,90 @@ +#if UNITY_WEBGL using System; using System.Collections; using System.Runtime.InteropServices; using System.Text.Json; -using TezosSDK.Scripts.IpfsUploader; using UnityEngine; +#endif -namespace TezosSDK.Scripts.FileUploaders.IPFS +namespace TezosSDK.FileUploaders.IPFS { -#if UNITY_WEBGL && !UNITY_EDITOR - public class WebPinataUploader : BaseUploader, IPinataUploader - { - public PinataCredentials PinataCredentials { get; set; } - - public void FileRequestCallback(string path) - { - WebPinataUploaderHelper.SetResult(path); - } - - public IEnumerator UploadFile(Action callback) - { - yield return null; - WebPinataUploaderHelper.RequestFile(callback, SupportedFileExtensions); - } - } - - public static class WebPinataUploaderHelper - { - private static Action _responseCallback; - - public static IPinataUploader GetUploader(string apiKey) - { - const string callbackObjectName = nameof(WebPinataUploader); - const string callbackMethodName = nameof(WebPinataUploader.FileRequestCallback); - - var webUploaderGameObject = GameObject.Find(nameof(WebPinataUploader)); - var webFileUploader = webUploaderGameObject != null - ? webUploaderGameObject.GetComponent() - : new GameObject(nameof(WebPinataUploader)).AddComponent(); - - webFileUploader.PinataCredentials = new PinataCredentials(apiKey); - - JsInitPinataUploader( - callbackObjectName, - callbackMethodName, - webFileUploader.PinataCredentials.ApiUrl, - webFileUploader.PinataCredentials.ApiKey); - - return webFileUploader; - } - - public static void RequestFile(Action callback, string extensions) - { - JsRequestUserFile(extensions); - _responseCallback = callback; - } - - public static void SetResult(string response) - { - var ipfsResponse = JsonSerializer.Deserialize(response); - _responseCallback.Invoke($"ipfs://{ipfsResponse.IpfsHash}"); - Dispose(); - } - - private static void Dispose() - { - _responseCallback = null; - } - - [DllImport("__Internal")] - private static extern void JsInitPinataUploader( - string objectName, - string methodName, - string apiUrl, - string apiKey); - - [DllImport("__Internal")] - private static extern void JsRequestUserFile(string extensions); - } + +#if UNITY_WEBGL + public class WebPinataUploader : BaseUploader, IPinataUploader + { + #region IBaseUploader Implementation + + public IEnumerator UploadFile(Action callback) + { + yield return null; + WebPinataUploaderHelper.RequestFile(callback, SupportedFileExtensions); + } + + #endregion + + #region IPinataUploader Implementation + + public PinataCredentials PinataCredentials { get; set; } + + #endregion + + public void FileRequestCallback(string path) + { + WebPinataUploaderHelper.SetResult(path); + } + } + + public static class WebPinataUploaderHelper + { + private static Action responseCallback; + + public static IPinataUploader GetUploader(string apiKey) + { + const string _callback_object_name = nameof(WebPinataUploader); + const string _callback_method_name = nameof(WebPinataUploader.FileRequestCallback); + + var webUploaderGameObject = GameObject.Find(nameof(WebPinataUploader)); + + var webFileUploader = webUploaderGameObject != null + ? webUploaderGameObject.GetComponent() + : new GameObject(nameof(WebPinataUploader)).AddComponent(); + + webFileUploader.PinataCredentials = new PinataCredentials(apiKey); + + JsInitPinataUploader(_callback_object_name, _callback_method_name, webFileUploader.PinataCredentials.ApiUrl, + webFileUploader.PinataCredentials.ApiKey); + + return webFileUploader; + } + + public static void RequestFile(Action callback, string extensions) + { + JsRequestUserFile(extensions); + responseCallback = callback; + } + + public static void SetResult(string response) + { + var ipfsResponse = JsonSerializer.Deserialize(response); + responseCallback.Invoke($"ipfs://{ipfsResponse.IpfsHash}"); + Dispose(); + } + + private static void Dispose() + { + responseCallback = null; + } + + [DllImport("__Internal")] + private static extern void JsInitPinataUploader( + string objectName, + string methodName, + string apiUrl, + string apiKey); + + [DllImport("__Internal")] + private static extern void JsRequestUserFile(string extensions); + } #endif -} + +} \ No newline at end of file diff --git a/Runtime/Scripts/FileUploaders/OnChain/EditorBase64Uploader.cs b/Runtime/Scripts/FileUploaders/OnChain/EditorBase64Uploader.cs index e5d30bfb..58664362 100644 --- a/Runtime/Scripts/FileUploaders/OnChain/EditorBase64Uploader.cs +++ b/Runtime/Scripts/FileUploaders/OnChain/EditorBase64Uploader.cs @@ -4,35 +4,34 @@ using System.IO; using UnityEditor; - -namespace TezosSDK.Scripts.FileUploaders.OnChain +namespace TezosSDK.FileUploaders.OnChain { - public class EditorBase64Uploader : BaseUploader, IBaseUploader - { - public IEnumerator UploadFile(Action callback) - { - yield return null; - var imagePath = EditorUtility.OpenFilePanel( - "Select image", - string.Empty, - SupportedFileExtensions - .Replace(".", string.Empty) - .Replace(" ", string.Empty) - ); - callback.Invoke(ConvertImageToBase64(imagePath)); - } - - private static string ConvertImageToBase64(string imagePath) - { - var fileExtension = Path - .GetExtension(imagePath) - .Replace(".", string.Empty) - .ToLower(); - - var imageBytes = File.ReadAllBytes(imagePath); - var base64String = Convert.ToBase64String(imageBytes); - return $"data:image/{fileExtension};base64,{base64String}"; - } - } + + public class EditorBase64Uploader : BaseUploader, IBaseUploader + { + #region IBaseUploader Implementation + + public IEnumerator UploadFile(Action callback) + { + yield return null; + + var imagePath = EditorUtility.OpenFilePanel("Select image", string.Empty, + SupportedFileExtensions.Replace(".", string.Empty).Replace(" ", string.Empty)); + + callback.Invoke(ConvertImageToBase64(imagePath)); + } + + #endregion + + private static string ConvertImageToBase64(string imagePath) + { + var fileExtension = Path.GetExtension(imagePath).Replace(".", string.Empty).ToLower(); + + var imageBytes = File.ReadAllBytes(imagePath); + var base64String = Convert.ToBase64String(imageBytes); + return $"data:image/{fileExtension};base64,{base64String}"; + } + } + } #endif \ No newline at end of file diff --git a/Runtime/Scripts/FileUploaders/OnChain/WebBase64Uploader.cs b/Runtime/Scripts/FileUploaders/OnChain/WebBase64Uploader.cs index d8593f50..ea8c3e6e 100644 --- a/Runtime/Scripts/FileUploaders/OnChain/WebBase64Uploader.cs +++ b/Runtime/Scripts/FileUploaders/OnChain/WebBase64Uploader.cs @@ -1,71 +1,75 @@ +#if UNITY_WEBGL using System; using System.Collections; using System.Runtime.InteropServices; -using Logger = TezosSDK.Helpers.Logger; using UnityEngine; +#endif -namespace TezosSDK.Scripts.FileUploaders.OnChain +namespace TezosSDK.FileUploaders.OnChain { -#if UNITY_WEBGL && !UNITY_EDITOR - public class WebBase64Uploader : BaseUploader, IBaseUploader - { - public void FileRequestCallback(string path) - { - WebBase64UploaderHelper.SetResult(path); - } - - public IEnumerator UploadFile(Action callback) - { - yield return null; - WebBase64UploaderHelper.RequestFile(callback, SupportedFileExtensions); - } - } - - public static class WebBase64UploaderHelper - { - private static Action _responseCallback; - - public static IBaseUploader GetUploader() - { - const string callbackObjectName = nameof(WebBase64Uploader); - const string callbackMethodName = nameof(WebBase64Uploader.FileRequestCallback); - - var webUploaderGameObject = GameObject.Find(nameof(WebBase64Uploader)); - var uploader = webUploaderGameObject != null - ? webUploaderGameObject.GetComponent() - : new GameObject(nameof(WebBase64Uploader)).AddComponent(); - - JsInitBase64Uploader( - callbackObjectName, - callbackMethodName); - - return uploader; - } - - public static void RequestFile(Action callback, string extensions) - { - JsRequestUserFile(extensions); - _responseCallback = callback; - } - - public static void SetResult(string response) - { - _responseCallback.Invoke(response); - Dispose(); - } - - private static void Dispose() - { - _responseCallback = null; - } - - [DllImport("__Internal")] - private static extern void JsInitBase64Uploader( - string objectName, - string methodName); - - [DllImport("__Internal")] - private static extern void JsRequestUserFile(string extensions); - } + +#if UNITY_WEBGL + public class WebBase64Uploader : BaseUploader, IBaseUploader + { + #region IBaseUploader Implementation + + public IEnumerator UploadFile(Action callback) + { + yield return null; + WebBase64UploaderHelper.RequestFile(callback, SupportedFileExtensions); + } + + #endregion + + public void FileRequestCallback(string path) + { + WebBase64UploaderHelper.SetResult(path); + } + } + + public static class WebBase64UploaderHelper + { + private static Action responseCallback; + + public static IBaseUploader GetUploader() + { + const string _callback_object_name = nameof(WebBase64Uploader); + const string _callback_method_name = nameof(WebBase64Uploader.FileRequestCallback); + + var webUploaderGameObject = GameObject.Find(nameof(WebBase64Uploader)); + + var uploader = webUploaderGameObject != null + ? webUploaderGameObject.GetComponent() + : new GameObject(nameof(WebBase64Uploader)).AddComponent(); + + JsInitBase64Uploader(_callback_object_name, _callback_method_name); + + return uploader; + } + + public static void RequestFile(Action callback, string extensions) + { + JsRequestUserFile(extensions); + responseCallback = callback; + } + + public static void SetResult(string response) + { + responseCallback.Invoke(response); + Dispose(); + } + + private static void Dispose() + { + responseCallback = null; + } + + [DllImport("__Internal")] + private static extern void JsInitBase64Uploader(string objectName, string methodName); + + [DllImport("__Internal")] + private static extern void JsRequestUserFile(string extensions); + } #endif -} + +} \ No newline at end of file diff --git a/Runtime/Scripts/FileUploaders/UploaderFactory.cs b/Runtime/Scripts/FileUploaders/UploaderFactory.cs index f872bc3e..bcca161b 100644 --- a/Runtime/Scripts/FileUploaders/UploaderFactory.cs +++ b/Runtime/Scripts/FileUploaders/UploaderFactory.cs @@ -1,44 +1,49 @@ -using TezosSDK.Scripts.FileUploaders.IPFS; -using TezosSDK.Scripts.FileUploaders.OnChain; +using TezosSDK.FileUploaders.IPFS; +using TezosSDK.FileUploaders.OnChain; using UnityEngine; -namespace TezosSDK.Scripts.FileUploaders +namespace TezosSDK.FileUploaders { - public static class UploaderFactory - { - /// - /// Cross-platform image uploader to IPFS network via Pinata service. - /// - /// API key from https://app.pinata.cloud/developers/api-keys - public static IBaseUploader GetPinataUploader(string apiKey) - { - IPinataUploader uploader = null; + + public static class UploaderFactory + { + /// + /// Cross-platform image uploader to IPFS network via Pinata service. + /// + /// API key from https://app.pinata.cloud/developers/api-keys + public static IBaseUploader GetPinataUploader(string apiKey) + { + IPinataUploader uploader = null; #if UNITY_WEBGL && !UNITY_EDITOR - uploader = WebPinataUploaderHelper.GetUploader(apiKey); + uploader = WebPinataUploaderHelper.GetUploader(apiKey); #elif UNITY_EDITOR - var editorUploaderGameObject = GameObject.Find(nameof(EditorPinataUploader)); - uploader = editorUploaderGameObject != null - ? editorUploaderGameObject.GetComponent() - : new GameObject(nameof(EditorPinataUploader)).AddComponent(); - uploader.PinataCredentials = new PinataCredentials(apiKey); + var editorUploaderGameObject = GameObject.Find(nameof(EditorPinataUploader)); + + uploader = editorUploaderGameObject != null + ? editorUploaderGameObject.GetComponent() + : new GameObject(nameof(EditorPinataUploader)).AddComponent(); + + uploader.PinataCredentials = new PinataCredentials(apiKey); #endif - return uploader; - } + return uploader; + } - public static IBaseUploader GetOnchainUploader() - { - IBaseUploader uploader = null; + public static IBaseUploader GetOnchainUploader() + { + IBaseUploader uploader = null; #if UNITY_WEBGL && !UNITY_EDITOR - uploader = WebBase64UploaderHelper.GetUploader(); + uploader = WebBase64UploaderHelper.GetUploader(); #elif UNITY_EDITOR - var editorUploaderGameObject = GameObject.Find(nameof(EditorBase64Uploader)); - uploader = editorUploaderGameObject != null - ? editorUploaderGameObject.GetComponent() - : new GameObject(nameof(EditorBase64Uploader)).AddComponent(); + var editorUploaderGameObject = GameObject.Find(nameof(EditorBase64Uploader)); + + uploader = editorUploaderGameObject != null + ? editorUploaderGameObject.GetComponent() + : new GameObject(nameof(EditorBase64Uploader)).AddComponent(); #endif - return uploader; - } - } + return uploader; + } + } + } \ No newline at end of file diff --git a/Runtime/Scripts/Helpers.meta b/Runtime/Scripts/Helpers.meta index 3d8ba651..baaaea38 100644 --- a/Runtime/Scripts/Helpers.meta +++ b/Runtime/Scripts/Helpers.meta @@ -1,8 +1,3 @@ fileFormatVersion: 2 -guid: 3d6af1e9b8fd983459fcfd86cc42a253 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: +guid: 46668fd08ef14fe28f5749c8860a85e9 +timeCreated: 1704711357 \ No newline at end of file diff --git a/Runtime/Scripts/Helpers/CoroutineWrapper.cs b/Runtime/Scripts/Helpers/CoroutineWrapper.cs deleted file mode 100644 index 40ba8760..00000000 --- a/Runtime/Scripts/Helpers/CoroutineWrapper.cs +++ /dev/null @@ -1,132 +0,0 @@ -using System; -using System.Collections; -using UnityEngine; - -namespace TezosSDK.Helpers -{ - /// - /// Wraps a coroutine allowing to extract the result when it's completed - /// - /// Type of result expected - public class CoroutineWrapper : IEnumerator - { - /// - /// Event raised when the coroutine is complete - /// - public readonly Action Completed; - - /// - /// Event raised when the coroutine throws an exception - /// - public readonly Action ErrorHandler; - - private readonly IEnumerator _targetCoroutine; - - /// - /// Exception triggered during the execution of the coroutine. - /// - public Exception Exception { get; private set; } - - /// - public object Current { get; private set; } - - /// - /// Result extracted from the coroutine when it's complete - /// - public T Result { get; private set; } - - /// - /// Create an instance of the wrapper - /// - /// Coroutine that will be executed - /// Callback that will be called when the coroutine is complete - /// Callback that will be called when the coroutine throws an exception - public CoroutineWrapper(IEnumerator coroutine, Action callback = null, Action errorHandler = null) - { - _targetCoroutine = coroutine; - if (callback != null) - { - Completed += callback; - } - - if (errorHandler != null) - { - ErrorHandler += errorHandler; - } - } - - /// - public bool MoveNext() - { - try - { - if (_targetCoroutine.MoveNext()) - { - Current = _targetCoroutine.Current; - return true; - } - - Result = (T)_targetCoroutine.Current; - Current = _targetCoroutine.Current; - Completed?.Invoke(Result); - return false; - } - catch (Exception e) - { - Exception = e; - if (ErrorHandler == null) - { - Debug.LogError($"Exception: {e.Message}"); - } - else - { - ErrorHandler?.Invoke(e); - } - - return false; - } - } - - /// - public void Reset() - { - _targetCoroutine.Reset(); - } - } - - /// - /// Helper class that will allow to run a coroutine - /// - public class CoroutineRunner : MonoBehaviour - { - private static CoroutineRunner _instance; - - public static CoroutineRunner Instance - { - get - { - if (_instance == null) - _instance = (new GameObject("CoroutineRunner")).AddComponent(); - - return _instance; - } - } - - public Coroutine StartWrappedCoroutine(IEnumerator coroutine) - { - return StartCoroutine(new CoroutineWrapper(coroutine, null, - (exception) => Debug.LogError($"Exception on Coroutine: {exception.Message}"))); - } - - [Obsolete("StartCoroutineWrapper is obsolete and will be replaced by StartWrappedCoroutine in future releases")] - public Coroutine StartCoroutineWrapper(IEnumerator coroutine) - { - return StartWrappedCoroutine(coroutine); - } - - private void Awake() - { - DontDestroyOnLoad(gameObject); - } - } -} \ No newline at end of file diff --git a/Runtime/Scripts/Helpers/Coroutines.meta b/Runtime/Scripts/Helpers/Coroutines.meta new file mode 100644 index 00000000..34db8fbd --- /dev/null +++ b/Runtime/Scripts/Helpers/Coroutines.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5982a8ea0cd34b1d9ff40e2871b13862 +timeCreated: 1704717290 \ No newline at end of file diff --git a/Runtime/Scripts/Helpers/Coroutines/CoroutineRunner.cs b/Runtime/Scripts/Helpers/Coroutines/CoroutineRunner.cs new file mode 100644 index 00000000..72d724ae --- /dev/null +++ b/Runtime/Scripts/Helpers/Coroutines/CoroutineRunner.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections; +using TezosSDK.Patterns; +using UnityEngine; + +namespace TezosSDK.Helpers.Coroutines +{ + + /// + /// Helper class that will allow to run a coroutine + /// + public class CoroutineRunner : SingletonMonoBehaviour + { + [Obsolete("StartCoroutineWrapper is obsolete and will be replaced by StartWrappedCoroutine in future releases")] + public Coroutine StartCoroutineWrapper(IEnumerator coroutine) + { + return StartWrappedCoroutine(coroutine); + } + + public Coroutine StartWrappedCoroutine(IEnumerator coroutine) + { + return StartCoroutine(new CoroutineWrapper(coroutine, null, + exception => Debug.LogError($"Exception on Coroutine: {exception.Message}"))); + } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Helpers/Coroutines/CoroutineRunner.cs.meta b/Runtime/Scripts/Helpers/Coroutines/CoroutineRunner.cs.meta new file mode 100644 index 00000000..07aae2b0 --- /dev/null +++ b/Runtime/Scripts/Helpers/Coroutines/CoroutineRunner.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7eb258284a5042ada57881eacc188b04 +timeCreated: 1699563565 \ No newline at end of file diff --git a/Runtime/Scripts/Helpers/Coroutines/CoroutineWrapper.cs b/Runtime/Scripts/Helpers/Coroutines/CoroutineWrapper.cs new file mode 100644 index 00000000..d13c2c34 --- /dev/null +++ b/Runtime/Scripts/Helpers/Coroutines/CoroutineWrapper.cs @@ -0,0 +1,99 @@ +using System; +using System.Collections; +using UnityEngine; + +namespace TezosSDK.Helpers.Coroutines +{ + + /// + /// Wraps a coroutine allowing to extract the result when it's completed + /// + /// Type of result expected + public class CoroutineWrapper : IEnumerator + { + private readonly IEnumerator _targetCoroutine; + /// + /// Event raised when the coroutine is complete + /// + public readonly Action Completed; + + /// + /// Event raised when the coroutine throws an exception + /// + public readonly Action ErrorHandler; + + /// + /// Create an instance of the wrapper + /// + /// Coroutine that will be executed + /// Callback that will be called when the coroutine is complete + /// Callback that will be called when the coroutine throws an exception + public CoroutineWrapper(IEnumerator coroutine, Action callback = null, Action errorHandler = null) + { + _targetCoroutine = coroutine; + + if (callback != null) + { + Completed += callback; + } + + if (errorHandler != null) + { + ErrorHandler += errorHandler; + } + } + + /// + /// Exception triggered during the execution of the coroutine. + /// + public Exception Exception { get; private set; } + + /// + /// Result extracted from the coroutine when it's complete + /// + public T Result { get; private set; } + + /// + public object Current { get; private set; } + + /// + public bool MoveNext() + { + try + { + if (_targetCoroutine.MoveNext()) + { + Current = _targetCoroutine.Current; + return true; + } + + Result = (T)_targetCoroutine.Current; + Current = _targetCoroutine.Current; + Completed?.Invoke(Result); + return false; + } + catch (Exception e) + { + Exception = e; + + if (ErrorHandler == null) + { + Debug.LogError($"Exception: {e.Message}"); + } + else + { + ErrorHandler?.Invoke(e); + } + + return false; + } + } + + /// + public void Reset() + { + _targetCoroutine.Reset(); + } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Helpers/CoroutineWrapper.cs.meta b/Runtime/Scripts/Helpers/Coroutines/CoroutineWrapper.cs.meta similarity index 100% rename from Runtime/Scripts/Helpers/CoroutineWrapper.cs.meta rename to Runtime/Scripts/Helpers/Coroutines/CoroutineWrapper.cs.meta diff --git a/Runtime/Scripts/Helpers/Extensions.meta b/Runtime/Scripts/Helpers/Extensions.meta new file mode 100644 index 00000000..cd6157fe --- /dev/null +++ b/Runtime/Scripts/Helpers/Extensions.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7cc317aea1a84c0dbf2c8301f80efb5a +timeCreated: 1704715464 \ No newline at end of file diff --git a/Runtime/Scripts/Helpers/Extensions/BeaconExtensions.cs b/Runtime/Scripts/Helpers/Extensions/BeaconExtensions.cs new file mode 100644 index 00000000..57312c4c --- /dev/null +++ b/Runtime/Scripts/Helpers/Extensions/BeaconExtensions.cs @@ -0,0 +1,56 @@ +using System.Collections.Generic; +using System.Linq; +using Beacon.Sdk.Beacon; +using Beacon.Sdk.Beacon.Operation; +using Beacon.Sdk.Beacon.Permission; +using Beacon.Sdk.Core.Domain.Entities; + +namespace TezosSDK.Helpers.Extensions +{ + + public static class BeaconExtensions + { + public static string Print(this PermissionInfo info) + { + return $"Address: {info.Address} \n" + $"PublicKey: {info.PublicKey} \n" + + $"ConnectedAt: {info.ConnectedAt} \n" + $"Network: {info.Network} \n" + + $"Scopes: {info.Scopes.Print()} \n" + $"Metadata: \n{info.AppMetadata.Print()}"; + } + + public static string Print(this List scopes) + { + return string.Join(", ", scopes); + } + + public static string Print(this AppMetadata data) + { + return $"-Name: {data.Name} \n" + $"-Icon: {data.Icon} \n" + $"-AppUrl: {data.AppUrl}"; + } + + public static string Print(this Peer peer) + { + return $"Name: {peer.Name}, " + $"Version: {peer.Version}, " + $"RelayServer: {peer.RelayServer}"; + } + + public static string Print(this PermissionResponse response) + { + var permissionsString = string.Join(", ", response.Scopes); + + return $"Received permissions: \"{permissionsString}\", " + $"from: \"{response.AppMetadata.Name}\", " + + $"with public key: \"{response.PublicKey}\""; + } + + public static string Print(this OperationRequest request) + { + return $"{nameof(OperationRequest)} {{ " + $"Network = {request.Network}, " + + $"OperationDetails = {request.OperationDetails.Print()}, " + + $"SourceAddress = {request.SourceAddress} }}"; + } + + private static string Print(this List operations) + { + return operations.Aggregate("", (current, operation) => current + (operation.Kind + "\n")); + } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Helpers/Extensions/BeaconExtensions.cs.meta b/Runtime/Scripts/Helpers/Extensions/BeaconExtensions.cs.meta new file mode 100644 index 00000000..91566ba6 --- /dev/null +++ b/Runtime/Scripts/Helpers/Extensions/BeaconExtensions.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 917d14fdd98b4e8894d3357bf8c81111 +timeCreated: 1704276791 \ No newline at end of file diff --git a/Runtime/Scripts/Helpers/Extensions/NetezosExtensions.cs b/Runtime/Scripts/Helpers/Extensions/NetezosExtensions.cs new file mode 100644 index 00000000..96b2b9ed --- /dev/null +++ b/Runtime/Scripts/Helpers/Extensions/NetezosExtensions.cs @@ -0,0 +1,101 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Text.Json; +using Beacon.Sdk.Beacon.Sign; +using Netezos.Contracts; +using Netezos.Encoding; +using Netezos.Keys; +using TezosSDK.Helpers.Coroutines; +using TezosSDK.Tezos; +using TezosSDK.Tezos.API; + +namespace TezosSDK.Helpers.Extensions +{ + + public static class NetezosExtensions + { + private static readonly Dictionary Contracts = new(); + + public static IEnumerator HumanizeValue( + JsonElement val, + string rpcUri, + string destination, + string humanizeEntrypoint, + Action onComplete) + { + yield return FetchContractCode(rpcUri, destination); + var cs = Contracts[destination]; + // getting parameters section as readable json: + var json = cs.HumanizeParameter(humanizeEntrypoint, Micheline.FromJson(val)); + var readResult = JsonSerializer.Deserialize(json); + onComplete?.Invoke(readResult); + } + + private static IEnumerator FetchContractCode(string rpcUri, string contract) + { + if (Contracts.ContainsKey(contract)) + { + yield break; + } + + var rpc = new Rpc(TezosManager.Instance.Config.DataProvider); + var scriptOp = rpc.GetContractCode(contract); + + yield return new CoroutineWrapper(scriptOp, script => + { + var codeElement = script.GetProperty("code").GetRawText(); + var code = Micheline.FromJson(codeElement); + Contracts[contract] = new ContractScript(code); + }); + } + + public static IEnumerator CompileToJsonMichelson( + string rpcUri, + string destination, + string entry, + object objArg, + Action onComplete) + { + yield return FetchContractCode(rpcUri, destination); + var cs = Contracts[destination]; + + var asMichelson = cs.BuildParameter(entry, objArg); + onComplete?.Invoke(asMichelson.ToJson()); + } + + public static bool VerifySignature(string pubKey, SignPayloadType signingType, string payload, string signature) + { + var parsedPubKey = PubKey.FromBase58(pubKey); + + var payloadBytes = signingType == SignPayloadType.raw + ? Encoding.UTF8.GetBytes(GetPayloadString(signingType, payload)) + : Hex.Parse(GetPayloadString(signingType, payload)); + + return parsedPubKey.Verify(payloadBytes, signature); + } + + public static string GetPayloadString(SignPayloadType signingType, string plainTextPayload) + { + switch (signingType) + { + case SignPayloadType.raw: + return plainTextPayload; + case SignPayloadType.micheline or SignPayloadType.operation: + { + var bytes = Hex.Convert(Encoding.UTF8.GetBytes(plainTextPayload)); + var bytesLength = (bytes.Length / 2).ToString("x"); + var addPadding = "00000000" + bytesLength; + var paddedBytesLength = addPadding[^8..]; + var startPrefix = signingType == SignPayloadType.micheline ? "0501" : "0300"; + var payloadBytes = startPrefix + paddedBytesLength + bytes; + return payloadBytes; + } + default: + throw new ArgumentOutOfRangeException(nameof(signingType), signingType, null); + } + } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Helpers/NetezosExtensions.cs.meta b/Runtime/Scripts/Helpers/Extensions/NetezosExtensions.cs.meta similarity index 100% rename from Runtime/Scripts/Helpers/NetezosExtensions.cs.meta rename to Runtime/Scripts/Helpers/Extensions/NetezosExtensions.cs.meta diff --git a/Runtime/Scripts/Helpers/Extensions/StringExtensions.cs b/Runtime/Scripts/Helpers/Extensions/StringExtensions.cs new file mode 100644 index 00000000..087d9754 --- /dev/null +++ b/Runtime/Scripts/Helpers/Extensions/StringExtensions.cs @@ -0,0 +1,29 @@ +namespace TezosSDK.Helpers.Extensions +{ + + public static class StringExtension + { + public static byte[] ToByteArray(this string input) + { + var bytes = new byte[input.Length]; + + for (var i = 0; i < input.Length; i++) + { + bytes[i] = (byte)input[i]; + } + + return bytes; + } + + public static string FirstCharToLowerCase(this string input) + { + if (!string.IsNullOrEmpty(input) && char.IsUpper(input[0])) + { + return input.Length == 1 ? char.ToLower(input[0]).ToString() : char.ToLower(input[0]) + input[1..]; + } + + return input; + } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Helpers/StringExtensions.cs.meta b/Runtime/Scripts/Helpers/Extensions/StringExtensions.cs.meta similarity index 100% rename from Runtime/Scripts/Helpers/StringExtensions.cs.meta rename to Runtime/Scripts/Helpers/Extensions/StringExtensions.cs.meta diff --git a/Runtime/Scripts/Helpers/HttpClient.cs b/Runtime/Scripts/Helpers/HttpClient.cs deleted file mode 100644 index 7e41619a..00000000 --- a/Runtime/Scripts/Helpers/HttpClient.cs +++ /dev/null @@ -1,77 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.Text.Json; -using Dynamic.Json; -using TezosSDK.Tezos; -using UnityEngine; -using UnityEngine.Networking; - -namespace TezosSDK.Helpers -{ - public class HttpClient - { - private string BaseAddress { get; } - private int RequestTimeout { get; } - - protected HttpClient(string baseAddress) - { - BaseAddress = baseAddress.EndsWith("/") ? baseAddress : $"{baseAddress}/"; - RequestTimeout = TezosConfig.Instance.DefaultTimeoutSeconds; - } - - protected HttpClient(IDataProviderConfig config) - { - var configBaseAddress = config.BaseUrl; - BaseAddress = configBaseAddress.EndsWith("/") ? configBaseAddress : $"{configBaseAddress}/"; - RequestTimeout = config.TimeoutSeconds; - } - - protected IEnumerator GetJson(string path) - { - var request = GetUnityWebRequest(UnityWebRequest.kHttpVerbGET, path); - request.SendWebRequest(); - yield return new WaitUntil(() => request.isDone); - yield return DJson.Parse(request.downloadHandler.text, JsonOptions.DefaultOptions); - request.Dispose(); - } - - protected IEnumerator GetJson(string path) - { - var request = GetUnityWebRequest(UnityWebRequest.kHttpVerbGET, path); - request.SendWebRequest(); - yield return new WaitUntil(() => request.isDone); - yield return JsonSerializer.Deserialize(request.downloadHandler.text, JsonOptions.DefaultOptions); - request.Dispose(); - } - - protected IEnumerator PostJson(string path, object data) - { - var serializedData = JsonSerializer.Serialize(data, JsonOptions.DefaultOptions); - var request = GetUnityWebRequest(UnityWebRequest.kHttpVerbPOST, path); - request.uploadHandler = new UploadHandlerRaw(Encoding.UTF8.GetBytes(serializedData)); - request.SetRequestHeader(HttpHeaders.ContentType.Key, HttpHeaders.ContentType.Value); - request.SendWebRequest(); - yield return new WaitUntil(() => request.isDone); - yield return JsonSerializer.Deserialize(request.downloadHandler.text, JsonOptions.DefaultOptions); - request.Dispose(); - } - - private UnityWebRequest GetUnityWebRequest(string method, string path) - { - var request = new UnityWebRequest($"{BaseAddress}{path}", method); - request.downloadHandler = new DownloadHandlerBuffer(); - request.SetRequestHeader(HttpHeaders.Accept.Key, HttpHeaders.Accept.Value); - request.SetRequestHeader(HttpHeaders.UserAgent.Key, HttpHeaders.UserAgent.Value); - request.timeout = RequestTimeout; - return request; - } - } - - internal static class HttpHeaders - { - public static KeyValuePair ContentType => new("Content-Type", "application/json"); - public static KeyValuePair Accept => new("Accept", "application/json"); - public static KeyValuePair UserAgent => new("User-Agent", "tezos-unity-sdk"); - } -} \ No newline at end of file diff --git a/Runtime/Scripts/Helpers/HttpClients.meta b/Runtime/Scripts/Helpers/HttpClients.meta new file mode 100644 index 00000000..bc41f91a --- /dev/null +++ b/Runtime/Scripts/Helpers/HttpClients.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7d1da798cfb64abb93ab33ad5086295b +timeCreated: 1704717333 \ No newline at end of file diff --git a/Runtime/Scripts/Helpers/HttpClients/HttpHeaders.cs b/Runtime/Scripts/Helpers/HttpClients/HttpHeaders.cs new file mode 100644 index 00000000..bd3b9eec --- /dev/null +++ b/Runtime/Scripts/Helpers/HttpClients/HttpHeaders.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; + +namespace TezosSDK.Helpers.HttpClients +{ + + internal static class HttpHeaders + { + public static KeyValuePair ContentType + { + get => new("Content-Type", "application/json"); + } + + public static KeyValuePair Accept + { + get => new("Accept", "application/json"); + } + + public static KeyValuePair UserAgent + { + get => new("User-Agent", "tezos-unity-sdk"); + } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Helpers/HttpClients/HttpHeaders.cs.meta b/Runtime/Scripts/Helpers/HttpClients/HttpHeaders.cs.meta new file mode 100644 index 00000000..100711fb --- /dev/null +++ b/Runtime/Scripts/Helpers/HttpClients/HttpHeaders.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2d350ed46a884925812f36c9989b76e3 +timeCreated: 1704717324 \ No newline at end of file diff --git a/Runtime/Scripts/Helpers/HttpClients/TezosHttpClient.cs b/Runtime/Scripts/Helpers/HttpClients/TezosHttpClient.cs new file mode 100644 index 00000000..b4680534 --- /dev/null +++ b/Runtime/Scripts/Helpers/HttpClients/TezosHttpClient.cs @@ -0,0 +1,90 @@ +using System.Collections; +using System.Text; +using System.Text.Json; +using Dynamic.Json; +using TezosSDK.Tezos; +using UnityEngine; +using UnityEngine.Networking; + +namespace TezosSDK.Helpers.HttpClients +{ + + public class TezosHttpClient + { + protected TezosHttpClient(TezosConfigSO rpcConfig) + { + BaseAddress = AddSlashIfNeeded(rpcConfig.Rpc); + RequestTimeout = rpcConfig.RequestTimeoutSeconds; + } + + protected TezosHttpClient(DataProviderConfigSO dataProviderConfig) + { + BaseAddress = AddSlashIfNeeded(dataProviderConfig.BaseUrl); + RequestTimeout = dataProviderConfig.RequestTimeoutSeconds; + } + + private string BaseAddress { get; } + private int RequestTimeout { get; } + + private string AddSlashIfNeeded(string url) + { + return url.EndsWith("/") ? url : $"{url}/"; + } + + protected IEnumerator GetJson(string path) + { + var request = GetUnityWebRequest(UnityWebRequest.kHttpVerbGET, path); + yield return request.SendWebRequest(); + + if (request.result != UnityWebRequest.Result.Success) + { + Logger.LogError($"GetJson request failed with error: {request.error} - on url: {request.url}"); + request.Dispose(); + yield break; + } + + // Check if the downloaded text is not null or empty. + if (string.IsNullOrWhiteSpace(request.downloadHandler.text)) + { + Logger.LogDebug("GetJson: No data or empty JSON received."); + request.Dispose(); + yield break; + } + + if (typeof(T) == typeof(string)) + { + yield return DJson.Parse(request.downloadHandler.text, JsonOptions.DefaultOptions); + } + else + { + yield return JsonSerializer.Deserialize(request.downloadHandler.text, JsonOptions.DefaultOptions); + } + + request.Dispose(); + } + + protected IEnumerator PostJson(string path, object data) + { + var serializedData = JsonSerializer.Serialize(data, JsonOptions.DefaultOptions); + var request = GetUnityWebRequest(UnityWebRequest.kHttpVerbPOST, path); + request.uploadHandler = new UploadHandlerRaw(Encoding.UTF8.GetBytes(serializedData)); + request.SetRequestHeader(HttpHeaders.ContentType.Key, HttpHeaders.ContentType.Value); + request.SendWebRequest(); + yield return new WaitUntil(() => request.isDone); + yield return JsonSerializer.Deserialize(request.downloadHandler.text, JsonOptions.DefaultOptions); + request.Dispose(); + } + + private UnityWebRequest GetUnityWebRequest(string method, string path) + { + var request = new UnityWebRequest($"{BaseAddress}{path}", method); + Logger.LogDebug($"Sending {method} request to {request.url}"); + request.downloadHandler = new DownloadHandlerBuffer(); + request.SetRequestHeader(HttpHeaders.Accept.Key, HttpHeaders.Accept.Value); + request.SetRequestHeader(HttpHeaders.UserAgent.Key, HttpHeaders.UserAgent.Value); + request.timeout = RequestTimeout; + return request; + } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Helpers/HttpClient.cs.meta b/Runtime/Scripts/Helpers/HttpClients/TezosHttpClient.cs.meta similarity index 100% rename from Runtime/Scripts/Helpers/HttpClient.cs.meta rename to Runtime/Scripts/Helpers/HttpClients/TezosHttpClient.cs.meta diff --git a/Runtime/Scripts/Helpers/Json.cs b/Runtime/Scripts/Helpers/Json.cs index 56e5c67c..b6d08544 100644 --- a/Runtime/Scripts/Helpers/Json.cs +++ b/Runtime/Scripts/Helpers/Json.cs @@ -1,48 +1,55 @@ using System.Collections.Generic; using System.Text.Json; +using System.Text.Json.Serialization; namespace TezosSDK.Helpers { - class SnakeCaseNamingPolicy : JsonNamingPolicy - { - public override string ConvertName(string name) - { - var buf = new List(); - var abbreviation = 0; - - for (int i = 0; i < name.Length; i++) - { - if (name[i] <= 90 && name[i] >= 65) - { - if (abbreviation == 0 && i > 0) - buf.Add('_'); - - abbreviation++; - buf.Add((char)(name[i] + 32)); - } - else - { - if (abbreviation > 1) - buf.Insert(buf.Count - 1, '_'); - - abbreviation = 0; - buf.Add(name[i]); - } - } - - return new string(buf.ToArray()); - } - } - - public static class JsonOptions - { - public static readonly JsonSerializerOptions DefaultOptions = new() - { - AllowTrailingCommas = true, - DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull, - MaxDepth = 100_000, - NumberHandling = System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString, - PropertyNamingPolicy = new SnakeCaseNamingPolicy() - }; - } + + internal class SnakeCaseNamingPolicy : JsonNamingPolicy + { + public override string ConvertName(string name) + { + var buf = new List(); + var abbreviation = 0; + + for (var i = 0; i < name.Length; i++) + { + if (name[i] <= 90 && name[i] >= 65) + { + if (abbreviation == 0 && i > 0) + { + buf.Add('_'); + } + + abbreviation++; + buf.Add((char)(name[i] + 32)); + } + else + { + if (abbreviation > 1) + { + buf.Insert(buf.Count - 1, '_'); + } + + abbreviation = 0; + buf.Add(name[i]); + } + } + + return new string(buf.ToArray()); + } + } + + public static class JsonOptions + { + public static readonly JsonSerializerOptions DefaultOptions = new() + { + AllowTrailingCommas = true, + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + MaxDepth = 100_000, + NumberHandling = JsonNumberHandling.AllowReadingFromString, + PropertyNamingPolicy = new SnakeCaseNamingPolicy() + }; + } + } \ No newline at end of file diff --git a/Runtime/Scripts/Helpers/Logger.cs b/Runtime/Scripts/Helpers/Logger.cs index f54f896d..d45a6e0b 100644 --- a/Runtime/Scripts/Helpers/Logger.cs +++ b/Runtime/Scripts/Helpers/Logger.cs @@ -2,59 +2,63 @@ namespace TezosSDK.Helpers { - public static class Logger - { - public enum LogLevel - { - None, - Error, - Warning, - Info, - Debug - } - - public static LogLevel CurrentLogLevel = LogLevel.Debug; - - public static void Log(string message, LogLevel logLevel = LogLevel.Info) - { - if (logLevel > CurrentLogLevel) - return; - - switch (logLevel) - { - case LogLevel.Debug: - Debug.Log(message); - break; - case LogLevel.Info: - Debug.Log(message); - break; - case LogLevel.Warning: - Debug.LogWarning(message); - break; - case LogLevel.Error: - Debug.LogError(message); - break; - } - } - - public static void LogDebug(string message) - { - Log(message, LogLevel.Debug); - } - - public static void LogInfo(string message) - { - Log(message, LogLevel.Info); - } - - public static void LogWarning(string message) - { - Log(message, LogLevel.Warning); - } - - public static void LogError(string message) - { - Log(message, LogLevel.Error); - } - } + + public static class Logger + { + public enum LogLevel + { + None, + Error, + Warning, + Info, + Debug + } + + public static LogLevel CurrentLogLevel = LogLevel.Debug; + + public static void Log(string message, LogLevel logLevel = LogLevel.Info) + { + if (logLevel > CurrentLogLevel) + { + return; + } + + switch (logLevel) + { + case LogLevel.Debug: + Debug.Log(message); + break; + case LogLevel.Info: + Debug.Log(message); + break; + case LogLevel.Warning: + Debug.LogWarning(message); + break; + case LogLevel.Error: + Debug.LogError(message); + break; + } + } + + public static void LogDebug(string message) + { + Log(message, LogLevel.Debug); + } + + public static void LogInfo(string message) + { + Log(message); + } + + public static void LogWarning(string message) + { + Log(message, LogLevel.Warning); + } + + public static void LogError(string message) + { + Log(message, LogLevel.Error); + } + } + } \ No newline at end of file diff --git a/Runtime/Scripts/Helpers/NetezosExtensions.cs b/Runtime/Scripts/Helpers/NetezosExtensions.cs deleted file mode 100644 index f1ccf6e9..00000000 --- a/Runtime/Scripts/Helpers/NetezosExtensions.cs +++ /dev/null @@ -1,83 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.Text.Json; -using Beacon.Sdk.Beacon.Sign; -using Netezos.Contracts; -using Netezos.Encoding; -using Netezos.Keys; -using TezosSDK.Tezos.API; - -namespace TezosSDK.Helpers -{ - public static class NetezosExtensions - { - private static readonly Dictionary _contracts = new(); - - public static IEnumerator HumanizeValue(JsonElement val, string rpcUri, string destination, - string humanizeEntrypoint, Action onComplete) - { - yield return FetchContractCode(rpcUri, destination); - var cs = _contracts[destination]; - // getting parameters section as readable json: - var json = cs.HumanizeParameter(humanizeEntrypoint, Micheline.FromJson(val)); - var readResult = JsonSerializer.Deserialize(json); - onComplete?.Invoke(readResult); - } - - private static IEnumerator FetchContractCode(string rpcUri, string contract) - { - if (_contracts.ContainsKey(contract)) yield break; - var rpc = new Rpc(rpcUri); - var scriptOp = rpc.GetContractCode(contract); - yield return new CoroutineWrapper(scriptOp, (script) => - { - var codeElement = script.GetProperty("code").GetRawText(); - var code = Micheline.FromJson(codeElement); - _contracts[contract] = new ContractScript(code); - }); - } - - public static IEnumerator CompileToJSONMichelson(string rpcUri, string destination, - string entry, object objArg, Action onComplete) - { - yield return FetchContractCode(rpcUri, destination); - var cs = _contracts[destination]; - - var asMichelson = cs.BuildParameter(entry, objArg); - onComplete?.Invoke(asMichelson.ToJson()); - } - - public static bool VerifySignature(string pubKey, SignPayloadType signingType, string payload, string signature) - { - var parsedPubKey = PubKey.FromBase58(pubKey); - var payloadBytes = signingType == SignPayloadType.raw - ? Encoding.UTF8.GetBytes(GetPayloadString(signingType, payload)) - : Hex.Parse(GetPayloadString(signingType, payload)); - - return parsedPubKey.Verify(payloadBytes, signature); - } - - public static string GetPayloadString(SignPayloadType signingType, string plainTextPayload) - { - switch (signingType) - { - case SignPayloadType.raw: - return plainTextPayload; - case SignPayloadType.micheline or SignPayloadType.operation: - { - var bytes = Hex.Convert(Encoding.UTF8.GetBytes(plainTextPayload)); - var bytesLength = (bytes.Length / 2).ToString("x"); - var addPadding = "00000000" + bytesLength; - var paddedBytesLength = addPadding[^8..]; - var startPrefix = signingType == SignPayloadType.micheline ? "0501" : "0300"; - var payloadBytes = startPrefix + paddedBytesLength + bytes; - return payloadBytes; - } - default: - throw new ArgumentOutOfRangeException(nameof(signingType), signingType, null); - } - } - } -} \ No newline at end of file diff --git a/Runtime/Scripts/Helpers/QrCodeGenerator.cs b/Runtime/Scripts/Helpers/QrCodeGenerator.cs new file mode 100644 index 00000000..c5a10848 --- /dev/null +++ b/Runtime/Scripts/Helpers/QrCodeGenerator.cs @@ -0,0 +1,69 @@ +using TezosSDK.Tezos; +using UnityEngine; +using UnityEngine.UI; +using ZXing; +using ZXing.QrCode; + +namespace TezosSDK.Helpers +{ + + public class QrCodeGenerator : MonoBehaviour + { + [SerializeField] private RawImage rawImage; + private bool _encoded; + private Texture2D _texture; + + private void Start() + { + if (_texture != null) + { + return; + } + + rawImage.texture = _texture = new Texture2D(256, 256); + _texture.filterMode = FilterMode.Point; + } + + public void SetQrCode(HandshakeData handshakeData) + { + if (_encoded) + { + return; + } + + var uri = "tezos://?type=tzip10&data=" + handshakeData.PairingData; + EncodeTextToQrCode(uri); + _encoded = true; + } + + private Color32[] Encode(string text, int width, int height) + { + var writer = new BarcodeWriter + { + Format = BarcodeFormat.QR_CODE, + Options = new QrCodeEncodingOptions + { + Width = width, + Height = height, + PureBarcode = true + } + }; + + return writer.Write(text); + } + + private void EncodeTextToQrCode(string text) + { + if (_texture == null) + { + rawImage.texture = _texture = new Texture2D(256, 256); + _texture.filterMode = FilterMode.Point; + } + + var colors = Encode(text, _texture.width, _texture.height); + _texture.SetPixels32(colors); + _texture.Apply(); + } + } + +} \ No newline at end of file diff --git a/Runtime/View/QRCodeView.cs.meta b/Runtime/Scripts/Helpers/QrCodeGenerator.cs.meta similarity index 100% rename from Runtime/View/QRCodeView.cs.meta rename to Runtime/Scripts/Helpers/QrCodeGenerator.cs.meta diff --git a/Runtime/Scripts/Helpers/StringExtensions.cs b/Runtime/Scripts/Helpers/StringExtensions.cs deleted file mode 100644 index e05d0246..00000000 --- a/Runtime/Scripts/Helpers/StringExtensions.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace TezosSDK.Helpers -{ - public static class StringExtension - { - public static byte[] ToByteArray(this string input) - { - var bytes = new byte[input.Length]; - - for (var i = 0; i < input.Length; i++) - { - bytes[i] = (byte)input[i]; - } - - return bytes; - } - - public static string FirstCharToLowerCase(this string input) - { - if ( !string.IsNullOrEmpty(input) && char.IsUpper(input[0])) - return input.Length == 1 ? char.ToLower(input[0]).ToString() : char.ToLower(input[0]) + input[1..]; - - return input; - } - } -} \ No newline at end of file diff --git a/Runtime/Scripts/Helpers/UnityMainThreadDispatcher.cs b/Runtime/Scripts/Helpers/UnityMainThreadDispatcher.cs index 00ee78e1..e8dda795 100644 --- a/Runtime/Scripts/Helpers/UnityMainThreadDispatcher.cs +++ b/Runtime/Scripts/Helpers/UnityMainThreadDispatcher.cs @@ -15,134 +15,106 @@ limitations under the License. using System.Collections; using System.Collections.Generic; using System.Threading.Tasks; +using TezosSDK.Helpers.Coroutines; +using TezosSDK.Patterns; using UnityEngine; namespace TezosSDK.Helpers { - /// Author: Pim de Witte (pimdewitte.com) and contributors, https://github.com/PimDeWitte/UnityMainThreadDispatcher - /// - /// A thread-safe class which holds a queue with actions to execute on the next Update() method. It can be used to make calls to the main thread for - /// things such as UI Manipulation in Unity. It was developed for use in combination with the Firebase Unity plugin, which uses separate threads for event handling - /// - public class UnityMainThreadDispatcher : MonoBehaviour - { - private static readonly Queue _executionQueue = new(); - public void Update() - { - lock (_executionQueue) - { - while (_executionQueue.Count > 0) - { - _executionQueue.Dequeue().Invoke(); - } - } - } + /// Author: Pim de Witte (pimdewitte.com) and contributors, https://github.com/PimDeWitte/UnityMainThreadDispatcher + /// + /// A thread-safe class which holds a queue with actions to execute on the next Update() method. It can be used to make + /// calls to the main thread for + /// things such as UI Manipulation in Unity. It was developed for use in combination with the Firebase Unity plugin, + /// which uses separate threads for event handling + /// + public class UnityMainThreadDispatcher : SingletonMonoBehaviour + { + private static readonly Queue ExecutionQueue = new(); + + public void Update() + { + lock (ExecutionQueue) + { + while (ExecutionQueue.Count > 0) + { + ExecutionQueue.Dequeue().Invoke(); + } + } + } + + /// + /// Locks the queue and adds the Action to the queue + /// + /// Function that will be executed from the main thread. + public static void Enqueue(Action action) + { + Instance.Enqueue(ActionWrapper(action)); + } + + /// + /// Locks the queue and adds the Action to the queue + /// + /// Function that will be executed from the main thread. + /// Function parameter. + public static void Enqueue(Action action, T parameter) + { + Instance.Enqueue(ActionWrapper(action, parameter)); + } + + /// + /// Locks the queue and adds the IEnumerator to the queue + /// + /// IEnumerator function that will be executed from the main thread. + public void Enqueue(IEnumerator action) + { + lock (ExecutionQueue) + { + var coroutine = new CoroutineWrapper(action, null, + exception => Debug.LogError($"Exception on MainThread Queue: {exception.Message}")); + + ExecutionQueue.Enqueue(() => { StartCoroutine(coroutine); }); + } + } + + /// + /// Locks the queue and adds the Action to the queue, returning a Task which is completed when the action completes + /// + /// Function that will be executed from the main thread. + /// A Task that can be awaited until the action completes + public Task EnqueueAsync(Action action) + { + var tcs = new TaskCompletionSource(); + + Enqueue(ActionWrapper(WrappedAction)); + return tcs.Task; + + void WrappedAction() + { + try + { + action(); + tcs.TrySetResult(true); + } + catch (Exception ex) + { + tcs.TrySetException(ex); + } + } + } + + private static IEnumerator ActionWrapper(Action a) + { + a(); + yield return null; + } + + private static IEnumerator ActionWrapper(Action function, T parameter) + { + yield return null; + function.Invoke(parameter); + } + } - /// - /// Locks the queue and adds the IEnumerator to the queue - /// - /// IEnumerator function that will be executed from the main thread. - public void Enqueue(IEnumerator action) - { - lock (_executionQueue) - { - var coroutine = new CoroutineWrapper(action, null, (exception) => Debug.LogError($"Exception on MainThread Queue: {exception.Message}")); - _executionQueue.Enqueue(() => { - StartCoroutine(coroutine); - }); - } - } - - /// - /// Locks the queue and adds the Action to the queue - /// - /// function that will be executed from the main thread. - public static void Enqueue(Action action) - { - Instance().Enqueue(ActionWrapper(action)); - } - - /// - /// Locks the queue and adds the Action to the queue - /// - /// function that will be executed from the main thread. - /// function parameter. - public static void Enqueue(Action action, T parameter) - { - Instance().Enqueue(ActionWrapper(action, parameter)); - } - - /// - /// Locks the queue and adds the Action to the queue, returning a Task which is completed when the action completes - /// - /// function that will be executed from the main thread. - /// A Task that can be awaited until the action completes - public Task EnqueueAsync(Action action) - { - var tcs = new TaskCompletionSource(); - - void WrappedAction() - { - try - { - action(); - tcs.TrySetResult(true); - } - catch (Exception ex) - { - tcs.TrySetException(ex); - } - } - - Enqueue(ActionWrapper(WrappedAction)); - return tcs.Task; - } - - - private static IEnumerator ActionWrapper(Action a) - { - a(); - yield return null; - } - - private static IEnumerator ActionWrapper(Action function, T parameter) - { - yield return null; - function.Invoke(parameter); - } - - private static UnityMainThreadDispatcher _instance; - - private static bool Exists() - { - return _instance != null; - } - - public static UnityMainThreadDispatcher Instance() - { - if (!Exists()) - { - throw new Exception( - "UnityMainThreadDispatcher could not find the UnityMainThreadDispatcher object. Please ensure you have added the MainThreadExecutor Prefab to your scene."); - } - - return _instance; - } - - - void Awake() - { - if (_instance == null) - { - _instance = this; - DontDestroyOnLoad(this.gameObject); - } - } - - void OnDestroy() - { - _instance = null; - } - } } \ No newline at end of file diff --git a/Runtime/Scripts/Patterns.meta b/Runtime/Scripts/Patterns.meta new file mode 100644 index 00000000..39ef4f7f --- /dev/null +++ b/Runtime/Scripts/Patterns.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d7e4a63f62b840d8a54dc1cc38df21b0 +timeCreated: 1704711364 \ No newline at end of file diff --git a/Runtime/Scripts/Patterns/SingletonMonoBehaviour.cs b/Runtime/Scripts/Patterns/SingletonMonoBehaviour.cs new file mode 100644 index 00000000..1bd2f80c --- /dev/null +++ b/Runtime/Scripts/Patterns/SingletonMonoBehaviour.cs @@ -0,0 +1,124 @@ +using UnityEngine; + +namespace TezosSDK.Patterns +{ + + public abstract class SingletonMonoBehaviour : MonoBehaviour + { + } + + /// + /// Easily allow a Singleton to be added to hierarchy at runtime with full MonoBehavior access and predictable + /// lifecycle. + /// + public abstract class SingletonMonoBehaviour : SingletonMonoBehaviour where T : MonoBehaviour + { + public static OnDestroyingDelegate OnDestroying; + public static OnInstantiateCompletedDelegate OnInstantiateCompleted; + + /// + /// Do not call this from another scope within OnDestroy(). Instead use IsInstantiated() + /// + private static T instance; //Harmless 'suggestion' appears here in some code-editors. Known issue. + + public delegate void OnDestroyingDelegate(T instance); + + public delegate void OnInstantiateCompletedDelegate(T instance); + + public static T Instance + { + //NOTE: Its recommended to wrap any calls to this getter with a IsInstanced() to prevent undesired instantiation. Optional. + get + { + if (!IsInstantiated()) + { + Instantiate(); + } + + return instance; + } + set => instance = value; + } + + protected virtual void Awake() + { + Instantiate(); + } + + protected virtual void OnDestroy() + { + } + + /// + /// Destroys all memory/references associated with the instance + /// + public static void Destroy() + { + if (!IsInstantiated()) + { + return; + } + + OnDestroying?.Invoke(instance); + + // NOTE: Use 'DestroyImmediate'. At runtime its less important, but occasionally editor classes will call Destroy(); + DestroyImmediate(instance.gameObject); + + instance = null; + } + + /// + /// NOTE: Calling this will NEVER instantiate a new instance. That is useful and safe to call in any destructors / + /// OnDestroy() + /// + /// true if is instantiated; otherwise, false. + public static bool IsInstantiated() + { + return instance != null; + } + + /// + /// Instantiate this instance. + /// 1. Attempts to find an existing GameObject that matches (There will be 0 or 1 at any time) + /// 2. Creates GameObject with name of subclass + /// 3. Persists by default (optional) + /// 4. Predictable life-cycle. + /// + private static void Instantiate() + { + if (IsInstantiated()) + { + return; + } + + var t = FindObjectOfType(); + GameObject go = null; + + if (t != null) + { + go = t.gameObject; + } + + if (go == null) + { + go = new GameObject(); + instance = go.AddComponent(); + } + else + { + instance = go.GetComponent(); + } + + go.name = instance.GetType().Name; + + //KLUGE: Must unparent/reparent before DontDestroyOnLoad to avoid error + var parent = go.transform.parent; + go.transform.SetParent(null); + DontDestroyOnLoad(go); + go.transform.SetParent(parent); + + OnInstantiateCompleted?.Invoke(instance); + } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/DesignPattern/Singleton/SingletonMonoBehaviour.cs.meta b/Runtime/Scripts/Patterns/SingletonMonoBehaviour.cs.meta similarity index 100% rename from Runtime/Scripts/DesignPattern/Singleton/SingletonMonoBehaviour.cs.meta rename to Runtime/Scripts/Patterns/SingletonMonoBehaviour.cs.meta diff --git a/Runtime/Scripts/ReadMe/Scripts/Editor/RMC.Core.ReadMe.Editor.asmdef b/Runtime/Scripts/ReadMe/Scripts/Editor/ReadMeEditor.asmdef similarity index 100% rename from Runtime/Scripts/ReadMe/Scripts/Editor/RMC.Core.ReadMe.Editor.asmdef rename to Runtime/Scripts/ReadMe/Scripts/Editor/ReadMeEditor.asmdef diff --git a/Runtime/Scripts/ReadMe/Scripts/Editor/RMC.Core.ReadMe.Editor.asmdef.meta b/Runtime/Scripts/ReadMe/Scripts/Editor/ReadMeEditor.asmdef.meta similarity index 100% rename from Runtime/Scripts/ReadMe/Scripts/Editor/RMC.Core.ReadMe.Editor.asmdef.meta rename to Runtime/Scripts/ReadMe/Scripts/Editor/ReadMeEditor.asmdef.meta diff --git a/Runtime/Scripts/ReadMe/Scripts/Editor/ReadMeEditor.cs b/Runtime/Scripts/ReadMe/Scripts/Editor/ReadMeEditor.cs index b2e03c78..07349b9e 100644 --- a/Runtime/Scripts/ReadMe/Scripts/Editor/ReadMeEditor.cs +++ b/Runtime/Scripts/ReadMe/Scripts/Editor/ReadMeEditor.cs @@ -1,266 +1,289 @@ -using UnityEngine; -using UnityEditor; - -namespace RMC.Core.ReadMe -{ - /// - /// Editor to render in the Unity Inspector - /// - [CustomEditor(typeof(ReadMe))] - [InitializeOnLoad] - public class ReadMeEditor : UnityEditor.Editor - { - private static float VSpaceBeforeAllSections = 5; - private static float vSpaceAfterEachSection = 10f; - private static float hSpace1 = 8; - private static float hSpace2 = 16; - private static float hSpace3 = 25; - private static float LayoutMinWidht = 250; //Most, not all items - private static float LayoutMaxWidth = 400; //Most, not all items - - [SerializeField] private GUIStyle TitleStyle; - [SerializeField] private GUIStyle IconStyle; - [SerializeField] private GUIStyle TextHeadingStyle; - [SerializeField] private GUIStyle TextSubheadingStyle; - [SerializeField] private GUIStyle TextBodyStyle; - [SerializeField] private GUIStyle LinkTextStyle; - - private static bool _isInActiveDevelopment = false; //set false for production - private static bool _isInitialized = false; - private ReadMeEditor() - { - _isInitialized = false; - } - - private void Initialize() - { - if (_isInitialized) - { - return; - } - - //In active development, comment this out to constantly - //refresh the style data - if (_isInActiveDevelopment) - { - Debug.Log("Initialize. TODO: Set IsInActiveDevelopment = false"); - } - else - { - _isInitialized = true; - } - - - - //Declare Styles - TitleStyle = new GUIStyle(EditorStyles.label); - TitleStyle.stretchHeight = true; - TitleStyle.wordWrap = true; - TitleStyle.fontSize = 20; - TitleStyle.margin.left = 10; - TitleStyle.alignment = TextAnchor.MiddleLeft; - - //Icon - IconStyle = new GUIStyle(EditorStyles.iconButton); - IconStyle.normal.background = null; - IconStyle.hover.background = null; - IconStyle.active.background = null; - IconStyle.margin = new RectOffset(5, 5, 5, 5); - IconStyle.alignment = TextAnchor.MiddleCenter; - - //TextHeading - TextHeadingStyle = new GUIStyle(TitleStyle); - TextHeadingStyle.wordWrap = true; - TextHeadingStyle.fontSize = 20; - - //TextSubheadingStyle - TextSubheadingStyle = new GUIStyle(TextHeadingStyle); - TextSubheadingStyle.wordWrap = true; - TextSubheadingStyle.fontStyle = FontStyle.Bold; - TextSubheadingStyle.fontSize = 18; - - //TextBodyStyle - Supports richText (https://docs.unity3d.com/2021.3/Documentation/Manual/StyledText.html) - TextBodyStyle = new GUIStyle(TextHeadingStyle); - TextBodyStyle.wordWrap = true; - TextBodyStyle.richText = true; - TextBodyStyle.fontSize = 12; - TextBodyStyle.border = new RectOffset(0, 0, 0, 0); - - //LinkTextStyle - LinkTextStyle = new GUIStyle(EditorStyles.linkLabel); - LinkTextStyle.wordWrap = false; - LinkTextStyle.stretchWidth = false; - } - - /// - /// All for "\n" in the source to be a line break in the result - /// - private string ProcessText(string s) - { - return s.Replace("\\n", "\n"); - } - - /// - /// Format the links pretty - /// - private bool ProcessLink(GUIContent label, params GUILayoutOption[] options) - { - var position = GUILayoutUtility.GetRect(label, LinkTextStyle, options); - - Handles.BeginGUI(); - Handles.color = LinkTextStyle.normal.textColor; - Handles.DrawLine(new Vector3(position.xMin, position.yMax), new Vector3(position.xMax, position.yMax)); - Handles.color = Color.white; - Handles.EndGUI(); - - EditorGUIUtility.AddCursorRect(position, MouseCursor.Link); - - return GUI.Button(position, label, LinkTextStyle); - } - - protected override void OnHeaderGUI() - { - var readMe = (ReadMe)target; - - Initialize(); - - - var iconWidth = Mathf.Min(EditorGUIUtility.currentViewWidth / 3f - 20f, 100); - var labelWidth = EditorGUIUtility.currentViewWidth - iconWidth; - var labelMinWidth = 200; - var headerHeight = 85; - iconWidth = 80; - - GUILayout.BeginHorizontal(GUILayout.MaxHeight(headerHeight)); - { - IconStyle.fixedWidth = iconWidth; - IconStyle.fixedHeight = iconWidth; - GUILayout.Box(readMe.Icon, IconStyle); - GUILayout.Label(ProcessText(readMe.Title), TitleStyle, - GUILayout.MaxWidth(labelWidth), GUILayout.MinWidth(labelMinWidth)); - } - - GUILayout.EndHorizontal(); - GUIDividerLine(); - } - - private void GUIDividerLine( int height = 1 ) - { - Rect rect = EditorGUILayout.GetControlRect(false, height ); - rect.height = height; - //Line - EditorGUI.DrawRect(rect, new Color ( 0.4f,0.4f,0.4f, .8f ) ); - - //Dropshadow - rect.y +=2 ; - EditorGUI.DrawRect(rect, new Color ( 0.2f,0.2f,0.2f, .4f ) ); - - } - - public override void OnInspectorGUI() - { - var readMe = (ReadMe)target; - - Initialize(); - - var MinWidth = Mathf.Clamp(EditorGUIUtility.currentViewWidth, LayoutMinWidht, LayoutMaxWidth); - - if (readMe != null && readMe.Sections != null) - { - GUILayout.Space(VSpaceBeforeAllSections); - - foreach (var section in readMe.Sections) - { - if (section == null) - { - continue; - } - - if (!string.IsNullOrEmpty(section.TextHeading)) - { - GUILayout.Space(5); - GUILayout.BeginHorizontal(GUILayout.Width(MinWidth)); - GUILayout.Space(hSpace1); - GUILayout.Label(section.TextHeading, TextHeadingStyle); - GUILayout.EndHorizontal(); - GUILayout.Space(3); - } - - if (!string.IsNullOrEmpty(section.TextSubheading)) - { - GUILayout.Space(5); - GUILayout.BeginHorizontal(GUILayout.Width(MinWidth)); - GUILayout.Space(hSpace2); - GUILayout.Label(section.TextSubheading, TextSubheadingStyle); - GUILayout.EndHorizontal(); - GUILayout.Space(3); - } - - if (!string.IsNullOrEmpty(section.TextBody)) - { - - GUILayout.BeginHorizontal(GUILayout.Width(MinWidth)); - GUILayout.Space(hSpace3); - GUILayout.TextField(ProcessText(section.TextBody), TextBodyStyle); - GUILayout.EndHorizontal(); - GUILayout.Space(3); - } - - if (!string.IsNullOrEmpty(section.LinkName)) - { - GUILayout.BeginHorizontal(); - GUILayout.Space(hSpace3); - GUILayout.Label("▶"); - if (ProcessLink(new GUIContent(section.LinkName))) - { - Application.OpenURL(section.LinkUrl); - } - - GUILayout.Space(1000); - GUILayout.EndHorizontal(); - - } - - if (!string.IsNullOrEmpty(section.PingObjectName)) - { - GUILayout.BeginHorizontal(); - GUILayout.Space(hSpace3); - GUILayout.Label("▶"); - if (ProcessLink(new GUIContent(section.PingObjectName))) - { - string path = AssetDatabase.GUIDToAssetPath(section.PingObjectGuid); - var objectToSelect = AssetDatabase.LoadAssetAtPath(path); - EditorGUIUtility.PingObject(objectToSelect); - - // Do not select it. - // Since For most users that would un-select the ReadMe.asset and disorient user - // Selection.activeObject = objectToSelect; - } - - GUILayout.Space(1000); - GUILayout.EndHorizontal(); - } - - if (!string.IsNullOrEmpty(section.MenuItemName)) - { - GUILayout.BeginHorizontal(); - GUILayout.Space(hSpace3); - GUILayout.Label("▶"); - if (ProcessLink(new GUIContent(section.MenuItemName))) - { - EditorApplication.ExecuteMenuItem(section.MenuItemPath); - } - - GUILayout.Space(1000); - GUILayout.EndHorizontal(); - } - - GUILayout.Space(vSpaceAfterEachSection); - } - } - - - - } - } -} +using TezosSDK.ReadMe.Scripts.Runtime; +using UnityEditor; +using UnityEngine; + +namespace TezosSDK.ReadMe.Scripts.Editor +{ + + /// + /// Editor to render in the Unity Inspector + /// + [CustomEditor(typeof(Runtime.ReadMe))] + [InitializeOnLoad] + public class ReadMeEditor : UnityEditor.Editor + { + [SerializeField] private GUIStyle TitleStyle; + [SerializeField] private GUIStyle IconStyle; + [SerializeField] private GUIStyle TextHeadingStyle; + [SerializeField] private GUIStyle TextSubheadingStyle; + [SerializeField] private GUIStyle TextBodyStyle; + [SerializeField] private GUIStyle LinkTextStyle; + + private static readonly bool _isInActiveDevelopment = false; //set false for production + private static readonly float hSpace1 = 8; + private static readonly float hSpace2 = 16; + private static readonly float hSpace3 = 25; + private static readonly float LayoutMaxWidth = 400; //Most, not all items + private static readonly float LayoutMinWidht = 250; //Most, not all items + private static readonly float vSpaceAfterEachSection = 10f; + private static readonly float VSpaceBeforeAllSections = 5; + private static bool _isInitialized; + + private ReadMeEditor() + { + _isInitialized = false; + } + + public override void OnInspectorGUI() + { + var readMe = (Runtime.ReadMe)target; + + Initialize(); + + var MinWidth = Mathf.Clamp(EditorGUIUtility.currentViewWidth, LayoutMinWidht, LayoutMaxWidth); + + if (readMe != null && readMe.Sections != null) + { + GUILayout.Space(VSpaceBeforeAllSections); + + foreach (var section in readMe.Sections) + { + if (section == null) + { + continue; + } + + if (!string.IsNullOrEmpty(section.TextHeading)) + { + GUILayout.Space(5); + GUILayout.BeginHorizontal(GUILayout.Width(MinWidth)); + GUILayout.Space(hSpace1); + GUILayout.Label(section.TextHeading, TextHeadingStyle); + GUILayout.EndHorizontal(); + GUILayout.Space(3); + } + + if (!string.IsNullOrEmpty(section.TextSubheading)) + { + GUILayout.Space(5); + GUILayout.BeginHorizontal(GUILayout.Width(MinWidth)); + GUILayout.Space(hSpace2); + GUILayout.Label(section.TextSubheading, TextSubheadingStyle); + GUILayout.EndHorizontal(); + GUILayout.Space(3); + } + + if (!string.IsNullOrEmpty(section.TextBody)) + { + GUILayout.BeginHorizontal(GUILayout.Width(MinWidth)); + GUILayout.Space(hSpace3); + GUILayout.TextField(ProcessText(section.TextBody), TextBodyStyle); + GUILayout.EndHorizontal(); + GUILayout.Space(3); + } + + if (!string.IsNullOrEmpty(section.LinkName)) + { + GUILayout.BeginHorizontal(); + GUILayout.Space(hSpace3); + GUILayout.Label("▶"); + + if (ProcessLink(new GUIContent(section.LinkName))) + { + Application.OpenURL(section.LinkUrl); + } + + GUILayout.Space(1000); + GUILayout.EndHorizontal(); + } + + if (!string.IsNullOrEmpty(section.PingObjectName)) + { + GUILayout.BeginHorizontal(); + GUILayout.Space(hSpace3); + GUILayout.Label("▶"); + + if (ProcessLink(new GUIContent(section.PingObjectName))) + { + var path = AssetDatabase.GUIDToAssetPath(section.PingObjectGuid); + var objectToSelect = AssetDatabase.LoadAssetAtPath(path); + EditorGUIUtility.PingObject(objectToSelect); + + // Do not select it. + // Since For most users that would un-select the ReadMe.asset and disorient user + // Selection.activeObject = objectToSelect; + } + + GUILayout.Space(1000); + GUILayout.EndHorizontal(); + } + + if (!string.IsNullOrEmpty(section.MenuItemName)) + { + GUILayout.BeginHorizontal(); + GUILayout.Space(hSpace3); + GUILayout.Label("▶"); + + if (ProcessLink(new GUIContent(section.MenuItemName))) + { + EditorApplication.ExecuteMenuItem(section.MenuItemPath); + } + + GUILayout.Space(1000); + GUILayout.EndHorizontal(); + } + + GUILayout.Space(vSpaceAfterEachSection); + } + } + } + + protected override void OnHeaderGUI() + { + var readMe = (Runtime.ReadMe)target; + + Initialize(); + + var iconWidth = Mathf.Min(EditorGUIUtility.currentViewWidth / 3f - 20f, 100); + var labelWidth = EditorGUIUtility.currentViewWidth - iconWidth; + var labelMinWidth = 200; + var headerHeight = 85; + iconWidth = 80; + + GUILayout.BeginHorizontal(GUILayout.MaxHeight(headerHeight)); + + { + IconStyle.fixedWidth = iconWidth; + IconStyle.fixedHeight = iconWidth; + GUILayout.Box(readMe.Icon, IconStyle); + + GUILayout.Label(ProcessText(readMe.Title), TitleStyle, GUILayout.MaxWidth(labelWidth), + GUILayout.MinWidth(labelMinWidth)); + } + + GUILayout.EndHorizontal(); + GUIDividerLine(); + } + + private void GUIDividerLine(int height = 1) + { + var rect = EditorGUILayout.GetControlRect(false, height); + rect.height = height; + //Line + EditorGUI.DrawRect(rect, new Color(0.4f, 0.4f, 0.4f, .8f)); + + //Dropshadow + rect.y += 2; + EditorGUI.DrawRect(rect, new Color(0.2f, 0.2f, 0.2f, .4f)); + } + + private void Initialize() + { + if (_isInitialized) + { + return; + } + + //In active development, comment this out to constantly + //refresh the style data + if (_isInActiveDevelopment) + { + Debug.Log("Initialize. TODO: Set IsInActiveDevelopment = false"); + } + else + { + _isInitialized = true; + } + + //Declare Styles + TitleStyle = new GUIStyle(EditorStyles.label) + { + stretchHeight = true, + wordWrap = true, + fontSize = 20, + margin = + { + left = 10 + }, + alignment = TextAnchor.MiddleLeft + }; + + //Icon + IconStyle = new GUIStyle(EditorStyles.iconButton) + { + normal = + { + background = null + }, + hover = + { + background = null + }, + active = + { + background = null + }, + margin = new RectOffset(5, 5, 5, 5), + alignment = TextAnchor.MiddleCenter + }; + + //TextHeading + TextHeadingStyle = new GUIStyle(TitleStyle) + { + wordWrap = true, + fontSize = 20 + }; + + //TextSubheadingStyle + TextSubheadingStyle = new GUIStyle(TextHeadingStyle) + { + wordWrap = true, + fontStyle = FontStyle.Bold, + fontSize = 18 + }; + + //TextBodyStyle - Supports richText (https://docs.unity3d.com/2021.3/Documentation/Manual/StyledText.html) + TextBodyStyle = new GUIStyle(TextHeadingStyle) + { + wordWrap = true, + richText = true, + fontSize = 12, + border = new RectOffset(0, 0, 0, 0) + }; + + //LinkTextStyle + LinkTextStyle = new GUIStyle(EditorStyles.linkLabel) + { + wordWrap = false, + stretchWidth = false + }; + } + + /// + /// Format the links pretty + /// + private bool ProcessLink(GUIContent label, params GUILayoutOption[] options) + { + var position = GUILayoutUtility.GetRect(label, LinkTextStyle, options); + + Handles.BeginGUI(); + Handles.color = LinkTextStyle.normal.textColor; + Handles.DrawLine(new Vector3(position.xMin, position.yMax), new Vector3(position.xMax, position.yMax)); + Handles.color = Color.white; + Handles.EndGUI(); + + EditorGUIUtility.AddCursorRect(position, MouseCursor.Link); + + return GUI.Button(position, label, LinkTextStyle); + } + + /// + /// All for "\n" in the source to be a line break in the result + /// + private string ProcessText(string s) + { + return s.Replace("\\n", "\n"); + } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/ReadMe/Scripts/Editor/ReadMeHelper.cs b/Runtime/Scripts/ReadMe/Scripts/Editor/ReadMeHelper.cs index 2c40e494..1072d3d7 100644 --- a/Runtime/Scripts/ReadMe/Scripts/Editor/ReadMeHelper.cs +++ b/Runtime/Scripts/ReadMe/Scripts/Editor/ReadMeHelper.cs @@ -1,102 +1,102 @@ -using System.Collections.Generic; -using System.IO; -using UnityEngine; -using UnityEditor; - -namespace RMC.Core.ReadMe -{ - /// - /// Helper for - /// - public static class ReadMeHelper - { - - public static void RestartUnityEditor() - { - EditorApplication.OpenProject(Directory.GetCurrentDirectory()); - } - - - public static List SelectReadmes() - { - List readMes = GetAllReadMes(); - - foreach (ReadMe readMe in readMes) - { - SelectObject(readMe); - PingObject(readMe); - } - - return readMes; - } - - - - public static void SelectObject (UnityEngine.Object obj) - { - EditorGUIUtility.PingObject(obj); - Selection.objects = new[] { obj }; - Selection.activeObject = obj; - } - - - public static void PingObject (UnityEngine.Object obj) - { - EditorGUIUtility.PingObject(obj); - } - - - public static bool SelectReadmes_ValidationFunction() - { - return GetAllReadMes().Count > 0; - } - - - - static List GetAllReadMes() - { - AssetDatabase.Refresh(); - var ids = AssetDatabase.FindAssets("ReadMe t:ReadMe"); - List results = new List(); - - foreach (string guid in ids) - { - var readmeObject = AssetDatabase.LoadMainAssetAtPath(AssetDatabase.GUIDToAssetPath(guid)); - ReadMe readMe = (ReadMe)readmeObject; - results.Add(readMe); - } - return results; ; - } - - public static void CopyGuidToClipboard() - { - // Support only if exactly 1 object is selected in project window - var objs = Selection.objects; - if (objs.Length != 1) - { - return; - } - - var obj = objs[0]; - string path = AssetDatabase.GetAssetPath(obj); - GUID guid = AssetDatabase.GUIDFromAssetPath(path); - GUIUtility.systemCopyBuffer = guid.ToString(); - Debug.Log($"CopyGuidToClipboard() success! Value '{GUIUtility.systemCopyBuffer}' copied to clipboard."); - - } - - public static bool CopyGuidToClipboard_ValidationFunction() - { - // Support only if exactly 1 object is selected in project window - var objs = Selection.objects; - return objs.Length == 1; - } - - public static void CreateNewReadMe(string newFilename = "") - { - ScriptableObjectUtility.CreateScriptableObject(typeof (ReadMe), newFilename); - } - - - } +using System.Collections.Generic; +using System.IO; +using TezosSDK.ReadMe.Scripts.Runtime; +using UnityEditor; +using UnityEngine; + +namespace TezosSDK.ReadMe.Scripts.Editor +{ + + /// + /// Helper for + /// + public static class ReadMeHelper + { + public static void RestartUnityEditor() + { + EditorApplication.OpenProject(Directory.GetCurrentDirectory()); + } + + public static List SelectReadmes() + { + var readMes = GetAllReadMes(); + + foreach (var readMe in readMes) + { + SelectObject(readMe); + PingObject(readMe); + } + + return readMes; + } + + public static void SelectObject(Object obj) + { + EditorGUIUtility.PingObject(obj); + + Selection.objects = new[] + { + obj + }; + + Selection.activeObject = obj; + } + + public static void PingObject(Object obj) + { + EditorGUIUtility.PingObject(obj); + } + + public static bool SelectReadmes_ValidationFunction() + { + return GetAllReadMes().Count > 0; + } + + private static List GetAllReadMes() + { + AssetDatabase.Refresh(); + var ids = AssetDatabase.FindAssets("ReadMe t:ReadMe"); + var results = new List(); + + foreach (var guid in ids) + { + var readmeObject = AssetDatabase.LoadMainAssetAtPath(AssetDatabase.GUIDToAssetPath(guid)); + var readMe = (Runtime.ReadMe)readmeObject; + results.Add(readMe); + } + + return results; + ; + } + + public static void CopyGuidToClipboard() + { + // Support only if exactly 1 object is selected in project window + var objs = Selection.objects; + + if (objs.Length != 1) + { + return; + } + + var obj = objs[0]; + var path = AssetDatabase.GetAssetPath(obj); + var guid = AssetDatabase.GUIDFromAssetPath(path); + GUIUtility.systemCopyBuffer = guid.ToString(); + Debug.Log($"CopyGuidToClipboard() success! Value '{GUIUtility.systemCopyBuffer}' copied to clipboard."); + } + + public static bool CopyGuidToClipboard_ValidationFunction() + { + // Support only if exactly 1 object is selected in project window + var objs = Selection.objects; + return objs.Length == 1; + } + + public static void CreateNewReadMe(string newFilename = "") + { + ScriptableObjectUtility.CreateScriptableObject(typeof(Runtime.ReadMe), newFilename); + } + } + } \ No newline at end of file diff --git a/Runtime/Scripts/ReadMe/Scripts/Editor/ReadMeReflectionUtility.cs b/Runtime/Scripts/ReadMe/Scripts/Editor/ReadMeReflectionUtility.cs index 404d7842..67f4a93b 100644 --- a/Runtime/Scripts/ReadMe/Scripts/Editor/ReadMeReflectionUtility.cs +++ b/Runtime/Scripts/ReadMe/Scripts/Editor/ReadMeReflectionUtility.cs @@ -1,58 +1,64 @@ -using System; -using UnityEditor; -using UnityEngine; - -namespace RMC.Core.ReadMe -{ - /// - /// Reflection is string-based and Unity-version-based and thus, notoriously fragile. - /// This wraps uses for to limit risk and help maintainability - /// - public static class ReadMeReflectionUtility - { - /// - /// Load a unity editor layout by path - /// - /// - public static void UnityEditor_WindowLayout_LoadWindowLayout(string path) - { - if (string.IsNullOrEmpty(path)) - { - Debug.LogWarning($"UnityEditor_WindowLayout_LoadWindowLayout() failed for path = {path}."); - return; - } - - var assembly = typeof(EditorApplication).Assembly; - var windowLayoutType = assembly.GetType("UnityEditor.WindowLayout", true); - var methods = windowLayoutType.GetMethods(); - - for (int i = 0; i < methods.Length; i++) - { - if (methods[i].Name == "LoadWindowLayout") - { - // As with all Unity reflection, this is relatively fragile. - // Use test code here if/when needed to debug. - // - // Debug.Log("methods: " + methods[i].Name + " and " + methods[i].GetParameters().Length + " \n\n"); - // for (int j = 0; j < methods[i].GetParameters().Length; j++) - // { - // Debug.Log("\tparams: " + methods[i].GetParameters()[j].Name + " and " + methods[i].GetParameters()[j].ParameterType + " \n\n"); - // } - - // Tested with success in Unity 2020.3.34f1 - if (methods[i].GetParameters().Length == 2) - { - try - { - methods[i].Invoke(null, new object[] { path, false }); - } - catch (Exception e) - { - Debug.LogError(e.Message); - } - } - } - } - } - } -} +using System; +using TezosSDK.ReadMe.Scripts.Runtime; +using UnityEditor; +using UnityEngine; + +namespace TezosSDK.ReadMe.Scripts.Editor +{ + + /// + /// Reflection is string-based and Unity-version-based and thus, notoriously fragile. + /// This wraps uses for to limit risk and help maintainability + /// + public static class ReadMeReflectionUtility + { + /// + /// Load a unity editor layout by path + /// + /// + public static void UnityEditor_WindowLayout_LoadWindowLayout(string path) + { + if (string.IsNullOrEmpty(path)) + { + Debug.LogWarning($"UnityEditor_WindowLayout_LoadWindowLayout() failed for path = {path}."); + return; + } + + var assembly = typeof(EditorApplication).Assembly; + var windowLayoutType = assembly.GetType("UnityEditor.WindowLayout", true); + var methods = windowLayoutType.GetMethods(); + + for (var i = 0; i < methods.Length; i++) + { + if (methods[i].Name == "LoadWindowLayout") + { + // As with all Unity reflection, this is relatively fragile. + // Use test code here if/when needed to debug. + // + // Debug.Log("methods: " + methods[i].Name + " and " + methods[i].GetParameters().Length + " \n\n"); + // for (int j = 0; j < methods[i].GetParameters().Length; j++) + // { + // Debug.Log("\tparams: " + methods[i].GetParameters()[j].Name + " and " + methods[i].GetParameters()[j].ParameterType + " \n\n"); + // } + + // Tested with success in Unity 2020.3.34f1 + if (methods[i].GetParameters().Length == 2) + { + try + { + methods[i].Invoke(null, new object[] + { + path, false + }); + } + catch (Exception e) + { + Debug.LogError(e.Message); + } + } + } + } + } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/ReadMe/Scripts/Editor/ScriptableObjectUtility.cs b/Runtime/Scripts/ReadMe/Scripts/Editor/ScriptableObjectUtility.cs index 27c51aaa..76c31da9 100644 --- a/Runtime/Scripts/ReadMe/Scripts/Editor/ScriptableObjectUtility.cs +++ b/Runtime/Scripts/ReadMe/Scripts/Editor/ScriptableObjectUtility.cs @@ -1,44 +1,47 @@ -using System; -using System.IO; -using System.Reflection; -using UnityEngine; -using UnityEditor; - -namespace RMC.Core.ReadMe -{ - /// - /// Helper for - /// - - public class ScriptableObjectUtility : ScriptableObject - { - public static void CreateScriptableObject(Type type, string newFilename = "") - { - UnityEngine.Object asset = (UnityEngine.Object)ScriptableObject.CreateInstance(type); - - string path = AssetDatabase.GetAssetPath(Selection.activeObject); - if (path == "") - { - path = "Assets"; - } - else if (Path.GetExtension(path) != "") - { - path = path.Replace(Path.GetFileName(AssetDatabase.GetAssetPath(Selection.activeObject)), ""); - } - - // Use the name passed in, or a default - if (string.IsNullOrEmpty(newFilename)) - { - newFilename = $"New {type.Name}"; - } - - string assetPathAndName = AssetDatabase.GenerateUniqueAssetPath(path + "/" + newFilename + ".asset"); - - AssetDatabase.CreateAsset(asset, assetPathAndName); - AssetDatabase.SaveAssets(); - AssetDatabase.Refresh(); - EditorUtility.FocusProjectWindow(); - Selection.activeObject = asset; - } - } +using System; +using System.IO; +using TezosSDK.ReadMe.Scripts.Runtime; +using UnityEditor; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace TezosSDK.ReadMe.Scripts.Editor +{ + + /// + /// Helper for + /// + public class ScriptableObjectUtility : ScriptableObject + { + public static void CreateScriptableObject(Type type, string newFilename = "") + { + Object asset = CreateInstance(type); + + var path = AssetDatabase.GetAssetPath(Selection.activeObject); + + if (path == "") + { + path = "Assets"; + } + else if (Path.GetExtension(path) != "") + { + path = path.Replace(Path.GetFileName(AssetDatabase.GetAssetPath(Selection.activeObject)), ""); + } + + // Use the name passed in, or a default + if (string.IsNullOrEmpty(newFilename)) + { + newFilename = $"New {type.Name}"; + } + + var assetPathAndName = AssetDatabase.GenerateUniqueAssetPath(path + "/" + newFilename + ".asset"); + + AssetDatabase.CreateAsset(asset, assetPathAndName); + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + EditorUtility.FocusProjectWindow(); + Selection.activeObject = asset; + } + } + } \ No newline at end of file diff --git a/Runtime/Scripts/ReadMe/Scripts/Runtime/ReadMe.cs b/Runtime/Scripts/ReadMe/Scripts/Runtime/ReadMe.cs index 855e4a08..601d5284 100644 --- a/Runtime/Scripts/ReadMe/Scripts/Runtime/ReadMe.cs +++ b/Runtime/Scripts/ReadMe/Scripts/Runtime/ReadMe.cs @@ -1,48 +1,56 @@ -using System; -using UnityEngine; -using UnityEngine.Serialization; - -namespace RMC.Core.ReadMe -{ - /// - /// Custom-formatted ReadMe file with markdown-like display. - /// - /// Inspired by Unity's "Learn" Sample Projects - /// - /// - public class ReadMe : ScriptableObject - { - //Here are TEMPORARY defaults. Set to any value (or "") in the INSPECTOR as desired. - - //Header - [FormerlySerializedAs("title")] public string Title = "ReadMe"; - public Texture2D Icon; - - //Body - public Section[] Sections = new[] { new Section(), new Section() }; - - //History - public bool HasLoadedLayout = false; - - [Serializable] - public class Section - { - //Here are TEMPORARY defaults. Set to any value (or "") in the INSPECTOR as desired. - public string TextHeading = "Text Heading"; - public string TextSubheading = "Text Subheading"; - public string TextBody = "Text Body which supports rich text including bold, line\nbreaks, italics, & colors."; - - //Set LinkName to "" to disable - public string LinkName = "Link Text"; - public string LinkUrl = "http://www.Google.com"; - - //Set PingObjectName to "" to disable - public string PingObjectName = "Ping Object Name"; - public string PingObjectGuid = "5089deeea4e23e14681cf62c947ca464"; - - //Set MenuItemName to "" to disable - public string MenuItemName = "Menu Item Name"; - public string MenuItemPath = "Window/Package Manager"; - } - } +using System; +using UnityEngine; +using UnityEngine.Serialization; + +namespace TezosSDK.ReadMe.Scripts.Runtime +{ + + /// + /// Custom-formatted ReadMe file with markdown-like display. + /// Inspired by Unity's "Learn" Sample Projects + /// + public class ReadMe : ScriptableObject + { + //Here are TEMPORARY defaults. Set to any value (or "") in the INSPECTOR as desired. + + //Header + [FormerlySerializedAs("title")] public string Title = "ReadMe"; + public Texture2D Icon; + + //Body + public Section[] Sections = + { + new(), new() + }; + + //History + public bool HasLoadedLayout; + + #region Nested Types + + [Serializable] + public class Section + { + //Here are TEMPORARY defaults. Set to any value (or "") in the INSPECTOR as desired. + public string TextHeading = "Text Heading"; + public string TextSubheading = "Text Subheading"; + public string TextBody = + "Text Body which supports rich text including bold, line\nbreaks, italics, & colors."; + + //Set LinkName to "" to disable + public string LinkName = "Link Text"; + public string LinkUrl = "http://www.Google.com"; + + //Set PingObjectName to "" to disable + public string PingObjectName = "Ping Object Name"; + public string PingObjectGuid = "5089deeea4e23e14681cf62c947ca464"; + + //Set MenuItemName to "" to disable + public string MenuItemName = "Menu Item Name"; + public string MenuItemPath = "Window/Package Manager"; + } + + #endregion + } + } \ No newline at end of file diff --git a/Runtime/Scripts/ReadMe/Scripts/Runtime/ReadMeConstants.cs b/Runtime/Scripts/ReadMe/Scripts/Runtime/ReadMeConstants.cs index 71de3723..df7cf130 100644 --- a/Runtime/Scripts/ReadMe/Scripts/Runtime/ReadMeConstants.cs +++ b/Runtime/Scripts/ReadMe/Scripts/Runtime/ReadMeConstants.cs @@ -1,25 +1,25 @@ - -namespace RMC.Core.ReadMe -{ - /// - /// Common values for - /// - public static class ReadMeConstants - { - // Properties ------------------------------------ - - // Fields ---------------------------------------- - public const string MenuItemPathCreate = CompanyName + "/" + ProjectName; - public const string MenuItemPathWindow = "Window/" + CompanyName + "/" + ProjectName; - - // - public const string CompanyName = "RMC"; - public const string ProjectName = "ReadMe"; - public const string Open = "Open"; - - // - public const int MenuPriority_Primary = 0; //put above divider line - public const int MenuPriority_Secondary = 100; //put below divider line - - } -} +namespace TezosSDK.ReadMe.Scripts.Runtime +{ + + /// + /// Common values for + /// + public static class ReadMeConstants + { + // Properties ------------------------------------ + + // Fields ---------------------------------------- + public const string MenuItemPathCreate = CompanyName + "/" + ProjectName; + public const string MenuItemPathWindow = "Window/" + CompanyName + "/" + ProjectName; + + // + public const string CompanyName = "RMC"; + public const string ProjectName = "ReadMe"; + public const string Open = "Open"; + + // + public const int MenuPriority_Primary = 0; //put above divider line + public const int MenuPriority_Secondary = 100; //put below divider line + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/ReadMe/Scripts/Runtime/RMC.Core.ReadMe.Runtime.asmdef b/Runtime/Scripts/ReadMe/Scripts/Runtime/ReadMeRuntime.asmdef similarity index 100% rename from Runtime/Scripts/ReadMe/Scripts/Runtime/RMC.Core.ReadMe.Runtime.asmdef rename to Runtime/Scripts/ReadMe/Scripts/Runtime/ReadMeRuntime.asmdef diff --git a/Runtime/Scripts/ReadMe/Scripts/Runtime/RMC.Core.ReadMe.Runtime.asmdef.meta b/Runtime/Scripts/ReadMe/Scripts/Runtime/ReadMeRuntime.asmdef.meta similarity index 100% rename from Runtime/Scripts/ReadMe/Scripts/Runtime/RMC.Core.ReadMe.Runtime.asmdef.meta rename to Runtime/Scripts/ReadMe/Scripts/Runtime/ReadMeRuntime.asmdef.meta diff --git a/Runtime/Scripts/Tezos.meta b/Runtime/Scripts/Tezos.meta index 07769d65..b0d833cf 100644 --- a/Runtime/Scripts/Tezos.meta +++ b/Runtime/Scripts/Tezos.meta @@ -1,8 +1,3 @@ fileFormatVersion: 2 -guid: 7ca6d9dc859824a24b4c0bcdd6acaf85 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: +guid: 5cc69e49156d40b18acf43b5b4290ba1 +timeCreated: 1704711326 \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/API/ITezosAPI.cs b/Runtime/Scripts/Tezos/API/ITezosAPI.cs deleted file mode 100644 index 0a36888f..00000000 --- a/Runtime/Scripts/Tezos/API/ITezosAPI.cs +++ /dev/null @@ -1,113 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text.Json; -using TezosSDK.Tezos.API.Models; -using TezosSDK.Tezos.API.Models.Filters; -using TezosSDK.Tezos.API.Models.Tokens; - -namespace TezosSDK.Tezos.API -{ - public interface ITezosAPI - { - /// - /// An IEnumerator for reading the account's balance - /// Can be called in a StartCoroutine() - /// - /// callback action that runs with the float balance is fetched - /// tz address - /// - public IEnumerator GetTezosBalance(Action callback, string address); - - /// - /// An IEnumerator for reading data from a contract view - /// Can be called in a StartCoroutine() - /// - /// destination address of the smart contract - /// entry point used in the smart contract - /// parameters called on the entry point - /// callback action that runs with the json data is fetched - /// - public IEnumerator ReadView(string contractAddress, - string entrypoint, - string input, - Action callback); - - // Gets all tokens currently owned by a given address. - public IEnumerator GetTokensForOwner( - Action> callback, - string owner, - bool withMetadata, - long maxItems, - TokensForOwnerOrder orderBy); - - // Get the owner(s) for a token. - public IEnumerator GetOwnersForToken( - Action> callback, - string contractAddress, - uint tokenId, - long maxItems, - OwnersForTokenOrder orderBy); - - // Gets all owners for a given token contract. - public IEnumerator GetOwnersForContract( - Action> callback, - string contractAddress, - long maxItems, - OwnersForContractOrder orderBy); - - // Checks whether a wallet holds a token in a given contract. - public IEnumerator IsHolderOfContract( - Action callback, - string wallet, - string contractAddress); - - // Checks whether a wallet holds a particular token. - public IEnumerator IsHolderOfToken( - Action callback, - string wallet, - string contractAddress, - uint tokenId); - - // Gets the metadata associated with a given token. - public IEnumerator GetTokenMetadata( - Action callback, - string contractAddress, - uint tokenId); - - // Queries token high-level collection/contract level information. - public IEnumerator GetContractMetadata( - Action callback, - string contractAddress); - - // Gets all tokens for a given token contract. - public IEnumerator GetTokensForContract( - Action> callback, - string contractAddress, - bool withMetadata, - long maxItems, - TokensForContractOrder orderBy); - - // Returns operation status: true if applied, false if failed, null (or HTTP 204) if doesn't exist. - public IEnumerator GetOperationStatus( - Action callback, - string operationHash); - - // Returns a level of the block closest to the current timestamp. - public IEnumerator GetLatestBlockLevel( - Action callback); - - // Get account's counter. - public IEnumerator GetAccountCounter( - Action callback, - string address); - - // Get list of originated contracts by creator - public IEnumerator GetOriginatedContractsForOwner( - Action> callback, - string creator, - string codeHash, - long maxItems, - OriginatedContractsForOwnerOrder orderBy); - } -} \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/API/Models/Abstract.meta b/Runtime/Scripts/Tezos/API/Models/Abstract.meta deleted file mode 100644 index 9dbee163..00000000 --- a/Runtime/Scripts/Tezos/API/Models/Abstract.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 4b01afbf096b46999bae1a6d70fa6972 -timeCreated: 1686818871 \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/API/Models/Abstract/IFA2.cs b/Runtime/Scripts/Tezos/API/Models/Abstract/IFA2.cs deleted file mode 100644 index d0d54862..00000000 --- a/Runtime/Scripts/Tezos/API/Models/Abstract/IFA2.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System; -using TezosSDK.Tezos.API.Models.Tokens; - -namespace TezosSDK.Tezos.API.Models.Abstract -{ - public interface IFA2 - { - string Address { get; set; } - int TokensCount { get; set; } - DateTime LastActivityTime { get; set; } - - /// - /// Mint new token on current contract. - /// - /// - /// Executes after token minted with minted . - /// - /// . - /// Address on which token will be minted. - /// Amount of minted tokens. - void Mint( - Action completedCallback, - TokenMetadata tokenMetadata, - string destination, - int amount); - - /// - /// Transfer token from current address to destination. - /// - /// Executes after token transferred with transaction hash. - /// Receiver of a token. - /// ID of token. - /// Amount of transferred tokens. - void Transfer( - Action completedCallback, - string destination, - int tokenId, - int amount); - - /// - /// Deploy new instance of FA2 contract. - /// - /// Executes after contract deployed with contract address. - void Deploy(Action completedCallback); - } -} \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/API/Models/Abstract/IFA2.cs.meta b/Runtime/Scripts/Tezos/API/Models/Abstract/IFA2.cs.meta deleted file mode 100644 index a05ac416..00000000 --- a/Runtime/Scripts/Tezos/API/Models/Abstract/IFA2.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 8bd69022a01a4166b297a682099a239c -timeCreated: 1686819013 \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/API/Models/Alias.cs b/Runtime/Scripts/Tezos/API/Models/Alias.cs index ba4e4af5..55f712f1 100644 --- a/Runtime/Scripts/Tezos/API/Models/Alias.cs +++ b/Runtime/Scripts/Tezos/API/Models/Alias.cs @@ -2,17 +2,19 @@ namespace TezosSDK.Tezos.API.Models { - public class Alias - { - /// - /// Account alias name (off-chain data). - /// - [JsonPropertyName("alias")] - public string Name { get; set; } - /// - /// Account address (public key hash). - /// - public string Address { get; set; } - } + public class Alias + { + /// + /// Account alias name (off-chain data). + /// + [JsonPropertyName("alias")] + public string Name { get; set; } + + /// + /// Account address (public key hash). + /// + public string Address { get; set; } + } + } \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/API/Models/Filters/OriginatedContractsForOwnerOrder.cs b/Runtime/Scripts/Tezos/API/Models/Filters/OriginatedContractsForOwnerOrder.cs index 1e9af419..db345417 100644 --- a/Runtime/Scripts/Tezos/API/Models/Filters/OriginatedContractsForOwnerOrder.cs +++ b/Runtime/Scripts/Tezos/API/Models/Filters/OriginatedContractsForOwnerOrder.cs @@ -1,20 +1,22 @@ namespace TezosSDK.Tezos.API.Models.Filters { - public abstract record OriginatedContractsForOwnerOrder - { - public record Default(long lastId) : OriginatedContractsForOwnerOrder - { - public long lastId { get; } = lastId; - } - public record ByLastActivityTimeAsc(long page) : OriginatedContractsForOwnerOrder - { - public long page { get; } = page; - } + public abstract record OriginatedContractsForOwnerOrder + { + public record Default(long lastId) : OriginatedContractsForOwnerOrder + { + public long lastId { get; } = lastId; + } + + public record ByLastActivityTimeAsc(long page) : OriginatedContractsForOwnerOrder + { + public long page { get; } = page; + } + + public record ByLastActivityTimeDesc(long page) : OriginatedContractsForOwnerOrder + { + public long page { get; } = page; + } + } - public record ByLastActivityTimeDesc(long page) : OriginatedContractsForOwnerOrder - { - public long page { get; } = page; - } - } } \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/API/Models/Filters/OwnersForContractOrder.cs b/Runtime/Scripts/Tezos/API/Models/Filters/OwnersForContractOrder.cs index c01239c2..b27e6f48 100644 --- a/Runtime/Scripts/Tezos/API/Models/Filters/OwnersForContractOrder.cs +++ b/Runtime/Scripts/Tezos/API/Models/Filters/OwnersForContractOrder.cs @@ -1,20 +1,22 @@ namespace TezosSDK.Tezos.API.Models.Filters { - public abstract record OwnersForContractOrder - { - public record Default(long lastId) : OwnersForContractOrder - { - public long lastId { get; } = lastId; - } - public record ByLastTimeAsc(long page) : OwnersForContractOrder - { - public long page { get; } = page; - } + public abstract record OwnersForContractOrder + { + public record Default(long lastId) : OwnersForContractOrder + { + public long lastId { get; } = lastId; + } + + public record ByLastTimeAsc(long page) : OwnersForContractOrder + { + public long page { get; } = page; + } + + public record ByLastTimeDesc(long page) : OwnersForContractOrder + { + public long page { get; } = page; + } + } - public record ByLastTimeDesc(long page) : OwnersForContractOrder - { - public long page { get; } = page; - } - } } \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/API/Models/Filters/OwnersForTokenOrder.cs b/Runtime/Scripts/Tezos/API/Models/Filters/OwnersForTokenOrder.cs index 84f228b7..3448e9ff 100644 --- a/Runtime/Scripts/Tezos/API/Models/Filters/OwnersForTokenOrder.cs +++ b/Runtime/Scripts/Tezos/API/Models/Filters/OwnersForTokenOrder.cs @@ -1,30 +1,32 @@ namespace TezosSDK.Tezos.API.Models.Filters { - public abstract record OwnersForTokenOrder - { - public record Default(long lastId) : OwnersForTokenOrder - { - public long lastId { get; } = lastId; - } - public record ByBalanceAsc(long page) : OwnersForTokenOrder - { - public long page { get; } = page; - } + public abstract record OwnersForTokenOrder + { + public record Default(long lastId) : OwnersForTokenOrder + { + public long lastId { get; } = lastId; + } - public record ByBalanceDesc(long page) : OwnersForTokenOrder - { - public long page { get; } = page; - } + public record ByBalanceAsc(long page) : OwnersForTokenOrder + { + public long page { get; } = page; + } - public record ByLastTimeAsc(long page) : OwnersForTokenOrder - { - public long page { get; } = page; - } + public record ByBalanceDesc(long page) : OwnersForTokenOrder + { + public long page { get; } = page; + } + + public record ByLastTimeAsc(long page) : OwnersForTokenOrder + { + public long page { get; } = page; + } + + public record ByLastTimeDesc(long page) : OwnersForTokenOrder + { + public long page { get; } = page; + } + } - public record ByLastTimeDesc(long page) : OwnersForTokenOrder - { - public long page { get; } = page; - } - } } \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/API/Models/Filters/TokensForContractOrder.cs b/Runtime/Scripts/Tezos/API/Models/Filters/TokensForContractOrder.cs index ef19bfca..51044998 100644 --- a/Runtime/Scripts/Tezos/API/Models/Filters/TokensForContractOrder.cs +++ b/Runtime/Scripts/Tezos/API/Models/Filters/TokensForContractOrder.cs @@ -1,30 +1,32 @@ namespace TezosSDK.Tezos.API.Models.Filters { - public abstract record TokensForContractOrder - { - public record Default(long lastId) : TokensForContractOrder - { - public long lastId { get; } = lastId; - } - public record ByHoldersCountAsc(long page) : TokensForContractOrder - { - public long page { get; } = page; - } + public abstract record TokensForContractOrder + { + public record Default(long lastId) : TokensForContractOrder + { + public long lastId { get; } = lastId; + } - public record ByHoldersCountDesc(long page) : TokensForContractOrder - { - public long page { get; } = page; - } + public record ByHoldersCountAsc(long page) : TokensForContractOrder + { + public long page { get; } = page; + } - public record ByLastTimeAsc(long page) : TokensForContractOrder - { - public long page { get; } = page; - } + public record ByHoldersCountDesc(long page) : TokensForContractOrder + { + public long page { get; } = page; + } + + public record ByLastTimeAsc(long page) : TokensForContractOrder + { + public long page { get; } = page; + } + + public record ByLastTimeDesc(long page) : TokensForContractOrder + { + public long page { get; } = page; + } + } - public record ByLastTimeDesc(long page) : TokensForContractOrder - { - public long page { get; } = page; - } - } } \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/API/Models/Filters/TokensForOwnerOrder.cs b/Runtime/Scripts/Tezos/API/Models/Filters/TokensForOwnerOrder.cs index c6feb24f..0abcf721 100644 --- a/Runtime/Scripts/Tezos/API/Models/Filters/TokensForOwnerOrder.cs +++ b/Runtime/Scripts/Tezos/API/Models/Filters/TokensForOwnerOrder.cs @@ -1,20 +1,22 @@ namespace TezosSDK.Tezos.API.Models.Filters { - public abstract record TokensForOwnerOrder - { - public record Default(long lastId) : TokensForOwnerOrder - { - public long lastId { get; } = lastId; - } - public record ByLastTimeAsc(long page) : TokensForOwnerOrder - { - public long page { get; } = page; - } + public abstract record TokensForOwnerOrder + { + public record Default(long lastId) : TokensForOwnerOrder + { + public long lastId { get; } = lastId; + } + + public record ByLastTimeAsc(long page) : TokensForOwnerOrder + { + public long page { get; } = page; + } + + public record ByLastTimeDesc(long page) : TokensForOwnerOrder + { + public long page { get; } = page; + } + } - public record ByLastTimeDesc(long page) : TokensForOwnerOrder - { - public long page { get; } = page; - } - } } \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/API/Models/Operations/Operation.cs b/Runtime/Scripts/Tezos/API/Models/Operations/Operation.cs index 70e233da..28f094f2 100644 --- a/Runtime/Scripts/Tezos/API/Models/Operations/Operation.cs +++ b/Runtime/Scripts/Tezos/API/Models/Operations/Operation.cs @@ -1,21 +1,23 @@ namespace TezosSDK.Tezos.API.Models.Operations { - public class Operation - { - /// - /// Internal TzKT id (not the same as `tokenId`). - /// **[sortable]** - /// - public long Id { get; set; } - - /// - /// Operation type - /// - public string Type { get; set; } - /// - /// Operation hash - /// - public string Hash { get; set; } - } + public class Operation + { + /// + /// Internal TzKT id (not the same as `tokenId`). + /// **[sortable]** + /// + public long Id { get; set; } + + /// + /// Operation type + /// + public string Type { get; set; } + + /// + /// Operation hash + /// + public string Hash { get; set; } + } + } \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/API/Models/Operations/OriginationOperation.cs b/Runtime/Scripts/Tezos/API/Models/Operations/OriginationOperation.cs index 800cdcbf..886f7791 100644 --- a/Runtime/Scripts/Tezos/API/Models/Operations/OriginationOperation.cs +++ b/Runtime/Scripts/Tezos/API/Models/Operations/OriginationOperation.cs @@ -2,21 +2,22 @@ namespace TezosSDK.Tezos.API.Models.Operations { - public class OriginationOperation : Operation - { - /// - /// Originated contract. - /// - [JsonPropertyName("originatedContract")] - public DeployedContract Contract { get; set; } - - } - public class DeployedContract - { - /// - /// Address of originated contract. - /// - public string Address { get; set; } - } + public class OriginationOperation : Operation + { + /// + /// Originated contract. + /// + [JsonPropertyName("originatedContract")] + public DeployedContract Contract { get; set; } + } + + public class DeployedContract + { + /// + /// Address of originated contract. + /// + public string Address { get; set; } + } + } \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/API/Models/TokenContract.cs b/Runtime/Scripts/Tezos/API/Models/TokenContract.cs deleted file mode 100644 index 7a98685a..00000000 --- a/Runtime/Scripts/Tezos/API/Models/TokenContract.cs +++ /dev/null @@ -1,231 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text.Json; -using Netezos.Contracts; -using Netezos.Encoding; -using Newtonsoft.Json.Linq; -using TezosSDK.Helpers; -using TezosSDK.Tezos.API.Models.Abstract; -using TezosSDK.Tezos.API.Models.Tokens; -using UnityEngine; -using TezosSDK.Tezos.API.Models.Filters; - - -namespace TezosSDK.Tezos.API.Models -{ - public class TokenContract : IFA2 - { - public string Address { get; set; } - public int TokensCount { get; set; } - public DateTime LastActivityTime { get; set; } - - private Action OnMintCompleted; - private Action OnTransferCompleted; - private Action OnDeployCompleted; - - public TokenContract(string address) - { - Address = address; - } - - public TokenContract() - { - } - - public void Mint( - Action completedCallback, - TokenMetadata tokenMetadata, - string destination, - int amount) - { - OnMintCompleted = completedCallback; - - var getContractTokens = TezosSingleton - .Instance - .API - .GetTokensForContract( - callback: TokensReceived, - contractAddress: Address, - withMetadata: false, - maxItems: 10_000, - orderBy: new TokensForContractOrder.Default(0)); - - CoroutineRunner.Instance.StartWrappedCoroutine(getContractTokens); - - void TokensReceived(IEnumerable tokens) - { - var tokenId = tokens?.Count() ?? 0; - const string entrypoint = "mint"; - - var mintParameters = GetContractScript().BuildParameter( - entrypoint: entrypoint, - value: new - { - address = destination, - amount = amount.ToString(), - metadata = tokenMetadata.GetMetadataDict(), - token_id = tokenId.ToString() - }) - .ToJson(); - - TezosSingleton - .Instance - .Wallet - .MessageReceiver - .ContractCallCompleted += MintCompleted; - - TezosSingleton - .Instance - .Wallet - .CallContract( - contractAddress: Address, - entryPoint: entrypoint, - input: mintParameters); - } - } - - private void MintCompleted(string response) - { - var owner = TezosSingleton - .Instance - .Wallet - .GetActiveAddress(); - - var getOwnerTokensCoroutine = TezosSingleton - .Instance - .API - .GetTokensForOwner( - callback: tokens => { OnMintCompleted.Invoke(tokens.Last()); }, - owner, - withMetadata: true, - maxItems: 10_000, - orderBy: new TokensForOwnerOrder.Default(0)); - - CoroutineRunner.Instance.StartWrappedCoroutine(getOwnerTokensCoroutine); - } - - public void Transfer( - Action completedCallback, - string destination, - int tokenId, - int amount) - { - OnTransferCompleted = completedCallback; - - var activeAddress = TezosSingleton - .Instance - .Wallet - .GetActiveAddress(); - - const string entryPoint = "transfer"; - - var param = GetContractScript().BuildParameter( - entrypoint: entryPoint, - value: new List - { - new - { - from_ = activeAddress, - txs = new List - { - new - { - to_ = destination, - token_id = tokenId, - amount - } - } - } - }).ToJson(); - - TezosSingleton - .Instance - .Wallet - .MessageReceiver - .ContractCallCompleted += TransferCompleted; - - TezosSingleton - .Instance - .Wallet - .CallContract( - contractAddress: Address, - entryPoint: entryPoint, - input: param); - } - - private void TransferCompleted(string response) - { - var transactionHash = JsonSerializer - .Deserialize(response) - .GetProperty("transactionHash") - .ToString(); - - OnTransferCompleted.Invoke(transactionHash); - } - - public void Deploy(Action completedCallback) - { - OnDeployCompleted = completedCallback; - - var stringScript = Resources.Load("Contracts/FA2TokenContract").text; - var address = TezosSingleton - .Instance - .Wallet - .GetActiveAddress(); - var scriptWithAdmin = stringScript.Replace("CONTRACT_ADMIN", address); - - TezosSingleton - .Instance - .Wallet - .MessageReceiver - .ContractCallCompleted += DeployCompleted; - - TezosSingleton - .Instance - .Wallet - .OriginateContract(scriptWithAdmin); - } - - private void DeployCompleted(string response) - { - var codeHash = Resources.Load("Contracts/FA2TokenContractCodeHash").text; - var creator = TezosSingleton - .Instance - .Wallet - .GetActiveAddress(); - - CoroutineRunner.Instance.StartWrappedCoroutine( - TezosSingleton - .Instance - .API - .GetOriginatedContractsForOwner(contracts => - { - var tokenContracts = contracts.ToList(); - if (!tokenContracts.Any()) return; - - var lastUsedContract = tokenContracts.Last(); - Address = lastUsedContract.Address; - PlayerPrefs.SetString("CurrentContract:" + creator, lastUsedContract.Address); - OnDeployCompleted.Invoke(lastUsedContract.Address); - }, - creator, - codeHash, - maxItems: 1000, - orderBy: new OriginatedContractsForOwnerOrder.Default(0))); - } - - private ContractScript GetContractScript() - { - var script = Resources - .Load("Contracts/FA2TokenContract") - .text; - - var code = JObject - .Parse(script) - .SelectToken("code"); - - return new ContractScript(Micheline.FromJson(code.ToString())); - } - } -} \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/API/Models/Tokens/Token.cs b/Runtime/Scripts/Tezos/API/Models/Tokens/Token.cs index 95b986f2..86cbcc45 100644 --- a/Runtime/Scripts/Tezos/API/Models/Tokens/Token.cs +++ b/Runtime/Scripts/Tezos/API/Models/Tokens/Token.cs @@ -3,93 +3,95 @@ namespace TezosSDK.Tezos.API.Models.Tokens { - public class Token - { - /// - /// Internal TzKT id (not the same as `tokenId`). - /// **[sortable]** - /// - public long Id { get; set; } - - /// - /// Contract, created the token. - /// - public Alias Contract { get; set; } - - /// - /// Token id, unique within the contract. - /// **[sortable]** - /// - public string TokenId { get; set; } - - /// - /// Token standard (`fa1.2` or `fa2`). - /// - public string Standard { get; set; } - - /// - /// Account, minted the token first. - /// - public Alias FirstMinter { get; set; } - - /// - /// Level of the block where the token was first seen. - /// **[sortable]** - /// - public int FirstLevel { get; set; } - - /// - /// Timestamp of the block where the token was first seen. - /// - public DateTime FirstTime { get; set; } - - /// - /// Level of the block where the token was last seen. - /// **[sortable]** - /// - public int LastLevel { get; set; } - - /// - /// Timestamp of the block where the token was last seen. - /// - public DateTime LastTime { get; set; } - - /// - /// Total number of transfers. - /// **[sortable]** - /// - public int TransfersCount { get; set; } - - /// - /// Total number of holders ever seen. - /// **[sortable]** - /// - public int BalancesCount { get; set; } - - /// - /// Total number of current holders. - /// **[sortable]** - /// - public int HoldersCount { get; set; } - - /// - /// Total number of minted tokens (raw value, not divided by `decimals`). - /// - public string TotalMinted { get; set; } - - /// - /// Total number of burned tokens (raw value, not divided by `decimals`). - /// - public string TotalBurned { get; set; } - - /// - /// Total number of existing tokens (raw value, not divided by `decimals`). - /// - public string TotalSupply { get; set; } - - /// - /// Token metadata. - /// - public JsonElement TokenMetadata { get; set; } - } + + public class Token + { + /// + /// Internal TzKT id (not the same as `tokenId`). + /// **[sortable]** + /// + public long Id { get; set; } + + /// + /// Contract, created the token. + /// + public Alias Contract { get; set; } + + /// + /// Token id, unique within the contract. + /// **[sortable]** + /// + public string TokenId { get; set; } + + /// + /// Token standard (`fa1.2` or `fa2`). + /// + public string Standard { get; set; } + + /// + /// Account, minted the token first. + /// + public Alias FirstMinter { get; set; } + + /// + /// Level of the block where the token was first seen. + /// **[sortable]** + /// + public int FirstLevel { get; set; } + + /// + /// Timestamp of the block where the token was first seen. + /// + public DateTime FirstTime { get; set; } + + /// + /// Level of the block where the token was last seen. + /// **[sortable]** + /// + public int LastLevel { get; set; } + + /// + /// Timestamp of the block where the token was last seen. + /// + public DateTime LastTime { get; set; } + + /// + /// Total number of transfers. + /// **[sortable]** + /// + public int TransfersCount { get; set; } + + /// + /// Total number of holders ever seen. + /// **[sortable]** + /// + public int BalancesCount { get; set; } + + /// + /// Total number of current holders. + /// **[sortable]** + /// + public int HoldersCount { get; set; } + + /// + /// Total number of minted tokens (raw value, not divided by `decimals`). + /// + public string TotalMinted { get; set; } + + /// + /// Total number of burned tokens (raw value, not divided by `decimals`). + /// + public string TotalBurned { get; set; } + + /// + /// Total number of existing tokens (raw value, not divided by `decimals`). + /// + public string TotalSupply { get; set; } + + /// + /// Token metadata. + /// + public JsonElement TokenMetadata { get; set; } + } + } \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/API/Models/Tokens/TokenBalance.cs b/Runtime/Scripts/Tezos/API/Models/Tokens/TokenBalance.cs index 43d1ea03..c001bc69 100644 --- a/Runtime/Scripts/Tezos/API/Models/Tokens/TokenBalance.cs +++ b/Runtime/Scripts/Tezos/API/Models/Tokens/TokenBalance.cs @@ -1,46 +1,47 @@ using System; -using System.Text.Json; namespace TezosSDK.Tezos.API.Models.Tokens { - public class TokenBalance - { - /// - /// Internal TzKT id. - /// **[sortable]** - /// - public long Id { get; set; } - - /// - /// Owner account. - /// Click on the field to expand more details. - /// - public string Owner { get; set; } - - /// - /// Balance (raw value, not divided by `decimals`). - /// **[sortable]** - /// - public string Balance { get; set; } - - /// - /// Contract, created the token. - /// - public Alias TokenContract { get; set; } - - /// - /// Token id, unique within the contract. - /// - public string TokenId { get; set; } - - /// - /// Token metadata. - /// - public JsonElement TokenMetadata { get; set; } - - /// - /// Timestamp of the block where the token balance was last changed. - /// - public DateTime LastTime { get; set; } - } + + public class TokenBalance + { + /// + /// Internal TzKT id. + /// **[sortable]** + /// + public long Id { get; set; } + + /// + /// Owner account. + /// Click on the field to expand more details. + /// + public string Owner { get; set; } + + /// + /// Balance (raw value, not divided by `decimals`). + /// **[sortable]** + /// + public string Balance { get; set; } + + /// + /// Contract, created the token. + /// + public Alias TokenContract { get; set; } + + /// + /// Token id, unique within the contract. + /// + public string TokenId { get; set; } + + /// + /// Token metadata. + /// + public TokenMetadata TokenMetadata { get; set; } + + /// + /// Timestamp of the block where the token balance was last changed. + /// + public DateTime LastTime { get; set; } + } + } \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/API/Models/Tokens/TokenMetadata.cs b/Runtime/Scripts/Tezos/API/Models/Tokens/TokenMetadata.cs index 0c07de19..fa96105c 100644 --- a/Runtime/Scripts/Tezos/API/Models/Tokens/TokenMetadata.cs +++ b/Runtime/Scripts/Tezos/API/Models/Tokens/TokenMetadata.cs @@ -1,35 +1,58 @@ using System.Collections.Generic; -using TezosSDK.Helpers; +using TezosSDK.Helpers.Extensions; namespace TezosSDK.Tezos.API.Models.Tokens { - public class TokenMetadata - { - public string Name { get; set; } - public string Description { get; set; } - public string Symbol { get; set; } - public string Decimals { get; set; } - public string DisplayUri { get; set; } - public string ArtifactUri { get; set; } - public string ThumbnailUri { get; set; } - // todo: add creators. - // public IEnumerable Creators { get; set; } + public class TokenMetadata + { + public string Name { get; set; } + public string Description { get; set; } + public string Symbol { get; set; } + public string Decimals { get; set; } + public string DisplayUri { get; set; } + public string ArtifactUri { get; set; } + public string ThumbnailUri { get; set; } - public IDictionary GetMetadataDict() - { - var dict = new Dictionary - { - { nameof(Name).FirstCharToLowerCase(), Name.ToByteArray() }, - { nameof(Description).FirstCharToLowerCase(), Description.ToByteArray() }, - { nameof(Symbol).FirstCharToLowerCase(), Symbol.ToByteArray() }, - { nameof(Decimals).FirstCharToLowerCase(), Decimals.ToByteArray() }, - { nameof(DisplayUri).FirstCharToLowerCase(), DisplayUri.ToByteArray() }, - { nameof(ArtifactUri).FirstCharToLowerCase(), ArtifactUri.ToByteArray() }, - { nameof(ThumbnailUri).FirstCharToLowerCase(), ThumbnailUri.ToByteArray() } - }; + // todo: add creators. + // public IEnumerable Creators { get; set; } + + public IDictionary GetMetadataDict() + { + var dict = new Dictionary + { + { + nameof(Name).FirstCharToLowerCase(), Name.ToByteArray() + }, + { + nameof(Description).FirstCharToLowerCase(), Description.ToByteArray() + }, + { + nameof(Symbol).FirstCharToLowerCase(), Symbol.ToByteArray() + }, + { + nameof(Decimals).FirstCharToLowerCase(), Decimals.ToByteArray() + }, + { + nameof(DisplayUri).FirstCharToLowerCase(), DisplayUri.ToByteArray() + }, + { + nameof(ArtifactUri).FirstCharToLowerCase(), ArtifactUri.ToByteArray() + }, + { + nameof(ThumbnailUri).FirstCharToLowerCase(), ThumbnailUri.ToByteArray() + } + }; + + return new SortedDictionary(dict); + } + + public override string ToString() + { + return $"Name: {Name}, " + $"Description: {Description}, " + $"Symbol: {Symbol}, " + + $"Decimals: {Decimals}, " + $"DisplayUri: {DisplayUri}, " + $"ArtifactUri: {ArtifactUri}, " + + $"ThumbnailUri: {ThumbnailUri}"; + } + } - return new SortedDictionary(dict); - } - } } \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/API/Rpc.cs b/Runtime/Scripts/Tezos/API/Rpc.cs index 3e7b0a1d..ebfab424 100644 --- a/Runtime/Scripts/Tezos/API/Rpc.cs +++ b/Runtime/Scripts/Tezos/API/Rpc.cs @@ -1,44 +1,62 @@ using System.Collections; using System.Text.Json; using Netezos.Rpc.Queries.Post; -using TezosSDK.Helpers; +using TezosSDK.Helpers.HttpClients; namespace TezosSDK.Tezos.API { - public class Rpc : HttpClient - { - private const string chainId = "NetXdQprcVkpaWU"; - - public Rpc(string baseAddress) : base(baseAddress) - { - } - - public IEnumerator GetTzBalance(string address) - => GetJson($"chains/main/blocks/head/context/contracts/{address}/balance/"); - - public IEnumerator GetContractCode(string contract) - => GetJson($"chains/main/blocks/head/context/contracts/{contract}/script/"); - - public IEnumerator RunView(string contract, string view, string input, string chainId = chainId, - string source = null, string payer = null, long? gas = null, - NormalizedQuery.UnparsingMode mode = NormalizedQuery.UnparsingMode.Readable, int? now = null, - int? level = null) - { - var data = new - { - contract, - view, - input = JsonDocument.Parse(input), - chain_id = chainId, - unlimited_gas = gas == null, - unparsing_mode = mode.ToString(), - source, - payer, - gas = gas?.ToString(), - now = now?.ToString(), - level = level?.ToString() - }; - return PostJson("chains/main/blocks/head/helpers/scripts/run_script_view/", data); - } - } + + public class Rpc : TezosHttpClient + { + private const string CHAIN_ID = "NetXdQprcVkpaWU"; + + public Rpc(DataProviderConfigSO dataProviderConfig) : base(dataProviderConfig) + { + } + + public Rpc(TezosConfigSO rpcConfig) : base(rpcConfig) + { + } + + public IEnumerator GetTzBalance(string address) + { + return GetJson($"chains/main/blocks/head/context/contracts/{address}/balance/"); + } + + public IEnumerator GetContractCode(string contract) + { + return GetJson($"chains/main/blocks/head/context/contracts/{contract}/script/"); + } + + public IEnumerator RunView( + string contract, + string view, + string input, + string chainId = CHAIN_ID, + string source = null, + string payer = null, + long? gas = null, + NormalizedQuery.UnparsingMode mode = NormalizedQuery.UnparsingMode.Readable, + int? now = null, + int? level = null) + { + var data = new + { + contract, + view, + input = JsonDocument.Parse(input), + chain_id = chainId, + unlimited_gas = gas == null, + unparsing_mode = mode.ToString(), + source, + payer, + gas = gas?.ToString(), + now = now?.ToString(), + level = level?.ToString() + }; + + return PostJson("chains/main/blocks/head/helpers/scripts/run_script_view/", data); + } + } + } \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/API/TezosAPI.cs b/Runtime/Scripts/Tezos/API/TezosAPI.cs index 890b26de..fa53aa54 100644 --- a/Runtime/Scripts/Tezos/API/TezosAPI.cs +++ b/Runtime/Scripts/Tezos/API/TezosAPI.cs @@ -5,299 +5,295 @@ using System.Text.Json; using Dynamic.Json; using TezosSDK.Helpers; -using TezosSDK.Tezos.API.Models; +using TezosSDK.Helpers.Coroutines; +using TezosSDK.Helpers.HttpClients; using TezosSDK.Tezos.API.Models.Filters; using TezosSDK.Tezos.API.Models.Tokens; using Logger = TezosSDK.Helpers.Logger; namespace TezosSDK.Tezos.API { - public class TezosAPI : HttpClient, ITezosAPI - { - private Rpc Rpc { get; } - - public TezosAPI(IDataProviderConfig config) : base(config) - { - Rpc = new Rpc(TezosConfig.Instance.RpcBaseUrl); - } - - public IEnumerator GetTezosBalance(Action callback, string address) - { - var getBalanceRequest = Rpc.GetTzBalance(address); - return new CoroutineWrapper(getBalanceRequest, callback); - } - - public IEnumerator ReadView(string contractAddress, - string entrypoint, - string input, - Action callback) - { - var runViewOp = Rpc.RunView(contractAddress, entrypoint, input); - - return new CoroutineWrapper(runViewOp, result => - { - if (result.ValueKind != JsonValueKind.Null && result.ValueKind != JsonValueKind.Undefined && - result.TryGetProperty("data", out var val)) - callback(val); - else - Logger.LogError("Can't parse response from run_script_view query"); - }); - } - - public IEnumerator GetTokensForOwner( - Action> callback, - string owner, - bool withMetadata, - long maxItems, - TokensForOwnerOrder orderBy) - { - var sort = orderBy switch - { - TokensForOwnerOrder.Default byDefault => $"sort.asc=id&offset.cr={byDefault.lastId}", - TokensForOwnerOrder.ByLastTimeAsc byLastTimeAsc => $"sort.asc=lastLevel&offset.pg={byLastTimeAsc.page}", - TokensForOwnerOrder.ByLastTimeDesc ByLastTimeDesc => - $"sort.desc=lastLevel&offset.pg={ByLastTimeDesc.page}", - _ => string.Empty - }; - - var url = "tokens/balances?" + - $"account={owner}&balance.ne=0&" + - "select=account.address as owner,balance,token.contract as token_contract," + - $"token.tokenId as token_id{(withMetadata ? ",token.metadata as token_metadata" : "")}," + - "lastTime as last_time,id&" + - $"{sort}&limit={maxItems}"; - - var requestRoutine = GetJson>(url); - return new CoroutineWrapper>(requestRoutine, callback); - } - - public IEnumerator GetOwnersForToken( - Action> callback, - string contractAddress, - uint tokenId, - long maxItems, - OwnersForTokenOrder orderBy) - { - var sort = orderBy switch - { - OwnersForTokenOrder.Default byDefault => $"sort.asc=id&offset.cr={byDefault.lastId}", - OwnersForTokenOrder.ByBalanceAsc byBalanceAsc => $"sort.asc=balance&offset.pg={byBalanceAsc.page}", - OwnersForTokenOrder.ByBalanceDesc byBalanceDesc => $"sort.desc=balance&offset.pg={byBalanceDesc.page}", - OwnersForTokenOrder.ByLastTimeAsc byLastTimeAsc => $"sort.asc=lastLevel&offset.pg={byLastTimeAsc.page}", - OwnersForTokenOrder.ByLastTimeDesc byLastTimeDesc => - $"sort.desc=lastLevel&offset.pg={byLastTimeDesc.page}", - _ => string.Empty - }; - - var url = "tokens/balances?" + - $"token.contract={contractAddress}&balance.ne=0&token.tokenId={tokenId}&" + - "select=account.address as owner,balance,token.contract as token_contract," + - "token.tokenId as token_id,lastTime as last_time,id&" + - $"{sort}&limit={maxItems}"; - - var requestRoutine = GetJson>(url); - return new CoroutineWrapper>(requestRoutine, callback); - } - - public IEnumerator GetOwnersForContract( - Action> callback, - string contractAddress, - long maxItems, - OwnersForContractOrder orderBy) - { - var sort = orderBy switch - { - OwnersForContractOrder.Default byDefault => $"sort.asc=id&offset.cr={byDefault.lastId}", - OwnersForContractOrder.ByLastTimeAsc byLastTimeAsc => - $"sort.asc=lastLevel&offset.pg={byLastTimeAsc.page}", - OwnersForContractOrder.ByLastTimeDesc ByLastTimeDesc => - $"sort.desc=lastLevel&offset.pg={ByLastTimeDesc.page}", - _ => string.Empty - }; - - var url = "tokens/balances?" + - $"token.contract={contractAddress}&balance.ne=0&" + - "select=account.address as owner,balance,token.contract as token_contract," + - "token.tokenId as token_id,id&" + - $"{sort}&limit={maxItems}"; - - var requestRoutine = GetJson>(url); - return new CoroutineWrapper>(requestRoutine, callback); - } - - public IEnumerator IsHolderOfContract( - Action callback, - string wallet, - string contractAddress) - { - var requestRoutine = - GetJson($"tokens/balances?account={wallet}&token.contract={contractAddress}&balance.ne=0&select=id"); - - yield return requestRoutine; - - if (requestRoutine.Current is DJsonArray dJsonArray) - { - callback?.Invoke(dJsonArray.Length > 0); - } - else - { - callback?.Invoke(false); - } - } - - public IEnumerator IsHolderOfToken(Action callback, - string wallet, - string contractAddress, - uint tokenId) - { - var requestRoutine = - GetJson( - $"tokens/balances?account={wallet}&token.contract={contractAddress}&token.tokenId={tokenId}&balance.ne=0&select=id"); - - yield return requestRoutine; - - if (requestRoutine.Current is DJsonArray dJsonArray) - { - callback?.Invoke(dJsonArray.Length > 0); - } - else - { - callback?.Invoke(false); - } - } - - public IEnumerator GetTokenMetadata( - Action callback, - string contractAddress, - uint tokenId) - { - var url = $"tokens?contract={contractAddress}&tokenId={tokenId}&select=metadata"; - var requestRoutine = GetJson(url); - yield return requestRoutine; - - if (requestRoutine.Current is DJsonArray { Length: 1 } dJsonArray) - { - // todo: improve this - var result = JsonSerializer - .Deserialize(dJsonArray.First().ToString(), JsonOptions.DefaultOptions); - - callback?.Invoke(result); - } - } - - public IEnumerator GetContractMetadata( - Action callback, - string contractAddress) - { - var url = $"contracts/{contractAddress}?legacy=false"; - var requestRoutine = GetJson(url); - yield return requestRoutine; - - if (requestRoutine.Current is DJsonObject dJsonObject) - { - // todo: improve this - var result = JsonSerializer - .Deserialize(dJsonObject.ToString(), JsonOptions.DefaultOptions); - - callback?.Invoke(result.GetProperty("metadata")); - } - } - - public IEnumerator GetTokensForContract( - Action> callback, - string contractAddress, - bool withMetadata, - long maxItems, - TokensForContractOrder orderBy) - { - var sort = orderBy switch - { - TokensForContractOrder.Default byDefault => - $"sort.asc=id&offset.cr={byDefault.lastId}", - TokensForContractOrder.ByLastTimeAsc byLastTimeAsc => - $"sort.asc=lastLevel&offset.pg={byLastTimeAsc.page}", - TokensForContractOrder.ByLastTimeDesc byLastTimeDesc => - $"sort.desc=lastLevel&offset.pg={byLastTimeDesc.page}", - TokensForContractOrder.ByHoldersCountAsc byHoldersCountAsc => - $"sort.asc=holdersCount&offset.pg={byHoldersCountAsc.page}", - TokensForContractOrder.ByHoldersCountDesc byHoldersCountDesc => - $"sort.desc=holdersCount&offset.pg={byHoldersCountDesc.page}", - _ => string.Empty - }; - - var url = - $"tokens?contract={contractAddress}&select=contract,tokenId as token_id" + - $"{(withMetadata ? ",metadata as token_metadata" : "")},holdersCount as holders_count,id," + - $"lastTime as last_time&{sort}&limit={maxItems}"; - - var requestRoutine = GetJson>(url); - return new CoroutineWrapper>(requestRoutine, callback); - } - - public IEnumerator GetOperationStatus(Action callback, string operationHash) - { - var url = $"operations/{operationHash}/status"; - var requestRoutine = GetJson(url); - return new CoroutineWrapper( - coroutine: requestRoutine, - callback: callback, - errorHandler: error => - { - Logger.LogDebug($"Can't get operation {operationHash} status, {error.Message}"); - callback.Invoke(false); - }); - } - - public IEnumerator GetLatestBlockLevel(Action callback) - { - var url = $"blocks/{DateTime.UtcNow:yyyy-MM-ddTHH:mm:ssZ}/level"; - var requestRoutine = GetJson(url); - - yield return requestRoutine; - - callback?.Invoke(Convert.ToInt32(requestRoutine.Current)); - } - - public IEnumerator GetAccountCounter(Action callback, string address) - { - var url = $"accounts/{address}/counter"; - var requestRoutine = GetJson(url); - yield return requestRoutine; - - callback?.Invoke(Convert.ToInt32(requestRoutine.Current)); - } - - public IEnumerator GetOriginatedContractsForOwner( - Action> callback, - string creator, - string codeHash, - long maxItems, - OriginatedContractsForOwnerOrder orderBy) - { - var sort = orderBy switch - { - OriginatedContractsForOwnerOrder.Default byDefault => - $"sort.asc=id&offset.cr={byDefault.lastId}", - OriginatedContractsForOwnerOrder.ByLastActivityTimeAsc byLastTimeAsc => - $"sort.asc=lastActivity&offset.pg={byLastTimeAsc.page}", - OriginatedContractsForOwnerOrder.ByLastActivityTimeDesc byLastTimeDesc => - $"sort.desc=lastActivity&offset.pg={byLastTimeDesc.page}", - _ => string.Empty - }; - - var url = $"contracts?creator={creator}&tzips.any=fa2&codeHash={codeHash}&" + - "select=address,tokensCount as tokens_count,lastActivity,lastActivityTime as last_activity_time" + - $",id&{sort}&limit={maxItems}"; - - var requestRoutine = GetJson>(url); - yield return new CoroutineWrapper>( - requestRoutine, - callback: callback, - errorHandler: error => - { - callback.Invoke(new List()); - Logger.LogDebug($"Error during GetOriginatedFa2Contracts: {error}"); - }); - } - } + + public class TezosAPI : TezosHttpClient, ITezosAPI + { + public TezosAPI(TezosConfigSO config) : base(config.DataProvider) + { + Rpc = new Rpc(config); + } + + private Rpc Rpc { get; } + + public IEnumerator GetTezosBalance(Action callback, string address) + { + var getBalanceRequest = Rpc.GetTzBalance(address); + return new CoroutineWrapper(getBalanceRequest, callback); + } + + public IEnumerator ReadView( + string contractAddress, + string entrypoint, + string input, + Action callback) + { + var runViewOp = Rpc.RunView(contractAddress, entrypoint, input); + + return new CoroutineWrapper(runViewOp, result => + { + if (result.ValueKind != JsonValueKind.Null && result.ValueKind != JsonValueKind.Undefined && + result.TryGetProperty("data", out var val)) + { + callback(val); + } + else + { + Logger.LogError("Can't parse response from run_script_view query"); + } + }); + } + + public IEnumerator GetTokensForOwner( + Action> callback, + string owner, + bool withMetadata, + long maxItems, + TokensForOwnerOrder orderBy) + { + var sort = orderBy switch + { + TokensForOwnerOrder.Default byDefault => $"sort.asc=id&offset.cr={byDefault.lastId}", + TokensForOwnerOrder.ByLastTimeAsc byLastTimeAsc => $"sort.asc=lastLevel&offset.pg={byLastTimeAsc.page}", + TokensForOwnerOrder.ByLastTimeDesc byLastTimeDesc => + $"sort.desc=lastLevel&offset.pg={byLastTimeDesc.page}", + _ => string.Empty + }; + + var url = "tokens/balances?" + $"account={owner}&balance.ne=0&" + + "select=account.address as owner,balance,token.contract as token_contract," + + $"token.tokenId as token_id{(withMetadata ? ",token.metadata as token_metadata" : "")}," + + "lastTime as last_time,id&" + $"{sort}&limit={maxItems}"; + + var requestRoutine = GetJson>(url); + return new CoroutineWrapper>(requestRoutine, callback); + } + + public IEnumerator GetOwnersForToken( + Action> callback, + string contractAddress, + uint tokenId, + long maxItems, + OwnersForTokenOrder orderBy) + { + var sort = orderBy switch + { + OwnersForTokenOrder.Default byDefault => $"sort.asc=id&offset.cr={byDefault.lastId}", + OwnersForTokenOrder.ByBalanceAsc byBalanceAsc => $"sort.asc=balance&offset.pg={byBalanceAsc.page}", + OwnersForTokenOrder.ByBalanceDesc byBalanceDesc => $"sort.desc=balance&offset.pg={byBalanceDesc.page}", + OwnersForTokenOrder.ByLastTimeAsc byLastTimeAsc => $"sort.asc=lastLevel&offset.pg={byLastTimeAsc.page}", + OwnersForTokenOrder.ByLastTimeDesc byLastTimeDesc => + $"sort.desc=lastLevel&offset.pg={byLastTimeDesc.page}", + _ => string.Empty + }; + + var url = "tokens/balances?" + $"token.contract={contractAddress}&balance.ne=0&token.tokenId={tokenId}&" + + "select=account.address as owner,balance,token.contract as token_contract," + + "token.tokenId as token_id,lastTime as last_time,id&" + $"{sort}&limit={maxItems}"; + + var requestRoutine = GetJson>(url); + return new CoroutineWrapper>(requestRoutine, callback); + } + + public IEnumerator GetOwnersForContract( + Action> callback, + string contractAddress, + long maxItems, + OwnersForContractOrder orderBy) + { + var sort = orderBy switch + { + OwnersForContractOrder.Default byDefault => $"sort.asc=id&offset.cr={byDefault.lastId}", + OwnersForContractOrder.ByLastTimeAsc byLastTimeAsc => + $"sort.asc=lastLevel&offset.pg={byLastTimeAsc.page}", + OwnersForContractOrder.ByLastTimeDesc byLastTimeDesc => + $"sort.desc=lastLevel&offset.pg={byLastTimeDesc.page}", + _ => string.Empty + }; + + var url = "tokens/balances?" + $"token.contract={contractAddress}&balance.ne=0&" + + "select=account.address as owner,balance,token.contract as token_contract," + + "token.tokenId as token_id,id&" + $"{sort}&limit={maxItems}"; + + var requestRoutine = GetJson>(url); + return new CoroutineWrapper>(requestRoutine, callback); + } + + public IEnumerator IsHolderOfContract(Action callback, string wallet, string contractAddress) + { + var requestRoutine = + GetJson( + $"tokens/balances?account={wallet}&token.contract={contractAddress}&balance.ne=0&select=id"); + + yield return requestRoutine; + + if (requestRoutine.Current is DJsonArray dJsonArray) + { + callback?.Invoke(dJsonArray.Length > 0); + } + else + { + callback?.Invoke(false); + } + } + + public IEnumerator IsHolderOfToken(Action callback, string wallet, string contractAddress, uint tokenId) + { + var requestRoutine = + GetJson( + $"tokens/balances?account={wallet}&token.contract={contractAddress}&token.tokenId={tokenId}&balance.ne=0&select=id"); + + yield return requestRoutine; + + if (requestRoutine.Current is DJsonArray dJsonArray) + { + callback?.Invoke(dJsonArray.Length > 0); + } + else + { + callback?.Invoke(false); + } + } + + public IEnumerator GetTokenMetadata(Action callback, string contractAddress, uint tokenId) + { + var url = $"tokens?contract={contractAddress}&tokenId={tokenId}&select=metadata"; + var requestRoutine = GetJson(url); + yield return requestRoutine; + + if (requestRoutine.Current is DJsonArray { Length: 1 } dJsonArray) + { + try + { + // Parse the JSON data into a strongly-typed object + var node = dJsonArray.First().ToString(); + + var tokenMetadata = JsonSerializer.Deserialize(node, JsonOptions.DefaultOptions); + callback?.Invoke(tokenMetadata); + } + catch (JsonException e) + { + Logger.LogError("Failed to deserialize token metadata: " + e.Message); + callback?.Invoke(null); + } + } + else + { + callback?.Invoke(null); + } + } + + public IEnumerator GetContractMetadata(Action callback, string contractAddress) + { + var url = $"accounts/{contractAddress}?legacy=false"; + var requestRoutine = GetJson(url); + yield return requestRoutine; + + if (requestRoutine.Current is not DJsonObject dJsonObject) + { + yield break; + } + + var result = JsonSerializer.Deserialize(dJsonObject.ToString(), JsonOptions.DefaultOptions); + callback?.Invoke(result.TryGetProperty("metadata", out var metadata) ? metadata : new JsonElement()); + } + + public IEnumerator GetTokensForContract( + Action> callback, + string contractAddress, + bool withMetadata, + long maxItems, + TokensForContractOrder orderBy) + { + Logger.LogDebug($"Getting tokens for contract: {contractAddress}"); + + var sort = orderBy switch + { + TokensForContractOrder.Default byDefault => $"sort.asc=id&offset.cr={byDefault.lastId}", + TokensForContractOrder.ByLastTimeAsc byLastTimeAsc => + $"sort.asc=lastLevel&offset.pg={byLastTimeAsc.page}", + TokensForContractOrder.ByLastTimeDesc byLastTimeDesc => + $"sort.desc=lastLevel&offset.pg={byLastTimeDesc.page}", + TokensForContractOrder.ByHoldersCountAsc byHoldersCountAsc => + $"sort.asc=holdersCount&offset.pg={byHoldersCountAsc.page}", + TokensForContractOrder.ByHoldersCountDesc byHoldersCountDesc => + $"sort.desc=holdersCount&offset.pg={byHoldersCountDesc.page}", + _ => string.Empty + }; + + var url = $"tokens?contract={contractAddress}&select=contract,tokenId as token_id" + + $"{(withMetadata ? ",metadata as token_metadata" : "")},holdersCount as holders_count,id," + + $"lastTime as last_time&{sort}&limit={maxItems}"; + + var requestRoutine = GetJson>(url); + return new CoroutineWrapper>(requestRoutine, callback); + } + + public IEnumerator GetOperationStatus(Action callback, string operationHash) + { + var url = $"operations/{operationHash}/status"; + var requestRoutine = GetJson(url); + + return new CoroutineWrapper(requestRoutine, callback, error => callback.Invoke(false)); + } + + public IEnumerator GetLatestBlockLevel(Action callback) + { + var url = $"blocks/{DateTime.UtcNow:yyyy-MM-ddTHH:mm:ssZ}/level"; + var requestRoutine = GetJson(url); + + yield return requestRoutine; + + callback?.Invoke(Convert.ToInt32(requestRoutine.Current)); + } + + public IEnumerator GetAccountCounter(Action callback, string address) + { + var url = $"accounts/{address}/counter"; + var requestRoutine = GetJson(url); + yield return requestRoutine; + + callback?.Invoke(Convert.ToInt32(requestRoutine.Current)); + } + + public IEnumerator GetOriginatedContractsForOwner( + Action> callback, + string creator, + string codeHash, + long maxItems, + OriginatedContractsForOwnerOrder orderBy) + { + Logger.LogDebug($"GetOriginatedContractsForOwner: creator={creator}, codeHash={codeHash}"); + + var sort = orderBy switch + { + OriginatedContractsForOwnerOrder.Default byDefault => $"sort.asc=id&offset.cr={byDefault.lastId}", + OriginatedContractsForOwnerOrder.ByLastActivityTimeAsc byLastTimeAsc => + $"sort.asc=lastActivity&offset.pg={byLastTimeAsc.page}", + OriginatedContractsForOwnerOrder.ByLastActivityTimeDesc byLastTimeDesc => + $"sort.desc=lastActivity&offset.pg={byLastTimeDesc.page}", + _ => string.Empty + }; + + var url = $"contracts?creator={creator}&tzips.any=fa2&codeHash={codeHash}&" + + "select=address,tokensCount as tokens_count,lastActivity,lastActivityTime as last_activity_time" + + $",id&{sort}&limit={maxItems}"; + + var requestRoutine = GetJson>(url); + + yield return new CoroutineWrapper>(requestRoutine, callback, error => + { + callback.Invoke(new List()); + Logger.LogDebug($"Error during GetOriginatedContractsForOwner: {error}"); + }); + } + } + } \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/API/TokenContract.cs b/Runtime/Scripts/Tezos/API/TokenContract.cs new file mode 100644 index 00000000..18a6446a --- /dev/null +++ b/Runtime/Scripts/Tezos/API/TokenContract.cs @@ -0,0 +1,174 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Netezos.Contracts; +using Netezos.Encoding; +using Newtonsoft.Json.Linq; +using TezosSDK.Helpers.Coroutines; +using TezosSDK.Tezos.API.Models.Filters; +using TezosSDK.Tezos.API.Models.Tokens; +using TezosSDK.Tezos.Wallet; +using UnityEngine; +using Logger = TezosSDK.Helpers.Logger; + +namespace TezosSDK.Tezos.API +{ + + public class TokenContract : IFa2 + { + private readonly ITezosAPI _tezosAPI; + private readonly IWalletProvider _wallet; + + private Action _onDeployCompleted; + private Action _onMintCompleted; + private Action _onTransferCompleted; + + public TokenContract(string address) + { + _wallet = TezosManager.Instance.Wallet; + _tezosAPI = TezosManager.Instance.Tezos.API; + Address = address; + } + + public TokenContract() + { + _wallet = TezosManager.Instance.Wallet; + _tezosAPI = TezosManager.Instance.Tezos.API; + } + + public string Address { get; set; } + public int TokensCount { get; set; } + public DateTime LastActivityTime { get; set; } + + public void Mint( + Action completedCallback, + TokenMetadata tokenMetadata, + string destination, + int amount) + { + _onMintCompleted = completedCallback; + + Logger.LogDebug($"Minting {amount} tokens to {destination} with metadata {tokenMetadata}"); + + var getContractTokens = _tezosAPI.GetTokensForContract(TokensReceived, Address, false, 10_000, + new TokensForContractOrder.Default(0)); + + CoroutineRunner.Instance.StartWrappedCoroutine(getContractTokens); + + return; + + void TokensReceived(IEnumerable tokens) + { + var tokenId = tokens?.Count() ?? 0; + const string _entrypoint = "mint"; + + var mintParameters = GetContractScript().BuildParameter(_entrypoint, new + { + address = destination, + amount = amount.ToString(), + metadata = tokenMetadata.GetMetadataDict(), + token_id = tokenId.ToString() + }).ToJson(); + + _wallet.EventManager.ContractCallCompleted += MintCompleted; + _wallet.CallContract(Address, _entrypoint, mintParameters); + } + } + + public void Transfer(Action completedCallback, string destination, int tokenId, int amount) + { + _onTransferCompleted = completedCallback; + var activeAddress = _wallet.GetWalletAddress(); + const string _entry_point = "transfer"; + + var param = GetContractScript().BuildParameter(_entry_point, new List + { + new + { + from_ = activeAddress, + txs = new List + { + new + { + to_ = destination, + token_id = tokenId, + amount + } + } + } + }).ToJson(); + + _wallet.EventManager.ContractCallCompleted += TransferCompleted; + _wallet.CallContract(Address, _entry_point, param); + } + + public void Deploy(Action completedCallback) + { + _onDeployCompleted = completedCallback; + + var stringScript = Resources.Load("Contracts/FA2TokenContract").text; + var address = _wallet.GetWalletAddress(); + var scriptWithAdmin = stringScript.Replace("CONTRACT_ADMIN", address); + + _wallet.EventManager.ContractCallCompleted += DeployCompleted; + + _wallet.OriginateContract(scriptWithAdmin); + } + + private void MintCompleted(OperationResult operationResult) + { + var owner = _wallet.GetWalletAddress(); + + var getOwnerTokensCoroutine = _tezosAPI.GetTokensForOwner(GetTokensCallback, owner, true, 10_000, + new TokensForOwnerOrder.Default(0)); + + CoroutineRunner.Instance.StartWrappedCoroutine(getOwnerTokensCoroutine); + } + + private void GetTokensCallback(IEnumerable tokens) + { + _onMintCompleted.Invoke(tokens.Last()); + } + + private void TransferCompleted(OperationResult operationResult) + { + var transactionHash = operationResult.TransactionHash; + _onTransferCompleted.Invoke(transactionHash); + } + + private void DeployCompleted(OperationResult operationResult) + { + var codeHash = Resources.Load("Contracts/FA2TokenContractCodeHash").text; + var creator = _wallet.GetWalletAddress(); + + CoroutineRunner.Instance.StartWrappedCoroutine(_tezosAPI.GetOriginatedContractsForOwner(OnGetContracts, + creator, codeHash, 1000, new OriginatedContractsForOwnerOrder.Default(0))); + + return; + + void OnGetContracts(IEnumerable contracts) + { + var tokenContracts = contracts.ToList(); + + if (!tokenContracts.Any()) + { + return; + } + + var lastUsedContract = tokenContracts.Last(); + Address = lastUsedContract.Address; + PlayerPrefs.SetString("CurrentContract:" + creator, lastUsedContract.Address); + _onDeployCompleted.Invoke(lastUsedContract.Address); + } + } + + private ContractScript GetContractScript() + { + var script = Resources.Load("Contracts/FA2TokenContract").text; + var code = JObject.Parse(script).SelectToken("code"); + + return new ContractScript(Micheline.FromJson(code.ToString())); + } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/API/Models/TokenContract.cs.meta b/Runtime/Scripts/Tezos/API/TokenContract.cs.meta similarity index 100% rename from Runtime/Scripts/Tezos/API/Models/TokenContract.cs.meta rename to Runtime/Scripts/Tezos/API/TokenContract.cs.meta diff --git a/Runtime/Scripts/Tezos/DAppMetadata.cs b/Runtime/Scripts/Tezos/DAppMetadata.cs deleted file mode 100644 index c6b27a35..00000000 --- a/Runtime/Scripts/Tezos/DAppMetadata.cs +++ /dev/null @@ -1,20 +0,0 @@ -namespace TezosSDK.Tezos -{ - public class DAppMetadata - { - /// - /// SDK consumer DApp name. - /// - public string Name { get; set; } - - /// - /// SDK consumer App Url address, starts with https://. - /// - public string Url { get; set; } - - /// - /// SDK consumer Icon Url address, starts with https://. - /// - public string Icon { get; set; } - } -} \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/ITezos.cs b/Runtime/Scripts/Tezos/ITezos.cs deleted file mode 100644 index 795ff5e1..00000000 --- a/Runtime/Scripts/Tezos/ITezos.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using TezosSDK.Tezos.API; -using TezosSDK.Tezos.API.Models; -using TezosSDK.Tezos.API.Models.Abstract; -using TezosSDK.Tezos.Wallet; - -namespace TezosSDK.Tezos -{ - public interface ITezos - { - /// - /// Tezos chain data source - /// - ITezosAPI API { get; } - - /// - /// Wallet features - /// - IWalletProvider Wallet { get; } - - /// - /// Currently used FA2 Contract. - /// - IFA2 TokenContract { get; } - - /// - /// Current wallet tz balance. - /// - public IEnumerator GetCurrentWalletBalance(Action callback); - - /// - /// Get all originated contracts by the account. - /// - public IEnumerator GetOriginatedContracts(Action> callback); - } -} \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/Interfaces.meta b/Runtime/Scripts/Tezos/Interfaces.meta new file mode 100644 index 00000000..84627cf0 --- /dev/null +++ b/Runtime/Scripts/Tezos/Interfaces.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 455bbf0c060c4f2b974b790405eb4373 +timeCreated: 1704712579 \ No newline at end of file diff --git a/Runtime/Plugins/Newtonsoft.Json Editor.meta b/Runtime/Scripts/Tezos/Interfaces/API.meta similarity index 77% rename from Runtime/Plugins/Newtonsoft.Json Editor.meta rename to Runtime/Scripts/Tezos/Interfaces/API.meta index 52bdd3d6..603176d2 100644 --- a/Runtime/Plugins/Newtonsoft.Json Editor.meta +++ b/Runtime/Scripts/Tezos/Interfaces/API.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d5e42d032b0c4084b883d9d7f74a5ad8 +guid: acedca80e80646f4a66a643e8226c92c folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/Scripts/Tezos/Interfaces/API/IFa2.cs b/Runtime/Scripts/Tezos/Interfaces/API/IFa2.cs new file mode 100644 index 00000000..28639380 --- /dev/null +++ b/Runtime/Scripts/Tezos/Interfaces/API/IFa2.cs @@ -0,0 +1,40 @@ +using System; +using TezosSDK.Tezos.API.Models.Tokens; + +namespace TezosSDK.Tezos +{ + + public interface IFa2 + { + string Address { get; set; } + int TokensCount { get; set; } + DateTime LastActivityTime { get; set; } + + /// + /// Mint new token on current contract. + /// + /// + /// Executes after token minted with minted . + /// + /// . + /// Address on which token will be minted. + /// Amount of minted tokens. + void Mint(Action completedCallback, TokenMetadata tokenMetadata, string destination, int amount); + + /// + /// Transfer token from current address to destination. + /// + /// Executes after token transferred with transaction hash. + /// Receiver of a token. + /// ID of token. + /// Amount of transferred tokens. + void Transfer(Action completedCallback, string destination, int tokenId, int amount); + + /// + /// Deploy new instance of FA2 contract. + /// + /// Executes after contract deployed with contract address. + void Deploy(Action completedCallback); + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Beacon/BeaconMessageReceiver.cs.meta b/Runtime/Scripts/Tezos/Interfaces/API/IFa2.cs.meta similarity index 83% rename from Runtime/Scripts/Beacon/BeaconMessageReceiver.cs.meta rename to Runtime/Scripts/Tezos/Interfaces/API/IFa2.cs.meta index 374c30ef..0a40082e 100644 --- a/Runtime/Scripts/Beacon/BeaconMessageReceiver.cs.meta +++ b/Runtime/Scripts/Tezos/Interfaces/API/IFa2.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 33c9bb56e8c5b4bc5912aa677707c0be +guid: 8bd69022a01a4166b297a682099a239c MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/Scripts/Tezos/Interfaces/API/ITezosAPI.cs b/Runtime/Scripts/Tezos/Interfaces/API/ITezosAPI.cs new file mode 100644 index 00000000..046c8a10 --- /dev/null +++ b/Runtime/Scripts/Tezos/Interfaces/API/ITezosAPI.cs @@ -0,0 +1,99 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text.Json; +using TezosSDK.Tezos.API; +using TezosSDK.Tezos.API.Models.Filters; +using TezosSDK.Tezos.API.Models.Tokens; + +namespace TezosSDK.Tezos +{ + + public interface ITezosAPI + { + /// + /// An IEnumerator for reading the account's balance + /// Can be called in a StartCoroutine() + /// + /// callback action that runs with the float balance is fetched + /// tz address + /// + public IEnumerator GetTezosBalance(Action callback, string address); + + /// + /// An IEnumerator for reading data from a contract view + /// Can be called in a StartCoroutine() + /// + /// destination address of the smart contract + /// entry point used in the smart contract + /// parameters called on the entry point + /// callback action that runs with the json data is fetched + /// + public IEnumerator ReadView( + string contractAddress, + string entrypoint, + string input, + Action callback); + + // Gets all tokens currently owned by a given address. + public IEnumerator GetTokensForOwner( + Action> callback, + string owner, + bool withMetadata, + long maxItems, + TokensForOwnerOrder orderBy); + + // Get the owner(s) for a token. + public IEnumerator GetOwnersForToken( + Action> callback, + string contractAddress, + uint tokenId, + long maxItems, + OwnersForTokenOrder orderBy); + + // Gets all owners for a given token contract. + public IEnumerator GetOwnersForContract( + Action> callback, + string contractAddress, + long maxItems, + OwnersForContractOrder orderBy); + + // Checks whether a wallet holds a token in a given contract. + public IEnumerator IsHolderOfContract(Action callback, string wallet, string contractAddress); + + // Checks whether a wallet holds a particular token. + public IEnumerator IsHolderOfToken(Action callback, string wallet, string contractAddress, uint tokenId); + + // Gets the metadata associated with a given token. + public IEnumerator GetTokenMetadata(Action callback, string contractAddress, uint tokenId); + + // Queries token high-level collection/contract level information. + public IEnumerator GetContractMetadata(Action callback, string contractAddress); + + // Gets all tokens for a given token contract. + public IEnumerator GetTokensForContract( + Action> callback, + string contractAddress, + bool withMetadata, + long maxItems, + TokensForContractOrder orderBy); + + // Returns operation status: true if applied, false if failed, null (or HTTP 204) if doesn't exist. + public IEnumerator GetOperationStatus(Action callback, string operationHash); + + // Returns a level of the block closest to the current timestamp. + public IEnumerator GetLatestBlockLevel(Action callback); + + // Get account's counter. + public IEnumerator GetAccountCounter(Action callback, string address); + + // Get list of originated contracts by creator + public IEnumerator GetOriginatedContractsForOwner( + Action> callback, + string creator, + string codeHash, + long maxItems, + OriginatedContractsForOwnerOrder orderBy); + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/API/ITezosAPI.cs.meta b/Runtime/Scripts/Tezos/Interfaces/API/ITezosAPI.cs.meta similarity index 100% rename from Runtime/Scripts/Tezos/API/ITezosAPI.cs.meta rename to Runtime/Scripts/Tezos/Interfaces/API/ITezosAPI.cs.meta diff --git a/Runtime/Scripts/Tezos/Interfaces/ITezos.cs b/Runtime/Scripts/Tezos/Interfaces/ITezos.cs new file mode 100644 index 00000000..7ba7e92d --- /dev/null +++ b/Runtime/Scripts/Tezos/Interfaces/ITezos.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using TezosSDK.Tezos.API; +using TezosSDK.Tezos.Wallet; + +namespace TezosSDK.Tezos +{ + + public interface ITezos + { + /// + /// Tezos chain data source + /// + ITezosAPI API { get; } + + /// + /// Wallet features + /// + IWalletProvider Wallet { get; } + + /// + /// Currently used FA2 Contract. + /// + IFa2 TokenContract { get; set; } + + /// + /// Current wallet tz balance. + /// + public IEnumerator GetCurrentWalletBalance(Action callback); + + /// + /// Get all originated contracts by the account. + /// + public IEnumerator GetOriginatedContracts(Action> callback); + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/ITezos.cs.meta b/Runtime/Scripts/Tezos/Interfaces/ITezos.cs.meta similarity index 100% rename from Runtime/Scripts/Tezos/ITezos.cs.meta rename to Runtime/Scripts/Tezos/Interfaces/ITezos.cs.meta diff --git a/Runtime/Scripts/Tezos/Interfaces/Wallet.meta b/Runtime/Scripts/Tezos/Interfaces/Wallet.meta new file mode 100644 index 00000000..c5075216 --- /dev/null +++ b/Runtime/Scripts/Tezos/Interfaces/Wallet.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c06b617232a343c8a3a1319ce46436e8 +timeCreated: 1704714502 \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/Interfaces/Wallet/IWalletEventManager.cs b/Runtime/Scripts/Tezos/Interfaces/Wallet/IWalletEventManager.cs new file mode 100644 index 00000000..bf1b189d --- /dev/null +++ b/Runtime/Scripts/Tezos/Interfaces/Wallet/IWalletEventManager.cs @@ -0,0 +1,108 @@ +using System; + +namespace TezosSDK.Tezos.Wallet +{ + + public interface IWalletEventManager + { + /// + /// Processes the incoming event data and dispatches it to the corresponding event + /// based on the . + /// + /// + /// The to be handled, which contains + /// the event type and data (if any). + /// + void HandleEvent(UnifiedEvent unifiedEvent); + + /// + /// Runs when a call to a smart contract is confirmed on the blockchain. Provides the result of the call. + /// + /// + /// Provides an object with the transaction hash and success status. + /// This event is fired when a blockchain operation completes and has been injected into the blockchain. + /// The result includes the transaction hash and an indication of whether it was successful. + /// + event Action ContractCallCompleted; + + /// + /// Runs when a call to a smart contract fails. Provides error details. + /// + /// + /// Provides an object containing the error message of the failed contract call. + /// It is triggered when a contract call attempted by the wallet encounters an error. + /// + event Action ContractCallFailed; + + /// + /// Runs when a call to a smart contract is sent to Tezos but before it has been included in a block and confirmed. + /// Provides the hash of the transaction. + /// + /// + /// Provides an object containing the transaction hash and success status after the + /// contract call is injected. + /// It is triggered after an operation request (like a contract call) is sent successfully to the blockchain network. + /// + event Action ContractCallInjected; + + /// + /// Runs when a handshake with a user's wallet application is received. Provides the handshake details. + /// + /// + /// Provides a object with the pairing information required for user completion. + /// This event is triggered as part of the pairing process. The handshake data may include a QR code or other + /// information necessary to complete pairing with a DApp. + /// + event Action HandshakeReceived; + + /// + /// Runs when the user's wallet is connected but before the user has approved the connection in the wallet app. + /// Provides details of the pairing completion. + /// Note: This event is not supported in WebGL builds. + /// + /// + /// Provides a object with details about the pairing, such as the DApp's public key and + /// the timestamp of pairing completion. + /// Triggered when the pairing between the Tezos wallet and a DApp is completed. Reveals public key and a timestamp + /// indicating when the pairing was finalized. + /// + event Action PairingCompleted; + + /// + /// Runs when the user signs a payload. Provides the sign result. + /// + /// + /// Provides a object containing the signature value. + /// The event is triggered in response to a successful payload signing request. + /// + event Action PayloadSigned; + + /// + /// Runs when an account connects successfully. Provides the account information. + /// + /// + /// Provides an object containing the address and public key of the connected account. + /// It is triggered in response to a successful connection action from the wallet. + /// + event Action WalletConnected; + + /// + /// Runs when a connection to an account fails. Provides error information. + /// + /// + /// Provides an object containing the error message of the failed connection attempt. + /// It is triggered when a connection attempt to an account encounters an error. + /// + event Action WalletConnectionFailed; + + /// + /// Runs when an account disconnects successfully. Provides the account information. + /// + /// + /// Provides an object containing the address and public key of the disconnected account. + /// It is triggered in response to a successful disconnection action from the wallet. + /// + event Action WalletDisconnected; + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/Interfaces/Wallet/IWalletEventManager.cs.meta b/Runtime/Scripts/Tezos/Interfaces/Wallet/IWalletEventManager.cs.meta new file mode 100644 index 00000000..5bfb9f87 --- /dev/null +++ b/Runtime/Scripts/Tezos/Interfaces/Wallet/IWalletEventManager.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2bed22525b51460c8335d7c055413708 +timeCreated: 1704714532 \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/Interfaces/Wallet/IWalletProvider.cs b/Runtime/Scripts/Tezos/Interfaces/Wallet/IWalletProvider.cs new file mode 100644 index 00000000..f1be53cd --- /dev/null +++ b/Runtime/Scripts/Tezos/Interfaces/Wallet/IWalletProvider.cs @@ -0,0 +1,65 @@ +using Beacon.Sdk.Beacon.Sign; + +namespace TezosSDK.Tezos.Wallet +{ + + public interface + IWalletProvider // TODO: Some of these need to be moved to IBeaconConnector and/or to another interface + { + /// + /// Exposes a MonoBehaviour class that exposes wallet events + /// + IWalletEventManager EventManager { get; } + + bool IsConnected { get; } + + HandshakeData HandshakeData { get; } + + /// + /// Makes a call to connect with a wallet + /// + void Connect(WalletProviderType walletProvider); + + /// + /// Unpair with wallet and disconnect + /// + void Disconnect(); + + /// + /// Returns the address of the current active wallet + /// + /// + string GetWalletAddress(); + + /// + /// Sends a request to the sign a payload string + /// + /// type of payload: raw, operation or micheline + /// payload string that is going to be signed + void RequestSignPayload(SignPayloadType signingType, string payload); + + /// + /// Verify a signed payload to check if it is valid + /// + /// type of payload: raw, operation or micheline + /// payload string that is going to be signed + bool VerifySignedPayload(SignPayloadType signingType, string payload); + + /// + /// Performs an operation in the contract + /// + /// destination address of the smart contract + /// entry point used in the smart contract + /// parameters called on the entry point + /// amount of Tez sent into the contract + void CallContract(string contractAddress, string entryPoint, string input, ulong amount = 0); + + /// + /// Originate new contract. + /// + /// Code of contract + /// Delegator address + void OriginateContract(string script, string delegateAddress = null); + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/Wallet/IWalletProvider.cs.meta b/Runtime/Scripts/Tezos/Interfaces/Wallet/IWalletProvider.cs.meta similarity index 100% rename from Runtime/Scripts/Tezos/Wallet/IWalletProvider.cs.meta rename to Runtime/Scripts/Tezos/Interfaces/Wallet/IWalletProvider.cs.meta diff --git a/Runtime/Scripts/Tezos/Managers.meta b/Runtime/Scripts/Tezos/Managers.meta new file mode 100644 index 00000000..4f90de4f --- /dev/null +++ b/Runtime/Scripts/Tezos/Managers.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3e542dad39c84238977cf09cc3979236 +timeCreated: 1704712637 \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/Managers/TezosAuthenticator.cs b/Runtime/Scripts/Tezos/Managers/TezosAuthenticator.cs new file mode 100644 index 00000000..5003728e --- /dev/null +++ b/Runtime/Scripts/Tezos/Managers/TezosAuthenticator.cs @@ -0,0 +1,167 @@ +using TezosSDK.Helpers; +using UnityEngine; +using UnityEngine.UI; +using Logger = TezosSDK.Helpers.Logger; + +namespace TezosSDK.Tezos +{ + + public class TezosAuthenticator : MonoBehaviour + { + [SerializeField] private QrCodeGenerator qrCodeGenerator; + [SerializeField] private GameObject deepLinkButton; + [SerializeField] private GameObject socialLoginButton; + [SerializeField] private GameObject logoutButton; + [SerializeField] private Image darkBG; + + // Platform flags to determine the current running platform + private bool _isMobile; + private bool _isWebGL; + + private ITezos Tezos { get; set; } + + private void Start() + { + Tezos = TezosManager.Instance.Tezos; + SubscribeToEvents(); + SetPlatformFlags(); + + if (Tezos.Wallet.IsConnected) + { + Logger.LogDebug("TezosAuthenticator.Start: Wallet is connected"); + ToggleUIElements(true); + } + else + { + Logger.LogDebug("TezosAuthenticator.Start: Wallet is not connected"); + ToggleUIElements(false); + + // Call Connect() only when on standalone + if (!_isWebGL && !_isMobile) + { + Tezos.Wallet.Connect(WalletProviderType.beacon); + } + } + } + + private void Update() + { + if (Input.GetKeyDown(KeyCode.Return)) + { + Tezos.Wallet.Connect(WalletProviderType.beacon); + } + + if (Input.GetKeyDown(KeyCode.Escape)) + { + Tezos.Wallet.Disconnect(); + } + } + + private void OnEnable() + { + Logger.LogDebug("TezosAuthenticator.OnEnable"); + + if (TezosManager.Instance != null && !TezosManager.Instance.Wallet.IsConnected && + TezosManager.Instance.Wallet.HandshakeData != null) + { + qrCodeGenerator.SetQrCode(TezosManager.Instance.Wallet.HandshakeData); + } + } + + private void OnDisable() + { + Logger.LogDebug("TezosAuthenticator.OnDisable"); + UnsubscribeFromEvents(); + } + + private void OnDestroy() + { + Logger.LogDebug("TezosAuthenticator.OnDestroy"); + UnsubscribeFromEvents(); + } + + private void OnHandshakeReceived(HandshakeData handshakeData) + { + Logger.LogDebug("TezosAuthenticator.OnHandshakeReceived"); + qrCodeGenerator.SetQrCode(handshakeData); + } + + private void OnWalletConnected(WalletInfo walletInfo) + { + Logger.LogDebug("TezosAuthenticator.OnWalletConnected"); + ToggleUIElements(true); + } + + public void ConnectByDeeplink() + { + Logger.LogDebug("TezosAuthenticator.ConnectByDeeplink"); + Tezos.Wallet.Connect(WalletProviderType.beacon); + } + + public void ConnectWithSocial() + { + Logger.LogDebug("TezosAuthenticator.ConnectWithSocial"); + Tezos.Wallet.Connect(WalletProviderType.kukai); + } + + public void DisconnectWallet() + { + Tezos.Wallet.Disconnect(); + } + + private void SetPlatformFlags() + { + _isMobile = Application.platform == RuntimePlatform.IPhonePlayer || + Application.platform == RuntimePlatform.Android; + + _isWebGL = Application.platform == RuntimePlatform.WebGLPlayer; + } + + private void SubscribeToEvents() + { + // Subscribe to wallet events for handling user authentication. + Tezos.Wallet.EventManager.HandshakeReceived += OnHandshakeReceived; + Tezos.Wallet.EventManager.WalletConnected += OnWalletConnected; + } + + /// + /// Toggles the UI elements based on authentication status. + /// + /// Indicates whether the user is authenticated. + private void ToggleUIElements(bool isAuthenticated) + { + Logger.LogDebug($"ToggleUIElements: isAuthenticated: {isAuthenticated}"); + + if (isAuthenticated) + { + deepLinkButton.SetActive(false); + socialLoginButton.SetActive(false); + qrCodeGenerator.gameObject.SetActive(false); + darkBG.gameObject.SetActive(false); + } + else + { + // Activate deepLinkButton when on mobile or WebGL, but not authenticated + deepLinkButton.SetActive(_isMobile || _isWebGL); + + // Activate socialLoginButton only when on WebGL and not authenticated + socialLoginButton.SetActive(_isWebGL); + + // Activate qrCodePanel only on standalone and not authenticated + qrCodeGenerator.gameObject.SetActive(!_isMobile && !_isWebGL); + + darkBG.gameObject.SetActive(true); + } + + logoutButton.SetActive(isAuthenticated); + } + + private void UnsubscribeFromEvents() + { + Logger.LogDebug("TezosAuthenticator.UnsubscribeFromEvents"); + TezosManager.Instance.Wallet.EventManager.HandshakeReceived -= OnHandshakeReceived; + TezosManager.Instance.Wallet.EventManager.WalletConnected -= OnWalletConnected; + } + } + +} \ No newline at end of file diff --git a/Runtime/View/AuthenticationManager.cs.meta b/Runtime/Scripts/Tezos/Managers/TezosAuthenticator.cs.meta similarity index 100% rename from Runtime/View/AuthenticationManager.cs.meta rename to Runtime/Scripts/Tezos/Managers/TezosAuthenticator.cs.meta diff --git a/Runtime/Scripts/Tezos/Managers/TezosManager.cs b/Runtime/Scripts/Tezos/Managers/TezosManager.cs new file mode 100644 index 00000000..a3f922d9 --- /dev/null +++ b/Runtime/Scripts/Tezos/Managers/TezosManager.cs @@ -0,0 +1,113 @@ +using Beacon.Sdk.Beacon.Permission; +using TezosSDK.Beacon; +using TezosSDK.Tezos.Wallet; +using UnityEngine; +using Logger = TezosSDK.Helpers.Logger; + +namespace TezosSDK.Tezos +{ + + public class TezosManager : MonoBehaviour + { + [Header("App Configurations")] + [SerializeField] private string appName = "Default App Name"; + [SerializeField] private string appUrl = "https://tezos.com"; + [SerializeField] private string appIcon = "https://tezos.com/favicon.ico"; + [SerializeField] private string appDescription = "App Description"; + + [Space(20)] + [Header("SDK Configuration")] + [SerializeField] private TezosConfigSO config; + + [Tooltip("Logs will be printed to the console if the log level is equal or higher than this value.")] + [SerializeField] private Logger.LogLevel logLevel = Logger.LogLevel.Debug; + public static TezosManager Instance; + + public IBeaconConnector BeaconConnector { get; private set; } + + public TezosConfigSO Config + { + get => config; + } + + public DAppMetadata DAppMetadata { get; private set; } + + public WalletEventManager EventManager { get; private set; } + + public ITezos Tezos { get; private set; } + + public IWalletProvider Wallet + { + get => Tezos?.Wallet; + } + + protected void Awake() + { + if (Instance != null) + { + Destroy(gameObject); + return; + } + + Instance = this; + + ValidateConfig(); + CreateEventManager(); + InitializeTezos(); + DontDestroyOnLoad(gameObject); + } + + private void CreateEventManager() + { + // Create or get a WalletMessageReceiver Game object to receive callback messages + var eventManager = GameObject.Find("WalletEventManager"); + + EventManager = eventManager != null + ? eventManager.GetComponent() + : new GameObject("WalletEventManager").AddComponent(); + + DontDestroyOnLoad(EventManager); + } + + private void InitializeTezos() + { + Logger.CurrentLogLevel = logLevel; + + Logger.LogDebug("Tezos SDK initializing..."); + + DAppMetadata = new DAppMetadata(appName, appUrl, appIcon, appDescription); + + BeaconConnector = BeaconConnectorFactory.CreateConnector(Application.platform, EventManager); + + Tezos = new Tezos(config, EventManager, BeaconConnector); + + Logger.LogDebug("Tezos SDK initialized"); + EventManager.DispatchSDKInitializedEvent(); + } + + private void ValidateConfig() + { + if (Config.Network == NetworkType.mainnet) + { + Debug.LogWarning("You are using Mainnet. Make sure you are not using Mainnet for testing purposes."); + } + + if (Config.Network != Config.DataProvider.Network) + { + Debug.LogError("Networks for RPC and Data Provider are different. Make sure they are the same."); + } + + if (string.IsNullOrEmpty(Config.PinataApiKey)) + { + Debug.LogWarning( + "Pinata API key is not set in TezosConfigSO. You will not be able to upload images to IPFS."); + } + + if (Config.DataProvider == null) + { + Debug.LogError("Data provider is not set in TezosConfigSO. You will not be able to query data."); + } + } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/Managers/TezosManager.cs.meta b/Runtime/Scripts/Tezos/Managers/TezosManager.cs.meta new file mode 100644 index 00000000..e52bccc4 --- /dev/null +++ b/Runtime/Scripts/Tezos/Managers/TezosManager.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f9e320857b38440ba4ec94ca9b329f4d +timeCreated: 1698604826 \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/Managers/WalletEventManager.cs b/Runtime/Scripts/Tezos/Managers/WalletEventManager.cs new file mode 100644 index 00000000..0fb0a664 --- /dev/null +++ b/Runtime/Scripts/Tezos/Managers/WalletEventManager.cs @@ -0,0 +1,478 @@ +using System; +using System.Linq; +using TezosSDK.Patterns; +using TezosSDK.Tezos.Wallet; +using UnityEngine; +using Logger = TezosSDK.Helpers.Logger; + +// ReSharper disable InconsistentNaming + +namespace TezosSDK.Tezos +{ + + /// + /// Manages event propagation within a Unity environment for wallet-related actions specific to the Tezos blockchain. + /// Handles incoming JSON event data and triggers corresponding C# events to handle these wallet actions. + /// + public class WalletEventManager : SingletonMonoBehaviour, IWalletEventManager + { + public const string EventTypeContractCallCompleted = "ContractCallCompleted"; + public const string EventTypeContractCallFailed = "ContractCallFailed"; + public const string EventTypeContractCallInjected = "ContractCallInjected"; + public const string EventTypeHandshakeReceived = "HandshakeReceived"; + public const string EventTypePairingDone = "PairingDone"; + public const string EventTypePayloadSigned = "PayloadSigned"; + public const string EventTypeSDKInitialized = "SDKInitialized"; + public const string EventTypeWalletConnected = "AccountConnected"; + public const string EventTypeWalletConnectionFailed = "AccountConnectionFailed"; + public const string EventTypeWalletDisconnected = "AccountDisconnected"; + + /// + /// Runs when the SDK is initialized successfully. + /// + /// + /// This event is triggered after the SDK has completed its initialization process. + /// + public event Action SDKInitialized + { + add + { + if (sdkInitialized == null || !sdkInitialized.GetInvocationList().Contains(value)) + { + sdkInitialized += value; + } + } + remove => sdkInitialized -= value; + } + + private event Action contractCallCompleted; + private event Action contractCallFailed; + private event Action contractCallInjected; + private event Action handshakeReceived; + private event Action pairingCompleted; + private event Action payloadSigned; + private event Action sdkInitialized; + private event Action walletConnected; + private event Action walletConnectionFailed; + private event Action walletDisconnected; + + #region IWalletEventManager Implementation + + /// + /// Runs when a call to a smart contract is confirmed on the blockchain. Provides the result of the call. + /// + /// + /// Provides an object with the transaction hash and success status. + /// This event is fired when a blockchain operation completes and has been injected into the blockchain. + /// The result includes the transaction hash and an indication of whether it was successful. + /// + public event Action ContractCallCompleted + { + add + { + if (contractCallCompleted == null || !contractCallCompleted.GetInvocationList().Contains(value)) + { + contractCallCompleted += value; + } + } + remove => contractCallCompleted -= value; + } + + /// + /// Runs when a call to a smart contract fails. Provides error details. + /// + /// + /// Provides an object containing the error message of the failed contract call. + /// It is triggered when a contract call attempted by the wallet encounters an error. + /// + public event Action ContractCallFailed + { + add + { + if (contractCallFailed == null || !contractCallFailed.GetInvocationList().Contains(value)) + { + contractCallFailed += value; + } + } + remove => contractCallFailed -= value; + } + + /// + /// Runs when a call to a smart contract is sent to Tezos but before it has been included in a block and confirmed. + /// Provides the hash of the transaction. + /// + /// + /// Provides an object containing the transaction hash and success status after the + /// contract call is injected. + /// It is triggered after an operation request (like a contract call) is sent successfully to the blockchain network. + /// + public event Action ContractCallInjected + { + add + { + if (contractCallInjected == null || !contractCallInjected.GetInvocationList().Contains(value)) + { + contractCallInjected += value; + } + } + remove => contractCallInjected -= value; + } + + /// + /// Runs when a handshake with a user's wallet application is received. Provides the handshake details. + /// + /// + /// Provides a object with the pairing information required for user completion. + /// This event is triggered as part of the pairing process. The handshake data may include a QR code or other + /// information necessary to complete pairing with a DApp. + /// + public event Action HandshakeReceived + { + add + { + if (handshakeReceived == null || !handshakeReceived.GetInvocationList().Contains(value)) + { + handshakeReceived += value; + } + } + remove => handshakeReceived -= value; + } + + /// + /// Runs when the user's wallet is connected but before the user has approved the connection in the wallet app. + /// Provides details of the pairing completion. + /// Note: This event is not supported in WebGL builds. + /// + /// + /// Provides a object with details about the pairing, such as the DApp's public key and + /// the timestamp of pairing completion. + /// Triggered when the pairing between the Tezos wallet and a DApp is completed. Reveals public key and a timestamp + /// indicating when the pairing was finalized. + /// + public event Action PairingCompleted + { + add + { +#if UNITY_WEBGL + Logger.LogWarning("PairingCompleted event is not supported in WebGL builds."); +#endif + + if (pairingCompleted == null || !pairingCompleted.GetInvocationList().Contains(value)) + { + pairingCompleted += value; + } + } + remove => pairingCompleted -= value; + } + + /// + /// Runs when the user signs a payload. Provides the sign result. + /// + /// + /// Provides a object containing the signature value. + /// The event is triggered in response to a successful payload signing request. + /// + public event Action PayloadSigned + { + add + { + if (payloadSigned == null || !payloadSigned.GetInvocationList().Contains(value)) + { + payloadSigned += value; + } + } + remove => payloadSigned -= value; + } + + /// + /// Runs when an account connects successfully. Provides the account information. + /// + /// + /// Provides an object containing the address and public key of the connected account. + /// It is triggered in response to a successful connection action from the wallet. + /// + public event Action WalletConnected + { + add + { + if (walletConnected == null || !walletConnected.GetInvocationList().Contains(value)) + { + walletConnected += value; + } + } + remove => walletConnected -= value; + } + + /// + /// Runs when a connection to an account fails. Provides error information. + /// + /// + /// Provides an object containing the error message of the failed connection attempt. + /// It is triggered when a connection attempt to an account encounters an error. + /// + public event Action WalletConnectionFailed + { + add + { + if (walletConnectionFailed == null || !walletConnectionFailed.GetInvocationList().Contains(value)) + { + walletConnectionFailed += value; + } + } + remove => walletConnectionFailed -= value; + } + + /// + /// Runs when an account disconnects successfully. Provides the account information. + /// + /// + /// Provides an object containing the address and public key of the disconnected account. + /// It is triggered in response to a successful disconnection action from the wallet. + /// + public event Action WalletDisconnected + { + add + { + if (walletDisconnected == null || !walletDisconnected.GetInvocationList().Contains(value)) + { + walletDisconnected += value; + } + } + remove => walletDisconnected -= value; + } + + /// + /// Processes the incoming event data and dispatches it to the corresponding event + /// based on the . + /// + /// + /// The to be handled, which contains + /// the event type and data (if any). + /// + public void HandleEvent(UnifiedEvent unifiedEvent) + { + var jsonEventData = JsonUtility.ToJson(unifiedEvent); + HandleEvent(jsonEventData); + } + + #endregion + + public void DispatchSDKInitializedEvent() + { + var sdkInitializedEvent = new UnifiedEvent(EventTypeSDKInitialized); + + HandleEvent(sdkInitializedEvent); + } + + /// + /// Processes the incoming JSON event data and dispatches it to the corresponding event based on the event type. + /// + /// + /// The JSON string representing the event data, which includes the event type and associated + /// data. + /// + /// + /// The method decodes the JSON event data, identifies the type of event, and invokes the corresponding + /// event handler with the proper deserialized event data object. + /// + /// + /// JSON strings are used to enable communication between the Unity environment and WebGL builds. + /// + private void HandleEvent(string jsonEventData) + { + try + { + var eventData = JsonUtility.FromJson(jsonEventData); + + switch (eventData.GetEventType()) + { + case EventTypeHandshakeReceived: + HandleEvent(eventData.GetData(), handshakeReceived); + break; + case EventTypePairingDone: + HandleEvent(eventData.GetData(), pairingCompleted); + break; + case EventTypeWalletConnected: + HandleEvent(eventData.GetData(), walletConnected); + break; + case EventTypeWalletConnectionFailed: + HandleEvent(eventData.GetData(), walletConnectionFailed); + break; + case EventTypeWalletDisconnected: + HandleEvent(eventData.GetData(), walletDisconnected); + break; + case EventTypeContractCallInjected: + HandleEvent(eventData.GetData(), contractCallInjected); + break; + case EventTypeContractCallCompleted: + HandleEvent(eventData.GetData(), contractCallCompleted); + break; + case EventTypeContractCallFailed: + HandleEvent(eventData.GetData(), contractCallFailed); + break; + case EventTypePayloadSigned: + HandleEvent(eventData.GetData(), payloadSigned); + break; + case EventTypeSDKInitialized: + sdkInitialized?.Invoke(); + break; + default: + Debug.LogWarning($"Unhandled event type: {eventData.GetEventType()}"); + break; + } + } + catch (Exception ex) + { + Logger.LogError($"Error parsing event data: {ex.Message}\nData: {jsonEventData}"); + } + } + + /// + /// Deserializes the event data and invokes the corresponding event delegate. + /// + /// The type of the event data object. + /// The JSON string representing the event data to be deserialized. + /// The action delegate to invoke with the deserialized event data. + /// + /// This method deserializes the JSON string into an object of type + /// and then invokes the provided delegate with the deserialized object. + /// It is designed to be called within a switch-case structure that handles each specific event type. + /// + private void HandleEvent(object data, Action eventAction) + { + var deserializedData = JsonUtility.FromJson(data.ToString()); + eventAction?.Invoke(deserializedData); + } + } + + /// + /// Contains information related to the successful completion of a pairing between the Tezos wallet and a DApp. + /// + [Serializable] + public class PairingDoneData + { + /// + /// The public key of the paired DApp, which is used to identify the DApp on the Tezos blockchain. + /// + public string DAppPublicKey; // Public key of the paired DApp + + /// + /// The timestamp indicating the exact time when the pairing was completed. This can be used for logging or + /// verification purposes. + /// + public string Timestamp; // Timestamp to be possibly used for logging actions + } + + /// + /// Represents data required for the wallet to complete the pairing process with a decentralized application (DApp). + /// + [Serializable] + public class HandshakeData + { + /// + /// The data needed for the user to complete the pairing, which may be a QR code or deep link. + /// + public string PairingData; + } + + /// + /// Contains information about a Tezos account, including the address and public key. + /// + [Serializable] + public class WalletInfo + { + /// + /// The Tezos wallet address. + /// + public string Address; + + /// + /// The public key associated with the Tezos wallet. + /// + public string PublicKey; + } + + /// + /// Contains error information, primarily used when an operation or connection attempt fails. + /// + [Serializable] + public class ErrorInfo + { + /// + /// The error message providing details about the failure. + /// + public string Message; + } + + /// + /// Contains the result of a blockchain operation, indicating its success and transaction details. + /// + [Serializable] + public class OperationResult + { + /// + /// The hash of the transaction associated with the operation. + /// + public string TransactionHash; + } + + /// + /// Contains the result of a payload signing operation. + /// + [Serializable] + public class SignResult + { + /// + /// The signature resulting from the payload signing operation. + /// + public string Signature; + } + + /// + /// Represents a general structure for an event containing its type and associated data. + /// It is used to unify event messages for processing by event handlers. + /// + [Serializable] + public class UnifiedEvent + { + [SerializeField] private string EventType; + [SerializeField] private string Data; + + /// + /// Initializes a new instance of the class. + /// + /// + /// Specifies the type of event. + /// The event type is used to determine which event handler to invoke. + /// For a list of event types, see . + /// + /// + /// + /// + /// Contains the data associated with the event in a JSON string format, + /// which is further parsed in specific event handlers. + /// + /// + /// The data for a event + /// is a object serialized into a JSON string. + /// + public UnifiedEvent(string eventType, string data = null) + { + data ??= "{}"; + + EventType = eventType; + Data = data; + } + + public string GetData() + { + return Data; + } + + public string GetEventType() + { + return EventType; + } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/Managers/WalletEventManager.cs.meta b/Runtime/Scripts/Tezos/Managers/WalletEventManager.cs.meta new file mode 100644 index 00000000..f421bfb8 --- /dev/null +++ b/Runtime/Scripts/Tezos/Managers/WalletEventManager.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 707fb05e64c64280ab7cc68992aec253 +timeCreated: 1699964994 \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/Models.meta b/Runtime/Scripts/Tezos/Models.meta new file mode 100644 index 00000000..19f9eeb5 --- /dev/null +++ b/Runtime/Scripts/Tezos/Models.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1562e1f5851b4598859f0e85b858161b +timeCreated: 1704712804 \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/Models/DAppMetadata.cs b/Runtime/Scripts/Tezos/Models/DAppMetadata.cs new file mode 100644 index 00000000..a2cff359 --- /dev/null +++ b/Runtime/Scripts/Tezos/Models/DAppMetadata.cs @@ -0,0 +1,23 @@ +using System; + +namespace TezosSDK.Tezos +{ + + [Serializable] + public class DAppMetadata + { + public DAppMetadata(string name, string url, string icon, string description) + { + Name = name; + Url = url; + Icon = icon; + Description = description; + } + + public string Description { get; private set; } + public string Icon { get; private set; } + public string Name { get; private set; } + public string Url { get; private set; } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/DAppMetadata.cs.meta b/Runtime/Scripts/Tezos/Models/DAppMetadata.cs.meta similarity index 100% rename from Runtime/Scripts/Tezos/DAppMetadata.cs.meta rename to Runtime/Scripts/Tezos/Models/DAppMetadata.cs.meta diff --git a/Runtime/Scripts/Tezos/Models/WalletProviderType.cs b/Runtime/Scripts/Tezos/Models/WalletProviderType.cs new file mode 100644 index 00000000..787e1111 --- /dev/null +++ b/Runtime/Scripts/Tezos/Models/WalletProviderType.cs @@ -0,0 +1,12 @@ +// ReSharper disable InconsistentNaming + +namespace TezosSDK.Tezos +{ + + public enum WalletProviderType + { + beacon, + kukai + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/Wallet/WalletProviderType.cs.meta b/Runtime/Scripts/Tezos/Models/WalletProviderType.cs.meta similarity index 100% rename from Runtime/Scripts/Tezos/Wallet/WalletProviderType.cs.meta rename to Runtime/Scripts/Tezos/Models/WalletProviderType.cs.meta diff --git a/Runtime/Scripts/Tezos/ScriptableObjects.meta b/Runtime/Scripts/Tezos/ScriptableObjects.meta new file mode 100644 index 00000000..8a0625c4 --- /dev/null +++ b/Runtime/Scripts/Tezos/ScriptableObjects.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f6c5d4b8a3cd4a7d9198db3e91f0d60d +timeCreated: 1704649040 \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/ScriptableObjects/DataProviderConfigSO.cs b/Runtime/Scripts/Tezos/ScriptableObjects/DataProviderConfigSO.cs new file mode 100644 index 00000000..d40cbc2e --- /dev/null +++ b/Runtime/Scripts/Tezos/ScriptableObjects/DataProviderConfigSO.cs @@ -0,0 +1,46 @@ +using Beacon.Sdk.Beacon.Permission; +using UnityEngine; + +namespace TezosSDK.Tezos +{ + + [CreateAssetMenu(fileName = "DataProviderConfigSO", menuName = "Tezos/Data Provider Configuration", order = 2)] + public class DataProviderConfigSO : ScriptableObject + { + [Tooltip("Select the network to use for querying data.")] + [SerializeField] private NetworkType network = NetworkType.ghostnet; + + // The URL format string for the base API endpoint. Use {network} as a placeholder for the network type. + // Example format: "https://api.{network}.tzkt.io/v1/" + // If NetworkType is set to 'ghostnet', the resulting URL will be: "https://api.ghostnet.tzkt.io/v1/" + [Tooltip("The URL format for the base API endpoint. Use {network} as a placeholder for the network type.")] + [SerializeField] private string baseUrlFormat = "https://api.{network}.tzkt.io/v1/"; + + [Tooltip("Timeout for requests to the data provider.")] + [SerializeField] private int requestTimeoutSeconds = 45; + + [Tooltip("URL to the documentation of the data provider. (Optional)")] + [SerializeField] private string documentationUrl = "https://api.tzkt.io/"; + + public string BaseUrl + { + get => baseUrlFormat.Replace("{network}", network.ToString()); + } + + public string DocumentationUrl + { + get => documentationUrl; + } + + public NetworkType Network + { + get => network; + } + + public int RequestTimeoutSeconds + { + get => requestTimeoutSeconds; + } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/ScriptableObjects/DataProviderConfigSO.cs.meta b/Runtime/Scripts/Tezos/ScriptableObjects/DataProviderConfigSO.cs.meta new file mode 100644 index 00000000..858ab60a --- /dev/null +++ b/Runtime/Scripts/Tezos/ScriptableObjects/DataProviderConfigSO.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 302ae0521ba8483487d9f920d803356a +timeCreated: 1704630862 \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/ScriptableObjects/TezosConfigSO.cs b/Runtime/Scripts/Tezos/ScriptableObjects/TezosConfigSO.cs new file mode 100644 index 00000000..71f12738 --- /dev/null +++ b/Runtime/Scripts/Tezos/ScriptableObjects/TezosConfigSO.cs @@ -0,0 +1,76 @@ +using Beacon.Sdk.Beacon.Permission; +using UnityEngine; + +namespace TezosSDK.Tezos +{ + + [CreateAssetMenu(fileName = "TezosConfigSO", menuName = "Tezos/Configuration", order = 1)] + public class TezosConfigSO : ScriptableObject + { + [Tooltip("Select the network to use for chain interactions.")] + [SerializeField] private NetworkType network = NetworkType.ghostnet; + + // The URL format string for the RPC endpoint. Use {network} as a placeholder for the network type. + // Example format: "https://{network}.tezos.marigold.dev" + // If NetworkType is set to 'ghostnet', the resulting URL will be: "https://ghostnet.tezos.marigold.dev" + [Tooltip("The URL format for the RPC endpoint. Use {network} as a placeholder for the network type.")] + [SerializeField] private string rpcUrlFormat = "https://{network}.tezos.marigold.dev"; + + [Tooltip("Timeout for requests to the chain.")] + [SerializeField] private int requestTimeoutSeconds = 45; + + [Tooltip("Create API key in Pinata service https://app.pinata.cloud/developers/api-keys and paste JWT value " + + "here to be able to upload images to IPFS.")] + [SerializeField] private string pinataApiKey; + + [Tooltip("Data provider to use for querying data.")] + [SerializeField] private DataProviderConfigSO dataProviderConfig; + + public DataProviderConfigSO DataProvider + { + get => dataProviderConfig; + } + + public NetworkType Network + { + get => network; + } + + public string PinataApiKey + { + get => pinataApiKey; + } + + public int RequestTimeoutSeconds + { + get => requestTimeoutSeconds; + } + + public string Rpc + { + get => rpcUrlFormat.Replace("{network}", network.ToString()); + } + + private void OnValidate() + { + if (string.IsNullOrEmpty(pinataApiKey)) + { + Debug.LogWarning( + "Pinata API key is not set in TezosConfigSO. You will not be able to upload images to IPFS."); + } + + if (dataProviderConfig == null) + { + Debug.LogError("Data provider is not set in TezosConfigSO. You will not be able to query data."); + } + else + { + if (dataProviderConfig.Network != network) + { + Debug.LogError("Data provider network does not match TezosConfigSO network."); + } + } + } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/ScriptableObjects/TezosConfigSO.cs.meta b/Runtime/Scripts/Tezos/ScriptableObjects/TezosConfigSO.cs.meta new file mode 100644 index 00000000..000ef117 --- /dev/null +++ b/Runtime/Scripts/Tezos/ScriptableObjects/TezosConfigSO.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0c1ac3fcdbc344e5b0626e4c44285e35 +timeCreated: 1704553240 \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/Tezos.cs b/Runtime/Scripts/Tezos/Tezos.cs index bcb70f9f..37986f85 100644 --- a/Runtime/Scripts/Tezos/Tezos.cs +++ b/Runtime/Scripts/Tezos/Tezos.cs @@ -3,65 +3,64 @@ using System.Collections.Generic; using TezosSDK.Beacon; using TezosSDK.Tezos.API; -using TezosSDK.Tezos.API.Models; using TezosSDK.Tezos.API.Models.Filters; -using TezosSDK.Tezos.API.Models.Abstract; using TezosSDK.Tezos.Wallet; using UnityEngine; +using Logger = TezosSDK.Helpers.Logger; namespace TezosSDK.Tezos { - /// - /// Tezos API and Wallet features - /// Exposes the main functions of the Tezos in Unity - /// - public class Tezos : ITezos - { - public WalletMessageReceiver MessageReceiver { get; } - public ITezosAPI API { get; } - public IWalletProvider Wallet { get; } - public IFA2 TokenContract { get; set; } - public Tezos(DAppMetadata providedDAppMetadata = null) - { - var dataProviderConfig = new TzKTProviderConfig(); - API = new TezosAPI(dataProviderConfig); + /// + /// Tezos API and Wallet features + /// Exposes the main functions of the Tezos in Unity + /// + public class Tezos : ITezos + { + public Tezos(TezosConfigSO config, IWalletEventManager eventManager, IBeaconConnector beaconConnector) + { + API = new TezosAPI(config); - var dAppMetadata = providedDAppMetadata ?? new DAppMetadata - { - Name = TezosConfig.Instance.DefaultDAppName, - Url = TezosConfig.Instance.DefaultDAppUrl, - Icon = TezosConfig.Instance.DefaultIconUrl - }; + Wallet = new WalletProvider(eventManager, beaconConnector); + Wallet.EventManager.WalletConnected += OnWalletConnected; + } - Wallet = new WalletProvider(dAppMetadata); + public ITezosAPI API { get; } + public IWalletProvider Wallet { get; } + public IFa2 TokenContract { get; set; } - MessageReceiver = Wallet.MessageReceiver; - MessageReceiver.AccountConnected += _ => - { - TokenContract = PlayerPrefs.HasKey("CurrentContract:" + Wallet.GetActiveAddress()) - ? new TokenContract(PlayerPrefs.GetString("CurrentContract:" + Wallet.GetActiveAddress())) - : new TokenContract(); - }; - } + public IEnumerator GetCurrentWalletBalance(Action callback) + { + var address = Wallet.GetWalletAddress(); + return API.GetTezosBalance(callback, address); + } - public IEnumerator GetCurrentWalletBalance(Action callback) - { - var address = Wallet.GetActiveAddress(); - return API.GetTezosBalance(callback, address); - } + public IEnumerator GetOriginatedContracts(Action> callback) + { + var codeHash = Resources.Load("Contracts/FA2TokenContractCodeHash").text; - public IEnumerator GetOriginatedContracts(Action> callback) - { - var codeHash = Resources.Load("Contracts/FA2TokenContractCodeHash") - .text; + return API.GetOriginatedContractsForOwner(callback, Wallet.GetWalletAddress(), codeHash, 1000, + new OriginatedContractsForOwnerOrder.ByLastActivityTimeDesc(0)); + } + + private void OnWalletConnected(WalletInfo walletInfo) + { + Logger.LogInfo("Tezos: OnWalletConnected"); + var hasKey = PlayerPrefs.HasKey("CurrentContract:" + walletInfo.Address); + + var address = hasKey ? PlayerPrefs.GetString("CurrentContract:" + walletInfo.Address) : string.Empty; + + if (hasKey) + { + Logger.LogInfo("Found deployed contract address in player prefs: " + address); + } + + TokenContract = !string.IsNullOrEmpty(address) + // if there is a contract address in the player prefs, use it + ? new TokenContract(address) + // otherwise, create a new contract + : new TokenContract(); + } + } - return API.GetOriginatedContractsForOwner( - callback: callback, - creator: Wallet.GetActiveAddress(), - codeHash: codeHash, - maxItems: 1000, - orderBy: new OriginatedContractsForOwnerOrder.ByLastActivityTimeDesc(0)); - } - } } \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/TezosConfig.cs b/Runtime/Scripts/Tezos/TezosConfig.cs deleted file mode 100644 index 3eab6e7a..00000000 --- a/Runtime/Scripts/Tezos/TezosConfig.cs +++ /dev/null @@ -1,44 +0,0 @@ -using Beacon.Sdk.Beacon.Permission; - -namespace TezosSDK.Tezos -{ - public class TezosConfig - { - private static TezosConfig _instance; - public static TezosConfig Instance => _instance ??= new TezosConfig(); - public NetworkType Network { get; set; } = NetworkType.ghostnet; - public string DefaultDAppName => "Tezos Unity SDK"; - public string DefaultDAppUrl => "https://tezos.com/unity"; - public string DefaultIconUrl => "https://unity.com/sites/default/files/2022-09/unity-tab-small.png"; - public string RpcBaseUrl { get; set; } = $"https://{NetworkType.ghostnet.ToString()}.tezos.marigold.dev"; - public int DefaultTimeoutSeconds => 45; - } - - public interface IDataProviderConfig - { - int TimeoutSeconds { get; } - string BaseUrl { get; } - } - - public class TzKTProviderConfig : IDataProviderConfig - { - private int? _timeoutSeconds; - - public int TimeoutSeconds - { - get => _timeoutSeconds ??= TezosConfig.Instance.DefaultTimeoutSeconds; - set => _timeoutSeconds = value; - } - - public string BaseUrl - { - get - { - var networkPart = TezosConfig.Instance.Network != NetworkType.mainnet - ? $"{TezosConfig.Instance.Network}." - : ""; - return $"https://api.{networkPart}tzkt.io/v1/"; - } - } - } -} \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/TezosConfig.cs.meta b/Runtime/Scripts/Tezos/TezosConfig.cs.meta deleted file mode 100644 index d49828cc..00000000 --- a/Runtime/Scripts/Tezos/TezosConfig.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 059aa86902c545158102df68022e0d08 -timeCreated: 1684150391 \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/TezosSingleton.cs b/Runtime/Scripts/Tezos/TezosSingleton.cs deleted file mode 100644 index e85b3f54..00000000 --- a/Runtime/Scripts/Tezos/TezosSingleton.cs +++ /dev/null @@ -1,81 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using Beacon.Sdk.Beacon.Permission; -using TezosSDK.DesignPattern.Singleton; -using TezosSDK.Tezos.API; -using TezosSDK.Tezos.API.Models; -using TezosSDK.Tezos.API.Models.Filters; -using TezosSDK.Tezos.API.Models.Abstract; -using TezosSDK.Tezos.Wallet; -using UnityEngine; -using Logger = TezosSDK.Helpers.Logger; - - -namespace TezosSDK.Tezos -{ - public class TezosSingleton : SingletonMonoBehaviour, ITezos - { - private static Tezos _tezos; - public ITezosAPI API => _tezos?.API; - public IWalletProvider Wallet => _tezos?.Wallet; - public IFA2 TokenContract => _tezos?.TokenContract; - - protected override void Awake() - { - base.Awake(); - _tezos ??= new Tezos(); - } - - public static ITezos ConfiguredInstance( - NetworkType networkType, - string rpcUrl = null, - DAppMetadata dAppMetadata = null, - Logger.LogLevel logLevel = Logger.LogLevel.Debug) - { - Logger.CurrentLogLevel = logLevel; - - if (!string.IsNullOrEmpty(rpcUrl)) - { - TezosConfig.Instance.RpcBaseUrl = rpcUrl; - } - else if (networkType != TezosConfig.Instance.Network) - { - TezosConfig.Instance.RpcBaseUrl = TezosConfig - .Instance - .RpcBaseUrl - .Replace(TezosConfig.Instance.Network.ToString(), networkType.ToString()); - } - - TezosConfig.Instance.Network = networkType; - _tezos ??= new Tezos(dAppMetadata); - return Instance; - } - - void OnApplicationQuit() - { - if (Wallet is IDisposable disposable) - { - disposable.Dispose(); - } - } - - public IEnumerator GetCurrentWalletBalance(Action callback) - { - return _tezos.GetCurrentWalletBalance(callback); - } - - public IEnumerator GetOriginatedContracts(Action> callback) - { - var codeHash = Resources.Load("Contracts/FA2TokenContractCodeHash") - .text; - - return _tezos.API.GetOriginatedContractsForOwner( - callback: callback, - creator: Wallet.GetActiveAddress(), - codeHash: codeHash, - maxItems: 1000, - orderBy: new OriginatedContractsForOwnerOrder.ByLastActivityTimeDesc(0)); - } - } -} \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/Wallet.meta b/Runtime/Scripts/Tezos/Wallet.meta index 75258899..96c21748 100644 --- a/Runtime/Scripts/Tezos/Wallet.meta +++ b/Runtime/Scripts/Tezos/Wallet.meta @@ -1,3 +1,3 @@ -fileFormatVersion: 2 -guid: 4332519b8edd4338b68435f765048cc7 -timeCreated: 1684138803 \ No newline at end of file +fileFormatVersion: 2 +guid: 940c132ef3a141dfb3a28e562d0b8420 +timeCreated: 1704714492 \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/Wallet/IWalletProvider.cs b/Runtime/Scripts/Tezos/Wallet/IWalletProvider.cs deleted file mode 100644 index 90a4b6bc..00000000 --- a/Runtime/Scripts/Tezos/Wallet/IWalletProvider.cs +++ /dev/null @@ -1,71 +0,0 @@ -using Beacon.Sdk.Beacon.Sign; -using TezosSDK.Beacon; - -namespace TezosSDK.Tezos.Wallet -{ - public interface IWalletProvider - { - /// - /// Exposes a MonoBehaviour class that exposes wallet events - /// - WalletMessageReceiver MessageReceiver { get; } - - /// - /// Callback that needed in WebGL to determine that UI is rendered - /// - void OnReady(); - - /// - /// Makes a call to connect with a wallet - /// Should we open wallet app on mobiles after connect? - /// - void Connect(WalletProviderType walletProvider, bool withRedirectToWallet = true); - - /// - /// Unpair with wallet and disconnect - /// - void Disconnect(); - - /// - /// Returns the address of the current active wallet - /// - /// - string GetActiveAddress(); - - /// - /// Sends a request to the sign a payload string - /// - /// type of payload: raw, operation or micheline - /// payload string that is going to be signed - void RequestSignPayload(SignPayloadType signingType, string payload); - - /// - /// Verify a signed payload to check if it is valid - /// - /// type of payload: raw, operation or micheline - /// payload string that is going to be signed - bool VerifySignedPayload(SignPayloadType signingType, string payload); - - /// - /// Performs an operation in the contract - /// - /// destination address of the smart contract - /// entry point used in the smart contract - /// parameters called on the entry point - /// amount of Tez sent into the contract - void CallContract( - string contractAddress, - string entryPoint, - string input, - ulong amount = 0); - - /// - /// Originate new contract. - /// - /// Code of contract - /// Delegator address - void OriginateContract( - string script, - string delegateAddress = null); - } -} \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/Wallet/OperationTracker.cs b/Runtime/Scripts/Tezos/Wallet/OperationTracker.cs new file mode 100644 index 00000000..3b1ee950 --- /dev/null +++ b/Runtime/Scripts/Tezos/Wallet/OperationTracker.cs @@ -0,0 +1,115 @@ +using System; +using System.Collections; +using TezosSDK.Helpers.Coroutines; +using UnityEngine; +using Logger = TezosSDK.Helpers.Logger; + +namespace TezosSDK.Tezos.Wallet +{ + + /// + /// Tracks the status of a blockchain operation by its hash and reports the result via callbacks. + /// + public class OperationTracker + { + private const float TIMEOUT = 30f; // seconds + private const float WAIT_TIME = 2f; // seconds + private readonly Action _onComplete; + private readonly string _operationHash; + + /// + /// Initializes a new instance of the class. + /// + /// The hash of the operation to track. + /// + /// Callback invoked when tracking is complete. The first parameter indicates success, + /// and the second parameter carries an error message if the operation failed. + /// + public OperationTracker(string operationHash, Action onComplete) + { + _operationHash = operationHash; + _onComplete = onComplete; + } + + /// + /// Begins tracking the status of the operation. + /// + public void BeginTracking() + { + Logger.LogDebug($"Starting to track operation with hash: {_operationHash}"); + CoroutineRunner.Instance.StartWrappedCoroutine(TrackOperationCoroutine()); + } + + /// + /// Coroutine that polls the blockchain operation status until it is confirmed, fails, or times out. + /// + private IEnumerator TrackOperationCoroutine() + { + var startTime = Time.time; + bool? operationConfirmed = null; + string errorMessage = null; + + // Begin polling loop for operation status + Logger.LogDebug($"Begin polling for operation status with hash: {_operationHash}"); + + var remainingTime = TIMEOUT - (Time.time - startTime); + + while (remainingTime > 0) + { + yield return TezosManager.Instance.Tezos.API.GetOperationStatus(Callback, _operationHash); + + // If the operation is positively confirmed, exit the loop. + if (operationConfirmed == true) + { + Logger.LogDebug("Operation is confirmed. Exiting polling loop."); + break; + } + + // Handle the case where operationConfirmed is null or false + if (!operationConfirmed.HasValue) + { + errorMessage = "Operation status check failed or returned null."; + Logger.LogDebug($"Operation status check for hash {_operationHash} failed or returned null."); + } + + // Wait before the next status check + yield return new WaitForSecondsRealtime(WAIT_TIME); + + Logger.LogDebug($"Waiting {WAIT_TIME} seconds before next operation status check. " + + $"Remaining time: {remainingTime}"); + + remainingTime = TIMEOUT - (Time.time - startTime); + } + + // Determine final success and handle possible timeout + var success = operationConfirmed == true; + + if (!success) + { + errorMessage ??= "Operation tracking timed out."; + Logger.LogDebug(errorMessage); + } + + Logger.LogDebug("Operation tracking complete. " + $"Success: {success}, ErrorMessage: {errorMessage}"); + + // Invoke the callback with the result + _onComplete?.Invoke(success, errorMessage); + yield break; + + void Callback(bool? result) + { + operationConfirmed = result; + + if (operationConfirmed.HasValue) + { + Logger.LogDebug($"Operation status check returned: {operationConfirmed.Value}"); + } + else + { + Logger.LogDebug($"Operation status check for hash \"{_operationHash}\" returned null."); + } + } + } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/Wallet/OperationTracker.cs.meta b/Runtime/Scripts/Tezos/Wallet/OperationTracker.cs.meta new file mode 100644 index 00000000..6aa3c574 --- /dev/null +++ b/Runtime/Scripts/Tezos/Wallet/OperationTracker.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: df623de12c6f4bf6b9df9d78907904bd +timeCreated: 1704036231 \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/Wallet/WalletProvider.cs b/Runtime/Scripts/Tezos/Wallet/WalletProvider.cs index f70ee658..521adfc4 100644 --- a/Runtime/Scripts/Tezos/Wallet/WalletProvider.cs +++ b/Runtime/Scripts/Tezos/Wallet/WalletProvider.cs @@ -1,168 +1,193 @@ using System; -using System.Collections; -using System.Text.Json; +using Beacon.Sdk.Beacon; using Beacon.Sdk.Beacon.Sign; using TezosSDK.Beacon; using TezosSDK.Helpers; +using TezosSDK.Helpers.Extensions; using UnityEngine; +using Logger = TezosSDK.Helpers.Logger; namespace TezosSDK.Tezos.Wallet { - public class WalletProvider : IWalletProvider, IDisposable - { - public WalletMessageReceiver MessageReceiver { get; private set; } - private IBeaconConnector _beaconConnector; - private DAppMetadata _dAppMetadata; - - private string _handshake; - private string _pubKey; - private string _signature; - private string _transactionHash; - - public WalletProvider(DAppMetadata dAppMetadata) - { - _dAppMetadata = dAppMetadata; - InitBeaconConnector(); - } - - private void InitBeaconConnector() - { - // Create or get a WalletMessageReceiver Game object to receive callback messages - var unityBeacon = GameObject.Find("UnityBeacon"); - MessageReceiver = unityBeacon != null - ? unityBeacon.GetComponent() - : new GameObject("UnityBeacon").AddComponent(); - - // Assign the BeaconConnector depending on the platform. -#if !UNITY_EDITOR && UNITY_WEBGL - _beaconConnector = new BeaconConnectorWebGl(); -#else - _beaconConnector = new BeaconConnectorDotNet(); - (_beaconConnector as BeaconConnectorDotNet)?.SetWalletMessageReceiver(MessageReceiver); - Connect(WalletProviderType.beacon, withRedirectToWallet: false); - - // todo: maybe call RequestTezosPermission from _beaconConnector? - MessageReceiver.PairingCompleted += _ => - { - _beaconConnector.RequestTezosPermission( - networkName: TezosConfig.Instance.Network.ToString(), - networkRPC: TezosConfig.Instance.RpcBaseUrl); - }; + + public class WalletProvider : IWalletProvider, IDisposable + { + private readonly IBeaconConnector _beaconConnector; + private string _pubKey; + private string _signature; + private string _transactionHash; + + public WalletProvider(IWalletEventManager eventManager, IBeaconConnector beaconConnector) + { + EventManager = eventManager; + EventManager.HandshakeReceived += OnHandshakeReceived; + EventManager.WalletConnected += OnWalletConnected; + EventManager.WalletDisconnected += OnWalletDisconnected; + EventManager.PayloadSigned += OnPayloadSigned; + EventManager.ContractCallInjected += OnContractCallInjected; + _beaconConnector = beaconConnector; + + _beaconConnector.OperationRequested += OnOperationRequested; + } + + public void Dispose() + { + if (_beaconConnector is IDisposable disposable) + { + disposable.Dispose(); + } + } + + public bool IsConnected { get; private set; } + public HandshakeData HandshakeData { get; private set; } + + public IWalletEventManager EventManager { get; } + + public void Connect(WalletProviderType walletProvider) + { + _beaconConnector.ConnectWallet(walletProvider); + } + + public void Disconnect() + { + _beaconConnector.DisconnectWallet(); + } + + public string GetWalletAddress() + { + return _beaconConnector.GetWalletAddress(); + } + + public void RequestSignPayload(SignPayloadType signingType, string payload) + { + _beaconConnector.RequestSignPayload(signingType, payload); + } + + public bool VerifySignedPayload(SignPayloadType signingType, string payload) + { + return NetezosExtensions.VerifySignature(_pubKey, signingType, payload, _signature); + } + + public void CallContract(string contractAddress, string entryPoint, string input, ulong amount = 0) + { + _beaconConnector.RequestOperation(contractAddress, entryPoint, input, amount); + } + + public void OriginateContract(string script, string delegateAddress) + { + _beaconConnector.RequestContractOrigination(script, delegateAddress); + } + + /// + /// Raised when an operation requiring user interaction is requested by the IBeaconConnector implementation. + /// + private void OnOperationRequested(BeaconMessageType beaconMessageType) + { + Logger.LogDebug($"WalletProvider.OnOperationRequested of type: {beaconMessageType}"); + +#if (UNITY_ANDROID || UNITY_IOS) + // The wallet will already be open for the pairing request during login + // We should ignore this message type + if (beaconMessageType != BeaconMessageType.permission_request) + { + OpenWallet(); + } +#endif + } + + private void OpenWallet() + { + Logger.LogDebug("WalletProvider.OpenWallet"); + + // OpenURL can only be called from the main thread. + UnityMainThreadDispatcher.Enqueue(() => { Application.OpenURL("tezos://"); }); + } + + private void OnWalletDisconnected(WalletInfo obj) + { + IsConnected = false; + HandshakeData = null; + } + + private void OnContractCallInjected(OperationResult transaction) + { + var operationHash = transaction.TransactionHash; + + var tracker = new OperationTracker(operationHash, OnComplete); + + tracker.BeginTracking(); + return; + + // Local callback function that is invoked when the operation tracking is complete. + void OnComplete(bool isSuccess, string errorMessage) + { + if (isSuccess) + { + var operationResult = new OperationResult + { + TransactionHash = operationHash + }; + + var contractCallCompletedEvent = new UnifiedEvent(WalletEventManager.EventTypeContractCallCompleted, + JsonUtility.ToJson(operationResult)); + + Logger.LogDebug($"Contract call completed: {operationHash}"); + EventManager.HandleEvent(contractCallCompletedEvent); + } + else + { + Logger.LogError($"Contract call failed: {errorMessage}"); + + var errorinfo = new ErrorInfo + { + Message = errorMessage + }; + + var contractCallFailedEvent = new UnifiedEvent(WalletEventManager.EventTypeContractCallFailed, + JsonUtility.ToJson(errorinfo)); + + EventManager.HandleEvent(contractCallFailedEvent); + } + } + } + + private void OnPayloadSigned(SignResult payload) + { + _signature = payload.Signature; + } + + private void OnWalletConnected(WalletInfo wallet) + { + _pubKey = wallet.PublicKey; + IsConnected = true; + } + + private void OnHandshakeReceived(HandshakeData handshake) + { + if (HandshakeData != null) + { + return; + } + + Logger.LogDebug("WalletProvider.OnHandshakeReceived"); + + HandshakeData = handshake; + +#if (UNITY_ANDROID || UNITY_IOS) + PairWithWallet(); #endif - MessageReceiver.HandshakeReceived += handshake => { _handshake = handshake; }; - MessageReceiver.AccountConnected += account => - { - var json = JsonSerializer.Deserialize(account); - if (!json.TryGetProperty("accountInfo", out json)) return; - - _pubKey = json.GetProperty("publicKey").GetString(); - }; - MessageReceiver.PayloadSigned += payload => - { - var json = JsonSerializer.Deserialize(payload); - var signature = json.GetProperty("signature").GetString(); - - _signature = signature; - }; - MessageReceiver.ContractCallInjected += transaction => - { - var json = JsonSerializer.Deserialize(transaction); - var transactionHash = json.GetProperty("transactionHash").GetString(); - - CoroutineRunner.Instance.StartWrappedCoroutine( - new CoroutineWrapper(MessageReceiver.TrackTransaction(transactionHash))); - }; - } - - // Below there are some async/wait workarounds and magic numbers, - // we should rewrite the Beacon connector to be coroutine compatible. - private IEnumerator OnOpenWallet(bool withRedirectToWallet) - { - if (string.IsNullOrEmpty(_handshake)) - { - //No handshake, Waiting for handshake... - yield return new WaitForSeconds(2.5f); - } - -#if UNITY_ANDROID || UNITY_IOS - if (withRedirectToWallet){ - _beaconConnector.RequestTezosPermission( - networkName: TezosConfig.Instance.Network.ToString(), - networkRPC: TezosConfig.Instance.RpcBaseUrl); - yield return new WaitForSeconds(2.5f); - if (!string.IsNullOrEmpty(_handshake)){ - Application.OpenURL($"tezos://?type=tzip10&data={_handshake}"); - } - } + } + +#if (UNITY_ANDROID || UNITY_IOS) + private void PairWithWallet() + { + UnityMainThreadDispatcher.Enqueue(() => + { + Logger.LogDebug("WalletProvider.PairWithWallet"); + Application.OpenURL($"tezos://?type=tzip10&data={HandshakeData.PairingData}"); + }); + } #endif - } - - public void OnReady() - { - _beaconConnector.OnReady(); - } - - public void Connect(WalletProviderType walletProvider, bool withRedirectToWallet) - { - _beaconConnector.InitWalletProvider( - network: TezosConfig.Instance.Network.ToString(), - rpc: TezosConfig.Instance.RpcBaseUrl, - walletProviderType: walletProvider, - dAppMetadata: _dAppMetadata); - - _beaconConnector.ConnectAccount(); - CoroutineRunner.Instance.StartWrappedCoroutine(OnOpenWallet(withRedirectToWallet)); - } - - public void Disconnect() - { - _beaconConnector.DisconnectAccount(); - } - - public string GetActiveAddress() - { - return _beaconConnector.GetActiveAccountAddress(); - } - - - public void RequestSignPayload(SignPayloadType signingType, string payload) - { - _beaconConnector.RequestTezosSignPayload(signingType, payload); - } - - public bool VerifySignedPayload(SignPayloadType signingType, string payload) - { - return NetezosExtensions.VerifySignature(_pubKey, signingType, payload, _signature); - } - - public void CallContract( - string contractAddress, - string entryPoint, - string input, - ulong amount = 0) - { - _beaconConnector.RequestTezosOperation( - destination: contractAddress, - entryPoint: entryPoint, - arg: input, - amount: amount, - networkName: TezosConfig.Instance.Network.ToString(), - networkRPC: TezosConfig.Instance.RpcBaseUrl); - } - - public void OriginateContract( - string script, - string delegateAddress) - { - _beaconConnector.RequestContractOrigination(script, delegateAddress); - } - - public void Dispose() - { - if (_beaconConnector is IDisposable disposable) - { - disposable.Dispose(); - } - } - } + } + } \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/Wallet/WalletProvider.cs.meta b/Runtime/Scripts/Tezos/Wallet/WalletProvider.cs.meta index c80ccc3b..3ff80c41 100644 --- a/Runtime/Scripts/Tezos/Wallet/WalletProvider.cs.meta +++ b/Runtime/Scripts/Tezos/Wallet/WalletProvider.cs.meta @@ -1,3 +1,11 @@ -fileFormatVersion: 2 +fileFormatVersion: 2 guid: f96082af704a49ab8f4fa009f8f94506 -timeCreated: 1684138822 \ No newline at end of file +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Scripts/Tezos/Wallet/WalletProviderType.cs b/Runtime/Scripts/Tezos/Wallet/WalletProviderType.cs deleted file mode 100644 index 06e3301e..00000000 --- a/Runtime/Scripts/Tezos/Wallet/WalletProviderType.cs +++ /dev/null @@ -1,9 +0,0 @@ -// ReSharper disable InconsistentNaming -namespace TezosSDK.Tezos.Wallet -{ - public enum WalletProviderType - { - beacon, - kukai - } -} \ No newline at end of file diff --git a/Runtime/com.trilitech.tezos-unity-sdk.asmdef b/Runtime/TezosSDK.asmdef similarity index 78% rename from Runtime/com.trilitech.tezos-unity-sdk.asmdef rename to Runtime/TezosSDK.asmdef index 396e07d8..8dca5250 100644 --- a/Runtime/com.trilitech.tezos-unity-sdk.asmdef +++ b/Runtime/TezosSDK.asmdef @@ -1,6 +1,6 @@ { - "name": "com.trilitech.tezos-unity-sdk", - "rootNamespace": "TezosSDK", + "name": "TezosSDK", + "rootNamespace": "", "references": [], "includePlatforms": [], "excludePlatforms": [], diff --git a/Runtime/com.trilitech.tezos-unity-sdk.asmdef.meta b/Runtime/TezosSDK.asmdef.meta similarity index 100% rename from Runtime/com.trilitech.tezos-unity-sdk.asmdef.meta rename to Runtime/TezosSDK.asmdef.meta diff --git a/Runtime/View.meta b/Runtime/View.meta deleted file mode 100644 index 93adf872..00000000 --- a/Runtime/View.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7fa62ac268ad7426ca7f217747e447fb -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/View/AuthenticationManager.cs b/Runtime/View/AuthenticationManager.cs deleted file mode 100644 index 791abff8..00000000 --- a/Runtime/View/AuthenticationManager.cs +++ /dev/null @@ -1,87 +0,0 @@ -using TezosSDK.Tezos; -using TezosSDK.Tezos.Wallet; -using UnityEngine; - -namespace TezosSDK.View -{ - public class AuthenticationManager : MonoBehaviour - { - private ITezos _tezos; - [SerializeField] private QRCodeView qrCodeView; - [SerializeField] private GameObject contentPanel; - [SerializeField] private GameObject deepLinkButton; - [SerializeField] private GameObject logoutButton; - [SerializeField] private GameObject qrCodePanel; - - private bool _isMobile; - - void Start() - { -#if (UNITY_IOS || UNITY_ANDROID) - _isMobile = true; -#else - _isMobile = false; -#endif - _tezos = TezosSingleton.Instance; - - _tezos.Wallet.MessageReceiver.HandshakeReceived += OnHandshakeReceived; - _tezos.Wallet.MessageReceiver.AccountConnected += OnAccountConnected; - _tezos.Wallet.MessageReceiver.AccountDisconnected += OnAccountDisconnected; - } - - void OnHandshakeReceived(string handshake) - { - EnableUI(isAuthenticated: false); - qrCodeView.SetQrCode(handshake); - } - - void OnAccountConnected(string result) - { - EnableUI(isAuthenticated: true); - Debug.Log("OnAccountConnected"); - } - - void OnAccountDisconnected(string result) - { - Debug.Log("OnAccountDisconnected"); - } - - public void DisconnectWallet() - { - EnableUI(isAuthenticated: false); - _tezos.Wallet.Disconnect(); - } - - public void ConnectByDeeplink() - { - _tezos.Wallet.Connect(WalletProviderType.beacon); - } - - void EnableUI(bool isAuthenticated) - { - if (isAuthenticated) - { - deepLinkButton.SetActive(false); - qrCodePanel.SetActive(false); - } - else - { - if (_isMobile) - { - deepLinkButton.SetActive(true); - qrCodePanel.SetActive(false); - } - else - { - qrCodePanel.SetActive(true); - deepLinkButton.SetActive(false); - } - } - - logoutButton.SetActive(isAuthenticated); - - if (contentPanel == null) return; - contentPanel.SetActive(isAuthenticated); - } - } -} \ No newline at end of file diff --git a/Runtime/View/QRCodeView.cs b/Runtime/View/QRCodeView.cs deleted file mode 100644 index afd5744c..00000000 --- a/Runtime/View/QRCodeView.cs +++ /dev/null @@ -1,55 +0,0 @@ -using UnityEngine; -using UnityEngine.UI; -using ZXing; -using ZXing.QrCode; - -namespace TezosSDK.View -{ - public class QRCodeView : MonoBehaviour - { - [SerializeField] private RawImage _rawImage; - private Texture2D _texture; - - void Start() - { - if (_texture != null) return; - - _rawImage.texture = _texture = new Texture2D(256, 256); - _texture.filterMode = FilterMode.Point; - } - - public void SetQrCode(string handshake) - { - var uri = "tezos://?type=tzip10&data=" + handshake; - EncodeTextToQrCode(uri); - } - - public void EncodeTextToQrCode(string text) - { - if (_texture == null) - { - _rawImage.texture = _texture = new Texture2D(256, 256); - _texture.filterMode = FilterMode.Point; - } - - var colors = Encode(text, _texture.width, _texture.height); - _texture.SetPixels32(colors); - _texture.Apply(); - } - - private Color32[] Encode(string text, int width, int height) - { - var writer = new BarcodeWriter - { - Format = BarcodeFormat.QR_CODE, - Options = new QrCodeEncodingOptions() - { - Width = width, - Height = height, - PureBarcode = true - } - }; - return writer.Write(text); - } - } -} \ No newline at end of file diff --git a/Samples~/Art.meta b/Samples~/Art.meta index 09909250..193e7c70 100644 --- a/Samples~/Art.meta +++ b/Samples~/Art.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fea4493fb9bab444b8c2f7183068986e +guid: 802ea092de9e74d08b87e880e903bbcd folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/Art/UI/Tezos_Logos/Icon.meta b/Samples~/Art/UI/Tezos_Logos/Icon.meta deleted file mode 100644 index efddaa3b..00000000 --- a/Samples~/Art/UI/Tezos_Logos/Icon.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ff8f26a8deb038a40830b94c0adb9ac6 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Scripts/DesignPattern.meta b/Samples~/Art/Wiki.meta similarity index 77% rename from Runtime/Scripts/DesignPattern.meta rename to Samples~/Art/Wiki.meta index f66a3836..e22d92c0 100644 --- a/Runtime/Scripts/DesignPattern.meta +++ b/Samples~/Art/Wiki.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 36290026597ca4214b98b6e329e0bc4a +guid: 513c46b59f06945bc81919f0a8eb8e71 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/Art/Wiki/SDK_01.jpg.meta b/Samples~/Art/Wiki/SDK_01.jpg.meta new file mode 100644 index 00000000..67a3ced4 --- /dev/null +++ b/Samples~/Art/Wiki/SDK_01.jpg.meta @@ -0,0 +1,166 @@ +fileFormatVersion: 2 +guid: 36cad42e7727f4cf7b965e503c1a9572 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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 + 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: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + 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: 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: WebGL + 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: 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: iPhone + 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: Android + 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: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Art/Wiki/TezosDocsBanner.png.meta b/Samples~/Art/Wiki/TezosDocsBanner.png.meta new file mode 100644 index 00000000..a24a76f1 --- /dev/null +++ b/Samples~/Art/Wiki/TezosDocsBanner.png.meta @@ -0,0 +1,166 @@ +fileFormatVersion: 2 +guid: a31db84a931d34a3f929600bd7e33db9 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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 + 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: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + 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: 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: WebGL + 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: 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: iPhone + 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: Android + 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: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Contracts/FA2/balance_of.jsligo b/Samples~/Contracts/FA2/balance_of.jsligo deleted file mode 100644 index b9474d00..00000000 --- a/Samples~/Contracts/FA2/balance_of.jsligo +++ /dev/null @@ -1,55 +0,0 @@ -#import "storage.jsligo" "Storage" -#import "ledger.jsligo" "Ledger" -#import "metadata.jsligo" "TokenMetadata" - -export type storage = Storage.t; - -export type request = { - owner : address, - token_id : nat, -}; - -type callback = -// @layout:comb -{ - request : request, - balance : nat, -}; - -export type balance_of_param = -// @layout:comb -{ - requests : list, - callback : contract>, -}; - -// Balance_of entrypoint (TZIP4 data-read callback format) -// Uses another contract as a callback to send the result to - -// Gives the amount of items of requested ID -// 1 or 0 for Non-fungibles, actual amount of fungibles -const balance_of = ([b, s] : [balance_of_param, storage]): [list, storage] => { - //const {requests, callback} = b; - const requests = b.requests; - const callback = b.callback; - - const get_balance_info = (request : request) : callback => { - //let {owner, token_id} = request; - const owner = request.owner; - const token_id = request.token_id; - - TokenMetadata.assert_token_exist (s.token_metadata, token_id); - - // multi asset version - const balance_ = Ledger.get_for_user(s.ledger, owner, token_id); - - // nft only version - // let balance_ = 0 as nat; - // if (Storage.is_owner_of (s, owner, token_id)) balance_ = 1 as nat; - - return ({request:request,balance:balance_}); - }; - const callback_param = List.map (get_balance_info, requests); - const operation = Tezos.transaction (callback_param, (0 as tez), callback); - return [list([operation]),s]; -}; diff --git a/Samples~/Contracts/FA2/errors.jsligo b/Samples~/Contracts/FA2/errors.jsligo deleted file mode 100644 index abcec5b6..00000000 --- a/Samples~/Contracts/FA2/errors.jsligo +++ /dev/null @@ -1,14 +0,0 @@ -type t = string; - -const undefined_token = "FA2_TOKEN_UNDEFINED" -const ins_balance = "FA2_INSUFFICIENT_BALANCE" -const no_transfer = "FA2_TX_DENIED" -const not_owner = "FA2_NOT_OWNER" -const not_operator = "FA2_NOT_OPERATOR" -const not_supported = "FA2_OPERATORS_UNSUPPORTED" -const rec_hook_fail = "FA2_RECEIVER_HOOK_FAILED" -const send_hook_fail = "FA2_SENDER_HOOK_FAILED" -const rec_hook_undef = "FA2_RECEIVER_HOOK_UNDEFINED" -const send_hook_under = "FA2_SENDER_HOOK_UNDEFINED" - -const only_sender_manage_operators = "The sender can only manage operators for his own token" diff --git a/Samples~/Contracts/FA2/ledger.jsligo b/Samples~/Contracts/FA2/ledger.jsligo deleted file mode 100644 index d076a386..00000000 --- a/Samples~/Contracts/FA2/ledger.jsligo +++ /dev/null @@ -1,49 +0,0 @@ -#import "errors.jsligo" "Errors" - -type token_id = nat; -type owner = address; -type amount_ = nat; - -// warning: using map for storage is not suitable for actual deployment, -// big_map is more suitable, but it requires redesign -export type token_map = map; - -// ledger: tracks the amount of items per user -export type t = big_map; - -// returns the amount of items per requester [user, ID] -export const get_for_user = (ledger: t, owner: owner, token_id: token_id) : nat => - match (Big_map.find_opt (owner, ledger), { - Some: (m: token_map) => match (Map.find_opt(token_id, m), { - Some: (a : nat) => a, - None: () => 0 as nat - }), - None: () => 0 as nat - }); - -// sets the amount for ID on that user and returns the new ledger -const set_for_user = (ledger: t, owner: owner, token_id: token_id, amount_: amount_) : t => -{ - let oldMap = match(Big_map.find_opt(owner, ledger), { - Some: (m : token_map) => m, - None: () => Map.empty - }); - - let newMap = Map.update(token_id, Some(amount_), oldMap); - return Big_map.update( owner, Some(newMap), ledger) -}; - -// decreases the amount of items on the given user -const decrease_token_amount_for_user = (ledger: t , from_: owner, token_id: token_id, amount_: amount_) : t => { - let balance_ = get_for_user (ledger, from_, token_id); - assert_with_error ((balance_ >= amount_), Errors.ins_balance); - balance_ = abs(balance_ - amount_); - return set_for_user(ledger, from_, token_id, balance_); -}; - -// increases the amount of items on the given user -const increase_token_amount_for_user = ([ledger, to_, token_id, amount_]: [t, owner, token_id, amount_]) : t => { - let balance_ = get_for_user (ledger, to_, token_id); - balance_ = balance_ + amount_; - return set_for_user(ledger, to_, token_id, balance_); -}; diff --git a/Samples~/Contracts/FA2/marketplace.jsligo b/Samples~/Contracts/FA2/marketplace.jsligo deleted file mode 100644 index 53d77460..00000000 --- a/Samples~/Contracts/FA2/marketplace.jsligo +++ /dev/null @@ -1,49 +0,0 @@ - -type owner = address; -type token_id = nat; -type currency = nat; -type price = nat; - -export type add_to_market_param = -{ - token_id : token_id, - currency : currency, - price : price -}; - -// marketplace: a slot represents an item (with keeping track of the owner) and it's price in the specified soft currency -// warning: using map for storage is not suitable for actual deployment, -// big_map is more suitable, but it requires redesign -export type t = map<[owner, token_id], [currency, price]>; - -export type remove_from_market_param = [owner, token_id]; -export type buy_param = [owner, token_id]; - -// check for the items is already on the market -const is_item_on_market = ([p, m] : [[address, nat], t]) : bool => Map.mem(p, m); - -// adds an item to the market place with the specified price request -const add_to_market = ( p : add_to_market_param, m: t) : t => -{ - let caller = Tezos.get_sender(); - - // no selling of in-game currency allowed - if(p.token_id == (0 as nat)) - { - return failwith("Not allowed") as t; - }; - - return Map.add([caller, p.token_id], [p.currency, p.price], m); -}; - -// removes selling offer from the market place (when sold or cancelled) -const remove_from_market = ([owner, token_id] : remove_from_market_param, m: t) : t => -{ - if(!Map.mem([owner, token_id], m)) - { - return failwith("item not found when removing") as t; - }; - - return Map.remove([owner, token_id], m); -}; - diff --git a/Samples~/Contracts/FA2/metadata.jsligo b/Samples~/Contracts/FA2/metadata.jsligo deleted file mode 100644 index fb3b15e4..00000000 --- a/Samples~/Contracts/FA2/metadata.jsligo +++ /dev/null @@ -1,43 +0,0 @@ -#import "errors.jsligo" "Errors" - -// This should be initialized at origination, conforming to either -// TZIP-12 : https://gitlab.com/tezos/tzip/-/blob/master/proposals/tzip-12/tzip-12.md#token-metadata -// or TZIP-16 : https://gitlab.com/tezos/tzip/-/blob/master/proposals/tzip-12/tzip-12.md#contract-metadata-tzip-016 -export type data = -{ - token_id : nat, - token_info : map -}; - -type minter = address; -type token_id = nat; - -// metadata is a map of properties (specified by TZIP12 or TZIP21) kept in bytes -// for the gameplay "item" property is used, which stores the item's stats -export type t = big_map ; - -// read the token metadata as pair (ID as key) -export const get_token_metadata = ([token_id, tm] : [token_id, t]) : data => - match (Big_map.find_opt (token_id, tm), { - Some : (data : data) => data, - None : () => failwith (Errors.undefined_token) - }); - -// read token metadata property supplied as string -export const get_token_info = ([property, data] : [string, data]) : bytes => - match(Map.find_opt (property, data.token_info), { - Some : (info : bytes) => info, - None : () => failwith (Errors.undefined_token) - }); - -// testing purposes, to be removed, because metadata is supposed to be 1 write-only -// this can re-write metadata to any token, used for dev utility -export const set_token_metadata = ([meta, tm] : [data, t]) : t => - Big_map.update(meta.token_id, Some(meta), tm); - -// checks if the ID has ever been minted -export const assert_token_exist = (m:t, token_id:nat) : unit => { - const _ = Option.unopt_with_error ( - Big_map.find_opt (token_id, m), - Errors.undefined_token); -}; diff --git a/Samples~/Contracts/FA2/metadata.jsligo.meta b/Samples~/Contracts/FA2/metadata.jsligo.meta deleted file mode 100644 index 338d45e9..00000000 --- a/Samples~/Contracts/FA2/metadata.jsligo.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 0225b2bd933784936b808f94b46a4b28 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/Contracts/FA2/operators.jsligo b/Samples~/Contracts/FA2/operators.jsligo deleted file mode 100644 index bacd4f3c..00000000 --- a/Samples~/Contracts/FA2/operators.jsligo +++ /dev/null @@ -1,74 +0,0 @@ -#import "errors.jsligo" "Errors" - -type owner = address; -type operator = address; -type token_id = nat; - -export type operator_info = -// @layout:comb -{ - owner : owner, - operator : operator, - token_id : token_id, -}; - -// Operators is a list of addresses that have access to the specified token_ids. -// These behave like token administrators. When making transfer, the contracts checks if the caller is in this list -export type t = big_map<[owner, operator], set>; - -// checks that the address is allowed to operate on the token -export const assert_authorisation = ([operators, from_, token_id]: [t, address, nat]): unit => { - const sender_ = (Tezos.get_sender ()); - if (sender_ != from_){ - const authorized = match ((Big_map.find_opt ([from_,sender_], operators)), - {Some: (a : set) => a , None : () => Set.empty}); - if (!(Set.mem (token_id, authorized))) - {return failwith (Errors.not_operator)} - } -}; - -const assert_update_permission = (owner : owner) : unit => - assert_with_error ((owner == (Tezos.get_sender ())), "The sender can only manage operators for his own token"); - // For an administator - // const admin = tz1.... ; - // assert_with_error ((Tezos.sender = admiin), "Only administrator can manage operators") - - // added extra from: - // https://gitlab.com/ligolang/contract-catalogue/-/blob/main/lib/fa2/nft/NFT.jsligo - -export const is_operator = ([operators, owner, operator, token_id] : [t , address , address , nat]) : bool => { - const authorized = match (Big_map.find_opt ([owner, operator], operators), { - Some: (a : set) => a , - None : () => Set.empty - }); - - return (Set.mem (token_id, authorized) || owner == operator); -}; - -// add a new operator to the list -export const add_operator = ([operators,owner,operator,token_id]: [t, owner, operator, token_id]) : t => { - if (owner == operator) { return operators; } // assert_authorisation always allow the owner so this case is not relevant - else { - assert_update_permission (owner); - let auth_tokens = match (Big_map.find_opt ([owner,operator], operators), - {Some : (ts: set) => ts , None : () => Set.empty}); - auth_tokens = Set.add (token_id, auth_tokens); - return Big_map.update ([owner,operator], Some (auth_tokens), operators); - } -}; - -// remove an operator from the list -export const remove_operator = ([operators,owner,operator,token_id]: [t, owner, operator, token_id]) : t => { - if (owner == operator) { return operators; } // assert_authorisation always allow the owner so this case is not relevant - else { - assert_update_permission (owner); - const auth_tokens : option> = match (Big_map.find_opt ([owner,operator], operators), - {Some : (ts : set) => { - const ts_result = Set.remove (token_id, ts); - if (Set.cardinal (ts_result) == (0 as nat)) { return None ()} else { return Some (ts_result)}; - }, - None : () => None () - }); - return Big_map.update ([owner,operator], auth_tokens, operators); - } -}; diff --git a/Samples~/Contracts/FA2/operators.jsligo.meta b/Samples~/Contracts/FA2/operators.jsligo.meta deleted file mode 100644 index b075707d..00000000 --- a/Samples~/Contracts/FA2/operators.jsligo.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 0d0671d584d20444c9b7dc036e424459 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/Contracts/FA2/storage.jsligo b/Samples~/Contracts/FA2/storage.jsligo deleted file mode 100644 index 0878c636..00000000 --- a/Samples~/Contracts/FA2/storage.jsligo +++ /dev/null @@ -1,43 +0,0 @@ -#import "ledger.jsligo" "Ledger" -#import "errors.jsligo" "Errors" -#import "operators.jsligo" "Operators" -#import "metadata.jsligo" "TokenMetadata" -#import "marketplace.jsligo" "Marketplace" - -type token_id = nat; - -export type t = { - ledger : Ledger.t, - token_metadata : TokenMetadata.t, - operators : Operators.t, - marketplace : Marketplace.t, - - // keeps track of how many times the contract has minted. - // the value makes sure that token IDs are unique - token_counter : nat -}; - -// returns the amount of tokens for the provided user and ID -export const get_balance = (s:t, owner:address, token_id:nat) : nat => { - TokenMetadata.assert_token_exist (s.token_metadata, token_id); - return Ledger.get_for_user(s.ledger, owner, token_id); -}; - -// helper: makes a new storage with a new ledger instance -export const set_ledger = ([s, ledger]: [t, Ledger.t]) : t => ({...s, ledger : ledger}); - -export const get_operators = (s:t) : Operators.t => s.operators; -export const set_operators = ([s, operators]: [t, Operators.t]) : t => ({...s, operators : operators}); - -// helper: makes a new storage with a new metadata instance -export const set_token_metadata = ([d, s] : [TokenMetadata.data, t]) : [list, t] => -{ - //TokenMetadata.assert_token_exist (s.token_metadata, d.token_id); - //Operators.assert_authorisation (s.operators, Tezos.get_sender(), d.token_id); - - let new_token_metadata = Big_map.update(d.token_id, Some(d), s.token_metadata); - return [ list([]), ({...s, token_metadata : new_token_metadata}) ]; -} - -// helper: makes a new storage with a new martketplace instance -export const set_marketplace = ([s, marketplace]: [t, Marketplace.t]) : t => ({...s, marketplace : marketplace}); diff --git a/Samples~/Contracts/FA2/storage.jsligo.meta b/Samples~/Contracts/FA2/storage.jsligo.meta deleted file mode 100644 index b033804d..00000000 --- a/Samples~/Contracts/FA2/storage.jsligo.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 0a0f8241f71c04502a1ca4cc0fc00b5d -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/Contracts/FA2/transfer.jsligo b/Samples~/Contracts/FA2/transfer.jsligo deleted file mode 100644 index 262d12e0..00000000 --- a/Samples~/Contracts/FA2/transfer.jsligo +++ /dev/null @@ -1,128 +0,0 @@ -#import "ledger.jsligo" "Ledger" -#import "storage.jsligo" "Storage" -#import "operators.jsligo" "Operators" -#import "metadata.jsligo" "TokenMetadata" -#import "marketplace.jsligo" "Marketplace" - -type storage = Storage.t; -type buy_param = Marketplace.buy_param; - -// Transfer entrypoint -export type atomic_trans = -// @layout:comb -{ - to_ : address, - token_id : nat, - token_amount : nat, -}; - - -type transfer_from = { - from_ : address, - tx : list, -}; - -export type transfer_param = list; - -// "transfering" would imply manipulation of amount property on a user for the provided ID -// it decreases the amount for one user and increases for the other -// thus supporting both: fungibles and non fungibles -// if before transfer the ledger looked like this: -// -// user A: [id:15, Amount:1] -// -// then after transfer to user B the ledger looks like this -// -// user A: [id:15, Amount:0] -// user B: [id:15, Amount:1] - -const atomic_transfer_new_ledger = (l: Ledger.t, from_: address, to_ : address, token_id : nat, token_amount : nat) : Ledger.t => -{ - let ledger = Ledger.decrease_token_amount_for_user (l, from_, token_id, token_amount); - ledger = Ledger.increase_token_amount_for_user ([ledger, to_, token_id, token_amount]); - - return ledger; -} - -// this is FA2 standard entry point -// walks through the list of transactions (of type transfer_param), and then through the lists of operations -// thus withing the single entrypoint call it is possible to transfer a selection of items from the same user to a bunch of users -const transfer = ([t, s]: [transfer_param, storage]): [list, storage] => { - - const transfer_new_storage = (t : transfer_param, s : storage) : storage => { - - // This function process the "tx" list. Since all transfer share the same "from_" address, we use a se - const process_atomic_transfer = (from_ : address) => ([s, t]: [storage, atomic_trans]) => { - //const {to_,token_id,token_amount} = t; - const to_ = t.to_; - const token_id = t.token_id; - const token_amount = t.token_amount; - - TokenMetadata.assert_token_exist (s.token_metadata, token_id); - Operators.assert_authorisation ([s.operators, from_, token_id]); - - let new_marketplace = s.marketplace; - if(Marketplace.is_item_on_market([[from_, token_id], s.marketplace])) - new_marketplace = Marketplace.remove_from_market([from_, token_id], s.marketplace); - - let new_ledger = atomic_transfer_new_ledger(s.ledger, from_, to_, token_id, token_amount); - - return ({...s, marketplace : new_marketplace, ledger: new_ledger}); - }; - - const process_single_transfer = ([s, t]: [storage, transfer_from]) => { - const {from_,tx} = t; - const ledger = List.fold_left (process_atomic_transfer (from_), s, tx); - return ledger - }; - - return List.fold_left (process_single_transfer, s, t); - } - - return [list ([]), transfer_new_storage(t, s)]; -} - -// used by Example Project's internal market place -// checks that the Buyer has sufficient amount of currency -// 1. moves the requested item from the owner to the buyer -// 2. moves the soft currency from the buyer to the owner - -const marketplace_buy = ([p, s]: [buy_param, storage]): [list, storage] => { - - const [owner, token_id] = p; - - let [currency, price] = match( - Map.find_opt([owner, token_id], s.marketplace), { - Some: (val : [nat, nat]) => val, - None: () => failwith("Entry not found") - }); - - let caller = Tezos.get_sender(); - - // check if enough coins - let currency_balance = Storage.get_balance(s, caller, currency); - if(currency_balance < price) - { - return failwith("Insufficient funds"); - }; - - let item_balance = Storage.get_balance(s, owner, token_id); - if(item_balance <= (0 as nat)) - { - return failwith("Negative balance"); - }; - - // Authorization check? - // Keep in mind, that this entrypoint is not called by the owner of the item - // Neither is the caller in the Operators list - - // move the item from the owner to the buyer - let new_ledger = atomic_transfer_new_ledger(s.ledger, owner, caller, token_id, 1 as nat); - - // move currency from the buyer to the owner - new_ledger = atomic_transfer_new_ledger(new_ledger, caller, owner, currency, price); - - let new_marketplace = Marketplace.remove_from_market([owner, token_id], s.marketplace); - - return [list ([]), ({...s, ledger: new_ledger, marketplace : new_marketplace})]; -} diff --git a/Samples~/Contracts/FA2/transfer.jsligo.meta b/Samples~/Contracts/FA2/transfer.jsligo.meta deleted file mode 100644 index d167ba2f..00000000 --- a/Samples~/Contracts/FA2/transfer.jsligo.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 0237ea42a33a243c58a310427456037b -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/Contracts/FA2/update_ops.jsligo b/Samples~/Contracts/FA2/update_ops.jsligo deleted file mode 100644 index 2a09cfae..00000000 --- a/Samples~/Contracts/FA2/update_ops.jsligo +++ /dev/null @@ -1,34 +0,0 @@ -#import "errors.jsligo" "Errors" -#import "storage.jsligo" "Storage" -#import "operators.jsligo" "Operators" - -type storage = Storage.t; - -// Update_operators entrypoint -export type operator = -// @layout:comb -{ - owner : address, - operator : address, - token_id : nat, -}; - -export type unit_update = ["Add_operator", operator] | ["Remove_operator", operator]; -export type update_operators_param = list; - -const update_ops = ([updates, s]: [update_operators_param, storage]): [list, storage] => { - const update_operator = ([operators,update] : [Operators.t, unit_update]) : Operators.t => match (update, - { Add_operator : (operator: operator) => Operators.add_operator ([operators, operator.owner, operator.operator, operator.token_id]) - , Remove_operator : (operator: operator) => Operators.remove_operator ([operators, operator.owner, operator.operator, operator.token_id]) - }); - let operators = Storage.get_operators (s); - operators = List.fold_left (update_operator, operators, updates); - const storage_result = Storage.set_operators ([s, operators]); - return [list([]), storage_result]; -}; - -// If transfer_policy is No_transfer or Owner_transfer -//const update_ops : update_operators -> storage -> operation list * storage = -// fun (updates: update_operators) (s: storage) -> -// const () = failwith Errors.not_supported in -// ([]: operation list),s diff --git a/Samples~/Contracts/FA2/update_ops.jsligo.meta b/Samples~/Contracts/FA2/update_ops.jsligo.meta deleted file mode 100644 index 29d66d0e..00000000 --- a/Samples~/Contracts/FA2/update_ops.jsligo.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: ba7ab10767bec447f984d4e5b51088ba -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/Contracts/_Misc.meta b/Samples~/Contracts/_Misc.meta deleted file mode 100644 index 9848fa34..00000000 --- a/Samples~/Contracts/_Misc.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 9f7176926db514282aedcd57a0cb0969 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/Contracts/_Misc/ValuesViewer.jsligo b/Samples~/Contracts/_Misc/ValuesViewer.jsligo deleted file mode 100644 index e897e6d4..00000000 --- a/Samples~/Contracts/_Misc/ValuesViewer.jsligo +++ /dev/null @@ -1,21 +0,0 @@ -type item = -{ -// @layout:comb - name: string, - props: int -}; - -type inventory = set; - -type viewParameter = -// @layout:comb -| ["ViewNat", nat] -| ["ViewInt", int] -| ["ViewString", string] -| ["ViewAddress", address] -| ["ViewInventory", inventory]; - -type storage = unit; -type ret = [list, storage]; - -const main = ([_action, _store]: [viewParameter, storage]): ret => { return failwith() as ret; }; \ No newline at end of file diff --git a/Samples~/Contracts/_Misc/ValuesViewer.jsligo.meta b/Samples~/Contracts/_Misc/ValuesViewer.jsligo.meta deleted file mode 100644 index d4a755db..00000000 --- a/Samples~/Contracts/_Misc/ValuesViewer.jsligo.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 09ffaac4aa7f945eeaf526d4004c94f1 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/Contracts/_Misc/config.sh b/Samples~/Contracts/_Misc/config.sh deleted file mode 100644 index 373c4933..00000000 --- a/Samples~/Contracts/_Misc/config.sh +++ /dev/null @@ -1,82 +0,0 @@ -alias ligo="docker run --rm -v "$PWD":"$PWD" --platform linux/amd64 -w "$PWD" ligolang/ligo:0.65.0" -export OCTEZ_CLIENT_UNSAFE_DISABLE_DISCLAIMER=yes -# octez-client --endpoint https://rpc.tzkt.io/jakartanet config update -# octez-client --endpoint https://rpc.ghostnet.teztnets.xyz/ config update -octez-client --endpoint https://ghostnet.tezos.marigold.dev/ config update -octez-client import secret key holder unencrypted:edsk3oRzLs4nUp4TrqsSJxqX9yMN1Jd6h2dx1SJf9DDWgr4tXbkRqm --force -octez-client get balance for holder -octez-client --wait none transfer 0 from holder to KT1DCcniV9tatQFVLnPv15i4kGYNgpdE6GhS --arg '4' --burn-cap '1.0' -ligo compile parameter '../main.jsligo' '{val1:"str1",val2:"str2"}' -octez-client --wait none transfer 0 from holder to KT1E4xgc9iniojkZqs1BDs117bzaYfMHZcPs --arg '(Pair "str1" "str2")' --burn-cap '1.0' -ligo compile storage 'incrementer.jsligo' '{inventories:Big_map.empty as big_map, viewerContract:"KT1KvDaiC7sn6sdYyWncaYFUoivwHoK1pJM7" as address}' -octez-client originate contract MINTER transferring 0 from holder running incrementer.tz --init 'Pair {} "KT1KvDaiC7sn6sdYyWncaYFUoivwHoK1pJM7"' --burn-cap 1.0 - - -octez-client gen keys holder -octez-client list known addresses -octez-client show address holder -S - -ligo compile contract '../main.jsligo' > 'FA2.tz' -ligo compile storage '../main.jsligo' '{ - ledger: Big_map.empty as big_map>, - token_metadata: Big_map.empty as big_map}>, - operators: Big_map.empty as big_map<[address, address], set>, - marketplace: Big_map.empty as big_map<[address, nat], [nat, nat]>, - token_counter:(1 as nat) -}' - -octez-client originate contract FA2 transferring 0 from holder running FA2.tz --init '(Pair (Pair (Pair {} {}) {} 1) {})' --burn-cap 5.0 - - -ligo compile parameter '../main.jsligo' 'SetMeta({token_id:0 as nat, token_info:Map.literal( list([ - ["item", Bytes.pack( {itemType:0, damage:0,armor:0,attackSpeed:0,healthPoints:0,manaPoints:0} )], - - ["name", Bytes.pack("Example Coin")], - ["symbol", Bytes.pack("UnityTezos")], - ["decimals", Bytes.pack(0)], - - ["image", Bytes.pack("ipfs://bafybeian23odhsho6gufacrcpcr65ft6bpqavzk36pt22lhcjoxy45mqpa")], - ["artifactUri", Bytes.pack("ipfs://bafybeian23odhsho6gufacrcpcr65ft6bpqavzk36pt22lhcjoxy45mqpa")], - ["displayUri", Bytes.pack("ipfs://bafybeian23odhsho6gufacrcpcr65ft6bpqavzk36pt22lhcjoxy45mqpa")], - ["thumbnailUri", Bytes.pack("ipfs://bafybeian23odhsho6gufacrcpcr65ft6bpqavzk36pt22lhcjoxy45mqpa")], - ["description", Bytes.pack("Unity Tezos Example Project coins used as soft currency")], - ["minter", Bytes.pack(Tezos.get_sender())], - ["creators", Bytes.pack(["https://assetstore.unity.com/packages/essentials/tutorial-projects/ui-toolkit-sample-dragon-crashers-231178"])], - ["isBooleanAmount", Bytes.pack(false)], - - ["date", Bytes.pack(Tezos.get_now())] - - ]) )})' - -// as one line: -ligo compile parameter '../main.jsligo' 'SetMeta({token_id:0 as nat, token_info:Map.literal( list([ ["item", Bytes.pack( {itemType:0, damage:0,armor:0,attackSpeed:0,healthPoints:0,manaPoints:0} )], ["name", Bytes.pack("Example Coin")], ["symbol", Bytes.pack("UnityTezos")], ["decimals", Bytes.pack(0)], ["image", Bytes.pack("ipfs://bafybeian23odhsho6gufacrcpcr65ft6bpqavzk36pt22lhcjoxy45mqpa")], ["artifactUri", Bytes.pack("ipfs://bafybeian23odhsho6gufacrcpcr65ft6bpqavzk36pt22lhcjoxy45mqpa")], ["displayUri", Bytes.pack("ipfs://bafybeian23odhsho6gufacrcpcr65ft6bpqavzk36pt22lhcjoxy45mqpa")], ["thumbnailUri", Bytes.pack("ipfs://bafybeian23odhsho6gufacrcpcr65ft6bpqavzk36pt22lhcjoxy45mqpa")], ["description", Bytes.pack("Unity Tezos Example Project coins used as soft currency")], ["minter", Bytes.pack(Tezos.get_sender())], ["creators", Bytes.pack(["https://assetstore.unity.com/packages/essentials/tutorial-projects/ui-toolkit-sample-dragon-crashers-231178"])], ["isBooleanAmount", Bytes.pack(false)], ["date", Bytes.pack(Tezos.get_now())]]) )})' - -//result: -(Right - (Right - (Right - (Right - (Right - (Right - (Right - (Right - (Left (Pair 0 - { Elt "artifactUri" - 0x050100000042697066733a2f2f62616679626569616e32336f646873686f3667756661637263706372363566743662707161767a6b3336707432326c68636a6f787934356d717061 ; - Elt "creators" - 0x05010000006b68747470733a2f2f617373657473746f72652e756e6974792e636f6d2f7061636b616765732f657373656e7469616c732f7475746f7269616c2d70726f6a656374732f75692d746f6f6c6b69742d73616d706c652d647261676f6e2d63726173686572732d323331313738 ; - Elt "date" 0x05003b ; - Elt "decimals" 0x050000 ; - Elt "description" - 0x050100000037556e6974792054657a6f73204578616d706c652050726f6a65637420636f696e73207573656420617320736f66742063757272656e6379 ; - Elt "displayUri" - 0x050100000042697066733a2f2f62616679626569616e32336f646873686f3667756661637263706372363566743662707161767a6b3336707432326c68636a6f787934356d717061 ; - Elt "image" - 0x050100000042697066733a2f2f62616679626569616e32336f646873686f3667756661637263706372363566743662707161767a6b3336707432326c68636a6f787934356d717061 ; - Elt "isBooleanAmount" 0x050303 ; - Elt "item" 0x0507070707070700000000070700000000070700000000 ; - Elt "minter" 0x050a0000001600005af29a2dd5d55f9a2c41993dcf562317b20be264 ; - Elt "name" 0x05010000000c4578616d706c6520436f696e ; - Elt "symbol" 0x05010000000a556e69747954657a6f73 ; - Elt "thumbnailUri" - 0x050100000042697066733a2f2f62616679626569616e32336f646873686f3667756661637263706372363566743662707161767a6b3336707432326c68636a6f787934356d717061 })))))))))) diff --git a/Samples~/Contracts/_Misc/config.sh.meta b/Samples~/Contracts/_Misc/config.sh.meta deleted file mode 100644 index d14669fe..00000000 --- a/Samples~/Contracts/_Misc/config.sh.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: d5a17dae1e5ac4764b09fe7e8d32b4b3 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/Contracts/_Misc/env b/Samples~/Contracts/_Misc/env deleted file mode 100644 index ac951355..00000000 --- a/Samples~/Contracts/_Misc/env +++ /dev/null @@ -1,17 +0,0 @@ -MY_STRUCT_CONTRACT = KT1E4xgc9iniojkZqs1BDs117bzaYfMHZcPs -MY_COUNTER_CONTRACT = KT1DCcniV9tatQFVLnPv15i4kGYNgpdE6GhS -MY_INCREMENTER_CONTRACT = KT1X3V7utRa7Pt6kQQCJForrQb933qEPpXPV -MY_INCREMENTER_CONTRACT_WITH_CONTRACT = KT1MS3jCojbqQu8Z1zr8GqPkeXQnXXp2dzEg -MY_OBSERVER_CONTRACT = KT1DFJfp4PW4Ur2Q6QibvqcEWgfVDs5NrLFC -MY_OBSERVER_SMALL_LETTERS = KT1GWDdToHqUot5p1miH4DBteGpoXhcZd2nX - -MY_INCREMENTER_HARDCODED = KT1LQrJGjav694UZiMbLCaVFbgHwKoWj6RjN -MY_MINTER = KT1Ne96Z9tWwWvsLFWWk3YpqcEb9h8bDMBa9 - -MY_INVENTORY_VIEWER = KT1KvDaiC7sn6sdYyWncaYFUoivwHoK1pJM7 - -MY_INVENTORY_MINTER_GHOSTNET = KT1Ce3eh8BNXk4KVfjWy6VXoLk2Sd2GPQKzK -MY_MAP_OF_MAPS_MINTER = KT1Qwo5bi4oWEKcgJdt9zzL4334kwb12ctbV -MY_MAP_TO_SET_MINTER = KT1XEzL4kyxAoPtBMSWQ4nDBfXXZ3th1zjN4 - -MY_FA2 = KT1DMWAeaP6wxKWPFDLGDkB7xUg563852AjD \ No newline at end of file diff --git a/Samples~/Contracts/_Misc/env.meta b/Samples~/Contracts/_Misc/env.meta deleted file mode 100644 index 3cbd84b4..00000000 --- a/Samples~/Contracts/_Misc/env.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 4afaad1b397c642eebbf92fe3140a572 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/Contracts/_Misc/incrementer.jsligo b/Samples~/Contracts/_Misc/incrementer.jsligo deleted file mode 100644 index 58310237..00000000 --- a/Samples~/Contracts/_Misc/incrementer.jsligo +++ /dev/null @@ -1,174 +0,0 @@ -type id = nat; -type amount = nat; - -type item = -{ -// @layout:comb -// id: int, - price : int, - - // inventory type: leg, torso, hand, consumable, etc - itemType : int, - - damage : int, - armor : int, - attackSpeed : int, - healthPoints : int, - manaPoints : int -}; - -type slot = [item, amount]; -type itemSet = set; -type inventory = map; - -type storage = -{ - inventories : big_map, -// viewerContract : address -}; - -type viewParameter = -// @layout:comb -| ["ViewNat", nat] -| ["ViewInt", int] -| ["ViewString", string] -| ["ViewAddress", address] -| ["ViewInventory", inventory] -; - -type parameter = -//| ["Get_my_inventory"] -//| ["Get_inventory_of", address] - -| ["HumanizeItem", item] -| ["HumanizeSlot", mySlot] -| ["HumanizeInventory", itemSet] - -| ["Mint", int] -| ["Update_operators", address] -; - -type listOfOps = list; -type return_ = [listOfOps, storage]; - - -// @view -const view_inventory_of = ([addr , s]: [address , storage]) : itemSet => -{ - let inv : inventory = match( - Big_map.find_opt(addr, s.inventories) as option, { - Some: (item : inventory) => item, - None: () => Map.empty as inventory - }); - - const pairs = Map.fold( - (acc: mySet, item: [item, amount]) : itemSet => Set.add(item, acc), - inv, - Set.empty as itemSet - ); - - return pairs; -}; - -/* -let sendToCallback = (addr : address, s : storage) : listOfOps => { - - const callback: contract = match( - Tezos.get_contract_opt(s.viewerContract) as option>, { - Some: (contract: option>) => contract, - None: () => failwith("Contract not found!!!") - }); - - let invToSend = ViewInventory(view_inventory_of(addr, s)); - let op : operation = Tezos.transaction(invToSend, 0 as tez, callback); - return list([op]) as listOfOps; -}; -*/ - -const mint = (seed: int, store: storage) : storage => { - - let dmg = (seed * 13) % 9 + 1; - let arm = (seed / 13) % (9) + 1; - let atkSpd = (seed * 17) % (9) + 1; - let hp = (seed * 5) % (9) + 1; - let mp = (seed / 35) % (9) + 1; - - let newItem : item = - { - id: seed, - price : (dmg + arm + atkSpd + hp + mp), - - damage : dmg, - armor : arm, - attackSpeed : atkSpd, - healthPoints : hp, - manaPoints : mp - }; - - let addr = Tezos.get_sender(); - let old_map_opt: option = Big_map.find_opt(addr, store.inventories); - - /* - // in case we need to increment the amount of items per ID - let old_map = match(old_map_opt, { - Some: (inv: inventory) => - { - let old_amount_opt : option = Big_map.find_opt(newItem, inv); - - let new_amount = match(old_ampount_opt, { - Some: (amount : nat) => amount + 1, - None: () => 1 - }); - }, - None: () => - { - return Big_map.literal(list([ - [newItem, 1] - ])); - } - }); - */ - - let old_map = match(old_map_opt, { - Some: (inv: inventory) => inv, - None: () => Map.empty - }); - - // add to the map if not present, do nothing if it does - let new_map = Map.update(newItem, Some({count: (1 as nat)}), old_map); - - // add to the map if not present, replace if it does - let new_store : storage = - { - inventories: Big_map.update (addr, Some(new_map), store.inventories), - // viewerContract : store.viewerContract - } - - return new_store; -}; - -const main = ([action, store]: [parameter, storage]) : return_ => { - - let noop : listOfOps = list([]); - match(action, { -// Get_my_inventory: () => { return [sendToCallback(Tezos.get_sender(), store), store]; }, -// Get_inventory_of: (addr: address) => { return [sendToCallback(addr, store), store]; }, - - HumanizeItem: (item : item) => { failwith("Netezos use only") }, - HumanizeSlot: (slot : mySlot) => { failwith("Netezos use only") }, - HumanizeInventory: (set : itemSet) => { failwith("Netezos use only") }, - - Mint: (seed : int) => { return [noop, mint(seed, store)]; }, - - Update_operators: (addr: address) => - { - const newStorage : storage = - { - inventories : store.inventories, -// viewerContract : addr - }; - - return [noop, newStorage]; - } - }); -}; diff --git a/Samples~/Contracts/_Misc/incrementer.jsligo.meta b/Samples~/Contracts/_Misc/incrementer.jsligo.meta deleted file mode 100644 index 95be345b..00000000 --- a/Samples~/Contracts/_Misc/incrementer.jsligo.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 725378e31ca5e41b39770fa6036682b3 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/Contracts/_Misc/mint_original.jsligo b/Samples~/Contracts/_Misc/mint_original.jsligo deleted file mode 100644 index aa07fdd6..00000000 --- a/Samples~/Contracts/_Misc/mint_original.jsligo +++ /dev/null @@ -1,62 +0,0 @@ -#import "FA2/ledger.jsligo" "Ledger" -#import "FA2/storage.jsligo" "Storage" -#import "FA2/metadata.jsligo" "TokenMetadata" - -type token_id = nat; -type owner = address; - -type ledger = Ledger.t; -type storage = Storage.t; -type token_metadata = TokenMetadata.t; - -export type mint_param = -// @layout:comb -{ - ids : list, - metas : big_map> -}; - -type tokenIter = [token_metadata, big_map>]; - -// allowed by operator/administrator -const mint = (param: mint_param, s: storage) : [list , storage] => -{ - // update token_ids - let add_id = ([acc, id] : [list, nat]) : list => list([id, ...acc]); - let new_token_ids : list = List.fold(add_id, param.ids, s.token_ids); - - // update ledger - // TODO: check wether [OWNER,ID] presents, then add to the amount (i.e. add money) - - // original - //let set_token_owner = ([map, id] : [ledger, token_id]) : ledger => Big_map.add([Tezos.get_sender (), id], 1 as nat, map) - let set_token_owner = ([map, id] : [ledger, token_id]) : ledger => - Big_map.add( Tezos.get_sender (), - Map.literal( list([ - [id, 1 as nat] // item 0 - ])), - map); - - let new_ledger : ledger = List.fold(set_token_owner, param.ids, s.ledger); - - let add_token = ([acc, elt] : [tokenIter, token_id ]) : tokenIter => - { - let current_token_info : map = match(Big_map.find_opt(elt, acc[1]), - { - Some: (ti : map) => ti, - None: () => failwith("Missing token_info") //as map - }); - - let current_metadata : TokenMetadata.data = { - token_id : elt, - token_info : current_token_info - }; - - [Big_map.add(elt, current_metadata, acc[0]), acc[1]]; - }; - - // update token metadata - let [new_token_metadata, _] = List.fold(add_token, param.ids, [s.token_metadata, param.metas]); - - return [ list([]), ({...s, token_ids: new_token_ids, ledger: new_ledger, token_metadata: new_token_metadata }) ] -} diff --git a/Samples~/Contracts/_Misc/mint_original.jsligo.meta b/Samples~/Contracts/_Misc/mint_original.jsligo.meta deleted file mode 100644 index 9483c930..00000000 --- a/Samples~/Contracts/_Misc/mint_original.jsligo.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: a296bd9abeb52495bb2424045e2293f7 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/Contracts/_Misc/valuesViewer.tz b/Samples~/Contracts/_Misc/valuesViewer.tz deleted file mode 100644 index 01782418..00000000 --- a/Samples~/Contracts/_Misc/valuesViewer.tz +++ /dev/null @@ -1,3 +0,0 @@ -parameter (or (nat %viewNat) (or (int %viewInt) (or (string %viewString) (address %viewAddress)))); -storage unit; -code { FAILWITH } \ No newline at end of file diff --git a/Samples~/Contracts/_Misc/valuesViewer.tz.meta b/Samples~/Contracts/_Misc/valuesViewer.tz.meta deleted file mode 100644 index ca8d560c..00000000 --- a/Samples~/Contracts/_Misc/valuesViewer.tz.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 767822af9fad24d739c24acf6dcea469 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/Contracts/item.jsligo b/Samples~/Contracts/item.jsligo deleted file mode 100644 index 23d19bd7..00000000 --- a/Samples~/Contracts/item.jsligo +++ /dev/null @@ -1,12 +0,0 @@ -// Item stats definition -export type t = -{ -// @layout:comb - // inventory type: leg, torso, hand, consumable, etc - itemType : int, - damage : int, - armor : int, - attackSpeed : int, - healthPoints : int, - manaPoints : int -}; \ No newline at end of file diff --git a/Samples~/Contracts/item.jsligo.meta b/Samples~/Contracts/item.jsligo.meta deleted file mode 100644 index de00dd17..00000000 --- a/Samples~/Contracts/item.jsligo.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 95c11c30a975d463186f34121e38dca1 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/Contracts/login.jsligo b/Samples~/Contracts/login.jsligo deleted file mode 100644 index 7366b3e7..00000000 --- a/Samples~/Contracts/login.jsligo +++ /dev/null @@ -1,70 +0,0 @@ -// Login entrypoint: pre-mint random items & in-game currency on first log-in - -#import "FA2/ledger.jsligo" "Ledger" -#import "FA2/storage.jsligo" "Storage" -#import "FA2/metadata.jsligo" "TokenMetadata" -#import "item.jsligo" "Item" - -#import "mint.jsligo" "Mint" - -type storage = Storage.t; -type currency = nat; -type amount = nat; - -export type login_param = unit; - -// "Get Coins" implementation -// gives the user 1000 coins and mints 1 item the first time they press the button -// The following times won't do anything -const login = (p: login_param, s: storage) : [list , storage] => -{ - // empty list of operation and the old not modified storage - let result = [list([]) as list, s]; - - let sender = Tezos.get_sender(); - - // checking if sender is already in the dictionary - if(!Big_map.mem(sender, s.ledger)) - { - // adding 1000 coins to a new user - let token_id = 0 as nat; - let amount_ = 1000 as nat; - - // modifying the ledger (giving 1000 coins to the new user) - let new_ledger = Ledger.set_for_user(s.ledger, sender, token_id, amount_); - - // the old metadata cached - let new_metadata = s.token_metadata; - - // checking if the soft currency ID is already in the metadata dictionary (it is if this has been ever called) - if(!Big_map.mem(token_id, s.token_metadata)) - { - // adding item stats to soft currency just in case, so there are no errors - // but maybe should be done on property-based - // i.e. Item would have "item" property, but the currency would not - let newItem : Item.t = { itemType:0,damage:0,armor:0,attackSpeed:0,healthPoints:0,manaPoints:0}; - - let current_token_info : map = Map.literal( list([ - ["item", Bytes.pack(newItem)] - ])); - - let current_metadata : TokenMetadata.data = { - token_id : token_id, - token_info : current_token_info - }; - - // modifying the metadata by adding "coin" id to the dictionary with dummy stats - new_metadata = Big_map.add(token_id, current_metadata, s.token_metadata); - } - - // new storage with the new metadata - let new_storage = ({...s, ledger : new_ledger, token_metadata : new_metadata}); - - // minting an item as well [operations, new_after_mint_storage] - let mint_result = Mint.mint(p, new_storage); - - return mint_result; - } - - return result; -}; diff --git a/Samples~/Contracts/login.jsligo.meta b/Samples~/Contracts/login.jsligo.meta deleted file mode 100644 index a507a3a0..00000000 --- a/Samples~/Contracts/login.jsligo.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 9b67c40cd8e224d65a249fbad0ff794a -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/Contracts/main.jsligo b/Samples~/Contracts/main.jsligo deleted file mode 100644 index 0a57ca2a..00000000 --- a/Samples~/Contracts/main.jsligo +++ /dev/null @@ -1,294 +0,0 @@ -// https://gitlab.com/ligolang/contract-catalogue/-/blob/main/lib/fa2/asset/multi_asset.jsligo - -#import "mint.jsligo" "Mint" -#import "login.jsligo" "Login" -#import "item.jsligo" "Item" - -#import "FA2/storage.jsligo" "Storage" -#import "FA2/transfer.jsligo" "Transfer" -#import "FA2/balance_of.jsligo" "BalanceOf" -#import "FA2/update_ops.jsligo" "UpdateOps" -#import "FA2/metadata.jsligo" "TokenMetadata" -#import "FA2/marketplace.jsligo" "Marketplace" -#import "FA2/operators.jsligo" "Operators" - -type storage = Storage.t; - -type token_id = nat; -type amount = nat; - -type currency = nat; -type price = nat; - -type item = Item.t; -type itemSet = set<[item, amount]>; - -type marketToken = [address, token_id]; -type marketPrice = [currency, price]; - -// data format for inventory View -type view_inventory_result = -{ -// @layout:comb - - id: int, - amount: int, - - item: Item.t -}; - -// data format for marketplace View -type view_marketplace_result = -{ -// @layout:comb - - id: int, - owner: address, - currency: int, - price: int, - - item: Item.t -}; - -type login_param = Login.login_param; -type mint_param = Mint.mint_param; -type set_meta_param = TokenMetadata.data; - -type add_to_market_param = Marketplace.add_to_market_param; -type remove_from_market_param = Marketplace.remove_from_market_param; -type buy_param = Marketplace.buy_param; - -type transfer_param = Transfer.transfer_param; -type balance_of_param = BalanceOf.balance_of_param; -type update_operators_param = UpdateOps.update_operators_param; - -type parameter = -// @layout:comb -| ["Login", login_param] -| ["Mint", mint_param] - -// Marketplace interaction -| ["AddToMarket", add_to_market_param] -| ["RemoveFromMarket", remove_from_market_param] -| ["Buy", buy_param] - -// FA2 interfacce -| ["Transfer", transfer_param] -| ["Balance_of", balance_of_param] -| ["Update_operators", update_operators_param] - -// utility -| ["SetMeta", set_meta_param] - -// "Humanize" are utility functions, used to parse data to human-readable objects -| ["HumanizeItem", item] -| ["HumanizeInventory", set] -| ["HumanizeItemOnMarket", bool] -| ["HumanizeItemsOnMarket", set<[nat, bool]>] -| ["HumanizeMarketplace", set] -; - -// Smart contract main entry point -const main = ([p, s]: [parameter, storage]) : [list, storage] => match (p, -{ - Login : (p : login_param ) => Login.login(p, s) , - Mint : (p : mint_param ) => Mint.mint(p, s) , - - AddToMarket : (p : add_to_market_param ) => - { - let caller = Tezos.get_sender(); - - TokenMetadata.assert_token_exist (s.token_metadata, p.token_id); - Operators.assert_authorisation ([s.operators, caller, p.token_id]); - - let new_marketplace = Marketplace.add_to_market(p, s.marketplace); - let new_storage = Storage.set_marketplace ([s, new_marketplace]); - return [list([]), new_storage]; - } , - - RemoveFromMarket : (p : remove_from_market_param ) => - { - let caller = Tezos.get_sender(); - - const [_, token_id] = p; - - TokenMetadata.assert_token_exist (s.token_metadata, token_id); - Operators.assert_authorisation ([s.operators, caller, token_id]); - - let new_marketplace = Marketplace.remove_from_market(p, s.marketplace); - let new_storage = Storage.set_marketplace ([s, new_marketplace]); - return [list([]), new_storage]; - } , - - Buy : (p : buy_param ) => Transfer.marketplace_buy([p, s]), - - Transfer : (p : transfer_param ) => Transfer.transfer ([p, s]) , - Balance_of : (p : balance_of_param ) => BalanceOf.balance_of ([p, s]) , - Update_operators : (p : update_operators_param) => UpdateOps.update_ops ([p, s]), - - // utility - SetMeta: (p : set_meta_param ) => Storage.set_token_metadata([p, s]) , // to be removed for security - - // Humanize utility function do not need to execute any code, because they are never actually called - HumanizeItem: (_p : item ) => failwith("Netezos use only"), - HumanizeInventory: (_p : set ) => failwith("Netezos use only"), - HumanizeItemOnMarket: (_p : bool ) => failwith("Netezos use only"), - HumanizeItemsOnMarket: (_p : set<[nat, bool]> ) => failwith("Netezos use only"), - HumanizeMarketplace: (_p : set ) => failwith("Netezos use only"), -}); - - -// @view -const get_balance = ([p, s] : [[address , nat] , storage]) : nat => { - const [owner, token_id] = p; - return Storage.get_balance (s, owner, token_id); -}; - -// @view -const is_operator = ([op, s] : [Operators.operator_info , storage]) : bool => - Operators.is_operator ([s.operators, op.owner, op.operator, op.token_id]); - -// @view -const total_supply = ([token_id, s] : [nat , storage]) : nat => { - TokenMetadata.assert_token_exist (s.token_metadata, token_id); - return (1 as nat); -}; - -// @view -const token_metadata = ([p, s] : [nat, storage]) : TokenMetadata.data => - TokenMetadata.get_token_metadata([p, s.token_metadata]); - -// @view -const view_item_meta = ([token_id , s]: [nat , storage]) : item => -{ - let meta = - match (Big_map.find_opt (token_id, s.token_metadata), { - Some : (data) => data, - None : () => failwith ("Meta not found") - }); - - let info = - match(Map.find_opt ("item", meta.token_info), { - Some : (info : bytes) => info, - None : () => failwith ("Property not found") - }); - - let item = match( Bytes.unpack(info) as option, { - Some: (it : item) => it, - None: () => failwith("Could not unpack") - }); - - return item; -}; - -// @view -const view_items_of = ([owner , s]: [address , storage]) : set => -{ - let inv = match( - Big_map.find_opt(owner, s.ledger), { - Some: (m : map) => m, - None: () => Map.empty - }); - - return Map.fold( - ([acc, [token_id, amount]]: [set, [token_id, amount]]) => - { - if(amount > (0 as nat)) - { - let meta = - match (Big_map.find_opt (token_id, s.token_metadata), { - Some : (data) => data, - None : () => failwith ("Meta not found") - }); - - let info = - match(Map.find_opt ("item", meta.token_info), { - Some : (info : bytes) => info, - None : () => failwith ("Property not found") - }); - - let item = match( Bytes.unpack(info) as option, { - Some: (it : item) => it, - None: () => failwith("Could not unpack") - }); - - let result : view_inventory_result = - { - id: int(token_id), - amount: int(amount), - item: item - }; - - return Set.add(result, acc); - } - - return acc; - }, - inv, - Set.empty - ); -}; - -// @view -const view_items_on_market = ([_p, s] : [unit, storage]) : set => -{ - return Map.fold( - ([acc, [marketToken, marketPrice]]: [set, [marketToken, marketPrice]]) => - { - const [owner, token_id] = marketToken; - const [currency, price] = marketPrice; - - let meta = match (Big_map.find_opt (token_id, s.token_metadata), { - Some : (data) => data, - None : () => failwith ("Meta not found") - }); - - let info = match(Map.find_opt ("item", meta.token_info), { - Some : (info : bytes) => info, - None : () => failwith ("Property not found") - }); - - let item = match( Bytes.unpack(info) as option, { - Some: (it : item) => it, - None: () => failwith("Could not unpack") - }); - - let result : view_marketplace_result = - { - id: int(token_id), - owner: owner, - currency: int(currency), - price: int(price), - item: item - }; - - - return Set.add(result, acc); - }, - s.marketplace, - Set.empty - ); -}; - -// @view -const is_item_on_market = ([p, s] : [[address, nat], storage]) : bool => Map.mem(p, s.marketplace); - -// @view -const is_items_on_market = ([p, s] : [[address, list], storage]) : set<[nat, bool]> => - List.fold( - ([acc, token_id] : [set<[nat, bool]>, nat]) => { - let is_present = Map.mem([p[0], token_id], s.marketplace); - return Set.add([token_id, is_present], acc); - }, - p[1], - Set.empty - ); - - - -// @ view -//const item_metadata = ([p, s] : [nat, storage]) : bytes => -// token_metadata(p, s).token_info["item"]; - -// @ view -//const all_tokens = ([_, s] : [unit , storage]) : list => s.token_ids; diff --git a/Samples~/Contracts/main.jsligo.meta b/Samples~/Contracts/main.jsligo.meta deleted file mode 100644 index b0e5e647..00000000 --- a/Samples~/Contracts/main.jsligo.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 551044e468f62450b86621b1fc2ba080 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/Contracts/mint.jsligo b/Samples~/Contracts/mint.jsligo deleted file mode 100644 index 97cb1a6d..00000000 --- a/Samples~/Contracts/mint.jsligo +++ /dev/null @@ -1,76 +0,0 @@ -#import "FA2/ledger.jsligo" "Ledger" -#import "FA2/storage.jsligo" "Storage" -#import "FA2/metadata.jsligo" "TokenMetadata" - -#import "item.jsligo" "Item" - -type token_id = nat; -type owner = address; - -type ledger = Ledger.t; -type token_map = Ledger.token_map; - -type storage = Storage.t; -type token_metadata = TokenMetadata.t; - -type item = Item.t; - -export type mint_param = unit; - -// allowed only by operator/administrator -// mints a "random" item by using mint counter and time offsets -const mint = (_p: mint_param, s: storage) : [list , storage] => -{ - // current mint counter gives a unique ID to a new minted item - let token_id = s.token_counter; - let owner = Tezos.get_sender (); - - // if owner key exists, then add token_id to the map with amount of "1", since it is an NFT - let new_ledger : ledger = - match( Big_map.find_opt( owner, s.ledger ), { - Some: (m : token_map) => Big_map.update(owner, Some(Map.add(token_id, 1 as nat, m)), s.ledger), - None: () => Big_map.add(owner, Map.literal( list([ [token_id, 1 as nat] ])), s.ledger) - }); - - // getting some pseudo "random" value based on the current time as an offset - let some_midnight: timestamp = "2020-09-06t11:00:00Z" as timestamp; - let now = Tezos.get_now(); - let some_seconds = now - some_midnight; - - let seed = int(token_id) + some_seconds; - - // "random stats" - let newItem : item = - { - itemType : seed % 9 + 1, - damage : (seed * 1 + 12345) % (9) + 1, - armor : (seed * 2 + 23456) % (9) + 1, - attackSpeed : (seed * 3 + 34567) % (9) + 1, - healthPoints :(seed * 4 + 45678) % (9) + 1, - manaPoints : (seed * 5 + 56789) % (9) + 1 - }; - - // writing the data as bytes array into metadata - // to be filled with misc metadata from TZIP12 and TZIP21 - let current_token_info : map = Map.literal( list([ - ["item", Bytes.pack(newItem)] - ])); - - let current_metadata : TokenMetadata.data = { - token_id : token_id, - token_info : current_token_info - }; - - // making sure that all items have unique IDs - let new_counter = s.token_counter + (1 as nat); - - // modifying metadata with the new token_id - let new_token_metadata = Big_map.add(token_id, current_metadata, s.token_metadata); - let new_storage = ({...s, - ledger: new_ledger, - token_metadata: new_token_metadata, - token_counter: new_counter - }); - - return [ list([]), new_storage]; -} diff --git a/Samples~/Contracts/mint.jsligo.meta b/Samples~/Contracts/mint.jsligo.meta deleted file mode 100644 index e1ab1898..00000000 --- a/Samples~/Contracts/mint.jsligo.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 5504d1e0ed02c4335bed3a4cb176531d -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/Scripts/DesignPattern/Singleton.meta b/Samples~/MarketplaceSample.meta similarity index 77% rename from Runtime/Scripts/DesignPattern/Singleton.meta rename to Samples~/MarketplaceSample.meta index 470a9034..2ebcda7a 100644 --- a/Runtime/Scripts/DesignPattern/Singleton.meta +++ b/Samples~/MarketplaceSample.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b16ac50d2d4f94e3f866d1006af8f187 +guid: b772168bbb8a94b9ab822677b7eb3e3d folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/MarketplaceSample/Art.meta b/Samples~/MarketplaceSample/Art.meta new file mode 100644 index 00000000..09909250 --- /dev/null +++ b/Samples~/MarketplaceSample/Art.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fea4493fb9bab444b8c2f7183068986e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Art/UI.meta b/Samples~/MarketplaceSample/Art/UI.meta similarity index 100% rename from Samples~/Art/UI.meta rename to Samples~/MarketplaceSample/Art/UI.meta diff --git a/Samples~/Art/UI/Gui_parts.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts.meta diff --git a/Samples~/Art/UI/Gui_parts/Frame_big.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/Frame_big.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/Frame_big.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/Frame_big.png diff --git a/Samples~/Art/UI/Gui_parts/Frame_big.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/Frame_big.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/Frame_big.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/Frame_big.png.meta diff --git a/Samples~/Art/UI/Gui_parts/Frame_mid.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/Frame_mid.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/Frame_mid.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/Frame_mid.png diff --git a/Samples~/Art/UI/Gui_parts/Frame_mid.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/Frame_mid.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/Frame_mid.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/Frame_mid.png.meta diff --git a/Samples~/Art/UI/Gui_parts/Frame_mid_2.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/Frame_mid_2.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/Frame_mid_2.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/Frame_mid_2.png diff --git a/Samples~/Art/UI/Gui_parts/Frame_mid_2.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/Frame_mid_2.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/Frame_mid_2.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/Frame_mid_2.png.meta diff --git a/Samples~/Art/UI/Gui_parts/Hp_frame.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/Hp_frame.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/Hp_frame.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/Hp_frame.png diff --git a/Samples~/Art/UI/Gui_parts/Hp_frame.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/Hp_frame.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/Hp_frame.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/Hp_frame.png.meta diff --git a/Samples~/Art/UI/Gui_parts/Hp_line.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/Hp_line.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/Hp_line.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/Hp_line.png diff --git a/Samples~/Art/UI/Gui_parts/Hp_line.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/Hp_line.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/Hp_line.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/Hp_line.png.meta diff --git a/Samples~/Art/UI/Gui_parts/Mini_background.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/Mini_background.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/Mini_background.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/Mini_background.png diff --git a/Samples~/Art/UI/Gui_parts/Mini_background.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/Mini_background.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/Mini_background.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/Mini_background.png.meta diff --git a/Samples~/Art/UI/Gui_parts/Mini_frame0.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/Mini_frame0.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/Mini_frame0.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/Mini_frame0.png diff --git a/Samples~/Art/UI/Gui_parts/Mini_frame0.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/Mini_frame0.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/Mini_frame0.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/Mini_frame0.png.meta diff --git a/Samples~/Art/UI/Gui_parts/Mini_frame1.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/Mini_frame1.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/Mini_frame1.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/Mini_frame1.png diff --git a/Samples~/Art/UI/Gui_parts/Mini_frame1.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/Mini_frame1.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/Mini_frame1.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/Mini_frame1.png.meta diff --git a/Samples~/Art/UI/Gui_parts/Mini_frame2.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/Mini_frame2.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/Mini_frame2.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/Mini_frame2.png diff --git a/Samples~/Art/UI/Gui_parts/Mini_frame2.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/Mini_frame2.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/Mini_frame2.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/Mini_frame2.png.meta diff --git a/Samples~/Art/UI/Gui_parts/bar_ready.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/bar_ready.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/bar_ready.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/bar_ready.png diff --git a/Samples~/Art/UI/Gui_parts/bar_ready.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/bar_ready.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/bar_ready.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/bar_ready.png.meta diff --git a/Samples~/Art/UI/Gui_parts/barmid_ready.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/barmid_ready.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/barmid_ready.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/barmid_ready.png diff --git a/Samples~/Art/UI/Gui_parts/barmid_ready.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/barmid_ready.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/barmid_ready.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/barmid_ready.png.meta diff --git a/Samples~/Art/UI/Gui_parts/big_background.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/big_background.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/big_background.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/big_background.png diff --git a/Samples~/Art/UI/Gui_parts/big_background.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/big_background.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/big_background.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/big_background.png.meta diff --git a/Samples~/Art/UI/Gui_parts/big_roundframe.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/big_roundframe.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/big_roundframe.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/big_roundframe.png diff --git a/Samples~/Art/UI/Gui_parts/big_roundframe.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/big_roundframe.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/big_roundframe.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/big_roundframe.png.meta diff --git a/Samples~/Art/UI/Gui_parts/button.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/button.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/button.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/button.png diff --git a/Samples~/Art/UI/Gui_parts/button.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/button.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/button.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/button.png.meta diff --git a/Samples~/Art/UI/Gui_parts/button2.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/button2.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/button2.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/button2.png diff --git a/Samples~/Art/UI/Gui_parts/button2.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/button2.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/button2.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/button2.png.meta diff --git a/Samples~/Art/UI/Gui_parts/button2_ready_off.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/button2_ready_off.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/button2_ready_off.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/button2_ready_off.png diff --git a/Samples~/Art/UI/Gui_parts/button2_ready_off.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/button2_ready_off.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/button2_ready_off.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/button2_ready_off.png.meta diff --git a/Samples~/Art/UI/Gui_parts/button2_ready_on.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/button2_ready_on.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/button2_ready_on.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/button2_ready_on.png diff --git a/Samples~/Art/UI/Gui_parts/button2_ready_on.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/button2_ready_on.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/button2_ready_on.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/button2_ready_on.png.meta diff --git a/Samples~/Art/UI/Gui_parts/button3_ready.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/button3_ready.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/button3_ready.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/button3_ready.png diff --git a/Samples~/Art/UI/Gui_parts/button3_ready.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/button3_ready.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/button3_ready.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/button3_ready.png.meta diff --git a/Samples~/Art/UI/Gui_parts/button_agree.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/button_agree.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/button_agree.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/button_agree.png diff --git a/Samples~/Art/UI/Gui_parts/button_agree.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/button_agree.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/button_agree.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/button_agree.png.meta diff --git a/Samples~/Art/UI/Gui_parts/button_cancel.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/button_cancel.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/button_cancel.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/button_cancel.png diff --git a/Samples~/Art/UI/Gui_parts/button_cancel.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/button_cancel.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/button_cancel.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/button_cancel.png.meta diff --git a/Samples~/Art/UI/Gui_parts/button_frame.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/button_frame.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/button_frame.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/button_frame.png diff --git a/Samples~/Art/UI/Gui_parts/button_frame.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/button_frame.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/button_frame.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/button_frame.png.meta diff --git a/Samples~/Art/UI/Gui_parts/button_ready_off.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/button_ready_off.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/button_ready_off.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/button_ready_off.png diff --git a/Samples~/Art/UI/Gui_parts/button_ready_off.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/button_ready_off.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/button_ready_off.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/button_ready_off.png.meta diff --git a/Samples~/Art/UI/Gui_parts/button_ready_on.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/button_ready_on.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/button_ready_on.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/button_ready_on.png diff --git a/Samples~/Art/UI/Gui_parts/button_ready_on.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/button_ready_on.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/button_ready_on.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/button_ready_on.png.meta diff --git a/Samples~/Art/UI/Gui_parts/lil_roundbackground.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/lil_roundbackground.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/lil_roundbackground.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/lil_roundbackground.png diff --git a/Samples~/Art/UI/Gui_parts/lil_roundbackground.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/lil_roundbackground.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/lil_roundbackground.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/lil_roundbackground.png.meta diff --git a/Samples~/Art/UI/Gui_parts/lil_roundframe.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/lil_roundframe.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/lil_roundframe.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/lil_roundframe.png diff --git a/Samples~/Art/UI/Gui_parts/lil_roundframe.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/lil_roundframe.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/lil_roundframe.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/lil_roundframe.png.meta diff --git a/Samples~/Art/UI/Gui_parts/lil_roundframe_ready.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/lil_roundframe_ready.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/lil_roundframe_ready.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/lil_roundframe_ready.png diff --git a/Samples~/Art/UI/Gui_parts/lil_roundframe_ready.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/lil_roundframe_ready.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/lil_roundframe_ready.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/lil_roundframe_ready.png.meta diff --git a/Samples~/Art/UI/Gui_parts/lil_roundframe_ready2.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/lil_roundframe_ready2.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/lil_roundframe_ready2.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/lil_roundframe_ready2.png diff --git a/Samples~/Art/UI/Gui_parts/lil_roundframe_ready2.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/lil_roundframe_ready2.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/lil_roundframe_ready2.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/lil_roundframe_ready2.png.meta diff --git a/Samples~/Art/UI/Gui_parts/mid_background.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/mid_background.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/mid_background.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/mid_background.png diff --git a/Samples~/Art/UI/Gui_parts/mid_background.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/mid_background.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/mid_background.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/mid_background.png.meta diff --git a/Samples~/Art/UI/Gui_parts/name_bar.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/name_bar.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/name_bar.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/name_bar.png diff --git a/Samples~/Art/UI/Gui_parts/name_bar.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/name_bar.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/name_bar.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/name_bar.png.meta diff --git a/Samples~/Art/UI/Gui_parts/name_bar2.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/name_bar2.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/name_bar2.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/name_bar2.png diff --git a/Samples~/Art/UI/Gui_parts/name_bar2.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/name_bar2.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/name_bar2.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/name_bar2.png.meta diff --git a/Samples~/Art/UI/Gui_parts/name_bar3.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/name_bar3.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/name_bar3.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/name_bar3.png diff --git a/Samples~/Art/UI/Gui_parts/name_bar3.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/name_bar3.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/name_bar3.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/name_bar3.png.meta diff --git a/Samples~/Art/UI/Gui_parts/name_bar_Arrow.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/name_bar_Arrow.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/name_bar_Arrow.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/name_bar_Arrow.png diff --git a/Samples~/Art/UI/Gui_parts/name_bar_Arrow.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/name_bar_Arrow.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/name_bar_Arrow.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/name_bar_Arrow.png.meta diff --git a/Samples~/Art/UI/Gui_parts/warrior_silhouette_man.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/warrior_silhouette_man.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/warrior_silhouette_man.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/warrior_silhouette_man.png diff --git a/Samples~/Art/UI/Gui_parts/warrior_silhouette_man.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/warrior_silhouette_man.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/warrior_silhouette_man.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/warrior_silhouette_man.png.meta diff --git a/Samples~/Art/UI/Gui_parts/warrior_silhouette_woman.png b/Samples~/MarketplaceSample/Art/UI/Gui_parts/warrior_silhouette_woman.png similarity index 100% rename from Samples~/Art/UI/Gui_parts/warrior_silhouette_woman.png rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/warrior_silhouette_woman.png diff --git a/Samples~/Art/UI/Gui_parts/warrior_silhouette_woman.png.meta b/Samples~/MarketplaceSample/Art/UI/Gui_parts/warrior_silhouette_woman.png.meta similarity index 100% rename from Samples~/Art/UI/Gui_parts/warrior_silhouette_woman.png.meta rename to Samples~/MarketplaceSample/Art/UI/Gui_parts/warrior_silhouette_woman.png.meta diff --git a/Samples~/Art/UI/Icons.meta b/Samples~/MarketplaceSample/Art/UI/Icons.meta similarity index 100% rename from Samples~/Art/UI/Icons.meta rename to Samples~/MarketplaceSample/Art/UI/Icons.meta diff --git a/Samples~/Art/UI/Icons/Equipment_Boots.png b/Samples~/MarketplaceSample/Art/UI/Icons/Equipment_Boots.png similarity index 100% rename from Samples~/Art/UI/Icons/Equipment_Boots.png rename to Samples~/MarketplaceSample/Art/UI/Icons/Equipment_Boots.png diff --git a/Samples~/Art/UI/Icons/Equipment_Boots.png.meta b/Samples~/MarketplaceSample/Art/UI/Icons/Equipment_Boots.png.meta similarity index 100% rename from Samples~/Art/UI/Icons/Equipment_Boots.png.meta rename to Samples~/MarketplaceSample/Art/UI/Icons/Equipment_Boots.png.meta diff --git a/Samples~/Art/UI/Icons/Equipment_Gloves.png b/Samples~/MarketplaceSample/Art/UI/Icons/Equipment_Gloves.png similarity index 100% rename from Samples~/Art/UI/Icons/Equipment_Gloves.png rename to Samples~/MarketplaceSample/Art/UI/Icons/Equipment_Gloves.png diff --git a/Samples~/Art/UI/Icons/Equipment_Gloves.png.meta b/Samples~/MarketplaceSample/Art/UI/Icons/Equipment_Gloves.png.meta similarity index 100% rename from Samples~/Art/UI/Icons/Equipment_Gloves.png.meta rename to Samples~/MarketplaceSample/Art/UI/Icons/Equipment_Gloves.png.meta diff --git a/Samples~/Art/UI/Icons/Equipment_Helmet.png b/Samples~/MarketplaceSample/Art/UI/Icons/Equipment_Helmet.png similarity index 100% rename from Samples~/Art/UI/Icons/Equipment_Helmet.png rename to Samples~/MarketplaceSample/Art/UI/Icons/Equipment_Helmet.png diff --git a/Samples~/Art/UI/Icons/Equipment_Helmet.png.meta b/Samples~/MarketplaceSample/Art/UI/Icons/Equipment_Helmet.png.meta similarity index 100% rename from Samples~/Art/UI/Icons/Equipment_Helmet.png.meta rename to Samples~/MarketplaceSample/Art/UI/Icons/Equipment_Helmet.png.meta diff --git a/Samples~/Art/UI/Icons/Equipment_Pants.png b/Samples~/MarketplaceSample/Art/UI/Icons/Equipment_Pants.png similarity index 100% rename from Samples~/Art/UI/Icons/Equipment_Pants.png rename to Samples~/MarketplaceSample/Art/UI/Icons/Equipment_Pants.png diff --git a/Samples~/Art/UI/Icons/Equipment_Pants.png.meta b/Samples~/MarketplaceSample/Art/UI/Icons/Equipment_Pants.png.meta similarity index 100% rename from Samples~/Art/UI/Icons/Equipment_Pants.png.meta rename to Samples~/MarketplaceSample/Art/UI/Icons/Equipment_Pants.png.meta diff --git a/Samples~/Art/UI/Icons/Equipment_Shield.png b/Samples~/MarketplaceSample/Art/UI/Icons/Equipment_Shield.png similarity index 100% rename from Samples~/Art/UI/Icons/Equipment_Shield.png rename to Samples~/MarketplaceSample/Art/UI/Icons/Equipment_Shield.png diff --git a/Samples~/Art/UI/Icons/Equipment_Shield.png.meta b/Samples~/MarketplaceSample/Art/UI/Icons/Equipment_Shield.png.meta similarity index 100% rename from Samples~/Art/UI/Icons/Equipment_Shield.png.meta rename to Samples~/MarketplaceSample/Art/UI/Icons/Equipment_Shield.png.meta diff --git a/Samples~/Art/UI/Icons/Equipment_Vest.png b/Samples~/MarketplaceSample/Art/UI/Icons/Equipment_Vest.png similarity index 100% rename from Samples~/Art/UI/Icons/Equipment_Vest.png rename to Samples~/MarketplaceSample/Art/UI/Icons/Equipment_Vest.png diff --git a/Samples~/Art/UI/Icons/Equipment_Vest.png.meta b/Samples~/MarketplaceSample/Art/UI/Icons/Equipment_Vest.png.meta similarity index 100% rename from Samples~/Art/UI/Icons/Equipment_Vest.png.meta rename to Samples~/MarketplaceSample/Art/UI/Icons/Equipment_Vest.png.meta diff --git a/Samples~/Art/UI/Icons/Sprite_Coin.png b/Samples~/MarketplaceSample/Art/UI/Icons/Sprite_Coin.png similarity index 100% rename from Samples~/Art/UI/Icons/Sprite_Coin.png rename to Samples~/MarketplaceSample/Art/UI/Icons/Sprite_Coin.png diff --git a/Samples~/Art/UI/Icons/Sprite_Coin.png.meta b/Samples~/MarketplaceSample/Art/UI/Icons/Sprite_Coin.png.meta similarity index 100% rename from Samples~/Art/UI/Icons/Sprite_Coin.png.meta rename to Samples~/MarketplaceSample/Art/UI/Icons/Sprite_Coin.png.meta diff --git a/Samples~/Art/UI/Icons/Weapons_Sword.png b/Samples~/MarketplaceSample/Art/UI/Icons/Weapons_Sword.png similarity index 100% rename from Samples~/Art/UI/Icons/Weapons_Sword.png rename to Samples~/MarketplaceSample/Art/UI/Icons/Weapons_Sword.png diff --git a/Samples~/Art/UI/Icons/Weapons_Sword.png.meta b/Samples~/MarketplaceSample/Art/UI/Icons/Weapons_Sword.png.meta similarity index 100% rename from Samples~/Art/UI/Icons/Weapons_Sword.png.meta rename to Samples~/MarketplaceSample/Art/UI/Icons/Weapons_Sword.png.meta diff --git a/Samples~/Art/UI/Icons/armor_icon.png b/Samples~/MarketplaceSample/Art/UI/Icons/armor_icon.png similarity index 100% rename from Samples~/Art/UI/Icons/armor_icon.png rename to Samples~/MarketplaceSample/Art/UI/Icons/armor_icon.png diff --git a/Samples~/Art/UI/Icons/armor_icon.png.meta b/Samples~/MarketplaceSample/Art/UI/Icons/armor_icon.png.meta similarity index 100% rename from Samples~/Art/UI/Icons/armor_icon.png.meta rename to Samples~/MarketplaceSample/Art/UI/Icons/armor_icon.png.meta diff --git a/Samples~/Art/UI/Icons/coin-icon.png b/Samples~/MarketplaceSample/Art/UI/Icons/coin-icon.png similarity index 100% rename from Samples~/Art/UI/Icons/coin-icon.png rename to Samples~/MarketplaceSample/Art/UI/Icons/coin-icon.png diff --git a/Samples~/Art/UI/Icons/coin-icon.png.meta b/Samples~/MarketplaceSample/Art/UI/Icons/coin-icon.png.meta similarity index 100% rename from Samples~/Art/UI/Icons/coin-icon.png.meta rename to Samples~/MarketplaceSample/Art/UI/Icons/coin-icon.png.meta diff --git a/Samples~/Art/UI/Icons/paper-planes-1081560_1280.png b/Samples~/MarketplaceSample/Art/UI/Icons/paper-planes-1081560_1280.png similarity index 100% rename from Samples~/Art/UI/Icons/paper-planes-1081560_1280.png rename to Samples~/MarketplaceSample/Art/UI/Icons/paper-planes-1081560_1280.png diff --git a/Samples~/Art/UI/Icons/paper-planes-1081560_1280.png.meta b/Samples~/MarketplaceSample/Art/UI/Icons/paper-planes-1081560_1280.png.meta similarity index 100% rename from Samples~/Art/UI/Icons/paper-planes-1081560_1280.png.meta rename to Samples~/MarketplaceSample/Art/UI/Icons/paper-planes-1081560_1280.png.meta diff --git a/Samples~/Art/UI/Icons/sell-128.png b/Samples~/MarketplaceSample/Art/UI/Icons/sell-128.png similarity index 100% rename from Samples~/Art/UI/Icons/sell-128.png rename to Samples~/MarketplaceSample/Art/UI/Icons/sell-128.png diff --git a/Samples~/Art/UI/Icons/sell-128.png.meta b/Samples~/MarketplaceSample/Art/UI/Icons/sell-128.png.meta similarity index 100% rename from Samples~/Art/UI/Icons/sell-128.png.meta rename to Samples~/MarketplaceSample/Art/UI/Icons/sell-128.png.meta diff --git a/Samples~/Art/UI/Icons/skill_icon_01.png b/Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_01.png similarity index 100% rename from Samples~/Art/UI/Icons/skill_icon_01.png rename to Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_01.png diff --git a/Samples~/Art/UI/Icons/skill_icon_01.png.meta b/Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_01.png.meta similarity index 100% rename from Samples~/Art/UI/Icons/skill_icon_01.png.meta rename to Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_01.png.meta diff --git a/Samples~/Art/UI/Icons/skill_icon_01_nobg.png b/Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_01_nobg.png similarity index 100% rename from Samples~/Art/UI/Icons/skill_icon_01_nobg.png rename to Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_01_nobg.png diff --git a/Samples~/Art/UI/Icons/skill_icon_01_nobg.png.meta b/Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_01_nobg.png.meta similarity index 100% rename from Samples~/Art/UI/Icons/skill_icon_01_nobg.png.meta rename to Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_01_nobg.png.meta diff --git a/Samples~/Art/UI/Icons/skill_icon_02.png b/Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_02.png similarity index 100% rename from Samples~/Art/UI/Icons/skill_icon_02.png rename to Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_02.png diff --git a/Samples~/Art/UI/Icons/skill_icon_02.png.meta b/Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_02.png.meta similarity index 100% rename from Samples~/Art/UI/Icons/skill_icon_02.png.meta rename to Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_02.png.meta diff --git a/Samples~/Art/UI/Icons/skill_icon_02_nobg.png b/Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_02_nobg.png similarity index 100% rename from Samples~/Art/UI/Icons/skill_icon_02_nobg.png rename to Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_02_nobg.png diff --git a/Samples~/Art/UI/Icons/skill_icon_02_nobg.png.meta b/Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_02_nobg.png.meta similarity index 100% rename from Samples~/Art/UI/Icons/skill_icon_02_nobg.png.meta rename to Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_02_nobg.png.meta diff --git a/Samples~/Art/UI/Icons/skill_icon_03.png b/Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_03.png similarity index 100% rename from Samples~/Art/UI/Icons/skill_icon_03.png rename to Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_03.png diff --git a/Samples~/Art/UI/Icons/skill_icon_03.png.meta b/Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_03.png.meta similarity index 100% rename from Samples~/Art/UI/Icons/skill_icon_03.png.meta rename to Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_03.png.meta diff --git a/Samples~/Art/UI/Icons/skill_icon_03_nobg.png b/Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_03_nobg.png similarity index 100% rename from Samples~/Art/UI/Icons/skill_icon_03_nobg.png rename to Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_03_nobg.png diff --git a/Samples~/Art/UI/Icons/skill_icon_03_nobg.png.meta b/Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_03_nobg.png.meta similarity index 100% rename from Samples~/Art/UI/Icons/skill_icon_03_nobg.png.meta rename to Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_03_nobg.png.meta diff --git a/Samples~/Art/UI/Icons/skill_icon_04.png b/Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_04.png similarity index 100% rename from Samples~/Art/UI/Icons/skill_icon_04.png rename to Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_04.png diff --git a/Samples~/Art/UI/Icons/skill_icon_04.png.meta b/Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_04.png.meta similarity index 100% rename from Samples~/Art/UI/Icons/skill_icon_04.png.meta rename to Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_04.png.meta diff --git a/Samples~/Art/UI/Icons/skill_icon_04_nobg.png b/Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_04_nobg.png similarity index 100% rename from Samples~/Art/UI/Icons/skill_icon_04_nobg.png rename to Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_04_nobg.png diff --git a/Samples~/Art/UI/Icons/skill_icon_04_nobg.png.meta b/Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_04_nobg.png.meta similarity index 100% rename from Samples~/Art/UI/Icons/skill_icon_04_nobg.png.meta rename to Samples~/MarketplaceSample/Art/UI/Icons/skill_icon_04_nobg.png.meta diff --git a/Samples~/Art/UI/Icons/stoune_icon.png b/Samples~/MarketplaceSample/Art/UI/Icons/stoune_icon.png similarity index 100% rename from Samples~/Art/UI/Icons/stoune_icon.png rename to Samples~/MarketplaceSample/Art/UI/Icons/stoune_icon.png diff --git a/Samples~/Art/UI/Icons/stoune_icon.png.meta b/Samples~/MarketplaceSample/Art/UI/Icons/stoune_icon.png.meta similarity index 100% rename from Samples~/Art/UI/Icons/stoune_icon.png.meta rename to Samples~/MarketplaceSample/Art/UI/Icons/stoune_icon.png.meta diff --git a/Samples~/Art/UI/Icons/weapon_icon.png b/Samples~/MarketplaceSample/Art/UI/Icons/weapon_icon.png similarity index 100% rename from Samples~/Art/UI/Icons/weapon_icon.png rename to Samples~/MarketplaceSample/Art/UI/Icons/weapon_icon.png diff --git a/Samples~/Art/UI/Icons/weapon_icon.png.meta b/Samples~/MarketplaceSample/Art/UI/Icons/weapon_icon.png.meta similarity index 100% rename from Samples~/Art/UI/Icons/weapon_icon.png.meta rename to Samples~/MarketplaceSample/Art/UI/Icons/weapon_icon.png.meta diff --git a/Samples~/Art/UI/Tezos_Logos.meta b/Samples~/MarketplaceSample/Art/UI/Tezos_Logos.meta similarity index 100% rename from Samples~/Art/UI/Tezos_Logos.meta rename to Samples~/MarketplaceSample/Art/UI/Tezos_Logos.meta diff --git a/Samples~/Art/UI/Tezos_Logos/Horizontal.meta b/Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Horizontal.meta similarity index 100% rename from Samples~/Art/UI/Tezos_Logos/Horizontal.meta rename to Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Horizontal.meta diff --git a/Samples~/Art/UI/Tezos_Logos/Horizontal/PNG.meta b/Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Horizontal/PNG.meta similarity index 100% rename from Samples~/Art/UI/Tezos_Logos/Horizontal/PNG.meta rename to Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Horizontal/PNG.meta diff --git a/Samples~/Art/UI/Tezos_Logos/Horizontal/PNG/TezosLogo_Horizontal_Black.png b/Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Horizontal/PNG/TezosLogo_Horizontal_Black.png similarity index 100% rename from Samples~/Art/UI/Tezos_Logos/Horizontal/PNG/TezosLogo_Horizontal_Black.png rename to Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Horizontal/PNG/TezosLogo_Horizontal_Black.png diff --git a/Samples~/Art/UI/Tezos_Logos/Horizontal/PNG/TezosLogo_Horizontal_Black.png.meta b/Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Horizontal/PNG/TezosLogo_Horizontal_Black.png.meta similarity index 100% rename from Samples~/Art/UI/Tezos_Logos/Horizontal/PNG/TezosLogo_Horizontal_Black.png.meta rename to Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Horizontal/PNG/TezosLogo_Horizontal_Black.png.meta diff --git a/Samples~/Art/UI/Tezos_Logos/Horizontal/PNG/TezosLogo_Horizontal_Blue.png b/Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Horizontal/PNG/TezosLogo_Horizontal_Blue.png similarity index 100% rename from Samples~/Art/UI/Tezos_Logos/Horizontal/PNG/TezosLogo_Horizontal_Blue.png rename to Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Horizontal/PNG/TezosLogo_Horizontal_Blue.png diff --git a/Samples~/Art/UI/Tezos_Logos/Horizontal/PNG/TezosLogo_Horizontal_Blue.png.meta b/Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Horizontal/PNG/TezosLogo_Horizontal_Blue.png.meta similarity index 100% rename from Samples~/Art/UI/Tezos_Logos/Horizontal/PNG/TezosLogo_Horizontal_Blue.png.meta rename to Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Horizontal/PNG/TezosLogo_Horizontal_Blue.png.meta diff --git a/Samples~/Art/UI/Tezos_Logos/Horizontal/PNG/TezosLogo_Horizontal_White.png b/Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Horizontal/PNG/TezosLogo_Horizontal_White.png similarity index 100% rename from Samples~/Art/UI/Tezos_Logos/Horizontal/PNG/TezosLogo_Horizontal_White.png rename to Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Horizontal/PNG/TezosLogo_Horizontal_White.png diff --git a/Samples~/Art/UI/Tezos_Logos/Horizontal/PNG/TezosLogo_Horizontal_White.png.meta b/Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Horizontal/PNG/TezosLogo_Horizontal_White.png.meta similarity index 100% rename from Samples~/Art/UI/Tezos_Logos/Horizontal/PNG/TezosLogo_Horizontal_White.png.meta rename to Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Horizontal/PNG/TezosLogo_Horizontal_White.png.meta diff --git a/Samples~/Art/UI/Tezos_Logos/Stacked.meta b/Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Stacked.meta similarity index 100% rename from Samples~/Art/UI/Tezos_Logos/Stacked.meta rename to Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Stacked.meta diff --git a/Samples~/Art/UI/Tezos_Logos/Stacked/PNG.meta b/Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Stacked/PNG.meta similarity index 100% rename from Samples~/Art/UI/Tezos_Logos/Stacked/PNG.meta rename to Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Stacked/PNG.meta diff --git a/Samples~/Art/UI/Tezos_Logos/Stacked/PNG/TezosLogo_Stacked_Black.png b/Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Stacked/PNG/TezosLogo_Stacked_Black.png similarity index 100% rename from Samples~/Art/UI/Tezos_Logos/Stacked/PNG/TezosLogo_Stacked_Black.png rename to Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Stacked/PNG/TezosLogo_Stacked_Black.png diff --git a/Samples~/Art/UI/Tezos_Logos/Stacked/PNG/TezosLogo_Stacked_Black.png.meta b/Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Stacked/PNG/TezosLogo_Stacked_Black.png.meta similarity index 100% rename from Samples~/Art/UI/Tezos_Logos/Stacked/PNG/TezosLogo_Stacked_Black.png.meta rename to Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Stacked/PNG/TezosLogo_Stacked_Black.png.meta diff --git a/Samples~/Art/UI/Tezos_Logos/Stacked/PNG/TezosLogo_Stacked_Blue.png b/Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Stacked/PNG/TezosLogo_Stacked_Blue.png similarity index 100% rename from Samples~/Art/UI/Tezos_Logos/Stacked/PNG/TezosLogo_Stacked_Blue.png rename to Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Stacked/PNG/TezosLogo_Stacked_Blue.png diff --git a/Samples~/Art/UI/Tezos_Logos/Stacked/PNG/TezosLogo_Stacked_Blue.png.meta b/Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Stacked/PNG/TezosLogo_Stacked_Blue.png.meta similarity index 100% rename from Samples~/Art/UI/Tezos_Logos/Stacked/PNG/TezosLogo_Stacked_Blue.png.meta rename to Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Stacked/PNG/TezosLogo_Stacked_Blue.png.meta diff --git a/Samples~/Art/UI/Tezos_Logos/Stacked/PNG/TezosLogo_Stacked_White.png b/Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Stacked/PNG/TezosLogo_Stacked_White.png similarity index 100% rename from Samples~/Art/UI/Tezos_Logos/Stacked/PNG/TezosLogo_Stacked_White.png rename to Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Stacked/PNG/TezosLogo_Stacked_White.png diff --git a/Samples~/Art/UI/Tezos_Logos/Stacked/PNG/TezosLogo_Stacked_White.png.meta b/Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Stacked/PNG/TezosLogo_Stacked_White.png.meta similarity index 100% rename from Samples~/Art/UI/Tezos_Logos/Stacked/PNG/TezosLogo_Stacked_White.png.meta rename to Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Stacked/PNG/TezosLogo_Stacked_White.png.meta diff --git a/Samples~/Art/UI/Tezos_Logos/Tez_Icon.meta b/Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Tez_Icon.meta similarity index 100% rename from Samples~/Art/UI/Tezos_Logos/Tez_Icon.meta rename to Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Tez_Icon.meta diff --git a/Samples~/Art/UI/Tezos_Logos/Tez_Icon/PNG.meta b/Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Tez_Icon/PNG.meta similarity index 100% rename from Samples~/Art/UI/Tezos_Logos/Tez_Icon/PNG.meta rename to Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Tez_Icon/PNG.meta diff --git a/Samples~/Art/UI/Tezos_Logos/Tez_Icon/PNG/TezosLogo_Icon_Black.png b/Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Tez_Icon/PNG/TezosLogo_Icon_Black.png similarity index 100% rename from Samples~/Art/UI/Tezos_Logos/Tez_Icon/PNG/TezosLogo_Icon_Black.png rename to Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Tez_Icon/PNG/TezosLogo_Icon_Black.png diff --git a/Samples~/Art/UI/Tezos_Logos/Tez_Icon/PNG/TezosLogo_Icon_Black.png.meta b/Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Tez_Icon/PNG/TezosLogo_Icon_Black.png.meta similarity index 100% rename from Samples~/Art/UI/Tezos_Logos/Tez_Icon/PNG/TezosLogo_Icon_Black.png.meta rename to Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Tez_Icon/PNG/TezosLogo_Icon_Black.png.meta diff --git a/Samples~/Art/UI/Tezos_Logos/Tez_Icon/PNG/TezosLogo_Icon_Blue.png b/Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Tez_Icon/PNG/TezosLogo_Icon_Blue.png similarity index 100% rename from Samples~/Art/UI/Tezos_Logos/Tez_Icon/PNG/TezosLogo_Icon_Blue.png rename to Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Tez_Icon/PNG/TezosLogo_Icon_Blue.png diff --git a/Samples~/Art/UI/Tezos_Logos/Tez_Icon/PNG/TezosLogo_Icon_Blue.png.meta b/Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Tez_Icon/PNG/TezosLogo_Icon_Blue.png.meta similarity index 100% rename from Samples~/Art/UI/Tezos_Logos/Tez_Icon/PNG/TezosLogo_Icon_Blue.png.meta rename to Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Tez_Icon/PNG/TezosLogo_Icon_Blue.png.meta diff --git a/Samples~/Art/UI/Tezos_Logos/Tez_Icon/PNG/TezosLogo_Icon_White.png b/Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Tez_Icon/PNG/TezosLogo_Icon_White.png similarity index 100% rename from Samples~/Art/UI/Tezos_Logos/Tez_Icon/PNG/TezosLogo_Icon_White.png rename to Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Tez_Icon/PNG/TezosLogo_Icon_White.png diff --git a/Samples~/Art/UI/Tezos_Logos/Tez_Icon/PNG/TezosLogo_Icon_White.png.meta b/Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Tez_Icon/PNG/TezosLogo_Icon_White.png.meta similarity index 100% rename from Samples~/Art/UI/Tezos_Logos/Tez_Icon/PNG/TezosLogo_Icon_White.png.meta rename to Samples~/MarketplaceSample/Art/UI/Tezos_Logos/Tez_Icon/PNG/TezosLogo_Icon_White.png.meta diff --git a/Samples~/Audio.meta b/Samples~/MarketplaceSample/Audio.meta similarity index 100% rename from Samples~/Audio.meta rename to Samples~/MarketplaceSample/Audio.meta diff --git a/Samples~/Audio/Ambient.meta b/Samples~/MarketplaceSample/Audio/Ambient.meta similarity index 100% rename from Samples~/Audio/Ambient.meta rename to Samples~/MarketplaceSample/Audio/Ambient.meta diff --git a/Samples~/Audio/Ambient/AudioClip_Background-Ambient.wav b/Samples~/MarketplaceSample/Audio/Ambient/AudioClip_Background-Ambient.wav similarity index 100% rename from Samples~/Audio/Ambient/AudioClip_Background-Ambient.wav rename to Samples~/MarketplaceSample/Audio/Ambient/AudioClip_Background-Ambient.wav diff --git a/Samples~/Audio/Ambient/AudioClip_Background-Ambient.wav.meta b/Samples~/MarketplaceSample/Audio/Ambient/AudioClip_Background-Ambient.wav.meta similarity index 100% rename from Samples~/Audio/Ambient/AudioClip_Background-Ambient.wav.meta rename to Samples~/MarketplaceSample/Audio/Ambient/AudioClip_Background-Ambient.wav.meta diff --git a/Samples~/Audio/SFX.meta b/Samples~/MarketplaceSample/Audio/SFX.meta similarity index 100% rename from Samples~/Audio/SFX.meta rename to Samples~/MarketplaceSample/Audio/SFX.meta diff --git a/Samples~/Audio/SFX/AudioClip_Click-Medium.wav b/Samples~/MarketplaceSample/Audio/SFX/AudioClip_Click-Medium.wav similarity index 100% rename from Samples~/Audio/SFX/AudioClip_Click-Medium.wav rename to Samples~/MarketplaceSample/Audio/SFX/AudioClip_Click-Medium.wav diff --git a/Samples~/Audio/SFX/AudioClip_Click-Medium.wav.meta b/Samples~/MarketplaceSample/Audio/SFX/AudioClip_Click-Medium.wav.meta similarity index 100% rename from Samples~/Audio/SFX/AudioClip_Click-Medium.wav.meta rename to Samples~/MarketplaceSample/Audio/SFX/AudioClip_Click-Medium.wav.meta diff --git a/Samples~/Audio/SFX/AudioClip_Click-Noisy.wav b/Samples~/MarketplaceSample/Audio/SFX/AudioClip_Click-Noisy.wav similarity index 100% rename from Samples~/Audio/SFX/AudioClip_Click-Noisy.wav rename to Samples~/MarketplaceSample/Audio/SFX/AudioClip_Click-Noisy.wav diff --git a/Samples~/Audio/SFX/AudioClip_Click-Noisy.wav.meta b/Samples~/MarketplaceSample/Audio/SFX/AudioClip_Click-Noisy.wav.meta similarity index 100% rename from Samples~/Audio/SFX/AudioClip_Click-Noisy.wav.meta rename to Samples~/MarketplaceSample/Audio/SFX/AudioClip_Click-Noisy.wav.meta diff --git a/Samples~/Audio/SFX/AudioClip_Click-Soft.wav b/Samples~/MarketplaceSample/Audio/SFX/AudioClip_Click-Soft.wav similarity index 100% rename from Samples~/Audio/SFX/AudioClip_Click-Soft.wav rename to Samples~/MarketplaceSample/Audio/SFX/AudioClip_Click-Soft.wav diff --git a/Samples~/Audio/SFX/AudioClip_Click-Soft.wav.meta b/Samples~/MarketplaceSample/Audio/SFX/AudioClip_Click-Soft.wav.meta similarity index 100% rename from Samples~/Audio/SFX/AudioClip_Click-Soft.wav.meta rename to Samples~/MarketplaceSample/Audio/SFX/AudioClip_Click-Soft.wav.meta diff --git a/Samples~/Audio/SFX/AudioClip_Click-Springy.wav b/Samples~/MarketplaceSample/Audio/SFX/AudioClip_Click-Springy.wav similarity index 100% rename from Samples~/Audio/SFX/AudioClip_Click-Springy.wav rename to Samples~/MarketplaceSample/Audio/SFX/AudioClip_Click-Springy.wav diff --git a/Samples~/Audio/SFX/AudioClip_Click-Springy.wav.meta b/Samples~/MarketplaceSample/Audio/SFX/AudioClip_Click-Springy.wav.meta similarity index 100% rename from Samples~/Audio/SFX/AudioClip_Click-Springy.wav.meta rename to Samples~/MarketplaceSample/Audio/SFX/AudioClip_Click-Springy.wav.meta diff --git a/Samples~/Audio/SFX/AudioClip_Click-Switch.wav b/Samples~/MarketplaceSample/Audio/SFX/AudioClip_Click-Switch.wav similarity index 100% rename from Samples~/Audio/SFX/AudioClip_Click-Switch.wav rename to Samples~/MarketplaceSample/Audio/SFX/AudioClip_Click-Switch.wav diff --git a/Samples~/Audio/SFX/AudioClip_Click-Switch.wav.meta b/Samples~/MarketplaceSample/Audio/SFX/AudioClip_Click-Switch.wav.meta similarity index 100% rename from Samples~/Audio/SFX/AudioClip_Click-Switch.wav.meta rename to Samples~/MarketplaceSample/Audio/SFX/AudioClip_Click-Switch.wav.meta diff --git a/Samples~/Audio/SFX/AudioClip_Click-Tap.wav b/Samples~/MarketplaceSample/Audio/SFX/AudioClip_Click-Tap.wav similarity index 100% rename from Samples~/Audio/SFX/AudioClip_Click-Tap.wav rename to Samples~/MarketplaceSample/Audio/SFX/AudioClip_Click-Tap.wav diff --git a/Samples~/Audio/SFX/AudioClip_Click-Tap.wav.meta b/Samples~/MarketplaceSample/Audio/SFX/AudioClip_Click-Tap.wav.meta similarity index 100% rename from Samples~/Audio/SFX/AudioClip_Click-Tap.wav.meta rename to Samples~/MarketplaceSample/Audio/SFX/AudioClip_Click-Tap.wav.meta diff --git a/Samples~/Audio/SFX/AudioClip_Error.wav b/Samples~/MarketplaceSample/Audio/SFX/AudioClip_Error.wav similarity index 100% rename from Samples~/Audio/SFX/AudioClip_Error.wav rename to Samples~/MarketplaceSample/Audio/SFX/AudioClip_Error.wav diff --git a/Samples~/Audio/SFX/AudioClip_Error.wav.meta b/Samples~/MarketplaceSample/Audio/SFX/AudioClip_Error.wav.meta similarity index 100% rename from Samples~/Audio/SFX/AudioClip_Error.wav.meta rename to Samples~/MarketplaceSample/Audio/SFX/AudioClip_Error.wav.meta diff --git a/Samples~/Audio/SFX/AudioClip_PotionDrop.wav b/Samples~/MarketplaceSample/Audio/SFX/AudioClip_PotionDrop.wav similarity index 100% rename from Samples~/Audio/SFX/AudioClip_PotionDrop.wav rename to Samples~/MarketplaceSample/Audio/SFX/AudioClip_PotionDrop.wav diff --git a/Samples~/Audio/SFX/AudioClip_PotionDrop.wav.meta b/Samples~/MarketplaceSample/Audio/SFX/AudioClip_PotionDrop.wav.meta similarity index 100% rename from Samples~/Audio/SFX/AudioClip_PotionDrop.wav.meta rename to Samples~/MarketplaceSample/Audio/SFX/AudioClip_PotionDrop.wav.meta diff --git a/Samples~/Audio/SFX/AudioClip_Purchase-Cha-Ching.wav b/Samples~/MarketplaceSample/Audio/SFX/AudioClip_Purchase-Cha-Ching.wav similarity index 100% rename from Samples~/Audio/SFX/AudioClip_Purchase-Cha-Ching.wav rename to Samples~/MarketplaceSample/Audio/SFX/AudioClip_Purchase-Cha-Ching.wav diff --git a/Samples~/Audio/SFX/AudioClip_Purchase-Cha-Ching.wav.meta b/Samples~/MarketplaceSample/Audio/SFX/AudioClip_Purchase-Cha-Ching.wav.meta similarity index 100% rename from Samples~/Audio/SFX/AudioClip_Purchase-Cha-Ching.wav.meta rename to Samples~/MarketplaceSample/Audio/SFX/AudioClip_Purchase-Cha-Ching.wav.meta diff --git a/Samples~/Contracts.meta b/Samples~/MarketplaceSample/Contracts.meta similarity index 100% rename from Samples~/Contracts.meta rename to Samples~/MarketplaceSample/Contracts.meta diff --git a/Samples~/Contracts/FA2.meta b/Samples~/MarketplaceSample/Contracts/FA2.meta similarity index 100% rename from Samples~/Contracts/FA2.meta rename to Samples~/MarketplaceSample/Contracts/FA2.meta diff --git a/Samples~/Contracts/FA2/FA2TokenContract.json b/Samples~/MarketplaceSample/Contracts/FA2/FA2TokenContract.json similarity index 100% rename from Samples~/Contracts/FA2/FA2TokenContract.json rename to Samples~/MarketplaceSample/Contracts/FA2/FA2TokenContract.json diff --git a/Samples~/Contracts/FA2/FA2TokenContract.json.meta b/Samples~/MarketplaceSample/Contracts/FA2/FA2TokenContract.json.meta similarity index 100% rename from Samples~/Contracts/FA2/FA2TokenContract.json.meta rename to Samples~/MarketplaceSample/Contracts/FA2/FA2TokenContract.json.meta diff --git a/Samples~/Prefabs.meta b/Samples~/MarketplaceSample/Prefabs.meta similarity index 100% rename from Samples~/Prefabs.meta rename to Samples~/MarketplaceSample/Prefabs.meta diff --git a/Samples~/Prefabs/DemoExample.meta b/Samples~/MarketplaceSample/Prefabs/MarketplaceExample.meta similarity index 100% rename from Samples~/Prefabs/DemoExample.meta rename to Samples~/MarketplaceSample/Prefabs/MarketplaceExample.meta diff --git a/Samples~/Prefabs/DemoExample/ContractToggleItem.prefab b/Samples~/MarketplaceSample/Prefabs/MarketplaceExample/ContractToggleItem.prefab similarity index 100% rename from Samples~/Prefabs/DemoExample/ContractToggleItem.prefab rename to Samples~/MarketplaceSample/Prefabs/MarketplaceExample/ContractToggleItem.prefab diff --git a/Samples~/Prefabs/DemoExample/ContractToggleItem.prefab.meta b/Samples~/MarketplaceSample/Prefabs/MarketplaceExample/ContractToggleItem.prefab.meta similarity index 100% rename from Samples~/Prefabs/DemoExample/ContractToggleItem.prefab.meta rename to Samples~/MarketplaceSample/Prefabs/MarketplaceExample/ContractToggleItem.prefab.meta diff --git a/Samples~/Prefabs/DemoExample/InventoryItem_View.prefab b/Samples~/MarketplaceSample/Prefabs/MarketplaceExample/InventoryItem_View.prefab similarity index 100% rename from Samples~/Prefabs/DemoExample/InventoryItem_View.prefab rename to Samples~/MarketplaceSample/Prefabs/MarketplaceExample/InventoryItem_View.prefab diff --git a/Samples~/Prefabs/DemoExample/InventoryItem_View.prefab.meta b/Samples~/MarketplaceSample/Prefabs/MarketplaceExample/InventoryItem_View.prefab.meta similarity index 100% rename from Samples~/Prefabs/DemoExample/InventoryItem_View.prefab.meta rename to Samples~/MarketplaceSample/Prefabs/MarketplaceExample/InventoryItem_View.prefab.meta diff --git a/Samples~/Prefabs/DemoExample/InventoryPanel.prefab b/Samples~/MarketplaceSample/Prefabs/MarketplaceExample/InventoryPanel.prefab similarity index 100% rename from Samples~/Prefabs/DemoExample/InventoryPanel.prefab rename to Samples~/MarketplaceSample/Prefabs/MarketplaceExample/InventoryPanel.prefab diff --git a/Samples~/Prefabs/DemoExample/InventoryPanel.prefab.meta b/Samples~/MarketplaceSample/Prefabs/MarketplaceExample/InventoryPanel.prefab.meta similarity index 100% rename from Samples~/Prefabs/DemoExample/InventoryPanel.prefab.meta rename to Samples~/MarketplaceSample/Prefabs/MarketplaceExample/InventoryPanel.prefab.meta diff --git a/Samples~/Prefabs/DemoExample/MarketItem_View.prefab b/Samples~/MarketplaceSample/Prefabs/MarketplaceExample/MarketItem_View.prefab similarity index 100% rename from Samples~/Prefabs/DemoExample/MarketItem_View.prefab rename to Samples~/MarketplaceSample/Prefabs/MarketplaceExample/MarketItem_View.prefab diff --git a/Samples~/Prefabs/DemoExample/MarketItem_View.prefab.meta b/Samples~/MarketplaceSample/Prefabs/MarketplaceExample/MarketItem_View.prefab.meta similarity index 100% rename from Samples~/Prefabs/DemoExample/MarketItem_View.prefab.meta rename to Samples~/MarketplaceSample/Prefabs/MarketplaceExample/MarketItem_View.prefab.meta diff --git a/Samples~/Prefabs/DemoExample/MarketPanel.prefab b/Samples~/MarketplaceSample/Prefabs/MarketplaceExample/MarketPanel.prefab similarity index 100% rename from Samples~/Prefabs/DemoExample/MarketPanel.prefab rename to Samples~/MarketplaceSample/Prefabs/MarketplaceExample/MarketPanel.prefab diff --git a/Samples~/Prefabs/DemoExample/MarketPanel.prefab.meta b/Samples~/MarketplaceSample/Prefabs/MarketplaceExample/MarketPanel.prefab.meta similarity index 100% rename from Samples~/Prefabs/DemoExample/MarketPanel.prefab.meta rename to Samples~/MarketplaceSample/Prefabs/MarketplaceExample/MarketPanel.prefab.meta diff --git a/Samples~/Prefabs/DemoExample/RegisterPanel.prefab b/Samples~/MarketplaceSample/Prefabs/MarketplaceExample/RegisterPanel.prefab similarity index 100% rename from Samples~/Prefabs/DemoExample/RegisterPanel.prefab rename to Samples~/MarketplaceSample/Prefabs/MarketplaceExample/RegisterPanel.prefab diff --git a/Samples~/Prefabs/DemoExample/RegisterPanel.prefab.meta b/Samples~/MarketplaceSample/Prefabs/MarketplaceExample/RegisterPanel.prefab.meta similarity index 100% rename from Samples~/Prefabs/DemoExample/RegisterPanel.prefab.meta rename to Samples~/MarketplaceSample/Prefabs/MarketplaceExample/RegisterPanel.prefab.meta diff --git a/Samples~/Prefabs/DemoExample/SideMenu.prefab b/Samples~/MarketplaceSample/Prefabs/MarketplaceExample/SideMenu.prefab similarity index 100% rename from Samples~/Prefabs/DemoExample/SideMenu.prefab rename to Samples~/MarketplaceSample/Prefabs/MarketplaceExample/SideMenu.prefab diff --git a/Samples~/Prefabs/DemoExample/SideMenu.prefab.meta b/Samples~/MarketplaceSample/Prefabs/MarketplaceExample/SideMenu.prefab.meta similarity index 100% rename from Samples~/Prefabs/DemoExample/SideMenu.prefab.meta rename to Samples~/MarketplaceSample/Prefabs/MarketplaceExample/SideMenu.prefab.meta diff --git a/Samples~/Prefabs/DemoExample/Statblock_Stats.prefab b/Samples~/MarketplaceSample/Prefabs/MarketplaceExample/Statblock_Stats.prefab similarity index 100% rename from Samples~/Prefabs/DemoExample/Statblock_Stats.prefab rename to Samples~/MarketplaceSample/Prefabs/MarketplaceExample/Statblock_Stats.prefab diff --git a/Samples~/Prefabs/DemoExample/Statblock_Stats.prefab.meta b/Samples~/MarketplaceSample/Prefabs/MarketplaceExample/Statblock_Stats.prefab.meta similarity index 100% rename from Samples~/Prefabs/DemoExample/Statblock_Stats.prefab.meta rename to Samples~/MarketplaceSample/Prefabs/MarketplaceExample/Statblock_Stats.prefab.meta diff --git a/Samples~/Prefabs/DemoExample/Stats_Text.prefab b/Samples~/MarketplaceSample/Prefabs/MarketplaceExample/Stats_Text.prefab similarity index 100% rename from Samples~/Prefabs/DemoExample/Stats_Text.prefab rename to Samples~/MarketplaceSample/Prefabs/MarketplaceExample/Stats_Text.prefab diff --git a/Samples~/Prefabs/DemoExample/Stats_Text.prefab.meta b/Samples~/MarketplaceSample/Prefabs/MarketplaceExample/Stats_Text.prefab.meta similarity index 100% rename from Samples~/Prefabs/DemoExample/Stats_Text.prefab.meta rename to Samples~/MarketplaceSample/Prefabs/MarketplaceExample/Stats_Text.prefab.meta diff --git a/Samples~/Prefabs/NftApiSample.meta b/Samples~/MarketplaceSample/Prefabs/NftApiExample.meta similarity index 100% rename from Samples~/Prefabs/NftApiSample.meta rename to Samples~/MarketplaceSample/Prefabs/NftApiExample.meta diff --git a/Samples~/Prefabs/NftApiSample/ContentPanel.prefab b/Samples~/MarketplaceSample/Prefabs/NftApiExample/ContentPanel.prefab similarity index 100% rename from Samples~/Prefabs/NftApiSample/ContentPanel.prefab rename to Samples~/MarketplaceSample/Prefabs/NftApiExample/ContentPanel.prefab diff --git a/Samples~/Prefabs/NftApiSample/ContentPanel.prefab.meta b/Samples~/MarketplaceSample/Prefabs/NftApiExample/ContentPanel.prefab.meta similarity index 100% rename from Samples~/Prefabs/NftApiSample/ContentPanel.prefab.meta rename to Samples~/MarketplaceSample/Prefabs/NftApiExample/ContentPanel.prefab.meta diff --git a/Samples~/ReadMe.asset b/Samples~/MarketplaceSample/ReadMe.asset similarity index 100% rename from Samples~/ReadMe.asset rename to Samples~/MarketplaceSample/ReadMe.asset diff --git a/Samples~/ReadMe.asset.meta b/Samples~/MarketplaceSample/ReadMe.asset.meta similarity index 100% rename from Samples~/ReadMe.asset.meta rename to Samples~/MarketplaceSample/ReadMe.asset.meta diff --git a/Samples~/Resources.meta b/Samples~/MarketplaceSample/Resources.meta similarity index 100% rename from Samples~/Resources.meta rename to Samples~/MarketplaceSample/Resources.meta diff --git a/Samples~/Resources/Items.meta b/Samples~/MarketplaceSample/Resources/Items.meta similarity index 100% rename from Samples~/Resources/Items.meta rename to Samples~/MarketplaceSample/Resources/Items.meta diff --git a/Samples~/Resources/Items/TestItem 0.asset b/Samples~/MarketplaceSample/Resources/Items/TestItem 0.asset similarity index 100% rename from Samples~/Resources/Items/TestItem 0.asset rename to Samples~/MarketplaceSample/Resources/Items/TestItem 0.asset diff --git a/Samples~/Resources/Items/TestItem 0.asset.meta b/Samples~/MarketplaceSample/Resources/Items/TestItem 0.asset.meta similarity index 100% rename from Samples~/Resources/Items/TestItem 0.asset.meta rename to Samples~/MarketplaceSample/Resources/Items/TestItem 0.asset.meta diff --git a/Samples~/Resources/Items/TestItem 1.asset b/Samples~/MarketplaceSample/Resources/Items/TestItem 1.asset similarity index 100% rename from Samples~/Resources/Items/TestItem 1.asset rename to Samples~/MarketplaceSample/Resources/Items/TestItem 1.asset diff --git a/Samples~/Resources/Items/TestItem 1.asset.meta b/Samples~/MarketplaceSample/Resources/Items/TestItem 1.asset.meta similarity index 100% rename from Samples~/Resources/Items/TestItem 1.asset.meta rename to Samples~/MarketplaceSample/Resources/Items/TestItem 1.asset.meta diff --git a/Samples~/Resources/Items/TestItem 2.asset b/Samples~/MarketplaceSample/Resources/Items/TestItem 2.asset similarity index 100% rename from Samples~/Resources/Items/TestItem 2.asset rename to Samples~/MarketplaceSample/Resources/Items/TestItem 2.asset diff --git a/Samples~/Resources/Items/TestItem 2.asset.meta b/Samples~/MarketplaceSample/Resources/Items/TestItem 2.asset.meta similarity index 100% rename from Samples~/Resources/Items/TestItem 2.asset.meta rename to Samples~/MarketplaceSample/Resources/Items/TestItem 2.asset.meta diff --git a/Samples~/Resources/Items/TestItem 3.asset b/Samples~/MarketplaceSample/Resources/Items/TestItem 3.asset similarity index 100% rename from Samples~/Resources/Items/TestItem 3.asset rename to Samples~/MarketplaceSample/Resources/Items/TestItem 3.asset diff --git a/Samples~/Resources/Items/TestItem 3.asset.meta b/Samples~/MarketplaceSample/Resources/Items/TestItem 3.asset.meta similarity index 100% rename from Samples~/Resources/Items/TestItem 3.asset.meta rename to Samples~/MarketplaceSample/Resources/Items/TestItem 3.asset.meta diff --git a/Samples~/Resources/Items/TestItem 4.asset b/Samples~/MarketplaceSample/Resources/Items/TestItem 4.asset similarity index 100% rename from Samples~/Resources/Items/TestItem 4.asset rename to Samples~/MarketplaceSample/Resources/Items/TestItem 4.asset diff --git a/Samples~/Resources/Items/TestItem 4.asset.meta b/Samples~/MarketplaceSample/Resources/Items/TestItem 4.asset.meta similarity index 100% rename from Samples~/Resources/Items/TestItem 4.asset.meta rename to Samples~/MarketplaceSample/Resources/Items/TestItem 4.asset.meta diff --git a/Samples~/Scenes.meta b/Samples~/MarketplaceSample/Scenes.meta similarity index 100% rename from Samples~/Scenes.meta rename to Samples~/MarketplaceSample/Scenes.meta diff --git a/Samples~/Scenes/Demo Example.unity b/Samples~/MarketplaceSample/Scenes/Marketplace Example.unity similarity index 96% rename from Samples~/Scenes/Demo Example.unity rename to Samples~/MarketplaceSample/Scenes/Marketplace Example.unity index fbb0be00..65845f87 100644 --- a/Samples~/Scenes/Demo Example.unity +++ b/Samples~/MarketplaceSample/Scenes/Marketplace Example.unity @@ -2546,6 +2546,71 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1061548245} m_CullTransparentMesh: 1 +--- !u!1001 &1072310480 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4898021624847171558, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_Name + value: TezosManager + objectReference: {fileID: 0} + - target: {fileID: 7709730176731183433, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: appName + value: Demo Example Game + objectReference: {fileID: 0} + - target: {fileID: 7709730176731183433, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: appDescription + value: Demo Example Game Description + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} --- !u!1 &1073020256 GameObject: m_ObjectHideFlags: 0 @@ -3459,6 +3524,223 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1467783615} m_CullTransparentMesh: 1 +--- !u!1001 &1758464918 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1615769456906359149, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1615769456906359149, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1615769456906359149, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1615769456906359149, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1615769456906359149, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1615769456906359149, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511951727132524, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511951727132524, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511951727132524, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511951727132524, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511951727132524, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511951727132524, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952331529762, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_Name + value: TezosAuthenticator + objectReference: {fileID: 0} + - target: {fileID: 2221511952331529785, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952331529785, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952331529785, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952331529785, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952331529785, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952331529785, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952331529785, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952331529785, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952331529785, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952331529785, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952331529785, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952331529785, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2221511952331529785, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952331529785, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952331529785, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952331529785, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952331529785, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952331529785, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952331529785, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952331529785, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4858668385106013510, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4858668385106013510, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4858668385106013510, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4858668385106013510, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4858668385106013510, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4858668385106013510, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8967202891732467080, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8967202891732467080, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8967202891732467080, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8967202891732467080, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8967202891732467080, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8967202891732467080, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9091822988504170658, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9091822988504170658, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9091822988504170658, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9091822988504170658, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9091822988504170658, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9091822988504170658, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} --- !u!114 &1759069318 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 3028198140066968571, guid: 7446bf7afc73cea489f7f2f5aa2b5b3d, type: 3} @@ -4146,25 +4428,6 @@ RectTransform: m_AnchoredPosition: {x: 130.03426, y: -25} m_SizeDelta: {x: 259.2553, y: 50} m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &77346752442359449 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4561643593308411114} - 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: 4576560578601734406} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 309.6043, y: -240.30519} - m_SizeDelta: {x: 256, y: 256} - m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &87297206388748439 CanvasRenderer: m_ObjectHideFlags: 0 @@ -6726,25 +6989,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 0 ---- !u!1 &4561643593308411114 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 77346752442359449} - - component: {fileID: 5327242817530309640} - - component: {fileID: 6133160825996715543} - - component: {fileID: 6818536486914788441} - m_Layer: 5 - m_Name: QRCode - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 --- !u!222 &4571847651553868561 CanvasRenderer: m_ObjectHideFlags: 0 @@ -6768,7 +7012,6 @@ RectTransform: - {fileID: 6711944270315204328} - {fileID: 2157167984635903687} - {fileID: 6076478647547554052} - - {fileID: 77346752442359449} - {fileID: 166806034} m_Father: {fileID: 551888380} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -7088,14 +7331,6 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!222 &5327242817530309640 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4561643593308411114} - m_CullTransparentMesh: 1 --- !u!224 &5409969550976114818 RectTransform: m_ObjectHideFlags: 0 @@ -7357,33 +7592,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &6133160825996715543 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4561643593308411114} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, 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_Texture: {fileID: 2800000, guid: 4f033cdd2b09f9a43b139729d09d002c, type: 3} - m_UVRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 --- !u!222 &6258578661406712461 CanvasRenderer: m_ObjectHideFlags: 0 @@ -7549,19 +7757,6 @@ MonoBehaviour: m_EditorClassIdentifier: m_Padding: {x: -8, y: -5, z: -8, w: -5} m_Softness: {x: 0, y: 0} ---- !u!114 &6818536486914788441 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4561643593308411114} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a6b34a11c0bbb4c9e9c3c933d831d3e9, type: 3} - m_Name: - m_EditorClassIdentifier: - _rawImage: {fileID: 6133160825996715543} --- !u!1 &7138481757621355890 GameObject: m_ObjectHideFlags: 0 @@ -8135,8 +8330,6 @@ MonoBehaviour: m_EditorClassIdentifier: _deepLinkPair: {fileID: 4004236422322499838} _socialLoginButton: {fileID: 166806037} - _qrImage: {fileID: 6133160825996715543} - _qrCodeView: {fileID: 6818536486914788441} _uiManager: {fileID: 519783462} --- !u!224 &8394639952592600258 RectTransform: @@ -10042,3 +10235,5 @@ SceneRoots: - {fileID: 519783461} - {fileID: 1855521413} - {fileID: 527547397} + - {fileID: 1072310480} + - {fileID: 1758464918} diff --git a/Samples~/Scenes/Demo Example.unity.meta b/Samples~/MarketplaceSample/Scenes/Marketplace Example.unity.meta similarity index 100% rename from Samples~/Scenes/Demo Example.unity.meta rename to Samples~/MarketplaceSample/Scenes/Marketplace Example.unity.meta diff --git a/Samples~/Scenes/NftApiSample.unity b/Samples~/MarketplaceSample/Scenes/Nft Api Example.unity similarity index 73% rename from Samples~/Scenes/NftApiSample.unity rename to Samples~/MarketplaceSample/Scenes/Nft Api Example.unity index 88e433ed..a58d2f95 100644 --- a/Samples~/Scenes/NftApiSample.unity +++ b/Samples~/MarketplaceSample/Scenes/Nft Api Example.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.12731704, g: 0.1341472, b: 0.121078566, a: 1} + m_IndirectSpecularColor: {r: 0.37311924, g: 0.38073963, b: 0.3587269, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -104,7 +104,7 @@ NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +117,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -183,24 +183,57 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 540557279} + 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_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &543835500 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 4616586832780915041, guid: ebe42ae2197554a718feda9bdc452a79, type: 3} - propertyPath: m_IsActive - value: 1 + - target: {fileID: 9024856039242944635, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9024856039242944635, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9024856039242944635, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9024856039404446702, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9024856039404446702, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9024856039404446702, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9024856039737428412, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9024856039737428412, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9024856039737428412, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 9024856039737428413, guid: 3a2c720a6b72445218600a2c92762141, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target @@ -210,6 +243,30 @@ PrefabInstance: propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName value: IsHolderOfContract objectReference: {fileID: 0} + - target: {fileID: 9024856040358384762, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9024856040358384762, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9024856040358384762, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9024856040406173993, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9024856040406173993, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9024856040406173993, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 9024856040514623196, guid: 3a2c720a6b72445218600a2c92762141, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target value: @@ -218,10 +275,50 @@ PrefabInstance: propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName value: IsHolderOfToken objectReference: {fileID: 0} + - target: {fileID: 9024856040514623199, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9024856040514623199, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9024856040514623199, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9024856040691971415, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9024856040691971415, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9024856040691971415, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9024856040870240322, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9024856040870240322, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9024856040870240322, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 9024856041176317730, guid: 3a2c720a6b72445218600a2c92762141, type: 3} propertyPath: m_Name value: ContentPanel objectReference: {fileID: 0} + - target: {fileID: 9024856041176317730, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 9024856041176317731, guid: 3a2c720a6b72445218600a2c92762141, type: 3} propertyPath: m_Pivot.x value: 0 @@ -314,7 +411,26 @@ PrefabInstance: propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName value: GetTokensForOwners objectReference: {fileID: 0} + - target: {fileID: 9024856041185129615, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9024856041185129615, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9024856041185129615, guid: 3a2c720a6b72445218600a2c92762141, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4616586832780915041, guid: ebe42ae2197554a718feda9bdc452a79, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 3a2c720a6b72445218600a2c92762141, type: 3} --- !u!1 &543835501 stripped GameObject: @@ -346,13 +462,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 558419778} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 343.3753, y: 504.55154, z: -14.028383} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &558419782 MonoBehaviour: @@ -399,8 +515,33 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: + - target: {fileID: 2221511951727132524, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511951727132524, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511951727132524, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511951727132524, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511951727132524, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511951727132524, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 3121589126738375249, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} propertyPath: m_Name value: Authentication @@ -494,7 +635,67 @@ PrefabInstance: value: objectReference: {fileID: 543835501} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} +--- !u!1001 &1554245058 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4898021624847171558, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_Name + value: TezosManager + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} --- !u!114 &1681091388 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 9024856040870240323, guid: 3a2c720a6b72445218600a2c92762141, type: 3} @@ -546,9 +747,17 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -582,13 +791,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1845955994} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 1, z: -10} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &2059424706 stripped MonoBehaviour: @@ -612,60 +821,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1001 &2105168017 -PrefabInstance: +--- !u!1660057539 &9223372036854775807 +SceneRoots: m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 3634858576511064492, guid: ebe42ae2197554a718feda9bdc452a79, type: 3} - propertyPath: m_RootOrder - value: 5 - objectReference: {fileID: 0} - - target: {fileID: 3634858576511064492, guid: ebe42ae2197554a718feda9bdc452a79, type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3634858576511064492, guid: ebe42ae2197554a718feda9bdc452a79, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3634858576511064492, guid: ebe42ae2197554a718feda9bdc452a79, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3634858576511064492, guid: ebe42ae2197554a718feda9bdc452a79, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 3634858576511064492, guid: ebe42ae2197554a718feda9bdc452a79, type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3634858576511064492, guid: ebe42ae2197554a718feda9bdc452a79, type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3634858576511064492, guid: ebe42ae2197554a718feda9bdc452a79, type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3634858576511064492, guid: ebe42ae2197554a718feda9bdc452a79, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3634858576511064492, guid: ebe42ae2197554a718feda9bdc452a79, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3634858576511064492, guid: ebe42ae2197554a718feda9bdc452a79, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4616586832780915041, guid: ebe42ae2197554a718feda9bdc452a79, type: 3} - propertyPath: m_Name - value: MainThreadExecutor - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: ebe42ae2197554a718feda9bdc452a79, type: 3} + m_Roots: + - {fileID: 1845955997} + - {fileID: 540557282} + - {fileID: 558419781} + - {fileID: 543835500} + - {fileID: 1047512437} + - {fileID: 1554245058} diff --git a/Samples~/Scenes/NftApiSample.unity.meta b/Samples~/MarketplaceSample/Scenes/Nft Api Example.unity.meta similarity index 100% rename from Samples~/Scenes/NftApiSample.unity.meta rename to Samples~/MarketplaceSample/Scenes/Nft Api Example.unity.meta diff --git a/Samples~/Scripts.meta b/Samples~/MarketplaceSample/Scripts.meta similarity index 100% rename from Samples~/Scripts.meta rename to Samples~/MarketplaceSample/Scripts.meta diff --git a/Samples~/Scripts/DemoExample.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample.meta similarity index 100% rename from Samples~/Scripts/DemoExample.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample.meta diff --git a/Samples~/MarketplaceSample/Scripts/MarketplaceExample/ClipboardCopier.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/ClipboardCopier.cs new file mode 100644 index 00000000..600a5870 --- /dev/null +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/ClipboardCopier.cs @@ -0,0 +1,55 @@ +using System.Collections; +using TezosSDK.Helpers.Coroutines; +using TMPro; +using UnityEngine; +using UnityEngine.EventSystems; + +namespace TezosSDK.MarketplaceSample.MarketplaceExample +{ + + public class ClipboardCopier : MonoBehaviour, IPointerClickHandler + { + [SerializeField] private TextMeshProUGUI text; + [SerializeField] private TMP_InputField inputField; + + private bool _blockCopy; + + #region IPointerClickHandler Implementation + + public void OnPointerClick(PointerEventData eventData) + { + if (_blockCopy) + { + return; + } + +#if UNITY_WEBGL + inputField.gameObject.SetActive(true); + inputField.text = text.text; + text.gameObject.SetActive(false); +#endif + + // copy text to the clipboard + GUIUtility.systemCopyBuffer = text.text; + CoroutineRunner.Instance.StartWrappedCoroutine(OnTextCopied()); + } + + #endregion + + private void Start() + { + inputField.gameObject.SetActive(false); + } + + private IEnumerator OnTextCopied() + { + _blockCopy = true; + var origin = text.text; + text.text = "Copied to clipboard."; + yield return new WaitForSeconds(1.5f); + text.text = origin; + _blockCopy = false; + } + } + +} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/CopyToClipboard.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/ClipboardCopier.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/CopyToClipboard.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/ClipboardCopier.cs.meta diff --git a/Samples~/Scripts/DemoExample/Core.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core.meta similarity index 100% rename from Samples~/Scripts/DemoExample/Core.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core.meta diff --git a/Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/ExampleManager.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/ExampleManager.cs new file mode 100644 index 00000000..7c4658fa --- /dev/null +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/ExampleManager.cs @@ -0,0 +1,432 @@ +using System; +using System.Collections.Generic; +using System.Text.Json; +using Beacon.Sdk.Beacon.Sign; +using Netezos.Encoding; +using TezosSDK.Helpers; +using TezosSDK.Helpers.Coroutines; +using TezosSDK.Helpers.Extensions; +using TezosSDK.Tezos; +using TezosSDK.Tezos.API; +using TezosSDK.Tezos.API.Models.Tokens; +using TezosSDK.Tezos.Wallet; +using UnityEngine; +using Logger = TezosSDK.Helpers.Logger; +using Random = System.Random; + +namespace TezosSDK.MarketplaceSample.MarketplaceExample.Core +{ + + public class ExampleManager : IExampleManager + { + private const string + contractAddress = "KT1WguzxyLmuKbJhz3jNuoRzzaUCncfp6PFE"; //"KT1DMWAeaP6wxKWPFDLGDkB7xUg563852AjD"; + + private const int softCurrencyID = 0; + private string _networkRPC; + + public ExampleManager() + { + CurrentUser = null; + } + + public User CurrentUser { get; private set; } + + public ITezos Tezos { get; private set; } + + public void Init(Action callback = null) + { + Tezos = TezosManager.Instance.Tezos; + _networkRPC = TezosManager.Instance.Config.Rpc; + } + + public void Unpair() + { + Tezos.Wallet.Disconnect(); + CurrentUser = null; + } + + public void FetchInventoryItems(Action> callback) + { + var activeWalletAddress = Tezos.Wallet.GetWalletAddress(); // Address to the current active account + + const string entrypoint = "view_items_of"; + + var input = new + { + @string = activeWalletAddress + }; + + CoroutineRunner.Instance.StartWrappedCoroutine(Tezos.API.ReadView(contractAddress, entrypoint, + JsonSerializer.Serialize(input, JsonOptions.DefaultOptions), result => + { + Logger.LogDebug("READING INVENTORY DATA"); + + // deserialize the json data to inventory items + CoroutineRunner.Instance.StartWrappedCoroutine(NetezosExtensions.HumanizeValue(result, _networkRPC, + contractAddress, "humanizeInventory", + (ContractInventoryViewResult[] inventory) => OnInventoryFetched(inventory, callback))); + })); + } + + public void FetchMarketItems(Action> callback) + { + const string entrypoint = "view_items_on_market"; + + // Prepping parameters for Netezos and for Native is different. + // Double serialization converts double quotes (") symbol into 'u0002' string + // var input = "{\"prim\": \"Unit\"}"; + var input = new MichelinePrim + { + Prim = PrimType.Unit + }.ToJson(); + + CoroutineRunner.Instance.StartWrappedCoroutine(Tezos.API.ReadView(contractAddress, entrypoint, input, + result => + { + // deserialize the json data to market items + CoroutineRunner.Instance.StartWrappedCoroutine(NetezosExtensions.HumanizeValue(result, _networkRPC, + contractAddress, "humanizeMarketplace", + (ContractMarketplaceViewResult[] market) => OnMarketplaceFetched(market, callback))); + })); + } + + public void BuyItem(string owner, int itemID) + { + const string entryPoint = "buy"; + + var parameter = new MichelinePrim + { + Prim = PrimType.Pair, + Args = new List + { + new MichelineString(owner), + new MichelineInt(itemID) + } + }.ToJson(); + + Logger.LogDebug(contractAddress + " " + entryPoint + parameter); + Tezos.Wallet.CallContract(contractAddress, entryPoint, parameter); + +#if UNITY_IOS || UNITY_ANDROID + Application.OpenURL("tezos://"); +#endif + } + + public void MintItem() + { + const string entrypoint = "mint"; + const string input = "{\"prim\": \"Unit\"}"; + + Tezos.Wallet.CallContract(contractAddress, entrypoint, input); + +#if UNITY_IOS || UNITY_ANDROID + Application.OpenURL("tezos://"); +#endif + } + + public void MintFA2(Action callback) + { + var rnd = new Random(); + var randomInt = rnd.Next(1, int.MaxValue); + var randomAmount = rnd.Next(1, 1024); + + var activeAccount = Tezos.Wallet.GetWalletAddress(); + const string imageAddress = "ipfs://QmX4t8ikQgjvLdqTtL51v6iVun9tNE7y7Txiw4piGQVNgK"; + + var metadata = new TokenMetadata + { + Name = $"testName_{randomInt}", + Description = $"testDescription_{randomInt}", + Symbol = $"TST_{randomInt}", + Decimals = "0", + DisplayUri = imageAddress, + ArtifactUri = imageAddress, + ThumbnailUri = imageAddress + }; + + Tezos.TokenContract.Mint(callback, metadata, activeAccount, randomAmount); + +#if UNITY_IOS || UNITY_ANDROID + Application.OpenURL("tezos://"); +#endif + } + + public User GetCurrentUser() + { + return CurrentUser; + } + + public void GetBalance(Action callback) + { + var routine = Tezos.GetCurrentWalletBalance(callback); + CoroutineRunner.Instance.StartWrappedCoroutine(routine); + } + + public void GetSoftBalance(Action callback) + { + GetSoftBalanceRoutine(callback); + } + + public void TransferItem(int itemID, int amount, string address) + { + Logger.LogDebug($"Transfering item {itemID} from {Tezos.Wallet.GetWalletAddress()} to Address: {address}"); + + var sender = Tezos.Wallet.GetWalletAddress(); + const string entrypoint = "transfer"; + + var input = "[ { \"prim\": \"Pair\", \"args\": [ { \"string\": \"" + sender + + "\" }, [ { \"prim\": \"Pair\", \"args\": [ { \"string\": \"" + address + + "\" }, { \"prim\": \"Pair\", \"args\": [ { \"int\": \"" + itemID + "\" }, { \"int\": \"" + + amount + "\" } ] } ] } ] ] } ]"; + + Tezos.Wallet.CallContract(contractAddress, entrypoint, input); + +#if UNITY_IOS || UNITY_ANDROID + Application.OpenURL("tezos://"); +#endif + } + + public void AddItemToMarket(int itemID, int price) + { + Debug.Log("Adding Item " + itemID + " to Market with the price of " + price); + + const string entryPoint = "addToMarket"; + + var parameter = new MichelinePrim + { + Prim = PrimType.Pair, + Args = new List + { + new MichelinePrim + { + Prim = PrimType.Pair, + Args = new List + { + new MichelineInt(0), // (currency ID = 0) represents coins + new MichelineInt(price) + } + }, + new MichelineInt(itemID) + } + }.ToJson(); + + Tezos.Wallet.CallContract(contractAddress, entryPoint, parameter); + +#if UNITY_IOS || UNITY_ANDROID + Application.OpenURL("tezos://"); +#endif + } + + public void RemoveItemFromMarket(int itemID) + { + Debug.Log("Removing Item " + itemID + " from market."); + + const string entryPoint = "removeFromMarket"; + + var sender = Tezos.Wallet.GetWalletAddress(); + + var parameter = new MichelinePrim + { + Prim = PrimType.Pair, + Args = new List + { + new MichelineString(sender), + new MichelineInt(itemID) + } + }.ToJson(); + + Tezos.Wallet.CallContract(contractAddress, entryPoint, parameter); + +#if UNITY_IOS || UNITY_ANDROID + Application.OpenURL("tezos://"); +#endif + } + + public void DeployContract(Action deployedContractAddress) + { + Tezos.TokenContract.Deploy(deployedContractAddress); + } + + public void ChangeContract(string activeContractAddress) + { + PlayerPrefs.SetString("CurrentContract:" + Tezos.Wallet.GetWalletAddress(), activeContractAddress); + Tezos.TokenContract.Address = activeContractAddress; + } + + public void GetCoins() + { + const string entryPoint = "login"; + const string parameter = "{\"prim\": \"Unit\"}"; + + Tezos.Wallet.CallContract(contractAddress, entryPoint, parameter); + +#if UNITY_IOS || UNITY_ANDROID + Application.OpenURL("tezos://"); +#endif + } + + public void IsItemOnMarket(int itemID, string owner, Action callback) + { + const string entrypoint = "is_item_on_market"; + + var input = new MichelinePrim + { + Prim = PrimType.Pair, + Args = new List + { + new MichelineString(owner), + new MichelineInt(itemID) + } + }.ToJson(); + + CoroutineRunner.Instance.StartWrappedCoroutine(Tezos.API.ReadView(contractAddress, entrypoint, input, + result => + { + var boolString = result.GetProperty("prim"); + var boolVal = boolString.GetString() == "True"; + callback?.Invoke(boolVal); + })); + } + + public void RequestSignPayload(SignPayloadType signingType, string payload) + { + Tezos.Wallet.RequestSignPayload(signingType, payload); + +#if UNITY_IOS || UNITY_ANDROID + Application.OpenURL("tezos://"); +#endif + } + + public bool VerifyPayload(SignPayloadType signingType, string payload) + { + return Tezos.Wallet.VerifySignedPayload(signingType, payload); + } + + public string GetActiveAccountAddress() + { + return Tezos.Wallet.GetWalletAddress(); + } + + public void Login(WalletProviderType walletProvider) + { + Tezos.Wallet.Connect(walletProvider); + } + + public IWalletEventManager GetWalletMessageReceiver() + { + return Tezos.Wallet.EventManager; + } + + public void GetOriginatedContracts(Action> callback) + { + var routine = Tezos.GetOriginatedContracts(callback); + CoroutineRunner.Instance.StartWrappedCoroutine(routine); + } + + public void OnReady() + { + } + + private void OnInventoryFetched(ContractInventoryViewResult[] inventory, Action> callback) + { + var dummyItemList = new List(); + var owner = Tezos.Wallet.GetWalletAddress(); + + if (inventory != null) + { + foreach (var item in inventory) + { + var id = Convert.ToInt32(item.id); + var itemType = id == 0 ? 0 : Convert.ToInt32(item.item.itemType) % 4 + 1; + var amount = id == 0 ? Convert.ToInt32(item.amount) : 1; + + var stats = new StatParams(Convert.ToInt32(item.item.damage), Convert.ToInt32(item.item.armor), + Convert.ToInt32(item.item.attackSpeed), Convert.ToInt32(item.item.healthPoints), + Convert.ToInt32(item.item.manaPoints)); + + dummyItemList.Add(new Item((ItemType)itemType, "Items/TestItem " + itemType, "Item " + id, stats, + amount, id, owner)); + } + } + + callback?.Invoke(dummyItemList); + } + + private void OnMarketplaceFetched(ContractMarketplaceViewResult[] market, Action> callback) + { + var dummyItemList = new List(); + + if (market != null) + { + foreach (var item in market) + { + var id = Convert.ToInt32(item.id); + var itemType = id == 0 ? 0 : Convert.ToInt32(item.item.itemType) % 4 + 1; + var currency = Convert.ToInt32(item.currency); + var price = Convert.ToInt32(item.price); + var owner = item.owner; + + var stats = new StatParams(Convert.ToInt32(item.item.damage), Convert.ToInt32(item.item.armor), + Convert.ToInt32(item.item.attackSpeed), Convert.ToInt32(item.item.healthPoints), + Convert.ToInt32(item.item.manaPoints)); + + dummyItemList.Add(new Item((ItemType)itemType, "Items/TestItem " + itemType, "Item " + id, stats, + price, id, owner)); + } + } + + callback?.Invoke(dummyItemList); + } + + private void GetSoftBalanceRoutine(Action callback) + { + var caller = Tezos.Wallet.GetWalletAddress(); + + var input = new MichelinePrim + { + Prim = PrimType.Pair, + Args = new List + { + new MichelineString(caller), + new MichelineInt(softCurrencyID) + } + }.ToJson(); + + CoroutineRunner.Instance.StartWrappedCoroutine(Tezos.API.ReadView(contractAddress, "get_balance", input, + result => + { + var intProp = result.GetProperty("int"); + var intValue = Convert.ToInt32(intProp.ToString()); + callback(intValue); + })); + } + + public class ContractItem + { + public string damage { get; set; } + public string armor { get; set; } + public string attackSpeed { get; set; } + public string healthPoints { get; set; } + public string manaPoints { get; set; } + public string itemType { get; set; } + } + + public class ContractInventoryViewResult + { + public string id { get; set; } + public string amount { get; set; } + public ContractItem item { get; set; } + } + + public class ContractMarketplaceViewResult + { + public string id { get; set; } + public string owner { get; set; } + public string currency { get; set; } + public string price { get; set; } + public ContractItem item { get; set; } + } + } + +} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/Core/ExampleManager.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/ExampleManager.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/Core/ExampleManager.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/ExampleManager.cs.meta diff --git a/Samples~/Scripts/DemoExample/Core/IExampleManager.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/IExampleManager.cs similarity index 69% rename from Samples~/Scripts/DemoExample/Core/IExampleManager.cs rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/IExampleManager.cs index fc155afe..8e2a3c51 100644 --- a/Samples~/Scripts/DemoExample/Core/IExampleManager.cs +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/IExampleManager.cs @@ -1,47 +1,47 @@ -using System.Collections.Generic; using System; +using System.Collections.Generic; using Beacon.Sdk.Beacon.Sign; -using TezosSDK.Beacon; using TezosSDK.Tezos; -using TezosSDK.Tezos.API.Models; +using TezosSDK.Tezos.API; using TezosSDK.Tezos.API.Models.Tokens; using TezosSDK.Tezos.Wallet; -namespace TezosSDK.Samples.DemoExample +namespace TezosSDK.MarketplaceSample.MarketplaceExample.Core { - public interface IExampleManager - { - ITezos Tezos { get; } - public void Init(Action callback = null); - public void Unpair(); + public interface IExampleManager + { + ITezos Tezos { get; } + + public void Init(Action callback = null); + public void Unpair(); - public void GetCoins(); + public void GetCoins(); /// - /// Returns the currently active user. + /// Returns the currently active user. /// /// The Currently active user public User GetCurrentUser(); /// - /// Retrieves items that should be displayed in the inventory + /// Retrieves items that should be displayed in the inventory /// /// - /// callback function that takes a list of IItemModels that should be displayed in Inventory + /// callback function that takes a list of IItemModels that should be displayed in Inventory /// public void FetchInventoryItems(Action> callback); /// - /// Retrieves items that should be displayed in the market + /// Retrieves items that should be displayed in the market /// /// - /// callback function that takes a list of IItemModels that should be displayed in Market + /// callback function that takes a list of IItemModels that should be displayed in Market /// public void FetchMarketItems(Action> callback); /// - /// Buys an item + /// Buys an item /// /// Owner of the item being sold /// ID of the item that will be bought @@ -49,37 +49,37 @@ public interface IExampleManager public void BuyItem(string owner, int itemID); /// - /// Mints an item + /// Mints an item /// public void MintItem(); - + /// - /// Mints FA2 Token + /// Mints FA2 Token /// public void MintFA2(Action callback); /// - /// Get account balance + /// Get account balance /// /// callback that takes the retrieved balance (int) public void GetBalance(Action callback); /// - /// Get soft currency balance + /// Get soft currency balance /// /// callback that takes the retrieved balance (int) public void GetSoftBalance(Action callback); /// - /// Returns the address of the current active wallet + /// Returns the address of the current active wallet /// /// public string GetActiveAccountAddress(); - public void Login(WalletProviderType walletProvider); + public void Login(WalletProviderType walletProvider); /// - /// Transfers an item to an account address + /// Transfers an item to an account address /// /// ID of the item that will be transfered /// amount of the item to be transfered @@ -88,7 +88,7 @@ public interface IExampleManager public void TransferItem(int itemID, int amount, string address); /// - /// Transfers an item from the inventory to the market + /// Transfers an item from the inventory to the market /// /// ID of the item that will be added to the market /// price of the item on the market @@ -96,19 +96,19 @@ public interface IExampleManager public void AddItemToMarket(int itemID, int price); /// - /// Transfers an item from the market to the inventory + /// Transfers an item from the market to the inventory /// /// ID of the item that will be transfered /// callback takes a bool (true if the process is completed successfully) public void RemoveItemFromMarket(int itemID); /// - /// Return the Tezos wallet MessageReceiver for using callbacks + /// Return the Tezos wallet MessageReceiver for using callbacks /// - public WalletMessageReceiver GetWalletMessageReceiver(); + public IWalletEventManager GetWalletMessageReceiver(); /// - /// Checks if item is on the marketplace in the blockchain + /// Checks if item is on the marketplace in the blockchain /// /// /// @@ -116,33 +116,34 @@ public interface IExampleManager public void IsItemOnMarket(int itemID, string owner, Action callback); /// - /// Sends a request to sign a payload + /// Sends a request to sign a payload /// /// /// void RequestSignPayload(SignPayloadType signingType, string payload); - bool VerifyPayload(SignPayloadType signingType, string payload); + bool VerifyPayload(SignPayloadType signingType, string payload); /// - /// Deploy FA2 contract + /// Deploy FA2 contract /// void DeployContract(Action deployedContractAddress); /// - /// Switch FA2 contract + /// Switch FA2 contract /// void ChangeContract(string activeContractAddress); /// - /// Return originated contracts by account for using callbacks + /// Return originated contracts by account for using callbacks /// /// callback that takes the retrieved contracts(IEnumerable) void GetOriginatedContracts(Action> callback); /// - /// Callback that needed in WebGL to determine that UI is rendered + /// Callback that needed in WebGL to determine that UI is rendered /// void OnReady(); - } + } + } \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/Core/IExampleManager.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/IExampleManager.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/Core/IExampleManager.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/IExampleManager.cs.meta diff --git a/Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/IItemModel.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/IItemModel.cs new file mode 100644 index 00000000..90b8d04f --- /dev/null +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/IItemModel.cs @@ -0,0 +1,48 @@ +namespace TezosSDK.MarketplaceSample.MarketplaceExample.Core +{ + + public interface IItemModel + { + public ItemType Type { get; } + public string ResourcePath { get; } + public string Name { get; } + public StatParams Stats { get; } + public int ID { get; } + public float Price { get; } + public string Owner { get; } + } + + public enum ItemType + { + Head, + Torso, + Legs, + Feet, + Hand, + Accessory, + Consumable + } + + public class StatParams + { + public StatParams() + { + } + + public StatParams(float damage, float armor, float attackSpeed, float healthPoints, float manaPoints) + { + Damage = damage; + Armor = armor; + AttackSpeed = attackSpeed; + HealthPoints = healthPoints; + ManaPoints = manaPoints; + } + + public float Damage { get; set; } + public float Armor { get; set; } + public float AttackSpeed { get; set; } + public float HealthPoints { get; set; } + public float ManaPoints { get; set; } + } + +} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/Core/IItemModel.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/IItemModel.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/Core/IItemModel.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/IItemModel.cs.meta diff --git a/Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/IUserModel.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/IUserModel.cs new file mode 100644 index 00000000..2078e21e --- /dev/null +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/IUserModel.cs @@ -0,0 +1,10 @@ +namespace TezosSDK.MarketplaceSample.MarketplaceExample.Core +{ + + public interface IUserModel + { + public string Name { get; } + public string Identifier { get; } + } + +} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/Core/IUserModel.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/IUserModel.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/Core/IUserModel.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/IUserModel.cs.meta diff --git a/Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/Item.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/Item.cs new file mode 100644 index 00000000..364898d1 --- /dev/null +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/Item.cs @@ -0,0 +1,34 @@ +namespace TezosSDK.MarketplaceSample.MarketplaceExample.Core +{ + + public class Item : IItemModel + { + public Item( + ItemType type, + string resourcePath, + string name, + StatParams parameters, + float price, + int id, + string owner) + { + Type = type; + ResourcePath = resourcePath; + Name = name; + Stats = parameters; + Price = price; + ID = id; + Owner = owner; + } + + public ItemType Type { get; } + public string ResourcePath { get; } + public string Name { get; } + public StatParams Stats { get; } + + public float Price { get; } + public int ID { get; } + public string Owner { get; } + } + +} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/Core/Item.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/Item.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/Core/Item.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/Item.cs.meta diff --git a/Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/User.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/User.cs new file mode 100644 index 00000000..b205a4c8 --- /dev/null +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/User.cs @@ -0,0 +1,24 @@ +namespace TezosSDK.MarketplaceSample.MarketplaceExample.Core +{ + + public class User : IUserModel + { + public User(string name, string id, string address) + { + Name = name; + Identifier = id; + Address = address; + } + + public string Address { get; private set; } + + public string Name { get; } + public string Identifier { get; } + + public void UpdateAddress(string address) + { + Address = address; + } + } + +} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/Core/User.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/User.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/Core/User.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/Core/User.cs.meta diff --git a/Samples~/MarketplaceSample/Scripts/MarketplaceExample/ExampleFactory.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/ExampleFactory.cs new file mode 100644 index 00000000..10829d45 --- /dev/null +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/ExampleFactory.cs @@ -0,0 +1,33 @@ +using TezosSDK.MarketplaceSample.MarketplaceExample.Core; +using UnityEngine; + +namespace TezosSDK.MarketplaceSample.MarketplaceExample +{ + + public class ExampleFactory : MonoBehaviour + { + public static ExampleFactory Instance; + private IExampleManager _exampleManager; + + private void Start() + { + if (Instance == null) + { + Instance = this; + } + else if (Instance != this) + { + Destroy(this); + } + + _exampleManager = new ExampleManager(); + _exampleManager.Init(); + } + + public IExampleManager GetExampleManager() + { + return _exampleManager; + } + } + +} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/ExampleFactory.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/ExampleFactory.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/ExampleFactory.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/ExampleFactory.cs.meta diff --git a/Samples~/MarketplaceSample/Scripts/MarketplaceExample/InventoryManager.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/InventoryManager.cs new file mode 100644 index 00000000..eb4935a5 --- /dev/null +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/InventoryManager.cs @@ -0,0 +1,261 @@ +using System; +using System.Collections.Generic; +using TezosSDK.MarketplaceSample.MarketplaceExample.Core; +using TezosSDK.MarketplaceSample.MarketplaceExample.UI; +using UnityEngine; +using UnityEngine.Events; +using Logger = TezosSDK.Helpers.Logger; + +namespace TezosSDK.MarketplaceSample.MarketplaceExample +{ + + [RequireComponent(typeof(SnapController))] + public class InventoryManager : MonoBehaviour + { + public UnityEvent onItemMint; + public UnityEvent onInventoryRefresh; + + [SerializeField] private Draggable itemPrefab; + [SerializeField] private List inventorySlots; + [SerializeField] private List equippedSlots; + [SerializeField] private List draggables = new(); + [SerializeField] private StatsView statsView; + [SerializeField] private ItemView itemView; + private const string PlayerPrefsEquipKey = "_eq_"; + + private const string PlayerPrefsInvKey = "_inv_"; + + private readonly Dictionary _itemIDtoDraggable = new(); + private readonly List _lastHeldItems = new(); + private SnapController _snapController; + + private void Start() + { + _snapController = GetComponent(); + } + + private void OnApplicationQuit() + { + // no need for local storage, since data need to be coming from the blockchain + //SaveInventoryLocally(); + } + + public void Init(List items) + { + //ClearInventory(); + UpdateItems(items); + UpdateSnapController(); + + // no need for local storage, since data need to be coming from the blockchain + //LoadLocalInventory(); + } + + public void OnItemClicked(Draggable item) + { + itemView.transform.parent.gameObject.SetActive(true); + itemView.gameObject.SetActive(true); + itemView.DisplayItem(item.Item, item.Sprite); + itemView.GetComponent().SetItem(item.Item); + } + + public void OnMintButtonClicked() + { + onItemMint.Invoke(); + } + + public void OnRefreshButtonClicked() + { + onInventoryRefresh.Invoke(); + } + + /// + /// Adds any missing items and removes any items that should be gone. + /// + public void UpdateItems(List items) + { + ClearInventory(); + UpdateStatsView(); + _lastHeldItems.Clear(); + + foreach (var item in items) + { + _lastHeldItems.Add(item.ID); + + if (!_itemIDtoDraggable.ContainsKey(item.ID)) + { + AddItem(item); + } + } + + foreach (var itemToRemove in _itemIDtoDraggable) + { + if (!_lastHeldItems.Contains(itemToRemove.Value.Item.ID)) + { + itemToRemove.Value.CurrentSlot.RemoveItemInSlot(); + //Uncertain if RemoveItemInSlot's event also removes the item from the dictionary or not. + //_itemIDtoDraggable.Remove(itemToRemove.Key); + } + } + } + + public void UpdateStatsView() + { + var heroStats = new StatParams(); + + foreach (var slot in equippedSlots) + { + if (!slot.HasItem) + { + continue; + } + + var sp = slot.CurrentItemInSlot.Item.Stats; + + foreach (var prop in sp.GetType().GetProperties()) + { + var value = (float)prop.GetValue(sp) + (float)prop.GetValue(heroStats); + prop.SetValue(heroStats, value); + } + } + + statsView.DisplayStats(heroStats); + } + + private void AddItem(IItemModel itemModel) + { + var newItem = Instantiate(itemPrefab, transform); + var itemRes = Resources.Load(itemModel.ResourcePath); + + if (itemRes != null) + { + newItem.Sprite = itemRes.ItemSprite; + } + else + { + Logger.LogError("Could find resource file for " + itemModel.ResourcePath); + } + + newItem.Item = itemModel; + newItem.OnClick = OnItemClicked; + draggables.Add(newItem); + var emptySlot = GetFirstEmptySlot(); + + if (emptySlot != null) + { + newItem.SetCurrentSlot(emptySlot); + _itemIDtoDraggable[itemModel.ID] = newItem; + } + else + { + Logger.LogError("Trying to add an item but Inventory is full!"); + } + } + + private void ClearInventory() + { + foreach (var snapSlot in inventorySlots) + { + snapSlot.RemoveItemInSlot(); + } + + foreach (var snapSlot in equippedSlots) + { + snapSlot.RemoveItemInSlot(); + } + + foreach (var draggable in draggables) + { + Destroy(draggable.gameObject); + } + + draggables.Clear(); + _itemIDtoDraggable.Clear(); + } + + private ItemSnapPoint GetFirstEmptySlot() + { + foreach (var snapPoint in inventorySlots) + { + if (!snapPoint.HasItem) + { + return snapPoint; + } + } + + return null; + } + + private void LoadLocalInventory() + { + var db = (ExampleManager)ExampleFactory.Instance.GetExampleManager(); + var playerID = db.CurrentUser.Identifier; + var invSaveLoc = playerID + PlayerPrefsInvKey; + var eqSaveLoc = playerID + PlayerPrefsEquipKey; + + for (var i = 0; i < inventorySlots.Count; i++) + { + if (PlayerPrefs.HasKey(invSaveLoc + i)) + { + var itemID = PlayerPrefs.GetInt(invSaveLoc + i); + _itemIDtoDraggable[itemID].SetCurrentSlot(inventorySlots[i]); + } + } + + for (var i = 0; i < equippedSlots.Count; i++) + { + if (PlayerPrefs.HasKey(eqSaveLoc + i)) + { + var itemID = PlayerPrefs.GetInt(eqSaveLoc + i); + _itemIDtoDraggable[itemID].SetCurrentSlot(equippedSlots[i]); + } + } + + Logger.LogDebug("Inventory loaded."); + } + + private void SaveInventoryLocally() + { + PlayerPrefs.DeleteAll(); + var playerID = ((ExampleManager)ExampleFactory.Instance.GetExampleManager()).CurrentUser.Identifier; + var invSaveLoc = playerID + PlayerPrefsInvKey; + var eqSaveLoc = playerID + PlayerPrefsEquipKey; + + for (var i = 0; i < inventorySlots.Count; i++) + { + if (inventorySlots[i].HasItem) + { + PlayerPrefs.SetInt(invSaveLoc + i, inventorySlots[i].CurrentItemInSlot.Item.ID); + } + } + + for (var i = 0; i < equippedSlots.Count; i++) + { + if (equippedSlots[i].HasItem) + { + PlayerPrefs.SetInt(eqSaveLoc + i, equippedSlots[i].CurrentItemInSlot.Item.ID); + } + } + + Logger.LogDebug("Inventory saved locally."); + } + + private void UpdateSnapController() + { + try + { + _snapController.Draggables = draggables; + _snapController.SnapPoints = inventorySlots; + + foreach (var slot in equippedSlots) + { + _snapController.SnapPoints.Add(slot); + } + } + catch (NullReferenceException ex) + { + Debug.Log($"Error during UpdateSnapController: {ex.Message}"); + } + } + } + +} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/InventoryManager.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/InventoryManager.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/InventoryManager.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/InventoryManager.cs.meta diff --git a/Samples~/MarketplaceSample/Scripts/MarketplaceExample/MarketManager.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/MarketManager.cs new file mode 100644 index 00000000..16c85386 --- /dev/null +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/MarketManager.cs @@ -0,0 +1,90 @@ +using System.Collections.Generic; +using TezosSDK.MarketplaceSample.MarketplaceExample.Core; +using TezosSDK.MarketplaceSample.MarketplaceExample.UI; +using UnityEngine; + +namespace TezosSDK.MarketplaceSample.MarketplaceExample +{ + + public class MarketManager : MonoBehaviour + { + [SerializeField] private ItemView itemViewPrefab; + [SerializeField] private ItemView itemFullDisplay; + [SerializeField] private Transform contentParent; + private ItemView _currentSelectedItem; + + private List _marketItems = new(); + + public void CheckSelection() + { + if (_currentSelectedItem == null) + { + return; + } + + itemFullDisplay.DisplayItem(null); + } + + public void Init(List items) + { + ClearMarket(); + + foreach (var item in items) + { + AddItem(item); + } + } + + private void AddItem(IItemModel itemModel) + { + var newItem = Instantiate(itemViewPrefab, contentParent); + newItem.DisplayItem(itemModel); + newItem.OnItemSelected = OnItemSelected; + _marketItems.Add(newItem); + } + + private void ClearMarket() + { + _marketItems = new List(); + + foreach (Transform child in contentParent) + { + Destroy(child.gameObject); + } + + CheckSelection(); + } + + private void OnItemSelected(ItemView selectedItem) + { + if (_currentSelectedItem != null) + { + _currentSelectedItem.Unselect(); + } + + if (_currentSelectedItem == selectedItem) + { + selectedItem.Unselect(); + + if (itemFullDisplay != null) + { + itemFullDisplay.ClearItem(); + } + + _currentSelectedItem = null; + return; + } + + selectedItem.Select(); + _currentSelectedItem = selectedItem; + + if (itemFullDisplay != null) + { + itemFullDisplay.DisplayItem(selectedItem.Item, selectedItem.CachedSprite); + } + + itemFullDisplay.GetComponent().SetItem(selectedItem.Item); + } + } + +} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/MarketManager.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/MarketManager.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/MarketManager.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/MarketManager.cs.meta diff --git a/Samples~/Scripts/DemoExample/UI.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI.meta similarity index 100% rename from Samples~/Scripts/DemoExample/UI.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI.meta diff --git a/Samples~/Scripts/DemoExample/UI/Draggable.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/Draggable.cs similarity index 71% rename from Samples~/Scripts/DemoExample/UI/Draggable.cs rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/Draggable.cs index 4d81d026..3ff88f34 100644 --- a/Samples~/Scripts/DemoExample/UI/Draggable.cs +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/Draggable.cs @@ -1,40 +1,36 @@ using System; +using TezosSDK.MarketplaceSample.MarketplaceExample.Core; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; -namespace TezosSDK.Samples.DemoExample +namespace TezosSDK.MarketplaceSample.MarketplaceExample.UI { + public class Draggable : MonoBehaviour, IPointerClickHandler, IBeginDragHandler, IEndDragHandler, IDragHandler { [SerializeField] private ItemSnapPoint _currentSlot; [SerializeField] private Image image; - - public IItemModel Item { get; set; } public Action OnBeginDragging; - public Action OnEndDragging; public Action OnClick; - public ItemSnapPoint CurrentSlot => _currentSlot; + public Action OnEndDragging; - public Sprite Sprite + private bool _isDragging; + + public ItemSnapPoint CurrentSlot { - get { return image.sprite; } - set { image.sprite = value; } + get => _currentSlot; } - private bool _isDragging = false; + public IItemModel Item { get; set; } - private void Start() + public Sprite Sprite { - if (_currentSlot != null) - ResetPosition(); + get => image.sprite; + set => image.sprite = value; } - public void OnPointerClick(PointerEventData eventData) - { - if (!_isDragging) - OnClick?.Invoke(this); - } + #region IBeginDragHandler Implementation public void OnBeginDrag(PointerEventData eventData) { @@ -42,32 +38,69 @@ public void OnBeginDrag(PointerEventData eventData) OnBeginDragging?.Invoke(this); } + #endregion + + #region IDragHandler Implementation + + public void OnDrag(PointerEventData eventData) + { + transform.position = Input.mousePosition; + } + + #endregion + + #region IEndDragHandler Implementation + public void OnEndDrag(PointerEventData eventData) { _isDragging = false; OnEndDragging?.Invoke(this); } - public void OnDrag(PointerEventData eventData) + #endregion + + #region IPointerClickHandler Implementation + + public void OnPointerClick(PointerEventData eventData) { - transform.position = Input.mousePosition; + if (!_isDragging) + { + OnClick?.Invoke(this); + } } - public void SetCurrentSlot(ItemSnapPoint slot) + #endregion + + private void Start() { - ItemSnapPoint prevSlot = _currentSlot; - _currentSlot = slot; - _currentSlot.SetItemInSlot(this); - transform.position = _currentSlot.transform.position; - if (prevSlot != null) - prevSlot.RemoveItemInSlot(); + if (_currentSlot != null) + { + ResetPosition(); + } } public void ResetPosition() { _currentSlot.SetItemInSlot(this); + if (_currentSlot != null) + { transform.position = _currentSlot.transform.position; + } + } + + public void SetCurrentSlot(ItemSnapPoint slot) + { + var prevSlot = _currentSlot; + _currentSlot = slot; + _currentSlot.SetItemInSlot(this); + transform.position = _currentSlot.transform.position; + + if (prevSlot != null) + { + prevSlot.RemoveItemInSlot(); + } } } + } \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UI/Draggable.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/Draggable.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/UI/Draggable.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/Draggable.cs.meta diff --git a/Samples~/Scripts/DemoExample/UI/DraggableItemVisual.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/DraggableItemVisual.cs similarity index 76% rename from Samples~/Scripts/DemoExample/UI/DraggableItemVisual.cs rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/DraggableItemVisual.cs index 35fc7f0b..fb8ab4ec 100644 --- a/Samples~/Scripts/DemoExample/UI/DraggableItemVisual.cs +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/DraggableItemVisual.cs @@ -1,45 +1,35 @@ -using System.Collections; -using System.Collections.Generic; +using System; using UnityEngine; using UnityEngine.EventSystems; -namespace TezosSDK.Samples.DemoExample +namespace TezosSDK.MarketplaceSample.MarketplaceExample.UI { - [System.Obsolete] - public class DraggableItemVisual : MonoBehaviour, IPointerClickHandler, IBeginDragHandler, IEndDragHandler, IDragHandler + + [Obsolete] + public class DraggableItemVisual : MonoBehaviour, IPointerClickHandler, IBeginDragHandler, IEndDragHandler, + IDragHandler { private ItemSlot _curSlot; - /// - /// Set the current slot - /// - /// The slot to be set to - public void SetSlot(ItemSlot slot) - { - _curSlot = slot; - } + #region IBeginDragHandler Implementation - //Sets the Item placement and size to be that of the slot - public void SetItemPlacement(ItemSlot slot) + public void OnBeginDrag(PointerEventData eventData) { - transform.SetParent(slot.ItemSpace); - RectTransform rect = GetComponent(); - rect.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Right, 0, 0); - rect.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Bottom, 0, 0); - rect.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Left, 0, 0); - rect.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Top, 0, 0); } - public void OnPointerClick(PointerEventData eventData) - { + #endregion - } + #region IDragHandler Implementation - public void OnBeginDrag(PointerEventData eventData) + public void OnDrag(PointerEventData eventData) { - + transform.position = Input.mousePosition; } + #endregion + + #region IEndDragHandler Implementation + public void OnEndDrag(PointerEventData eventData) { //look through all things under draggable @@ -49,11 +39,13 @@ public void OnEndDrag(PointerEventData eventData) var rayPosition = Input.mousePosition; rayPosition.z -= 10; hits = Physics.RaycastAll(rayPosition, transform.forward, 100.0f); - for (int i = 0; i < hits.Length; i++) + + for (var i = 0; i < hits.Length; i++) { slot = null; hit = hits[i]; slot = hit.transform.GetComponent(); + if (slot == null) { continue; @@ -70,9 +62,35 @@ public void OnEndDrag(PointerEventData eventData) } } - public void OnDrag(PointerEventData eventData) + #endregion + + #region IPointerClickHandler Implementation + + public void OnPointerClick(PointerEventData eventData) { - transform.position = Input.mousePosition; + } + + #endregion + + //Sets the Item placement and size to be that of the slot + public void SetItemPlacement(ItemSlot slot) + { + transform.SetParent(slot.ItemSpace); + var rect = GetComponent(); + rect.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Right, 0, 0); + rect.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Bottom, 0, 0); + rect.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Left, 0, 0); + rect.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Top, 0, 0); + } + + /// + /// Set the current slot + /// + /// The slot to be set to + public void SetSlot(ItemSlot slot) + { + _curSlot = slot; } } + } \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UI/DraggableItemVisual.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/DraggableItemVisual.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/UI/DraggableItemVisual.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/DraggableItemVisual.cs.meta diff --git a/Samples~/Scripts/DemoExample/UI/FlexibleGridLayout.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/FlexibleGridLayout.cs similarity index 54% rename from Samples~/Scripts/DemoExample/UI/FlexibleGridLayout.cs rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/FlexibleGridLayout.cs index 51aa9e0b..25136133 100644 --- a/Samples~/Scripts/DemoExample/UI/FlexibleGridLayout.cs +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/FlexibleGridLayout.cs @@ -1,10 +1,20 @@ using UnityEngine; using UnityEngine.UI; -namespace TezosSDK.Samples.DemoExample +namespace TezosSDK.MarketplaceSample.MarketplaceExample.UI { + public class FlexibleGridLayout : LayoutGroup { + [SerializeField] private FitType _fitType = FitType.Uniform; + [SerializeField] [Min(1)] private int _rows; + [SerializeField] [Min(1)] private int _columns; + [SerializeField] private Vector2 _cellSize; + [SerializeField] private Vector2 _spacing; + + [SerializeField] private bool _fitX; + [SerializeField] private bool _fitY; + public enum FitType { Uniform, @@ -14,17 +24,8 @@ public enum FitType FixedColumns } - [SerializeField] FitType _fitType = FitType.Uniform; - [SerializeField, Min(1)] private int _rows; - [SerializeField, Min(1)] private int _columns; - [SerializeField] private Vector2 _cellSize; - [SerializeField] private Vector2 _spacing; - - [SerializeField] private bool _fitX; - [SerializeField] private bool _fitY; - /// - /// Calculates and updates the placement of grid elements based on parameters + /// Calculates and updates the placement of grid elements based on parameters /// public override void CalculateLayoutInputHorizontal() { @@ -32,42 +33,45 @@ public override void CalculateLayoutInputHorizontal() if (_fitType == FitType.Uniform || _fitType == FitType.Width || _fitType == FitType.Height) { - float sqrt = Mathf.Sqrt(transform.childCount); + var sqrt = Mathf.Sqrt(transform.childCount); _rows = Mathf.CeilToInt(sqrt); _columns = Mathf.CeilToInt(sqrt); } if (_fitType == FitType.Width || _fitType == FitType.FixedColumns) { - _rows = Mathf.CeilToInt(transform.childCount / (float) _columns); + _rows = Mathf.CeilToInt(transform.childCount / (float)_columns); } if (_fitType == FitType.Height || _fitType == FitType.FixedRows) { - _columns = Mathf.CeilToInt(transform.childCount / (float) _rows); + _columns = Mathf.CeilToInt(transform.childCount / (float)_rows); } - float parentWidth = rectTransform.rect.width; - float parentHeight = rectTransform.rect.height; + var parentWidth = rectTransform.rect.width; + var parentHeight = rectTransform.rect.height; + + var cellWidth = parentWidth / _columns - _spacing.x / _columns * (_columns - 1) - + padding.left / (float)_columns - padding.right / (float)_columns; - float cellWidth = (parentWidth / (float) _columns) - ((_spacing.x / (float) _columns) * (_columns - 1)) - (padding.left / (float) _columns) - (padding.right / (float) _columns); - float cellHeight = (parentHeight / (float) _rows) - ((_spacing.y / (float) _rows) * (_rows - 1)) - (padding.top / (float) _rows) - (padding.bottom / (float) _rows); + var cellHeight = parentHeight / _rows - _spacing.y / _rows * (_rows - 1) - padding.top / (float)_rows - + padding.bottom / (float)_rows; _cellSize.x = _fitX ? cellWidth : _cellSize.x; _cellSize.y = _fitY ? cellHeight : _cellSize.y; - int columnCount = 0; - int rowCount = 0; + var columnCount = 0; + var rowCount = 0; - for (int i = 0; i < rectChildren.Count; i++) + for (var i = 0; i < rectChildren.Count; i++) { rowCount = i / _columns; columnCount = i % _columns; var item = rectChildren[i]; - var xPos = (_cellSize.x * columnCount) + (_spacing.x * columnCount) + padding.left; - var yPos = (_cellSize.y * rowCount) + (_spacing.y * rowCount) + padding.top; + var xPos = _cellSize.x * columnCount + _spacing.x * columnCount + padding.left; + var yPos = _cellSize.y * rowCount + _spacing.y * rowCount + padding.top; SetChildAlongAxis(item, 0, xPos, _cellSize.x); SetChildAlongAxis(item, 1, yPos, _cellSize.y); @@ -89,4 +93,5 @@ public override void SetLayoutVertical() //Unused for now } } + } \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UI/FlexibleGridLayout.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/FlexibleGridLayout.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/UI/FlexibleGridLayout.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/FlexibleGridLayout.cs.meta diff --git a/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/InitiateContractController.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/InitiateContractController.cs new file mode 100644 index 00000000..99287163 --- /dev/null +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/InitiateContractController.cs @@ -0,0 +1,50 @@ +using System.Collections.Generic; +using System.Linq; +using TezosSDK.Tezos.API; +using TMPro; +using UnityEngine; +using UnityEngine.UI; + +namespace TezosSDK.MarketplaceSample.MarketplaceExample.UI +{ + + public class InitiateContractController : MonoBehaviour + { + [SerializeField] private ToggleGroup contractsToggleGroup; + [SerializeField] private GameObject itemPrefab; + [SerializeField] private UIManager uiManager; + + public void DrawContractToggles(IEnumerable contracts, string walletAddress) + { + foreach (Transform child in contractsToggleGroup.transform) + { + Destroy(child.gameObject); + } + + var activeContractAddress = PlayerPrefs.GetString("CurrentContract:" + walletAddress); + + foreach (var c in contracts) + { + var newItem = Instantiate(itemPrefab, contractsToggleGroup.transform); + var toggle = newItem.GetComponent(); + toggle.group = contractsToggleGroup; + toggle.isOn = activeContractAddress == c.Address; + newItem.gameObject.GetComponentInChildren().text = c.Address; + } + } + + public Toggle GetSelectedToggle() + { + var toggles = contractsToggleGroup.GetComponentsInChildren(); + return toggles.FirstOrDefault(t => t.isOn); + } + + public void InitiateContract() + { + var contractAddress = GetSelectedToggle().gameObject.GetComponentInChildren().text; + + uiManager.InitContract(contractAddress); + } + } + +} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UI/InitiateContractController.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/InitiateContractController.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/UI/InitiateContractController.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/InitiateContractController.cs.meta diff --git a/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/ItemController.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/ItemController.cs new file mode 100644 index 00000000..887397e5 --- /dev/null +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/ItemController.cs @@ -0,0 +1,72 @@ +using TezosSDK.MarketplaceSample.MarketplaceExample.Core; +using TMPro; +using UnityEngine; +using UnityEngine.UI; + +namespace TezosSDK.MarketplaceSample.MarketplaceExample.UI +{ + + public class ItemController : MonoBehaviour + { + [SerializeField] private TMP_InputField transferAddressInput; + [SerializeField] private TMP_InputField amountInput; + [SerializeField] private TMP_InputField priceInput; + [SerializeField] private Button transferButton; + [SerializeField] private Button addToMarketButton; + [SerializeField] private Button removeFromMarketButton; + + private bool _hasMoreThanOneItem; + private IItemModel item; + + public void AddItemToMarket() + { + var price = int.Parse(priceInput.text); + ExampleFactory.Instance.GetExampleManager().AddItemToMarket(item.ID, price); + } + + public void OnIsItemOnMarket(bool success) + { + addToMarketButton.gameObject.SetActive(!success); + removeFromMarketButton.gameObject.SetActive(success); + transferButton.gameObject.SetActive(!success); + priceInput.interactable = !success; + } + + public void RemoveItemFromMarket() + { + ExampleFactory.Instance.GetExampleManager().RemoveItemFromMarket(item.ID); + } + + public void SetItem(IItemModel newItem) + { + item = newItem; + + // is the item already on the market or not + ExampleFactory.Instance.GetExampleManager().IsItemOnMarket(item.ID, item.Owner, OnIsItemOnMarket); + + // check the amount of the item (using the price) + _hasMoreThanOneItem = item.Price > 1; + amountInput.gameObject.SetActive(_hasMoreThanOneItem); + + // reset input fields + transferAddressInput.text = ""; + amountInput.text = ""; + priceInput.text = ""; + } + + public void TransferItem() + { + var destAddress = transferAddressInput.text; + var amountString = amountInput.text; + var amount = 1; + + if (_hasMoreThanOneItem) + { + amount = amountString == string.Empty ? 1 : int.Parse(amountString); + } + + ExampleFactory.Instance.GetExampleManager().TransferItem(item.ID, amount, destAddress); + } + } + +} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UI/ItemController.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/ItemController.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/UI/ItemController.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/ItemController.cs.meta diff --git a/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/ItemSlot.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/ItemSlot.cs new file mode 100644 index 00000000..b6606355 --- /dev/null +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/ItemSlot.cs @@ -0,0 +1,37 @@ +using System; +using UnityEngine; +using UnityEngine.UI; + +namespace TezosSDK.MarketplaceSample.MarketplaceExample.UI +{ + + [Obsolete] + [RequireComponent(typeof(Image))] + public class ItemSlot : MonoBehaviour + { + [SerializeField] private Transform _itemSpace; + + public DraggableItemVisual ItemInSlot { get; private set; } + + public Transform ItemSpace + { + get => _itemSpace; + } + + /// + /// assigns an item to slot and lets the item know what slot it's set to + /// + /// The item to be asigned to this slot + public void SetToSlot(DraggableItemVisual item) + { + if (ItemInSlot != item) + { + ItemInSlot = item; + ItemInSlot.SetSlot(this); + } + + item.SetItemPlacement(this); + } + } + +} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UI/ItemSlot.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/ItemSlot.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/UI/ItemSlot.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/ItemSlot.cs.meta diff --git a/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/ItemSnapPoint.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/ItemSnapPoint.cs new file mode 100644 index 00000000..4efabac7 --- /dev/null +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/ItemSnapPoint.cs @@ -0,0 +1,82 @@ +using System.Linq; +using TezosSDK.MarketplaceSample.MarketplaceExample.Core; +using UnityEngine; +using UnityEngine.Events; +using UnityEngine.UI; + +namespace TezosSDK.MarketplaceSample.MarketplaceExample.UI +{ + + [RequireComponent(typeof(Image))] + public class ItemSnapPoint : MonoBehaviour + { + [SerializeField] private bool snappable = true; + [SerializeField] private bool allowAllItemTypes = true; + [SerializeField] private ItemType[] allowedTypes; + + [Header("Events:")] [SerializeField] public UnityEvent OnItemSet; + [SerializeField] public UnityEvent OnItemRemoved; + + private bool _highledEnabled = true; + private Color _highlightColor; + private Image _image; + private Color _originalColor; + + public bool AllowsAllItemTypes + { + get => allowAllItemTypes; + } + + public Draggable CurrentItemInSlot { get; private set; } + + public bool HasItem + { + get => CurrentItemInSlot != null; + } + + public bool IsSnappable + { + get => snappable; + } + + private void Start() + { + _image = GetComponent(); + _originalColor = _image.color; + _highlightColor = Color.white; + } + + public bool AcceptsItem(IItemModel item) + { + return allowedTypes.Contains(item.Type); + } + + public void EnableHighlighting(bool enable) + { + _highledEnabled = enable; + + if (!_highledEnabled) + { + _image.color = _originalColor; + } + } + + public void Highlight(bool highlight) + { + _image.color = highlight ? _highlightColor : _originalColor; + } + + public void RemoveItemInSlot() + { + CurrentItemInSlot = null; + OnItemRemoved?.Invoke(); + } + + public void SetItemInSlot(Draggable item) + { + CurrentItemInSlot = item; + OnItemSet?.Invoke(); + } + } + +} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UI/ItemSnapPoint.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/ItemSnapPoint.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/UI/ItemSnapPoint.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/ItemSnapPoint.cs.meta diff --git a/Samples~/Scripts/DemoExample/UI/ItemView.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/ItemView.cs similarity index 57% rename from Samples~/Scripts/DemoExample/UI/ItemView.cs rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/ItemView.cs index af84b35f..a02c415c 100644 --- a/Samples~/Scripts/DemoExample/UI/ItemView.cs +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/ItemView.cs @@ -1,30 +1,40 @@ using System; using System.Globalization; +using TezosSDK.MarketplaceSample.MarketplaceExample.Core; +using TMPro; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; -namespace TezosSDK.Samples.DemoExample +namespace TezosSDK.MarketplaceSample.MarketplaceExample.UI { + public class ItemView : MonoBehaviour, IPointerClickHandler { [SerializeField] private Image backgroundImage; [SerializeField] private Image itemImage; - [SerializeField] private TMPro.TextMeshProUGUI priceText; - [SerializeField] private TMPro.TextMeshProUGUI nameText; - [SerializeField] private TMPro.TextMeshProUGUI typeText; + [SerializeField] private TextMeshProUGUI priceText; + [SerializeField] private TextMeshProUGUI nameText; + [SerializeField] private TextMeshProUGUI typeText; [SerializeField] private StatsView statsView; [SerializeField] private Color selectColor = Color.white; [SerializeField] private Sprite defaultImage; + public Action OnItemSelected; + private Sprite _initSprite; - private IItemModel _item; private Color _originalBackgroundColor; - private Sprite _cachedSprite; - private Sprite _initSprite; + public Sprite CachedSprite { get; private set; } - public IItemModel Item => _item; - public Action OnItemSelected; - public Sprite CachedSprite => _cachedSprite; + public IItemModel Item { get; private set; } + + #region IPointerClickHandler Implementation + + public void OnPointerClick(PointerEventData eventData) + { + OnItemSelected?.Invoke(this); + } + + #endregion private void Start() { @@ -32,6 +42,36 @@ private void Start() _initSprite = itemImage.sprite; } + public void ClearItem() + { + if (priceText != null) + { + priceText.text = string.Empty; + } + + if (nameText != null) + { + nameText.text = string.Empty; + } + + if (typeText != null) + { + typeText.text = string.Empty; + } + + if (itemImage != null) + { + itemImage.sprite = defaultImage; + } + + if (statsView != null) + { + statsView.Clear(); + } + + Item = null; + } + public void DisplayItem(IItemModel item, Sprite cahcedSprite = null) { if (item == null) @@ -41,41 +81,45 @@ public void DisplayItem(IItemModel item, Sprite cahcedSprite = null) priceText.text = "Price"; nameText.text = "Name"; typeText.text = "[Type]"; - StatParams statParams = new StatParams(0, 0, 0, 0, 0); + var statParams = new StatParams(0, 0, 0, 0, 0); statsView.DisplayStats(statParams); itemImage.sprite = _initSprite; return; } - else + + if (priceText != null) { + priceText.text = item.Price.ToString(CultureInfo.InvariantCulture); + } - if (priceText != null) - priceText.text = item.Price.ToString(CultureInfo.InvariantCulture); - if (nameText != null) - nameText.text = item.Name; - if (typeText != null) - typeText.text = item.Type.ToString(); - if (statsView != null) - statsView.DisplayStats(item.Stats); - if (cahcedSprite != null) - { - itemImage.sprite = cahcedSprite; - _cachedSprite = itemImage.sprite; - } - else if (itemImage != null) - { - ItemReseource itemRes = Resources.Load(item.ResourcePath); - itemImage.sprite = itemRes.ItemSprite; - _cachedSprite = itemImage.sprite; - } + if (nameText != null) + { + nameText.text = item.Name; } - _item = item; - } + if (typeText != null) + { + typeText.text = item.Type.ToString(); + } - public void OnPointerClick(PointerEventData eventData) - { - OnItemSelected?.Invoke(this); + if (statsView != null) + { + statsView.DisplayStats(item.Stats); + } + + if (cahcedSprite != null) + { + itemImage.sprite = cahcedSprite; + CachedSprite = itemImage.sprite; + } + else if (itemImage != null) + { + var itemRes = Resources.Load(item.ResourcePath); + itemImage.sprite = itemRes.ItemSprite; + CachedSprite = itemImage.sprite; + } + + Item = item; } public void Select() @@ -87,20 +131,6 @@ public void Unselect() { backgroundImage.color = _originalBackgroundColor; } - - public void ClearItem() - { - if (priceText != null) - priceText.text = string.Empty; - if (nameText != null) - nameText.text = string.Empty; - if (typeText != null) - typeText.text = string.Empty; - if (itemImage != null) - itemImage.sprite = defaultImage; - if (statsView != null) - statsView.Clear(); - _item = null; - } } + } \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UI/ItemView.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/ItemView.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/UI/ItemView.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/ItemView.cs.meta diff --git a/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/MarketItemController.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/MarketItemController.cs new file mode 100644 index 00000000..ed55e674 --- /dev/null +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/MarketItemController.cs @@ -0,0 +1,41 @@ +using TezosSDK.MarketplaceSample.MarketplaceExample.Core; +using UnityEngine; + +namespace TezosSDK.MarketplaceSample.MarketplaceExample.UI +{ + + public class MarketItemController : MonoBehaviour + { + private IItemModel item; + + public void BuyItemFromMarket() + { + if (item != null) + { + ExampleFactory.Instance.GetExampleManager().BuyItem(item.Owner, item.ID); + } + else + { + Debug.LogError("No item selected!"); + } + } + + public void OnItemBoughtFromMarket(bool success) + { + if (success) + { + Debug.Log("Item removed from market!"); + } + else + { + Debug.Log("Failed to remove item from market."); + } + } + + public void SetItem(IItemModel newItem) + { + item = newItem; + } + } + +} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UI/MarketItemController.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/MarketItemController.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/UI/MarketItemController.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/MarketItemController.cs.meta diff --git a/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/PanelController.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/PanelController.cs new file mode 100644 index 00000000..0dab089f --- /dev/null +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/PanelController.cs @@ -0,0 +1,10 @@ +using UnityEngine; + +namespace TezosSDK.MarketplaceSample.MarketplaceExample.UI +{ + + public class PanelController : MonoBehaviour + { + } + +} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UI/PanelController.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/PanelController.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/UI/PanelController.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/PanelController.cs.meta diff --git a/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/RegisterPanel.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/RegisterPanel.cs new file mode 100644 index 00000000..5a07d305 --- /dev/null +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/RegisterPanel.cs @@ -0,0 +1,112 @@ +using System.Collections; +using Beacon.Sdk.Beacon.Sign; +using TezosSDK.MarketplaceSample.MarketplaceExample.Core; +using TezosSDK.Tezos; +using UnityEngine; +using UnityEngine.UI; + +namespace TezosSDK.MarketplaceSample.MarketplaceExample.UI +{ + + public class RegisterPanel : PanelController + { + [SerializeField] [Header("Components")] private Button _deepLinkPair; + [SerializeField] [Header("Components")] private Button _socialLoginButton; + [SerializeField] [Header("Manager")] private UIManager _uiManager; + private const string PayloadToSign = "Tezos Signed Message: mydap.com 2021-01-14T15:16:04Z Hello world!"; + + private IExampleManager _exampleManager; + + private IEnumerator Start() + { + // skip a frame before start accessing Database + yield return null; + + _exampleManager = ExampleFactory.Instance.GetExampleManager(); + + SetButtonState(_deepLinkPair, false, false); + SetButtonState(_socialLoginButton, false, false); +#if UNITY_STANDALONE || UNITY_EDITOR +#elif (UNITY_IOS || UNITY_ANDROID) + SetButtonState(_deepLinkPair, true, true); +#elif UNITY_WEBGL + ExampleFactory.Instance.GetExampleManager().OnReady(); + + SetButtonState(_deepLinkPair, true, true); + SetButtonState(_socialLoginButton, true, true); +#endif + } + + public void ChangeContract() + { + _uiManager.ChangeContract(); + } + + /// + /// For use on Deep Link connection button to pair to an on device wallet. + /// + public void DeepLinkPair() + { + _exampleManager.Login(WalletProviderType.beacon); + } + + public void DeployContract() + { + _exampleManager.DeployContract(_ => + { + _uiManager.UpdateContractAddress(); + _uiManager.UpdateContracts(); + }); + } + + public void MintFA2() + { + _exampleManager.MintFA2(mintedTokenBalance => + { + _uiManager.DisplayPopup($"Minted token with ID: {mintedTokenBalance.TokenId}"); + }); + } + + public void SignPayloadTest() + { + ExampleFactory.Instance.GetExampleManager().RequestSignPayload(SignPayloadType.micheline, PayloadToSign); + } + + /// + /// Login with social networks. + /// + public void SocialLoginHandler() + { + _exampleManager.Login(WalletProviderType.kukai); + } + + /// + /// To unpair from wallets. + /// + public void UnPair() + { + _exampleManager.Unpair(); + } + + public void VerifySignatureTest() + { + var verified = ExampleFactory.Instance.GetExampleManager() + .VerifyPayload(SignPayloadType.micheline, PayloadToSign); + + Debug.Log("Verification success: " + verified); + } + + /// + /// Allows to set the button's state in a single line. + /// + /// The button in question. + /// The state of activity of it's GameObject. + /// If the button can be interactable or not. + private void SetButtonState(Button button, bool active, bool interactable) + { + button.gameObject.SetActive(active); + button.interactable = interactable; + } + } + +} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UI/RegisterPanel.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/RegisterPanel.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/UI/RegisterPanel.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/RegisterPanel.cs.meta diff --git a/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/SnapController.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/SnapController.cs new file mode 100644 index 00000000..b4ae8221 --- /dev/null +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/SnapController.cs @@ -0,0 +1,126 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace TezosSDK.MarketplaceSample.MarketplaceExample.UI +{ + + public class SnapController : MonoBehaviour + { + [SerializeField] private List snapPoints; + [SerializeField] private List draggables; + [SerializeField] private float snapRange = 100f; + private Draggable _currentDraggable; + + private ItemSnapPoint _currentHighlighedSlot; + private bool _isDragging; + + public List Draggables + { + get => draggables; + set + { + draggables = value; + + foreach (var draggable in draggables) + { + draggable.OnBeginDragging = OnItemDragBegin; + draggable.OnEndDragging = OnItemDragEnd; + } + } + } + + public List SnapPoints + { + get => snapPoints; + set => snapPoints = value; + } + + private void Update() + { + if (_currentHighlighedSlot != null) + { + _currentHighlighedSlot.Highlight(false); + } + + if (_isDragging) + { + _currentHighlighedSlot = GetNearestSlotFromMouse(); + + if (_currentHighlighedSlot != null) + { + _currentHighlighedSlot.Highlight(true); + } + } + } + + public void OnItemDragBegin(Draggable draggable) + { + _isDragging = true; + _currentDraggable = draggable; + } + + public void OnItemDragEnd(Draggable draggable) + { + _isDragging = false; + _currentDraggable = null; + + if (_currentHighlighedSlot != null) + { + draggable.SetCurrentSlot(_currentHighlighedSlot); + } + else + { + draggable.ResetPosition(); + } + } + + private void EnableSlotHighlighting(bool enable) + { + foreach (var snapPoint in snapPoints) + { + snapPoint.EnableHighlighting(enable); + } + } + + private ItemSnapPoint GetNearestSlotFromMouse() + { + float closestDistance = -1; + ItemSnapPoint closestSnapPoint = null; + + foreach (var snapPoint in snapPoints) + { + // check if slot is snappable and empty + if (!snapPoint.IsSnappable || snapPoint.HasItem) + { + continue; + } + + // check if slot accepts item type + if (!snapPoint.AllowsAllItemTypes) + { + if (!snapPoint.AcceptsItem(_currentDraggable.Item)) + { + continue; + } + } + + // calculate distance from mouse to slot + var distance = Vector2.Distance(Input.mousePosition, snapPoint.transform.position); + + if (closestSnapPoint == null || distance < closestDistance) + { + closestDistance = distance; + closestSnapPoint = snapPoint; + } + } + + if (closestDistance <= snapRange) + { + return closestSnapPoint; + } + + return null; + } + } + +} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UI/SnapController.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/SnapController.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/UI/SnapController.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/SnapController.cs.meta diff --git a/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/StatTextView.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/StatTextView.cs new file mode 100644 index 00000000..11658839 --- /dev/null +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/StatTextView.cs @@ -0,0 +1,23 @@ +using TMPro; +using UnityEngine; + +namespace TezosSDK.MarketplaceSample.MarketplaceExample.UI +{ + + public class StatTextView : MonoBehaviour + { + [SerializeField] private TextMeshProUGUI statNameText; + [SerializeField] private TextMeshProUGUI statValueText; + + public void SetStatName(string name) + { + statNameText.text = name; + } + + public void SetStatValue(string value) + { + statValueText.text = value; + } + } + +} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UI/StatTextView.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/StatTextView.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/UI/StatTextView.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/StatTextView.cs.meta diff --git a/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/StatsView.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/StatsView.cs new file mode 100644 index 00000000..3955f852 --- /dev/null +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/StatsView.cs @@ -0,0 +1,37 @@ +using System.Text.RegularExpressions; +using TezosSDK.MarketplaceSample.MarketplaceExample.Core; +using UnityEngine; + +namespace TezosSDK.MarketplaceSample.MarketplaceExample.UI +{ + + public class StatsView : MonoBehaviour + { + [SerializeField] private StatTextView statTextPrefab; + + public void Clear() + { + foreach (Transform child in transform) + { + Destroy(child.gameObject); + } + } + + public void DisplayStats(StatParams stats) + { + Clear(); + + var pis = stats.GetType().GetProperties(); + + foreach (var pi in pis) + { + var newStat = Instantiate(statTextPrefab, transform); + // convert name from camel case to sentence case + var sentName = Regex.Replace(pi.Name, @"\p{Lu}", m => " " + m.Value); + newStat.SetStatName(sentName); + newStat.SetStatValue(pi.GetValue(stats).ToString()); + } + } + } + +} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UI/StatsView.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/StatsView.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/UI/StatsView.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/StatsView.cs.meta diff --git a/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/TabButton.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/TabButton.cs new file mode 100644 index 00000000..ceb3abf4 --- /dev/null +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/TabButton.cs @@ -0,0 +1,88 @@ +using UnityEngine; +using UnityEngine.Events; +using UnityEngine.EventSystems; +using UnityEngine.UI; + +namespace TezosSDK.MarketplaceSample.MarketplaceExample.UI +{ + + [RequireComponent(typeof(Image))] + public class TabButton : MonoBehaviour, IPointerEnterHandler, IPointerClickHandler, IPointerExitHandler + { + [SerializeField] private TabGroup _tabGroup; + [SerializeField] private Image _background; + + public UnityEvent OnTabSelected; + public UnityEvent OnTabDeselected; + + public Image Background + { + get => _background; + } + + public TabGroup TabGroup + { + get => _tabGroup; + } + + #region IPointerClickHandler Implementation + + public void OnPointerClick(PointerEventData eventData) + { + TabGroup.OnTabSelected(this); + } + + #endregion + + #region IPointerEnterHandler Implementation + + public void OnPointerEnter(PointerEventData eventData) + { + TabGroup.OnTabEnter(this); + } + + #endregion + + #region IPointerExitHandler Implementation + + public void OnPointerExit(PointerEventData eventData) + { + TabGroup.OnTabExit(this); + } + + #endregion + + private void Awake() + { + if (_background == null) + { + _background = GetComponent(); + } + + _tabGroup.Subscribe(this); + } + + /// + /// To be called when the button is deselected so that event callbacks can be used. + /// + public void Deselect() + { + if (OnTabDeselected != null) + { + OnTabDeselected.Invoke(); + } + } + + /// + /// To be called when the button is selected so that event callbacks can be used. + /// + public void Select() + { + if (OnTabSelected != null) + { + OnTabSelected.Invoke(); + } + } + } + +} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UI/TabButton.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/TabButton.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/UI/TabButton.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/TabButton.cs.meta diff --git a/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/TabGroup.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/TabGroup.cs new file mode 100644 index 00000000..9cf5382d --- /dev/null +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/TabGroup.cs @@ -0,0 +1,124 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace TezosSDK.MarketplaceSample.MarketplaceExample.UI +{ + + public class TabGroup : MonoBehaviour + { + [SerializeField] private List _tabButtons; + [SerializeField] private Sprite _tabIdle; + [SerializeField] private Sprite _tabHover; + [SerializeField] private Sprite _tabActive; + [SerializeField] private List _pannelsToSwap; + + private TabButton _selectedTab; + + public Sprite TabActive + { + get => _tabActive; + } + + public List TabButtons + { + get => _tabButtons; + } + + public Sprite TabHover + { + get => _tabHover; + } + + public Sprite TabIdle + { + get => _tabIdle; + } + + private void Start() + { + if (_tabButtons.Count == 0) + { + return; + } + + OnTabSelected(_tabButtons[0]); + } + + /// + /// To be called when a tab button is hovered over. + /// + /// The tab button that has been used. + public void OnTabEnter(TabButton button) + { + ResetTabs(); + + if (_selectedTab == null || button != _selectedTab) + { + button.Background.sprite = TabHover; + } + } + + /// + /// To be called when a tab button is no longer being hovered over. + /// + /// The tab button that has been exited from. + public void OnTabExit(TabButton button) + { + ResetTabs(); + } + + /// + /// To be called when a new tab is selected. + /// + /// The tab button that has been used. + public void OnTabSelected(TabButton button) + { + if (_selectedTab != null) + { + _selectedTab.Deselect(); + } + + _selectedTab = button; + _selectedTab.Select(); + + ResetTabs(); + button.Background.sprite = TabActive; + + var index = button.transform.GetSiblingIndex(); + + for (var i = 0; i < _pannelsToSwap.Count; i++) + { + _pannelsToSwap[i].SetActive(i == index ? true : false); + } + } + + /// + /// Sets all tabs back to their initial state + /// + public void ResetTabs() + { + foreach (var button in _tabButtons) + { + if (_selectedTab != null && button == _selectedTab) + { + continue; + } + + button.Background.sprite = TabIdle; + } + } + + /// + /// Subscribe a tab button to this group. + /// + /// The tab button that is subscribing to this group. + public void Subscribe(TabButton button) + { + if (TabButtons == null) + { + _tabButtons.Add(button); + } + } + } + +} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UI/TabGroup.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/TabGroup.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/UI/TabGroup.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/UI/TabGroup.cs.meta diff --git a/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UIManager.cs b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UIManager.cs new file mode 100644 index 00000000..bc6065ac --- /dev/null +++ b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UIManager.cs @@ -0,0 +1,302 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using TezosSDK.Helpers; +using TezosSDK.Helpers.Coroutines; +using TezosSDK.MarketplaceSample.MarketplaceExample.Core; +using TezosSDK.MarketplaceSample.MarketplaceExample.UI; +using TezosSDK.Tezos; +using TMPro; +using UnityEngine; + +namespace TezosSDK.MarketplaceSample.MarketplaceExample +{ + + public class UIManager : MonoBehaviour + { + [Header("References:")] [SerializeField] + private GameObject loginPanel; + + [SerializeField] private GameObject welcomePanel; + [SerializeField] private TextMeshProUGUI welcomeText; + [SerializeField] private TabButton inventoryButton; + [SerializeField] private TabButton marketButton; + [SerializeField] private InventoryManager inventory; + [SerializeField] private MarketManager market; + [SerializeField] private GameObject loadingPanel; + [SerializeField] private GameObject deployPanel; + [SerializeField] private TextMeshProUGUI accountText; + [SerializeField] private TextMeshProUGUI contractAddressText; + [SerializeField] private TextMeshProUGUI balanceText; + [SerializeField] private TextMeshProUGUI softBalanceText; + [SerializeField] private GameObject popupPanel; + [SerializeField] private GameObject initContractPanel; + + private IExampleManager _manager; + + private void Start() + { + _manager = ExampleFactory.Instance.GetExampleManager(); + InitializeCallbacks(); + + AllowUIAccess(false); + inventoryButton.OnTabSelected.AddListener(AccessInventory); + marketButton.OnTabSelected.AddListener(AccessMarket); + inventory.onInventoryRefresh.AddListener(AccessInventory); + inventory.onItemMint.AddListener(MintItem); + } + + private void OnContractCallCompleted(OperationResult operationResult) + { + DisplayPopup($"Transaction completed with hash {operationResult.TransactionHash}"); + } + + private void OnContractCallFailed(ErrorInfo errorInfo) + { + DisplayPopup($"Transaction failed, error: {errorInfo.Message}"); + } + + private void OnContractCallInjected(OperationResult operationResult) + { + if (!string.IsNullOrEmpty(operationResult.TransactionHash)) + { + _manager.FetchMarketItems(PopulateMarket); + _manager.FetchInventoryItems(PopulateInventory); + market.CheckSelection(); + DisplayWalletData(); + } + + DisplayPopup("Call injected!\n \n" + "\n \nTransaction Hash:\n" + operationResult.TransactionHash); + } + + private void OnPayloadSigned(SignResult signResult) + { + DisplayPopup($"Successfully signed with signature: {signResult.Signature}"); + } + + private void OnWalletConnected(WalletInfo walletInfo) + { + if (!string.IsNullOrEmpty(walletInfo.Address)) + { + OnSignIn(true); + } + } + + private void OnWalletConnectionFailed(ErrorInfo errorInfo) + { + DisplayPopup("Wallet connection failed!\n \n" + "Response: \n" + errorInfo.Message); + } + + private void OnWalletDisconnected(WalletInfo walletInfo) + { + AllowUIAccess(false); + ResetWalletData(); + } + + public void AllowUIAccess(bool allow) + { + loginPanel.SetActive(!allow); + welcomePanel.SetActive(allow); + inventoryButton.gameObject.SetActive(allow); + marketButton.gameObject.SetActive(allow); + } + + public void ChangeContract() + { + _manager.GetOriginatedContracts(contracts => + { + if (contracts != null && contracts.Any()) + { + if (string.IsNullOrEmpty(_manager.Tezos.TokenContract.Address)) + { + return; + } + + initContractPanel.SetActive(true); + } + else + { + DisplayPopup("You do not have deployed contracts yet!"); + } + }); + } + + public void DisplayPopup(string message) + { + UnityMainThreadDispatcher.Enqueue(msg => + { + popupPanel.SetActive(true); + popupPanel.GetComponentInChildren().text = msg; + }, message); + } + + public void GetCoins() + { + _manager.GetCoins(); + } + + public void InitContract(string address) + { + // todo: switch inventory items + _manager.ChangeContract(address); + UpdateContractAddress(); + } + + public void OnSignIn(bool success) + { + _manager.GetOriginatedContracts(contracts => + { + if (contracts != null && contracts.Any()) + { + if (string.IsNullOrEmpty(_manager.Tezos.TokenContract.Address)) + { + initContractPanel.SetActive(true); + } + + initContractPanel.GetComponent() + .DrawContractToggles(contracts, _manager.Tezos.Wallet.GetWalletAddress()); + } + + AllowUIAccess(success); + }); + + //TODO: GetActiveAccount() in the BeaconConnector SHOULD be returning stuff from the paired account. + //Something in there might be usable to populate the User info I removed if we still want this. + welcomeText.text = success ? "Welcome!" : "Pairing failed or timed out"; + DisplayWalletData(); + } + + public void ResetWalletData() + { + SetAccountText(string.Empty); + SetBalanceText(0); + SetSoftBalanceText(0); + SetContract(string.Empty); + } + + public void ShowDeployPanel() + { + deployPanel.SetActive(true); + } + + public void UpdateContractAddress() + { + var currentContractAddressText = _manager.Tezos.TokenContract.Address; + + if (contractAddressText.text != currentContractAddressText) + { + SetContract(currentContractAddressText); + } + } + + public void UpdateContracts() + { + _manager.GetOriginatedContracts(contracts => + { + if (contracts == null || contracts.Count() <= 0) + { + return; + } + + initContractPanel.GetComponent() + .DrawContractToggles(contracts, _manager.Tezos.Wallet.GetWalletAddress()); + }); + } + + private void AccessInventory() + { + loadingPanel.SetActive(true); + + _manager.FetchInventoryItems(PopulateInventory); + + DisplayWalletData(); + } + + private void AccessMarket() + { + loadingPanel.SetActive(true); + + _manager.FetchMarketItems(PopulateMarket); + + DisplayWalletData(); + } + + private void DisplayWalletData() + { + var address = _manager.GetActiveAccountAddress(); + SetAccountText(address); + UpdateContractAddress(); + _manager.GetBalance(SetBalanceText); + _manager.GetSoftBalance(SetSoftBalanceText); + } + + private IEnumerator DoActionNextFrame(Action action) + { + yield return new WaitForEndOfFrame(); + action?.Invoke(); + } + + private void InitializeCallbacks() + { + _manager.GetWalletMessageReceiver().WalletConnected += OnWalletConnected; + _manager.GetWalletMessageReceiver().WalletConnectionFailed += OnWalletConnectionFailed; + _manager.GetWalletMessageReceiver().WalletDisconnected += OnWalletDisconnected; + _manager.GetWalletMessageReceiver().ContractCallCompleted += OnContractCallCompleted; + _manager.GetWalletMessageReceiver().ContractCallFailed += OnContractCallFailed; + _manager.GetWalletMessageReceiver().ContractCallInjected += OnContractCallInjected; + _manager.GetWalletMessageReceiver().PayloadSigned += OnPayloadSigned; + } + + private void MintItem() + { + _manager.MintItem(); + } + + private void PopulateInventory(List items) + { + Action action = () => + { + inventory.Init(items); + loadingPanel.SetActive(false); + }; + + CoroutineRunner.Instance.StartWrappedCoroutine(DoActionNextFrame(action)); + } + + private void PopulateMarket(List items) + { + Action action = () => + { + market.Init(items); + loadingPanel.SetActive(false); + }; + + CoroutineRunner.Instance.StartWrappedCoroutine(DoActionNextFrame(action)); + } + + private void SetAccountText(string account) + { + accountText.text = account; + } + + private void SetBalanceText(ulong balance) + { + // balance is in mutez (one millionth of tezos) + var floatBalance = balance * 0.000001; + balanceText.text = floatBalance.ToString(); + } + + private void SetContract(string contractAddress) + { + contractAddressText.text = contractAddress; + } + + private void SetSoftBalanceText(int balance) + { + // balance is in mutez (one millionth of tezos) + softBalanceText.text = balance.ToString(); + } + } + +} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UIManager.cs.meta b/Samples~/MarketplaceSample/Scripts/MarketplaceExample/UIManager.cs.meta similarity index 100% rename from Samples~/Scripts/DemoExample/UIManager.cs.meta rename to Samples~/MarketplaceSample/Scripts/MarketplaceExample/UIManager.cs.meta diff --git a/Samples~/Scripts/NftApiSample.meta b/Samples~/MarketplaceSample/Scripts/NftApiExample.meta similarity index 100% rename from Samples~/Scripts/NftApiSample.meta rename to Samples~/MarketplaceSample/Scripts/NftApiExample.meta diff --git a/Samples~/MarketplaceSample/Scripts/NftApiExample/DataManager.cs b/Samples~/MarketplaceSample/Scripts/NftApiExample/DataManager.cs new file mode 100644 index 00000000..72443157 --- /dev/null +++ b/Samples~/MarketplaceSample/Scripts/NftApiExample/DataManager.cs @@ -0,0 +1,131 @@ +using System; +using System.Collections.Generic; +using TezosSDK.Helpers.Coroutines; +using TezosSDK.Tezos; +using TezosSDK.Tezos.API.Models.Filters; +using TezosSDK.Tezos.API.Models.Tokens; +using UnityEngine; + +namespace TezosSDK.MarketplaceSample.NftApiExample +{ + + public class DataManager : MonoBehaviour + { + private const int MaxTokens = 20; + + public Action DataReceived; + private string _checkAddress; + private string _checkContract; + private string _checkTokenId; + private string _connectedAddress; + private ITezos _tezos; + + private void Start() + { + _tezos = TezosManager.Instance.Tezos; + _tezos.Wallet.EventManager.WalletConnected += OnAccountConnected; + } + + private void OnAccountConnected(WalletInfo walletInfo) + { + _connectedAddress = walletInfo.Address; + } + + public void GetTokensForOwners() + { + var walletAddress = string.IsNullOrEmpty(_checkAddress) ? _connectedAddress : _checkAddress; + + CoroutineRunner.Instance.StartCoroutine(_tezos.API.GetTokensForOwner(tbs => + { + if (tbs == null) + { + DataReceived.Invoke($"Incorrect address - {walletAddress}"); + Debug.Log($"Incorrect address - {walletAddress}"); + return; + } + + var tokens = new List(tbs); + + if (tokens.Count > 0) + { + var result = ""; + + foreach (var tb in tokens) + { + result += $"{walletAddress} has {tb.Balance} tokens on contract {tb.TokenContract.Address}" + + "\r\n" + "\r\n"; + + Debug.Log($"{walletAddress} has {tb.Balance} tokens on contract {tb.TokenContract.Address}"); + } + + DataReceived.Invoke(result); + } + else + { + DataReceived.Invoke($"{walletAddress} has no tokens"); + Debug.Log($"{walletAddress} has no tokens"); + } + }, walletAddress, false, MaxTokens, new TokensForOwnerOrder.Default(0))); + } + + public void IsHolderOfContract() + { + var walletAddress = string.IsNullOrEmpty(_checkAddress) ? _connectedAddress : _checkAddress; + + if (string.IsNullOrEmpty(_checkContract)) + { + DataReceived.Invoke("Enter contract address"); + Debug.Log("Enter contract address"); + return; + } + + CoroutineRunner.Instance.StartCoroutine(_tezos.API.IsHolderOfContract(flag => + { + var message = flag + ? $"{walletAddress} is HOLDER of contract {_checkContract}" + : $"{walletAddress} is NOT HOLDER of contract {_checkContract}"; + + DataReceived.Invoke(message); + Debug.Log(message); + }, walletAddress, _checkContract)); + } + + public void IsHolderOfToken() + { + var walletAddress = string.IsNullOrEmpty(_checkAddress) ? _connectedAddress : _checkAddress; + + var tokenId = string.IsNullOrEmpty(_checkTokenId) ? 0 : Convert.ToUInt32(_checkTokenId); + + if (string.IsNullOrEmpty(_checkContract)) + { + DataReceived.Invoke("Enter contract address"); + Debug.Log("Enter contract address"); + return; + } + + CoroutineRunner.Instance.StartCoroutine(_tezos.API.IsHolderOfToken(flag => + { + var message = flag ? $"{walletAddress} is HOLDER of token" : $"{walletAddress} is NOT HOLDER of token"; + + DataReceived.Invoke(message); + Debug.Log(message); + }, walletAddress, _checkContract, tokenId)); + } + + public void SetCheckAddress(string address) + { + _checkAddress = address; + } + + public void SetCheckContract(string contract) + { + _checkContract = contract; + } + + public void SetCheckTokenId(string tokenId) + { + _checkTokenId = tokenId; + } + } + +} \ No newline at end of file diff --git a/Samples~/Scripts/NftApiSample/DataManager.cs.meta b/Samples~/MarketplaceSample/Scripts/NftApiExample/DataManager.cs.meta similarity index 100% rename from Samples~/Scripts/NftApiSample/DataManager.cs.meta rename to Samples~/MarketplaceSample/Scripts/NftApiExample/DataManager.cs.meta diff --git a/Samples~/MarketplaceSample/Scripts/NftApiExample/UiManager.cs b/Samples~/MarketplaceSample/Scripts/NftApiExample/UiManager.cs new file mode 100644 index 00000000..18876cbc --- /dev/null +++ b/Samples~/MarketplaceSample/Scripts/NftApiExample/UiManager.cs @@ -0,0 +1,46 @@ +using UnityEngine; +using UnityEngine.UI; + +namespace TezosSDK.MarketplaceSample.NftApiExample +{ + + public class UiManager : MonoBehaviour + { + [SerializeField] private DataManager dataManager; + [SerializeField] private InputField addressInputField; + [SerializeField] private InputField contractInputField; + [SerializeField] private InputField tokenIdInputField; + [SerializeField] private Text resultText; + + private void Start() + { + dataManager.DataReceived += OnDataReceived; + + addressInputField.onEndEdit.AddListener(delegate { OnEndEditAddress(addressInputField); }); + contractInputField.onEndEdit.AddListener(delegate { OnEndEditContract(contractInputField); }); + tokenIdInputField.onEndEdit.AddListener(delegate { OnEndEditTokenId(tokenIdInputField); }); + } + + private void OnDataReceived(string data) + { + resultText.text = string.Empty; + resultText.text = data; + } + + private void OnEndEditAddress(InputField input) + { + dataManager.SetCheckAddress(input.text); + } + + private void OnEndEditContract(InputField input) + { + dataManager.SetCheckContract(input.text); + } + + private void OnEndEditTokenId(InputField input) + { + dataManager.SetCheckTokenId(input.text); + } + } + +} \ No newline at end of file diff --git a/Samples~/Scripts/NftApiSample/UiManager.cs.meta b/Samples~/MarketplaceSample/Scripts/NftApiExample/UiManager.cs.meta similarity index 100% rename from Samples~/Scripts/NftApiSample/UiManager.cs.meta rename to Samples~/MarketplaceSample/Scripts/NftApiExample/UiManager.cs.meta diff --git a/Samples~/Scripts/ScriptableObjects.meta b/Samples~/MarketplaceSample/Scripts/ScriptableObjects.meta similarity index 100% rename from Samples~/Scripts/ScriptableObjects.meta rename to Samples~/MarketplaceSample/Scripts/ScriptableObjects.meta diff --git a/Samples~/MarketplaceSample/Scripts/ScriptableObjects/ItemReseource.cs b/Samples~/MarketplaceSample/Scripts/ScriptableObjects/ItemReseource.cs new file mode 100644 index 00000000..f3b4dc6b --- /dev/null +++ b/Samples~/MarketplaceSample/Scripts/ScriptableObjects/ItemReseource.cs @@ -0,0 +1,13 @@ +using UnityEngine; + +namespace TezosSDK.MarketplaceSample +{ + + [CreateAssetMenu(fileName = "ItemResources", menuName = "ScriptableObjects/ItemResources", order = 1)] + public class ItemReseource : ScriptableObject + { + public string Name; + public Sprite ItemSprite; + } + +} \ No newline at end of file diff --git a/Samples~/Scripts/ScriptableObjects/ItemReseource.cs.meta b/Samples~/MarketplaceSample/Scripts/ScriptableObjects/ItemReseource.cs.meta similarity index 100% rename from Samples~/Scripts/ScriptableObjects/ItemReseource.cs.meta rename to Samples~/MarketplaceSample/Scripts/ScriptableObjects/ItemReseource.cs.meta diff --git a/Samples~/MarketplaceSample/TezosSDK.MarketplaceSample.asmdef b/Samples~/MarketplaceSample/TezosSDK.MarketplaceSample.asmdef new file mode 100644 index 00000000..45006a02 --- /dev/null +++ b/Samples~/MarketplaceSample/TezosSDK.MarketplaceSample.asmdef @@ -0,0 +1,17 @@ +{ + "name": "TezosSDK.MarketplaceSample", + "rootNamespace": "", + "references": [ + "TezosSDK", + "Unity.TextMeshPro" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Runtime/Plugins/Newtonsoft.Json Editor/Newtonsoft.Json.deps.json.meta b/Samples~/MarketplaceSample/TezosSDK.MarketplaceSample.asmdef.meta similarity index 59% rename from Runtime/Plugins/Newtonsoft.Json Editor/Newtonsoft.Json.deps.json.meta rename to Samples~/MarketplaceSample/TezosSDK.MarketplaceSample.asmdef.meta index 0db17dd5..904ab853 100644 --- a/Runtime/Plugins/Newtonsoft.Json Editor/Newtonsoft.Json.deps.json.meta +++ b/Samples~/MarketplaceSample/TezosSDK.MarketplaceSample.asmdef.meta @@ -1,10 +1,7 @@ - fileFormatVersion: 2 -guid: 8c0442cd4937413486e0c35d9584302d - -TextScriptImporter: +guid: afc065b5d4434414cbf156f81db43d5c +AssemblyDefinitionImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: - diff --git a/Samples~/Scripts/DemoExample/CopyToClipboard.cs b/Samples~/Scripts/DemoExample/CopyToClipboard.cs deleted file mode 100644 index b0068443..00000000 --- a/Samples~/Scripts/DemoExample/CopyToClipboard.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System.Collections; -using UnityEngine; -using UnityEngine.EventSystems; -using CoroutineRunner = TezosSDK.Helpers.CoroutineRunner; - -namespace TezosSDK.Samples.DemoExample -{ - public class CopyToClipboard : MonoBehaviour, IPointerClickHandler - { - [SerializeField] TMPro.TextMeshProUGUI text; - [SerializeField] TMPro.TMP_InputField inputField; - - bool _blockCopy = false; - - private void Start() - { - inputField.gameObject.SetActive(false); - } - - public void OnPointerClick(PointerEventData eventData) - { - if (_blockCopy) - return; - -#if UNITY_WEBGL - inputField.gameObject.SetActive(true); - inputField.text = text.text; - text.gameObject.SetActive(false); -#endif - - // copy text to the clipboard - GUIUtility.systemCopyBuffer = text.text; - CoroutineRunner.Instance.StartWrappedCoroutine(OnTextCopied()); - } - - IEnumerator OnTextCopied() - { - _blockCopy = true; - string origin = text.text; - text.text = "Copied to clipboard."; - yield return new WaitForSeconds(1.5f); - text.text = origin; - _blockCopy = false; - } - } -} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/Core/ExampleManager.cs b/Samples~/Scripts/DemoExample/Core/ExampleManager.cs deleted file mode 100644 index 0bc61567..00000000 --- a/Samples~/Scripts/DemoExample/Core/ExampleManager.cs +++ /dev/null @@ -1,490 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text.Json; -using Beacon.Sdk.Beacon.Permission; -using Beacon.Sdk.Beacon.Sign; -using Netezos.Encoding; -using TezosSDK.Beacon; -using TezosSDK.Helpers; -using TezosSDK.Tezos; -using TezosSDK.Tezos.API.Models; -using TezosSDK.Tezos.API.Models.Tokens; -using TezosSDK.Tezos.Wallet; -using UnityEngine; -using Logger = TezosSDK.Helpers.Logger; -using Random = System.Random; - -namespace TezosSDK.Samples.DemoExample -{ - public class ExampleManager : IExampleManager - { - private string _networkRPC; - - private const string - contractAddress = "KT1WguzxyLmuKbJhz3jNuoRzzaUCncfp6PFE"; //"KT1DMWAeaP6wxKWPFDLGDkB7xUg563852AjD"; - - private const int softCurrencyID = 0; - - public ITezos Tezos { get; private set; } - public User CurrentUser { get; private set; } - - public ExampleManager() - { - CurrentUser = null; - } - - public void Init(Action callback = null) - { - Tezos = TezosSingleton.ConfiguredInstance( - networkType: NetworkType.ghostnet, - rpcUrl: "https://rpc.tzkt.io/ghostnet", - dAppMetadata: new DAppMetadata - { - Name = "Tezos Demo Example Game", - Url = "https://github.com/trilitech/tezos-unity-sdk/tree/main/Samples~", - Icon = - "https://raw.githubusercontent.com/" + - "trilitech/tezos-unity-sdk/main/Samples%7E/Art/UI/Icons/skill_icon_04.png" - }); - - _networkRPC = TezosConfig.Instance.RpcBaseUrl; - } - - public void Unpair() - { - Tezos.Wallet.Disconnect(); - CurrentUser = null; - } - - public void FetchInventoryItems(Action> callback) - { - var activeWalletAddress = Tezos.Wallet.GetActiveAddress(); // Address to the current active account - - const string entrypoint = "view_items_of"; - var input = new { @string = activeWalletAddress }; - - CoroutineRunner.Instance.StartWrappedCoroutine( - Tezos.API.ReadView( - contractAddress: contractAddress, - entrypoint: entrypoint, - input: JsonSerializer.Serialize(input, JsonOptions.DefaultOptions), - callback: result => - { - Logger.LogDebug("READING INVENTORY DATA"); - - // deserialize the json data to inventory items - CoroutineRunner.Instance.StartWrappedCoroutine( - NetezosExtensions.HumanizeValue( - val: result, - rpcUri: _networkRPC, - destination: contractAddress, - humanizeEntrypoint: "humanizeInventory", - onComplete: (ContractInventoryViewResult[] inventory) => - OnInventoryFetched(inventory, callback)) - ); - })); - } - - private void OnInventoryFetched(ContractInventoryViewResult[] inventory, Action> callback) - { - var dummyItemList = new List(); - var owner = Tezos.Wallet.GetActiveAddress(); - - if (inventory != null) - { - foreach (var item in inventory) - { - var id = Convert.ToInt32(item.id); - var itemType = id == 0 ? 0 : Convert.ToInt32(item.item.itemType) % 4 + 1; - var amount = id == 0 ? Convert.ToInt32(item.amount) : 1; - - var stats = new StatParams( - Convert.ToInt32(item.item.damage), - Convert.ToInt32(item.item.armor), - Convert.ToInt32(item.item.attackSpeed), - Convert.ToInt32(item.item.healthPoints), - Convert.ToInt32(item.item.manaPoints) - ); - - dummyItemList.Add(new Item( - (ItemType)itemType, - "Items/TestItem " + itemType, - "Item " + id, - stats, - amount, - id, - owner)); - } - } - - callback?.Invoke(dummyItemList); - } - - public class ContractItem - { - public string damage { get; set; } - public string armor { get; set; } - public string attackSpeed { get; set; } - public string healthPoints { get; set; } - public string manaPoints { get; set; } - public string itemType { get; set; } - } - - public class ContractInventoryViewResult - { - public string id { get; set; } - public string amount { get; set; } - public ContractItem item { get; set; } - } - - public class ContractMarketplaceViewResult - { - public string id { get; set; } - public string owner { get; set; } - public string currency { get; set; } - public string price { get; set; } - public ContractItem item { get; set; } - } - - public void FetchMarketItems(Action> callback) - { - const string entrypoint = "view_items_on_market"; - - // Prepping parameters for Netezos and for Native is different. - // Double serialization converts double quotes (") symbol into 'u0002' string - // var input = "{\"prim\": \"Unit\"}"; - var input = new MichelinePrim - { - Prim = PrimType.Unit - }.ToJson(); - - CoroutineRunner.Instance.StartWrappedCoroutine( - Tezos.API.ReadView( - contractAddress: contractAddress, - entrypoint: entrypoint, - input: input, - callback: result => - { - // deserialize the json data to market items - CoroutineRunner.Instance.StartWrappedCoroutine( - NetezosExtensions.HumanizeValue( - val: result, - rpcUri: _networkRPC, - destination: contractAddress, - humanizeEntrypoint: "humanizeMarketplace", - onComplete: (ContractMarketplaceViewResult[] market) => - OnMarketplaceFetched(market, callback)) - ); - })); - } - - private void OnMarketplaceFetched(ContractMarketplaceViewResult[] market, Action> callback) - { - var dummyItemList = new List(); - - if (market != null) - { - foreach (var item in market) - { - var id = Convert.ToInt32(item.id); - var itemType = id == 0 ? 0 : Convert.ToInt32(item.item.itemType) % 4 + 1; - var currency = Convert.ToInt32(item.currency); - var price = Convert.ToInt32(item.price); - var owner = item.owner; - - var stats = new StatParams( - Convert.ToInt32(item.item.damage), - Convert.ToInt32(item.item.armor), - Convert.ToInt32(item.item.attackSpeed), - Convert.ToInt32(item.item.healthPoints), - Convert.ToInt32(item.item.manaPoints) - ); - - dummyItemList.Add(new Item( - (ItemType)itemType, - "Items/TestItem " + itemType, - "Item " + id, - stats, - price, - id, - owner)); - } - } - - callback?.Invoke(dummyItemList); - } - - public void BuyItem(string owner, int itemID) - { - const string entryPoint = "buy"; - - var parameter = new MichelinePrim - { - Prim = PrimType.Pair, - Args = new List - { - new MichelineString(owner), - new MichelineInt(itemID) - } - }.ToJson(); - - Logger.LogDebug(contractAddress + " " + entryPoint + parameter); - Tezos.Wallet.CallContract(contractAddress, entryPoint, parameter, 0); - -#if UNITY_IOS || UNITY_ANDROID - Application.OpenURL("tezos://"); -#endif - } - - public void MintItem() - { - const string entrypoint = "mint"; - const string input = "{\"prim\": \"Unit\"}"; - - Tezos.Wallet.CallContract(contractAddress, entrypoint, input, 0); - -#if UNITY_IOS || UNITY_ANDROID - Application.OpenURL("tezos://"); -#endif - } - - public void MintFA2(Action callback) - { - var rnd = new Random(); - var randomInt = rnd.Next(1, int.MaxValue); - var randomAmount = rnd.Next(1, 1024); - - var activeAccount = Tezos.Wallet.GetActiveAddress(); - const string imageAddress = "ipfs://QmX4t8ikQgjvLdqTtL51v6iVun9tNE7y7Txiw4piGQVNgK"; - - var metadata = new TokenMetadata - { - Name = $"testName_{randomInt}", - Description = $"testDescription_{randomInt}", - Symbol = $"TST_{randomInt}", - Decimals = "0", - DisplayUri = imageAddress, - ArtifactUri = imageAddress, - ThumbnailUri = imageAddress - }; - - Tezos - .TokenContract - .Mint(callback, metadata, activeAccount, randomAmount); - -#if UNITY_IOS || UNITY_ANDROID - Application.OpenURL("tezos://"); -#endif - } - - public User GetCurrentUser() - { - return CurrentUser; - } - - public void GetBalance(Action callback) - { - var routine = Tezos.GetCurrentWalletBalance(callback); - CoroutineRunner.Instance.StartWrappedCoroutine(routine); - } - - public void GetSoftBalance(Action callback) - { - GetSoftBalanceRoutine(callback); - } - - private void GetSoftBalanceRoutine(Action callback) - { - var caller = Tezos.Wallet.GetActiveAddress(); - - var input = new MichelinePrim - { - Prim = PrimType.Pair, - Args = new List - { - new MichelineString(caller), - new MichelineInt(softCurrencyID) - } - }.ToJson(); - - CoroutineRunner.Instance.StartWrappedCoroutine( - Tezos.API.ReadView( - contractAddress: contractAddress, - entrypoint: "get_balance", - input: input, - callback: result => - { - var intProp = result.GetProperty("int"); - var intValue = Convert.ToInt32(intProp.ToString()); - callback(intValue); - })); - } - - public void TransferItem(int itemID, int amount, string address) - { - Logger.LogDebug( - $"Transfering item {itemID} from {Tezos.Wallet.GetActiveAddress()} to Address: {address}"); - - var sender = Tezos.Wallet.GetActiveAddress(); - const string entrypoint = "transfer"; - var input = "[ { \"prim\": \"Pair\", \"args\": [ { \"string\": \"" + sender + - "\" }, [ { \"prim\": \"Pair\", \"args\": [ { \"string\": \"" + address + - "\" }, { \"prim\": \"Pair\", \"args\": [ { \"int\": \"" + itemID + "\" }, { \"int\": \"" + - amount + - "\" } ] } ] } ] ] } ]"; - - Tezos.Wallet.CallContract(contractAddress, entrypoint, input, 0); - -#if UNITY_IOS || UNITY_ANDROID - Application.OpenURL("tezos://"); -#endif - } - - public void AddItemToMarket(int itemID, int price) - { - Debug.Log("Adding Item " + itemID + " to Market with the price of " + price); - - const string entryPoint = "addToMarket"; - - var parameter = new MichelinePrim - { - Prim = PrimType.Pair, - Args = new List - { - new MichelinePrim - { - Prim = PrimType.Pair, - Args = new List - { - new MichelineInt(0), // (currency ID = 0) represents coins - new MichelineInt(price), - } - }, - new MichelineInt(itemID), - } - }.ToJson(); - - Tezos.Wallet.CallContract(contractAddress, entryPoint, parameter, 0); - -#if UNITY_IOS || UNITY_ANDROID - Application.OpenURL("tezos://"); -#endif - } - - public void RemoveItemFromMarket(int itemID) - { - Debug.Log("Removing Item " + itemID + " from market."); - - const string entryPoint = "removeFromMarket"; - - var sender = Tezos.Wallet.GetActiveAddress(); - var parameter = new MichelinePrim - { - Prim = PrimType.Pair, - Args = new List - { - new MichelineString(sender), - new MichelineInt(itemID) - } - }.ToJson(); - - Tezos.Wallet.CallContract(contractAddress, entryPoint, parameter, 0); - -#if UNITY_IOS || UNITY_ANDROID - Application.OpenURL("tezos://"); -#endif - } - - public void DeployContract(Action deployedContractAddress) - { - Tezos - .TokenContract - .Deploy(deployedContractAddress); - } - - public void ChangeContract(string activeContractAddress) - { - PlayerPrefs.SetString("CurrentContract:" + Tezos.Wallet.GetActiveAddress(), activeContractAddress); - Tezos.TokenContract.Address = activeContractAddress; - } - - public void GetCoins() - { - const string entryPoint = "login"; - const string parameter = "{\"prim\": \"Unit\"}"; - - Tezos.Wallet.CallContract(contractAddress, entryPoint, parameter, 0); - -#if UNITY_IOS || UNITY_ANDROID - Application.OpenURL("tezos://"); -#endif - } - - public void IsItemOnMarket(int itemID, string owner, Action callback) - { - const string entrypoint = "is_item_on_market"; - - var input = new MichelinePrim - { - Prim = PrimType.Pair, - Args = new List - { - new MichelineString(owner), - new MichelineInt(itemID) - } - }.ToJson(); - - CoroutineRunner.Instance.StartWrappedCoroutine( - Tezos.API.ReadView( - contractAddress: contractAddress, - entrypoint: entrypoint, - input: input, - callback: result => - { - var boolString = result.GetProperty("prim"); - var boolVal = boolString.GetString() == "True"; - callback?.Invoke(boolVal); - })); - } - - public void RequestSignPayload(SignPayloadType signingType, string payload) - { - Tezos.Wallet.RequestSignPayload(signingType, payload); - -#if UNITY_IOS || UNITY_ANDROID - Application.OpenURL("tezos://"); -#endif - } - - public bool VerifyPayload(SignPayloadType signingType, string payload) - { - return Tezos.Wallet.VerifySignedPayload(signingType, payload); - } - - public string GetActiveAccountAddress() - { - return Tezos.Wallet.GetActiveAddress(); - } - - public void Login(WalletProviderType walletProvider) - { - Tezos.Wallet.Connect(walletProvider); - } - - public WalletMessageReceiver GetWalletMessageReceiver() - { - return Tezos.Wallet.MessageReceiver; - } - - public void GetOriginatedContracts(Action> callback) - { - var routine = Tezos.GetOriginatedContracts(callback); - CoroutineRunner.Instance.StartWrappedCoroutine(routine); - } - - public void OnReady() - { - Tezos.Wallet.OnReady(); - } - } -} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/Core/IItemModel.cs b/Samples~/Scripts/DemoExample/Core/IItemModel.cs deleted file mode 100644 index 33e2c7ee..00000000 --- a/Samples~/Scripts/DemoExample/Core/IItemModel.cs +++ /dev/null @@ -1,46 +0,0 @@ -namespace TezosSDK.Samples.DemoExample -{ - public interface IItemModel - { - public ItemType Type { get; } - public string ResourcePath { get; } - public string Name { get; } - public StatParams Stats { get; } - public int ID { get; } - public float Price { get; } - public string Owner { get; } - } - - public enum ItemType - { - Head, - Torso, - Legs, - Feet, - Hand, - Accessory, - Consumable - } - - public class StatParams - { - public StatParams() - { - } - - public StatParams(float damage, float armor, float attackSpeed, float healthPoints, float manaPoints) - { - Damage = damage; - Armor = armor; - AttackSpeed = attackSpeed; - HealthPoints = healthPoints; - ManaPoints = manaPoints; - } - - public float Damage { get; set; } = 0; - public float Armor { get; set; } = 0; - public float AttackSpeed { get; set; } = 0; - public float HealthPoints { get; set; } = 0; - public float ManaPoints { get; set; } = 0; - } -} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/Core/IUserModel.cs b/Samples~/Scripts/DemoExample/Core/IUserModel.cs deleted file mode 100644 index dd85a20f..00000000 --- a/Samples~/Scripts/DemoExample/Core/IUserModel.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace TezosSDK.Samples.DemoExample -{ - public interface IUserModel - { - public string Name { get; } - public string Identifier { get; } - } -} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/Core/Item.cs b/Samples~/Scripts/DemoExample/Core/Item.cs deleted file mode 100644 index 7cc7820a..00000000 --- a/Samples~/Scripts/DemoExample/Core/Item.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace TezosSDK.Samples.DemoExample -{ - public class Item : IItemModel - { - public Item(ItemType type, string resourcePath, string name, StatParams parameters, float price, int id, string owner) - { - Type = type; - ResourcePath = resourcePath; - Name = name; - Stats = parameters; - Price = price; - ID = id; - Owner = owner; - } - - public ItemType Type { get; } - public string ResourcePath { get; } - public string Name { get; } - public StatParams Stats { get; } - - public float Price { get; } - public int ID { get; } - public string Owner { get; } - } -} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/Core/User.cs b/Samples~/Scripts/DemoExample/Core/User.cs deleted file mode 100644 index 72d678d1..00000000 --- a/Samples~/Scripts/DemoExample/Core/User.cs +++ /dev/null @@ -1,21 +0,0 @@ -namespace TezosSDK.Samples.DemoExample -{ - public class User : IUserModel - { - public User(string name, string id, string address) - { - Name = name; - Identifier = id; - Address = address; - } - - public string Name { get; } - public string Identifier { get; } - public string Address { get; private set; } - - public void UpdateAddress(string address) - { - Address = address; - } - } -} diff --git a/Samples~/Scripts/DemoExample/ExampleFactory.cs b/Samples~/Scripts/DemoExample/ExampleFactory.cs deleted file mode 100644 index 95d84d51..00000000 --- a/Samples~/Scripts/DemoExample/ExampleFactory.cs +++ /dev/null @@ -1,26 +0,0 @@ -using UnityEngine; - -namespace TezosSDK.Samples.DemoExample -{ - public class ExampleFactory : MonoBehaviour - { - public static ExampleFactory Instance; - private IExampleManager _exampleManager = null; - - private void Awake() - { - if (Instance == null) - Instance = this; - else if (Instance != this) - Destroy(this); - - _exampleManager = new ExampleManager(); - _exampleManager.Init(); - } - - public IExampleManager GetExampleManager() - { - return _exampleManager; - } - } -} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/InventoryManager.cs b/Samples~/Scripts/DemoExample/InventoryManager.cs deleted file mode 100644 index 9f984c93..00000000 --- a/Samples~/Scripts/DemoExample/InventoryManager.cs +++ /dev/null @@ -1,231 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.Events; -using Logger = TezosSDK.Helpers.Logger; - -namespace TezosSDK.Samples.DemoExample -{ - [RequireComponent(typeof(SnapController))] - public class InventoryManager : MonoBehaviour - { - public UnityEvent onItemMint; - public UnityEvent onInventoryRefresh; - - [SerializeField] private Draggable itemPrefab; - [SerializeField] private List inventorySlots; - [SerializeField] private List equippedSlots; - [SerializeField] private List draggables = new List(); - [SerializeField] private StatsView statsView; - [SerializeField] private ItemView itemView; - - private Dictionary _itemIDtoDraggable = new Dictionary(); - private SnapController _snapController; - private List _lastHeldItems = new List(); - - private const string PlayerPrefsInvKey = "_inv_"; - private const string PlayerPrefsEquipKey = "_eq_"; - - private void Start() - { - _snapController = GetComponent(); - } - - private void OnApplicationQuit() - { - // no need for local storage, since data need to be coming from the blockchain - //SaveInventoryLocally(); - } - - public void Init(List items) - { - //ClearInventory(); - UpdateItems(items); - UpdateSnapController(); - - // no need for local storage, since data need to be coming from the blockchain - //LoadLocalInventory(); - } - - private void AddItem(IItemModel itemModel) - { - Draggable newItem = Instantiate(itemPrefab, this.transform); - ItemReseource itemRes = Resources.Load(itemModel.ResourcePath); - if (itemRes != null) - newItem.Sprite = itemRes.ItemSprite; - else - Logger.LogError("Could find resource file for " + itemModel.ResourcePath); - newItem.Item = itemModel; - newItem.OnClick = OnItemClicked; - draggables.Add(newItem); - ItemSnapPoint emptySlot = GetFirstEmptySlot(); - if (emptySlot != null) - { - newItem.SetCurrentSlot(emptySlot); - _itemIDtoDraggable[itemModel.ID] = newItem; - } - else - { - Logger.LogError("Trying to add an item but Inventory is full!"); - return; - } - } - - /// - /// Adds any missing items and removes any items that should be gone. - /// - public void UpdateItems(List items) - { - ClearInventory(); - UpdateStatsView(); - _lastHeldItems.Clear(); - foreach (IItemModel item in items) - { - _lastHeldItems.Add(item.ID); - if (!_itemIDtoDraggable.ContainsKey(item.ID)) - { - AddItem(item); - } - } - - foreach (var itemToRemove in _itemIDtoDraggable) - { - if (!_lastHeldItems.Contains(itemToRemove.Value.Item.ID)) - { - itemToRemove.Value.CurrentSlot.RemoveItemInSlot(); - //Uncertain if RemoveItemInSlot's event also removes the item from the dictionary or not. - //_itemIDtoDraggable.Remove(itemToRemove.Key); - } - } - } - - private void ClearInventory() - { - foreach (var snapSlot in inventorySlots) - { - snapSlot.RemoveItemInSlot(); - } - - foreach (var snapSlot in equippedSlots) - { - snapSlot.RemoveItemInSlot(); - } - - foreach (var draggable in draggables) - { - Destroy(draggable.gameObject); - } - - draggables.Clear(); - _itemIDtoDraggable.Clear(); - } - - private void UpdateSnapController() - { - try - { - _snapController.Draggables = draggables; - _snapController.SnapPoints = inventorySlots; - foreach (var slot in equippedSlots) - _snapController.SnapPoints.Add(slot); - } - catch (NullReferenceException ex) - { - Debug.Log($"Error during UpdateSnapController: {ex.Message}"); - } - } - - private ItemSnapPoint GetFirstEmptySlot() - { - foreach (var snapPoint in inventorySlots) - if (!snapPoint.HasItem) - return snapPoint; - return null; - } - - private void SaveInventoryLocally() - { - PlayerPrefs.DeleteAll(); - string playerID = ((ExampleManager)ExampleFactory.Instance.GetExampleManager()).CurrentUser.Identifier; - string invSaveLoc = playerID + PlayerPrefsInvKey; - string eqSaveLoc = playerID + PlayerPrefsEquipKey; - for (int i = 0; i < inventorySlots.Count; i++) - { - if (inventorySlots[i].HasItem) - PlayerPrefs.SetInt(invSaveLoc + i, inventorySlots[i].CurrentItemInSlot.Item.ID); - } - - for (int i = 0; i < equippedSlots.Count; i++) - { - if (equippedSlots[i].HasItem) - PlayerPrefs.SetInt(eqSaveLoc + i, equippedSlots[i].CurrentItemInSlot.Item.ID); - } - - Logger.LogDebug("Inventory saved locally."); - } - - private void LoadLocalInventory() - { - ExampleManager db = (ExampleManager)ExampleFactory.Instance.GetExampleManager(); - string playerID = db.CurrentUser.Identifier; - string invSaveLoc = playerID + PlayerPrefsInvKey; - string eqSaveLoc = playerID + PlayerPrefsEquipKey; - for (int i = 0; i < inventorySlots.Count; i++) - { - if (PlayerPrefs.HasKey(invSaveLoc + i)) - { - int itemID = PlayerPrefs.GetInt(invSaveLoc + i); - _itemIDtoDraggable[itemID].SetCurrentSlot(inventorySlots[i]); - } - } - - for (int i = 0; i < equippedSlots.Count; i++) - { - if (PlayerPrefs.HasKey(eqSaveLoc + i)) - { - int itemID = PlayerPrefs.GetInt(eqSaveLoc + i); - _itemIDtoDraggable[itemID].SetCurrentSlot(equippedSlots[i]); - } - } - - Logger.LogDebug("Inventory loaded."); - } - - public void UpdateStatsView() - { - StatParams heroStats = new StatParams(); - - foreach (var slot in equippedSlots) - { - if (!slot.HasItem) - continue; - StatParams sp = slot.CurrentItemInSlot.Item.Stats; - foreach (var prop in sp.GetType().GetProperties()) - { - float value = (float)prop.GetValue(sp) + (float)prop.GetValue(heroStats); - prop.SetValue(heroStats, value); - } - } - - statsView.DisplayStats(heroStats); - } - - public void OnMintButtonClicked() - { - onItemMint.Invoke(); - } - - public void OnRefreshButtonClicked() - { - onInventoryRefresh.Invoke(); - } - - public void OnItemClicked(Draggable item) - { - itemView.transform.parent.gameObject.SetActive(true); - itemView.gameObject.SetActive(true); - itemView.DisplayItem(item.Item, item.Sprite); - itemView.GetComponent().SetItem(item.Item); - } - } -} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/MarketManager.cs b/Samples~/Scripts/DemoExample/MarketManager.cs deleted file mode 100644 index 3cf56519..00000000 --- a/Samples~/Scripts/DemoExample/MarketManager.cs +++ /dev/null @@ -1,71 +0,0 @@ -using System.Collections.Generic; -using System.Security.Cryptography; -using UnityEngine; - -namespace TezosSDK.Samples.DemoExample -{ - public class MarketManager : MonoBehaviour - { - [SerializeField] private ItemView itemViewPrefab; - [SerializeField] private ItemView itemFullDisplay; - [SerializeField] private Transform contentParent; - - private List _marketItems = new List(); - private ItemView _currentSelectedItem; - - public void Init(List items) - { - ClearMarket(); - - foreach (var item in items) - AddItem(item); - } - - public void CheckSelection() - { - if (_currentSelectedItem == null) return; - - itemFullDisplay.DisplayItem(null, null); - } - - private void AddItem(IItemModel itemModel) - { - ItemView newItem = Instantiate(itemViewPrefab, contentParent); - newItem.DisplayItem(itemModel); - newItem.OnItemSelected = OnItemSelected; - _marketItems.Add(newItem); - } - - private void ClearMarket() - { - _marketItems = new List(); - foreach (Transform child in contentParent) - { - Destroy(child.gameObject); - } - - CheckSelection(); - } - - private void OnItemSelected(ItemView selectedItem) - { - if (_currentSelectedItem != null) - _currentSelectedItem.Unselect(); - - if (_currentSelectedItem == selectedItem) - { - selectedItem.Unselect(); - if (itemFullDisplay != null) - itemFullDisplay.ClearItem(); - _currentSelectedItem = null; - return; - } - - selectedItem.Select(); - _currentSelectedItem = selectedItem; - if (itemFullDisplay != null) - itemFullDisplay.DisplayItem(selectedItem.Item, selectedItem.CachedSprite); - itemFullDisplay.GetComponent().SetItem(selectedItem.Item); - } - } -} diff --git a/Samples~/Scripts/DemoExample/UI/InitiateContractController.cs b/Samples~/Scripts/DemoExample/UI/InitiateContractController.cs deleted file mode 100644 index f49a98fa..00000000 --- a/Samples~/Scripts/DemoExample/UI/InitiateContractController.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using TezosSDK.Tezos.API.Models; -using UnityEngine; -using UnityEngine.UI; - -namespace TezosSDK.Samples.DemoExample -{ - public class InitiateContractController : MonoBehaviour - { - [SerializeField] private ToggleGroup contractsToggleGroup; - [SerializeField] private GameObject itemPrefab; - [SerializeField] private UIManager uiManager; - - public void DrawContractToggles(IEnumerable contracts, string walletAddress) - { - foreach (Transform child in contractsToggleGroup.transform) - Destroy(child.gameObject); - - var activeContractAddress = - PlayerPrefs.GetString("CurrentContract:" + walletAddress); - - foreach (var c in contracts) - { - GameObject newItem = Instantiate(itemPrefab, contractsToggleGroup.transform); - Toggle toggle = newItem.GetComponent(); - toggle.group = contractsToggleGroup; - toggle.isOn = activeContractAddress == c.Address; - newItem.gameObject.GetComponentInChildren().text = c.Address; - } - } - - public void InitiateContract() - { - var contractAddress = GetSelectedToggle() - .gameObject - .GetComponentInChildren() - .text; - - uiManager.InitContract(contractAddress); - } - - public Toggle GetSelectedToggle() - { - var toggles = contractsToggleGroup.GetComponentsInChildren(); - return toggles.FirstOrDefault(t => t.isOn); - } - } -} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UI/ItemController.cs b/Samples~/Scripts/DemoExample/UI/ItemController.cs deleted file mode 100644 index c77519b1..00000000 --- a/Samples~/Scripts/DemoExample/UI/ItemController.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System; -using UnityEngine; -using UnityEngine.UI; - -namespace TezosSDK.Samples.DemoExample -{ - public class ItemController : MonoBehaviour - { - private IItemModel item; - - [SerializeField] private TMPro.TMP_InputField transferAddressInput; - [SerializeField] private TMPro.TMP_InputField amountInput; - [SerializeField] private TMPro.TMP_InputField priceInput; - [SerializeField] private Button transferButton; - [SerializeField] private Button addToMarketButton; - [SerializeField] private Button removeFromMarketButton; - - private bool _hasMoreThanOneItem = false; - - public void SetItem(IItemModel newItem) - { - item = newItem; - - // is the item already on the market or not - ExampleFactory.Instance.GetExampleManager().IsItemOnMarket(item.ID, item.Owner, OnIsItemOnMarket); - - // check the amount of the item (using the price) - _hasMoreThanOneItem = item.Price > 1; - amountInput.gameObject.SetActive(_hasMoreThanOneItem); - - // reset input fields - transferAddressInput.text = ""; - amountInput.text = ""; - priceInput.text = ""; - } - - public void TransferItem() - { - string destAddress = transferAddressInput.text; - string amountString = amountInput.text; - int amount = 1; - if (_hasMoreThanOneItem) - amount = (amountString == String.Empty) ? 1 : int.Parse(amountString); - ExampleFactory.Instance.GetExampleManager().TransferItem(item.ID, amount, destAddress); - } - - public void AddItemToMarket() - { - int price = int.Parse(priceInput.text); - ExampleFactory.Instance.GetExampleManager().AddItemToMarket(item.ID, price); - } - - public void RemoveItemFromMarket() - { - ExampleFactory.Instance.GetExampleManager().RemoveItemFromMarket(item.ID); - } - - public void OnIsItemOnMarket(bool success) - { - addToMarketButton.gameObject.SetActive(!success); - removeFromMarketButton.gameObject.SetActive(success); - transferButton.gameObject.SetActive(!success); - priceInput.interactable = !success; - } - } -} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UI/ItemSlot.cs b/Samples~/Scripts/DemoExample/UI/ItemSlot.cs deleted file mode 100644 index a7100f99..00000000 --- a/Samples~/Scripts/DemoExample/UI/ItemSlot.cs +++ /dev/null @@ -1,34 +0,0 @@ -using UnityEngine; -using UnityEngine.UI; - -namespace TezosSDK.Samples.DemoExample -{ - [System.Obsolete] - [RequireComponent(typeof(Image))] - public class ItemSlot : MonoBehaviour - { - [SerializeField] private Transform _itemSpace; - - public Transform ItemSpace => _itemSpace; - - public DraggableItemVisual ItemInSlot => _itemInSlot; - - private DraggableItemVisual _itemInSlot; - - /// - /// assigns an item to slot and lets the item know what slot it's set to - /// - /// The item to be asigned to this slot - public void SetToSlot(DraggableItemVisual item) - { - if (_itemInSlot != item) - { - _itemInSlot = item; - _itemInSlot.SetSlot(this); - } - - - item.SetItemPlacement(this); - } - } -} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UI/ItemSnapPoint.cs b/Samples~/Scripts/DemoExample/UI/ItemSnapPoint.cs deleted file mode 100644 index 60126ada..00000000 --- a/Samples~/Scripts/DemoExample/UI/ItemSnapPoint.cs +++ /dev/null @@ -1,65 +0,0 @@ -using UnityEngine; -using System.Linq; -using UnityEngine.Events; -using UnityEngine.UI; - -namespace TezosSDK.Samples.DemoExample -{ - [RequireComponent(typeof(Image))] - public class ItemSnapPoint : MonoBehaviour - { - [SerializeField] private bool snappable = true; - [SerializeField] private bool allowAllItemTypes = true; - [SerializeField] private ItemType[] allowedTypes; - - private Draggable _currentItemInSlot; - private Image _image; - private bool _highledEnabled = true; - private Color _originalColor; - private Color _highlightColor; - - public bool AllowsAllItemTypes => allowAllItemTypes; - public bool HasItem => _currentItemInSlot != null; - public bool IsSnappable => snappable; - public Draggable CurrentItemInSlot => _currentItemInSlot; - - [Header("Events:")] [SerializeField] public UnityEvent OnItemSet; - [SerializeField] public UnityEvent OnItemRemoved; - - private void Start() - { - _image = GetComponent(); - _originalColor = _image.color; - _highlightColor = Color.white; - } - - public void SetItemInSlot(Draggable item) - { - _currentItemInSlot = item; - OnItemSet?.Invoke(); - } - - public void RemoveItemInSlot() - { - _currentItemInSlot = null; - OnItemRemoved?.Invoke(); - } - - public void Highlight(bool highlight) - { - _image.color = (highlight) ? _highlightColor : _originalColor; - } - - public void EnableHighlighting(bool enable) - { - _highledEnabled = enable; - if (!_highledEnabled) - _image.color = _originalColor; - } - - public bool AcceptsItem(IItemModel item) - { - return allowedTypes.Contains(item.Type); - } - } -} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UI/MarketItemController.cs b/Samples~/Scripts/DemoExample/UI/MarketItemController.cs deleted file mode 100644 index 34dd1918..00000000 --- a/Samples~/Scripts/DemoExample/UI/MarketItemController.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.UI; - -namespace TezosSDK.Samples.DemoExample -{ - public class MarketItemController : MonoBehaviour - { - private IItemModel item; - - public void SetItem(IItemModel newItem) - { - item = newItem; - } - - public void BuyItemFromMarket() - { - if (item != null) - ExampleFactory.Instance.GetExampleManager().BuyItem(item.Owner, item.ID); - else - Debug.LogError("No item selected!"); - } - - public void OnItemBoughtFromMarket(bool success) - { - if (success) - { - Debug.Log("Item removed from market!"); - } - else - { - Debug.Log("Failed to remove item from market."); - } - } - } -} diff --git a/Samples~/Scripts/DemoExample/UI/PanelController.cs b/Samples~/Scripts/DemoExample/UI/PanelController.cs deleted file mode 100644 index 4fe57dab..00000000 --- a/Samples~/Scripts/DemoExample/UI/PanelController.cs +++ /dev/null @@ -1,8 +0,0 @@ -using UnityEngine; - -namespace TezosSDK.Samples.DemoExample -{ - public class PanelController : MonoBehaviour - { - } -} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UI/RegisterPanel.cs b/Samples~/Scripts/DemoExample/UI/RegisterPanel.cs deleted file mode 100644 index 388d6993..00000000 --- a/Samples~/Scripts/DemoExample/UI/RegisterPanel.cs +++ /dev/null @@ -1,124 +0,0 @@ -using System.Collections; -using Beacon.Sdk.Beacon.Sign; -using TezosSDK.Tezos.Wallet; -using TezosSDK.View; -using UnityEngine; -using UnityEngine.UI; - -namespace TezosSDK.Samples.DemoExample -{ - public class RegisterPanel : PanelController - { - [SerializeField, Header("Components")] private Button _deepLinkPair; - [SerializeField, Header("Components")] private Button _socialLoginButton; - [SerializeField] private RawImage _qrImage; - [SerializeField] private QRCodeView _qrCodeView; - [SerializeField, Header("Manager")] private UIManager _uiManager; - - private IExampleManager _exampleManager; - private const string PayloadToSign = "Tezos Signed Message: mydap.com 2021-01-14T15:16:04Z Hello world!"; - - private IEnumerator Start() - { - // skip a frame before start accessing Database - yield return null; - - _exampleManager = ExampleFactory.Instance.GetExampleManager(); - _exampleManager.GetWalletMessageReceiver().HandshakeReceived += - (handshake) => _qrCodeView.SetQrCode(handshake); - - SetButtonState(_deepLinkPair, false, false); - SetButtonState(_socialLoginButton, false, false); - _qrImage.gameObject.SetActive(false); -#if UNITY_STANDALONE || UNITY_EDITOR - // make QR code available for Standalone - _qrImage.gameObject.SetActive(true); -#elif (UNITY_IOS || UNITY_ANDROID) - SetButtonState(_deepLinkPair, true, true); -#elif UNITY_WEBGL - ExampleFactory - .Instance - .GetExampleManager() - .OnReady(); - - SetButtonState(_deepLinkPair, true, true); - SetButtonState(_socialLoginButton, true, true); -#endif - } - - /// - /// For use on Deep Link connection button to pair to an on device wallet. - /// - public void DeepLinkPair() - { - _exampleManager.Login(WalletProviderType.beacon); - } - - /// - /// Login with social networks. - /// - public void SocialLoginHandler() - { - _exampleManager.Login(WalletProviderType.kukai); - } - - /// - /// To unpair from wallets. - /// - public void UnPair() - { - _exampleManager.Unpair(); - } - - /// - /// Allows to set the button's state in a single line. - /// - /// The button in question. - /// The state of activity of it's GameObject. - /// If the button can be interactable or not. - private void SetButtonState(Button button, bool active, bool interactable) - { - button.gameObject.SetActive(active); - button.interactable = interactable; - } - - public void SignPayloadTest() - { - ExampleFactory - .Instance - .GetExampleManager() - .RequestSignPayload(SignPayloadType.micheline, PayloadToSign); - } - - public void VerifySignatureTest() - { - var verified = ExampleFactory - .Instance.GetExampleManager() - .VerifyPayload(SignPayloadType.micheline, PayloadToSign); - Debug.Log("Verification success: " + verified); - } - - public void DeployContract() - { - _exampleManager.DeployContract(_ => - { - _uiManager.UpdateContractAddress(); - _uiManager.UpdateContracts(); - }); - } - - public void MintFA2() - { - _exampleManager.MintFA2(mintedTokenBalance => - { - _uiManager.DisplayPopup($"Minted token with ID: {mintedTokenBalance.TokenId}"); - }); - } - - - public void ChangeContract() - { - _uiManager.ChangeContract(); - } - } -} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UI/SnapController.cs b/Samples~/Scripts/DemoExample/UI/SnapController.cs deleted file mode 100644 index 6863e10e..00000000 --- a/Samples~/Scripts/DemoExample/UI/SnapController.cs +++ /dev/null @@ -1,101 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace TezosSDK.Samples.DemoExample -{ - public class SnapController : MonoBehaviour - { - [SerializeField] private List snapPoints; - [SerializeField] private List draggables; - [SerializeField] private float snapRange = 100f; - - private ItemSnapPoint _currentHighlighedSlot = null; - private Draggable _currentDraggable = null; - private bool _isDragging = false; - - private void Update() - { - if (_currentHighlighedSlot != null) - _currentHighlighedSlot.Highlight(false); - - if (_isDragging) - { - _currentHighlighedSlot = GetNearestSlotFromMouse(); - if (_currentHighlighedSlot != null) - _currentHighlighedSlot.Highlight(true); - } - } - - public List SnapPoints - { - get => snapPoints; - set => snapPoints = value; - } - - public List Draggables - { - get => draggables; - set - { - draggables = value; - foreach (var draggable in draggables) - { - draggable.OnBeginDragging = OnItemDragBegin; - draggable.OnEndDragging = OnItemDragEnd; - } - } - } - - public void OnItemDragBegin(Draggable draggable) - { - _isDragging = true; - _currentDraggable = draggable; - } - - public void OnItemDragEnd(Draggable draggable) - { - _isDragging = false; - _currentDraggable = null; - if (_currentHighlighedSlot != null) - draggable.SetCurrentSlot(_currentHighlighedSlot); - else - draggable.ResetPosition(); - } - - private void EnableSlotHighlighting(bool enable) - { - foreach (var snapPoint in snapPoints) - { - snapPoint.EnableHighlighting(enable); - } - } - - private ItemSnapPoint GetNearestSlotFromMouse() - { - float closestDistance = -1; - ItemSnapPoint closestSnapPoint = null; - foreach (var snapPoint in snapPoints) - { - // check if slot is snappable and empty - if ((!snapPoint.IsSnappable) || (snapPoint.HasItem)) - continue; - // check if slot accepts item type - if (!snapPoint.AllowsAllItemTypes) - if (!snapPoint.AcceptsItem(_currentDraggable.Item)) - continue; - // calculate distance from mouse to slot - float distance = Vector2.Distance(Input.mousePosition, snapPoint.transform.position); - if (closestSnapPoint == null || distance < closestDistance) - { - closestDistance = distance; - closestSnapPoint = snapPoint; - } - } - - if (closestDistance <= snapRange) - return closestSnapPoint; - else - return null; - } - } -} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UI/StatTextView.cs b/Samples~/Scripts/DemoExample/UI/StatTextView.cs deleted file mode 100644 index 3137d5f8..00000000 --- a/Samples~/Scripts/DemoExample/UI/StatTextView.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace TezosSDK.Samples.DemoExample -{ - public class StatTextView : MonoBehaviour - { - [SerializeField] private TMPro.TextMeshProUGUI statNameText; - [SerializeField] private TMPro.TextMeshProUGUI statValueText; - - public void SetStatName(string name) - { - statNameText.text = name; - } - - public void SetStatValue(string value) - { - statValueText.text = value; - } - } -} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UI/StatsView.cs b/Samples~/Scripts/DemoExample/UI/StatsView.cs deleted file mode 100644 index bf0d2095..00000000 --- a/Samples~/Scripts/DemoExample/UI/StatsView.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System.Reflection; -using System.Text.RegularExpressions; -using UnityEngine; - -namespace TezosSDK.Samples.DemoExample -{ - public class StatsView : MonoBehaviour - { - [SerializeField] private StatTextView statTextPrefab; - - public void DisplayStats(StatParams stats) - { - Clear(); - - PropertyInfo[] pis = stats.GetType().GetProperties(); - foreach (PropertyInfo pi in pis) - { - StatTextView newStat = Instantiate(statTextPrefab, transform); - // convert name from camel case to sentence case - string sentName = Regex.Replace(pi.Name, @"\p{Lu}", m => " " + m.Value); - newStat.SetStatName(sentName); - newStat.SetStatValue(pi.GetValue(stats).ToString()); - } - } - - public void Clear() - { - foreach (Transform child in transform) - { - Destroy(child.gameObject); - } - } - } -} diff --git a/Samples~/Scripts/DemoExample/UI/TabButton.cs b/Samples~/Scripts/DemoExample/UI/TabButton.cs deleted file mode 100644 index bfe61336..00000000 --- a/Samples~/Scripts/DemoExample/UI/TabButton.cs +++ /dev/null @@ -1,67 +0,0 @@ -using UnityEngine; -using UnityEngine.UI; -using UnityEngine.EventSystems; -using UnityEngine.Events; - -namespace TezosSDK.Samples.DemoExample -{ - [RequireComponent(typeof(Image))] - public class TabButton : MonoBehaviour, IPointerEnterHandler, IPointerClickHandler, IPointerExitHandler - { - [SerializeField] private TabGroup _tabGroup; - [SerializeField] private Image _background; - - public TabGroup TabGroup => _tabGroup; - public Image Background => _background; - - public UnityEvent OnTabSelected; - public UnityEvent OnTabDeselected; - - public void OnPointerClick(PointerEventData eventData) - { - TabGroup.OnTabSelected(this); - } - - public void OnPointerEnter(PointerEventData eventData) - { - TabGroup.OnTabEnter(this); - } - - public void OnPointerExit(PointerEventData eventData) - { - TabGroup.OnTabExit(this); - } - - void Awake() - { - if (_background == null) - { - _background = GetComponent(); - } - - _tabGroup.Subscribe(this); - } - - /// - /// To be called when the button is selected so that event callbacks can be used. - /// - public void Select() - { - if (OnTabSelected != null) - { - OnTabSelected.Invoke(); - } - } - - /// - /// To be called when the button is deselected so that event callbacks can be used. - /// - public void Deselect() - { - if (OnTabDeselected != null) - { - OnTabDeselected.Invoke(); - } - } - } -} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UI/TabGroup.cs b/Samples~/Scripts/DemoExample/UI/TabGroup.cs deleted file mode 100644 index 1a866345..00000000 --- a/Samples~/Scripts/DemoExample/UI/TabGroup.cs +++ /dev/null @@ -1,106 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace TezosSDK.Samples.DemoExample -{ - public class TabGroup : MonoBehaviour - { - [SerializeField] private List _tabButtons; - [SerializeField] private Sprite _tabIdle; - [SerializeField] private Sprite _tabHover; - [SerializeField] private Sprite _tabActive; - [SerializeField] private List _pannelsToSwap; - - public List TabButtons => _tabButtons; - public Sprite TabIdle => _tabIdle; - public Sprite TabHover => _tabHover; - public Sprite TabActive => _tabActive; - - private TabButton _selectedTab; - - private void Start() - { - if (_tabButtons.Count == 0) - { - return; - } - - OnTabSelected(_tabButtons[0]); - - } - - /// - /// Subscribe a tab button to this group. - /// - /// The tab button that is subscribing to this group. - public void Subscribe(TabButton button) - { - if (TabButtons == null) - { - _tabButtons.Add(button); - } - } - - /// - /// To be called when a tab button is hovered over. - /// - /// The tab button that has been used. - public void OnTabEnter(TabButton button) - { - ResetTabs(); - if (_selectedTab == null || button != _selectedTab) - { - button.Background.sprite = TabHover; - } - } - - /// - /// To be called when a tab button is no longer being hovered over. - /// - /// The tab button that has been exited from. - public void OnTabExit(TabButton button) - { - ResetTabs(); - } - - /// - /// To be called when a new tab is selected. - /// - /// The tab button that has been used. - public void OnTabSelected(TabButton button) - { - if (_selectedTab != null) - { - _selectedTab.Deselect(); - } - - _selectedTab = button; - _selectedTab.Select(); - - ResetTabs(); - button.Background.sprite = TabActive; - - int index = button.transform.GetSiblingIndex(); - for (int i = 0; i < _pannelsToSwap.Count; i++) - { - _pannelsToSwap[i].SetActive(i == index ? true : false); - } - } - - /// - /// Sets all tabs back to their initial state - /// - public void ResetTabs() - { - foreach (TabButton button in _tabButtons) - { - if (_selectedTab != null && button == _selectedTab) - { - continue; - } - - button.Background.sprite = TabIdle; - } - } - } -} \ No newline at end of file diff --git a/Samples~/Scripts/DemoExample/UIManager.cs b/Samples~/Scripts/DemoExample/UIManager.cs deleted file mode 100644 index 0bff0ac8..00000000 --- a/Samples~/Scripts/DemoExample/UIManager.cs +++ /dev/null @@ -1,317 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Text.Json; -using TezosSDK.Helpers; -using UnityEngine; - -namespace TezosSDK.Samples.DemoExample -{ - public class UIManager : MonoBehaviour - { - [Header("References:")] [SerializeField] - private GameObject loginPanel; - - [SerializeField] private GameObject welcomePanel; - [SerializeField] private TMPro.TextMeshProUGUI welcomeText; - [SerializeField] private TabButton inventoryButton; - [SerializeField] private TabButton marketButton; - [SerializeField] private InventoryManager inventory; - [SerializeField] private MarketManager market; - [SerializeField] private GameObject loadingPanel; - [SerializeField] private GameObject deployPanel; - [SerializeField] private TMPro.TextMeshProUGUI accountText; - [SerializeField] private TMPro.TextMeshProUGUI contractAddressText; - [SerializeField] private TMPro.TextMeshProUGUI balanceText; - [SerializeField] private TMPro.TextMeshProUGUI softBalanceText; - [SerializeField] private GameObject popupPanel; - [SerializeField] private GameObject initContractPanel; - - private IExampleManager _manager; - - private void Start() - { - _manager = ExampleFactory.Instance.GetExampleManager(); - InitializeCallbacks(); - - AllowUIAccess(false); - inventoryButton.OnTabSelected.AddListener(AccessInventory); - marketButton.OnTabSelected.AddListener(AccessMarket); - inventory.onInventoryRefresh.AddListener(AccessInventory); - inventory.onItemMint.AddListener(MintItem); - } - - private void InitializeCallbacks() - { - _manager.GetWalletMessageReceiver().AccountConnected += OnAccountConnected; - _manager.GetWalletMessageReceiver().AccountConnectionFailed += OnAccountConnectionFailed; - _manager.GetWalletMessageReceiver().AccountDisconnected += OnAccountDisconnected; - _manager.GetWalletMessageReceiver().ContractCallCompleted += OnContractCallCompleted; - _manager.GetWalletMessageReceiver().ContractCallFailed += OnContractCallFailed; - _manager.GetWalletMessageReceiver().ContractCallInjected += OnContractCallInjected; - _manager.GetWalletMessageReceiver().PayloadSigned += OnPayloadSigned; - } - - private void AccessInventory() - { - loadingPanel.SetActive(true); - - _manager.FetchInventoryItems(PopulateInventory); - - DisplayWalletData(); - } - - private void AccessMarket() - { - loadingPanel.SetActive(true); - - _manager.FetchMarketItems(PopulateMarket); - - DisplayWalletData(); - } - - private void MintItem() - { - _manager.MintItem(); - } - - public void GetCoins() - { - _manager.GetCoins(); - } - - public void OnSignIn(bool success) - { - _manager.GetOriginatedContracts(contracts => - { - if (contracts != null && contracts.Any()) - { - if (string.IsNullOrEmpty(_manager.Tezos.TokenContract.Address)) - initContractPanel.SetActive(true); - - initContractPanel.GetComponent() - .DrawContractToggles(contracts, _manager.Tezos.Wallet.GetActiveAddress()); - } - - AllowUIAccess(success); - }); - - //TODO: GetActiveAccount() in the BeaconConnector SHOULD be returning stuff from the paired account. - //Something in there might be usable to populate the User info I removed if we still want this. - welcomeText.text = success ? "Welcome!" : "Pairing failed or timed out"; - DisplayWalletData(); - } - - public void AllowUIAccess(bool allow) - { - loginPanel.SetActive(!allow); - welcomePanel.SetActive(allow); - inventoryButton.gameObject.SetActive(allow); - marketButton.gameObject.SetActive(allow); - } - - private void PopulateInventory(List items) - { - Action action = () => - { - inventory.Init(items); - loadingPanel.SetActive(false); - }; - CoroutineRunner.Instance.StartWrappedCoroutine(DoActionNextFrame(action)); - } - - private void PopulateMarket(List items) - { - Action action = () => - { - market.Init(items); - loadingPanel.SetActive(false); - }; - CoroutineRunner.Instance.StartWrappedCoroutine(DoActionNextFrame(action)); - } - - private IEnumerator DoActionNextFrame(Action action) - { - yield return new WaitForEndOfFrame(); - action?.Invoke(); - } - - public void ResetWalletData() - { - SetAccountText(string.Empty); - SetBalanceText(0); - SetSoftBalanceText(0); - SetContract(string.Empty); - } - - private void DisplayWalletData() - { - var address = _manager.GetActiveAccountAddress(); - SetAccountText(address); - UpdateContractAddress(); - _manager.GetBalance(SetBalanceText); - _manager.GetSoftBalance(SetSoftBalanceText); - } - - private void SetBalanceText(ulong balance) - { - // balance is in mutez (one millionth of tezos) - var floatBalance = balance * 0.000001; - balanceText.text = (floatBalance).ToString(); - } - - private void SetSoftBalanceText(int balance) - { - // balance is in mutez (one millionth of tezos) - softBalanceText.text = balance.ToString(); - } - - private void SetAccountText(string account) - { - accountText.text = account; - } - - private void SetContract(string contractAddress) - { - contractAddressText.text = contractAddress; - } - - public void UpdateContracts() - { - _manager.GetOriginatedContracts(contracts => - { - if (contracts == null || contracts.Count() <= 0) return; - - initContractPanel.GetComponent() - .DrawContractToggles(contracts, _manager.Tezos.Wallet.GetActiveAddress()); - }); - } - - public void DisplayPopup(string message) - { - UnityMainThreadDispatcher.Enqueue((msg) => - { - popupPanel.SetActive(true); - popupPanel.GetComponentInChildren().text = msg; - }, message); - } - - public void ShowDeployPanel() - { - deployPanel.SetActive(true); - } - - #region Tezos Callbacks - - private void OnAccountConnected(string account) - { - Debug.Log(account); - if (!string.IsNullOrEmpty(account)) - OnSignIn(true); - } - - private void OnAccountConnectionFailed(string response) - { - DisplayPopup("Wallet connection failed!\n \n" + - "Response: \n" + response); - } - - private void OnAccountDisconnected(string account) - { - AllowUIAccess(false); - ResetWalletData(); - } - - [Serializable] - private struct Transaction - { - public string transactionHash; - } - - private void OnContractCallCompleted(string response) - { - string transactionHash = - JsonSerializer.Deserialize(response).GetProperty("transactionHash").ToString(); - DisplayPopup("Transaction completed!\n \n" + - "Transaction hash:\n" + transactionHash + - "\n \nResponse:\n" + response); - } - - public void UpdateContractAddress() - { - var currentContractAddressText = _manager - .Tezos - .TokenContract - .Address; - - if (contractAddressText.text != currentContractAddressText) - { - SetContract(currentContractAddressText); - } - } - - public void InitContract(string address) - { - // todo: switch inventory items - _manager.ChangeContract(address); - UpdateContractAddress(); - } - - public void ChangeContract() - { - _manager.GetOriginatedContracts(contracts => - { - if (contracts != null && contracts.Any()) - { - if (string.IsNullOrEmpty(_manager.Tezos.TokenContract.Address)) return; - - initContractPanel.SetActive(true); - } - else - { - DisplayPopup("You do not have deployed contracts yet!"); - } - }); - } - - private void OnContractCallFailed(string response) - { - DisplayPopup("Transaction failed!\n \n" + - "Response:\n" + response); - } - - private void OnContractCallInjected(string result) - { - string successString = JsonSerializer.Deserialize(result).GetProperty("success").ToString(); - string transactionHash = - JsonSerializer.Deserialize(result).GetProperty("transactionHash").ToString(); - - bool success = successString != null && bool.Parse(successString); - if (success) - { - _manager.FetchMarketItems(PopulateMarket); - _manager.FetchInventoryItems(PopulateInventory); - market.CheckSelection(); - DisplayWalletData(); - } - - DisplayPopup("Call injected!\n \n" + - "Response:\n" + success + - "\n \nTransaction Hash:\n" + transactionHash); - } - - private void OnPayloadSigned(string result) - { - var signature = JsonSerializer - .Deserialize(result) - .GetProperty("signature") - .ToString(); - - DisplayPopup($"Signed!\n \n" + - $"Signature: {signature}"); - } - - #endregion - } -} diff --git a/Samples~/Scripts/NftApiSample/DataManager.cs b/Samples~/Scripts/NftApiSample/DataManager.cs deleted file mode 100644 index db578f0d..00000000 --- a/Samples~/Scripts/NftApiSample/DataManager.cs +++ /dev/null @@ -1,155 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text.Json; -using TezosSDK.Helpers; -using TezosSDK.Tezos; -using TezosSDK.Tezos.API.Models.Filters; -using TezosSDK.Tezos.API.Models.Tokens; -using UnityEngine; - -namespace TezosSDK.Samples.NFTApiSample -{ - public class DataManager : MonoBehaviour - { - private ITezos _tezos; - private string _connectedAddress; - private string _checkContract; - private string _checkAddress; - private string _checkTokenId; - - public Action DataReceived; - - private const int MaxTokens = 20; - - void Start() - { - _tezos = TezosSingleton.Instance; - _tezos - .Wallet - .MessageReceiver - .AccountConnected += OnAccountConnected; - } - - void OnAccountConnected(string result) - { - var json = JsonSerializer.Deserialize(result); - var account = json.GetProperty("accountInfo"); - _connectedAddress = account.GetProperty("address").GetString(); - } - - public void GetTokensForOwners() - { - var walletAddress = string.IsNullOrEmpty(_checkAddress) - ? _connectedAddress - : _checkAddress; - - CoroutineRunner.Instance.StartCoroutine( - _tezos.API.GetTokensForOwner((tbs) => - { - if (tbs == null) - { - DataReceived.Invoke($"Incorrect address - {walletAddress}"); - Debug.Log($"Incorrect address - {walletAddress}"); - return; - } - - List tokens = new List(tbs); - if (tokens.Count > 0) - { - var result = ""; - foreach (var tb in tokens) - { - result += - $"{walletAddress} has {tb.Balance} tokens on contract {tb.TokenContract.Address}" + - "\r\n" + "\r\n"; - Debug.Log( - $"{walletAddress} has {tb.Balance} tokens on contract {tb.TokenContract.Address}"); - } - - DataReceived.Invoke(result); - } - else - { - DataReceived.Invoke($"{walletAddress} has no tokens"); - Debug.Log($"{walletAddress} has no tokens"); - } - }, - owner: walletAddress, - withMetadata: false, - maxItems: MaxTokens, - orderBy: new TokensForOwnerOrder.Default(0))); - } - - public void IsHolderOfContract() - { - var walletAddress = string.IsNullOrEmpty(_checkAddress) - ? _connectedAddress - : _checkAddress; - - if (string.IsNullOrEmpty(_checkContract)) - { - DataReceived.Invoke("Enter contract address"); - Debug.Log("Enter contract address"); - return; - } - - CoroutineRunner.Instance.StartCoroutine(_tezos.API.IsHolderOfContract((flag) => - { - var message = flag - ? $"{walletAddress} is HOLDER of contract {_checkContract}" - : $"{walletAddress} is NOT HOLDER of contract {_checkContract}"; - - DataReceived.Invoke(message); - Debug.Log(message); - }, - wallet: walletAddress, - contractAddress: _checkContract)); - } - - public void IsHolderOfToken() - { - var walletAddress = string.IsNullOrEmpty(_checkAddress) - ? _connectedAddress - : _checkAddress; - - var tokenId = string.IsNullOrEmpty(_checkTokenId) - ? 0 - : Convert.ToUInt32(_checkTokenId); - - if (string.IsNullOrEmpty(_checkContract)) - { - DataReceived.Invoke("Enter contract address"); - Debug.Log("Enter contract address"); - return; - } - - CoroutineRunner.Instance.StartCoroutine(_tezos.API.IsHolderOfToken((flag) => - { - var message = flag - ? $"{walletAddress} is HOLDER of token" - : $"{walletAddress} is NOT HOLDER of token"; - - DataReceived.Invoke(message); - Debug.Log(message); - }, - wallet: walletAddress, - contractAddress: _checkContract, - tokenId: tokenId)); - } - - public void SetCheckAddress(string address) - { - _checkAddress = address; - } - - public void SetCheckTokenId(string tokenId) - { - _checkTokenId = tokenId; - } - - public void SetCheckContract(string contract) - { - _checkContract = contract; - } - } -} \ No newline at end of file diff --git a/Samples~/Scripts/NftApiSample/UiManager.cs b/Samples~/Scripts/NftApiSample/UiManager.cs deleted file mode 100644 index b14f808f..00000000 --- a/Samples~/Scripts/NftApiSample/UiManager.cs +++ /dev/null @@ -1,44 +0,0 @@ -using UnityEngine; -using UnityEngine.UI; - -namespace TezosSDK.Samples.NFTApiSample -{ - public class UiManager : MonoBehaviour - { - [SerializeField] private DataManager dataManager; - [SerializeField] private InputField addressInputField; - [SerializeField] private InputField contractInputField; - [SerializeField] private InputField tokenIdInputField; - [SerializeField] private Text resultText; - - void Start() - { - dataManager.DataReceived += OnDataReceived; - - addressInputField.onEndEdit.AddListener(delegate { OnEndEditAddress(addressInputField); }); - contractInputField.onEndEdit.AddListener(delegate { OnEndEditContract(contractInputField); }); - tokenIdInputField.onEndEdit.AddListener(delegate { OnEndEditTokenId(tokenIdInputField); }); - } - - void OnDataReceived(string data) - { - resultText.text = string.Empty; - resultText.text = data; - } - - void OnEndEditAddress(InputField input) - { - dataManager.SetCheckAddress(input.text); - } - - void OnEndEditContract(InputField input) - { - dataManager.SetCheckContract(input.text); - } - - void OnEndEditTokenId(InputField input) - { - dataManager.SetCheckTokenId(input.text); - } - } -} \ No newline at end of file diff --git a/Samples~/Scripts/ScriptableObjects/ItemReseource.cs b/Samples~/Scripts/ScriptableObjects/ItemReseource.cs deleted file mode 100644 index a72d0327..00000000 --- a/Samples~/Scripts/ScriptableObjects/ItemReseource.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace TezosSDK.Samples -{ - [CreateAssetMenu(fileName = "ItemResources", menuName = "ScriptableObjects/ItemResources", order = 1)] - public class ItemReseource : ScriptableObject - { - public string Name; - public Sprite ItemSprite; - } -} \ No newline at end of file diff --git a/Samples~/TextMesh Pro.meta b/Samples~/TextMesh Pro.meta deleted file mode 100755 index f9da8b5e..00000000 --- a/Samples~/TextMesh Pro.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f54d1bd14bd3ca042bd867b519fee8cc -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Documentation.meta b/Samples~/TextMesh Pro/Documentation.meta deleted file mode 100755 index afa527ac..00000000 --- a/Samples~/TextMesh Pro/Documentation.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8e7e8f5a82a3a134e91c54efd2274ea9 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Documentation/TextMesh Pro User Guide 2016.pdf b/Samples~/TextMesh Pro/Documentation/TextMesh Pro User Guide 2016.pdf deleted file mode 100755 index c2ea2d27..00000000 Binary files a/Samples~/TextMesh Pro/Documentation/TextMesh Pro User Guide 2016.pdf and /dev/null differ diff --git a/Samples~/TextMesh Pro/Documentation/TextMesh Pro User Guide 2016.pdf.meta b/Samples~/TextMesh Pro/Documentation/TextMesh Pro User Guide 2016.pdf.meta deleted file mode 100755 index e4afeef8..00000000 --- a/Samples~/TextMesh Pro/Documentation/TextMesh Pro User Guide 2016.pdf.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 1b8d251f9af63b746bf2f7ffe00ebb9b -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Fonts.meta b/Samples~/TextMesh Pro/Fonts.meta deleted file mode 100755 index f0c29724..00000000 --- a/Samples~/TextMesh Pro/Fonts.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 6ab70aee4d56447429c680537fbf93ed -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Fonts/LiberationSans - OFL.txt b/Samples~/TextMesh Pro/Fonts/LiberationSans - OFL.txt deleted file mode 100755 index f2473f9c..00000000 --- a/Samples~/TextMesh Pro/Fonts/LiberationSans - OFL.txt +++ /dev/null @@ -1,46 +0,0 @@ -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. \ No newline at end of file diff --git a/Samples~/TextMesh Pro/Fonts/LiberationSans - OFL.txt.meta b/Samples~/TextMesh Pro/Fonts/LiberationSans - OFL.txt.meta deleted file mode 100755 index fa60cea1..00000000 --- a/Samples~/TextMesh Pro/Fonts/LiberationSans - OFL.txt.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 6e59c59b81ab47f9b6ec5781fa725d2c -timeCreated: 1484171296 -licenseType: Pro -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Fonts/LiberationSans.ttf b/Samples~/TextMesh Pro/Fonts/LiberationSans.ttf deleted file mode 100755 index 626dd936..00000000 Binary files a/Samples~/TextMesh Pro/Fonts/LiberationSans.ttf and /dev/null differ diff --git a/Samples~/TextMesh Pro/Fonts/LiberationSans.ttf.meta b/Samples~/TextMesh Pro/Fonts/LiberationSans.ttf.meta deleted file mode 100755 index f2fc8140..00000000 --- a/Samples~/TextMesh Pro/Fonts/LiberationSans.ttf.meta +++ /dev/null @@ -1,19 +0,0 @@ -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: diff --git a/Samples~/TextMesh Pro/Resources.meta b/Samples~/TextMesh Pro/Resources.meta deleted file mode 100755 index cfc142f3..00000000 --- a/Samples~/TextMesh Pro/Resources.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 243e06394e614e5d99fab26083b707fa -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Resources/Fonts & Materials.meta b/Samples~/TextMesh Pro/Resources/Fonts & Materials.meta deleted file mode 100755 index 8a011124..00000000 --- a/Samples~/TextMesh Pro/Resources/Fonts & Materials.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 731f1baa9d144a9897cb1d341c2092b8 -folderAsset: yes -timeCreated: 1442040525 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat b/Samples~/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat deleted file mode 100755 index 5bc142c4..00000000 --- a/Samples~/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat +++ /dev/null @@ -1,106 +0,0 @@ -%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} diff --git a/Samples~/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat.meta b/Samples~/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat.meta deleted file mode 100755 index fbd2cdb6..00000000 --- a/Samples~/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e73a58f6e2794ae7b1b7e50b7fb811b0 -timeCreated: 1484172806 -licenseType: Pro -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset b/Samples~/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset deleted file mode 100755 index d2796f7b..00000000 --- a/Samples~/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset +++ /dev/null @@ -1,353 +0,0 @@ -%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_ValidKeywords: [] - m_InvalidKeywords: [] - m_LightmapFlags: 1 - 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} - - _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_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_CharacterTable: [] - m_AtlasTextures: - - {fileID: 28268798066460806} - m_AtlasTextureIndex: 0 - m_IsMultiAtlasTexturesEnabled: 0 - m_ClearDynamicDataOnBuild: 1 - m_UsedGlyphRects: [] - m_FreeGlyphRects: - - m_X: 0 - m_Y: 0 - m_Width: 511 - m_Height: 511 - 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: 0 - m_Height: 0 - m_CompleteImageSize: 0 - m_MipsStripped: 0 - m_TextureFormat: 1 - m_MipCount: 1 - m_IsReadable: 1 - m_IsPreProcessed: 0 - m_IgnoreMasterTextureLimit: 0 - 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: 0 - _typelessdata: - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: diff --git a/Samples~/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset.meta b/Samples~/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset.meta deleted file mode 100755 index 42dd6acd..00000000 --- a/Samples~/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 2e498d1c8094910479dc3e1b768306a4 -timeCreated: 1484171803 -licenseType: Pro -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat b/Samples~/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat deleted file mode 100755 index cca8ce89..00000000 --- a/Samples~/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat +++ /dev/null @@ -1,104 +0,0 @@ -%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} diff --git a/Samples~/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat.meta b/Samples~/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat.meta deleted file mode 100755 index 88d63348..00000000 --- a/Samples~/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 79459efec17a4d00a321bdcc27bbc385 -timeCreated: 1484172856 -licenseType: Pro -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset b/Samples~/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset deleted file mode 100755 index c7b0771e..00000000 --- a/Samples~/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset +++ /dev/null @@ -1,7821 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2180264 -Material: - serializedVersion: 6 - 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_ShaderKeywords: - m_LightmapFlags: 1 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _MainTex: - m_Texture: {fileID: 28684132378477856} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - _ColorMask: 15 - - _FaceDilate: 0 - - _GradientScale: 10 - - _MaskSoftnessX: 0 - - _MaskSoftnessY: 0 - - _OutlineSoftness: 0 - - _OutlineWidth: 0 - - _PerspectiveFilter: 0.875 - - _ScaleRatioA: 0.9 - - _ScaleRatioB: 1 - - _ScaleRatioC: 0.73125 - - _ScaleX: 1 - - _ScaleY: 1 - - _ShaderFlags: 0 - - _Sharpness: 0 - - _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} - - _FaceColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} - - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} ---- !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 - m_EditorClassIdentifier: - hashCode: 231247347 - material: {fileID: 2180264} - materialHashCode: -1183942120 - m_Version: 1.1.0 - m_SourceFontFileGUID: e3265ab4bf004d28a9537516768c1c75 - m_SourceFontFile_EditorRef: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, - type: 3} - m_SourceFontFile: {fileID: 0} - m_AtlasPopulationMode: 0 - m_FaceInfo: - m_FamilyName: Liberation Sans - m_StyleName: Regular - m_PointSize: 86 - m_Scale: 1 - 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: 3 - m_Metrics: - m_Width: 0 - m_Height: 0 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 0 - m_HorizontalAdvance: 24 - m_GlyphRect: - m_X: 0 - m_Y: 0 - m_Width: 0 - m_Height: 0 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 4 - m_Metrics: - m_Width: 9 - m_Height: 59 - m_HorizontalBearingX: 9 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 28 - m_GlyphRect: - m_X: 555 - m_Y: 816 - m_Width: 9 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 5 - m_Metrics: - m_Width: 25 - m_Height: 19 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 31 - m_GlyphRect: - m_X: 775 - m_Y: 922 - m_Width: 25 - m_Height: 19 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 6 - m_Metrics: - m_Width: 48 - m_Height: 59 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 471 - m_Y: 170 - m_Width: 48 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 7 - m_Metrics: - m_Width: 47 - m_Height: 70 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 64 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 161 - m_Y: 212 - m_Width: 47 - m_Height: 70 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 8 - m_Metrics: - m_Width: 70 - m_Height: 61 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 76 - m_GlyphRect: - m_X: 409 - m_Y: 10 - m_Width: 70 - m_Height: 61 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 9 - m_Metrics: - m_Width: 53 - m_Height: 61 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 57 - m_GlyphRect: - m_X: 437 - m_Y: 90 - m_Width: 53 - m_Height: 61 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 10 - m_Metrics: - m_Width: 8 - m_Height: 19 - m_HorizontalBearingX: 4 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 16 - m_GlyphRect: - m_X: 975 - m_Y: 961 - m_Width: 8 - m_Height: 19 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 11 - m_Metrics: - m_Width: 24 - m_Height: 80 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 29 - m_GlyphRect: - m_X: 146 - m_Y: 673 - m_Width: 24 - m_Height: 80 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 12 - m_Metrics: - m_Width: 24 - m_Height: 80 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 29 - m_GlyphRect: - m_X: 189 - m_Y: 671 - m_Width: 24 - m_Height: 80 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 13 - m_Metrics: - m_Width: 31 - m_Height: 30 - m_HorizontalBearingX: 1 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 33 - m_GlyphRect: - m_X: 495 - m_Y: 984 - m_Width: 31 - m_Height: 30 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 14 - m_Metrics: - m_Width: 42 - m_Height: 43 - m_HorizontalBearingX: 4 - m_HorizontalBearingY: 50 - m_HorizontalAdvance: 50 - m_GlyphRect: - m_X: 972 - m_Y: 330 - m_Width: 42 - m_Height: 43 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 15 - m_Metrics: - m_Width: 10 - m_Height: 20 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 9 - m_HorizontalAdvance: 24 - m_GlyphRect: - m_X: 583 - m_Y: 992 - m_Width: 10 - m_Height: 20 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 16 - m_Metrics: - m_Width: 23 - m_Height: 7 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 26 - m_HorizontalAdvance: 29 - m_GlyphRect: - m_X: 399 - m_Y: 925 - m_Width: 23 - m_Height: 7 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 17 - m_Metrics: - m_Width: 10 - m_Height: 9 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 9 - m_HorizontalAdvance: 24 - m_GlyphRect: - m_X: 657 - m_Y: 958 - m_Width: 10 - m_Height: 9 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 18 - m_Metrics: - m_Width: 24 - m_Height: 63 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 24 - m_GlyphRect: - m_X: 695 - m_Y: 409 - m_Width: 24 - m_Height: 63 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 19 - m_Metrics: - m_Width: 42 - m_Height: 61 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 532 - m_Y: 249 - m_Width: 42 - m_Height: 61 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 20 - m_Metrics: - m_Width: 38 - m_Height: 59 - m_HorizontalBearingX: 6 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 915 - m_Y: 501 - m_Width: 38 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 21 - m_Metrics: - m_Width: 40 - m_Height: 60 - m_HorizontalBearingX: 4 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 596 - m_Y: 329 - m_Width: 40 - m_Height: 60 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 22 - m_Metrics: - m_Width: 42 - m_Height: 61 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 417 - m_Y: 503 - m_Width: 42 - m_Height: 61 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 23 - m_Metrics: - m_Width: 45 - m_Height: 59 - m_HorizontalBearingX: 1 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 725 - m_Y: 252 - m_Width: 45 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 24 - m_Metrics: - m_Width: 42 - m_Height: 60 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 724 - m_Y: 330 - m_Width: 42 - m_Height: 60 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 25 - m_Metrics: - m_Width: 41 - m_Height: 61 - m_HorizontalBearingX: 4 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 912 - m_Y: 262 - m_Width: 41 - m_Height: 61 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 26 - m_Metrics: - m_Width: 40 - m_Height: 59 - m_HorizontalBearingX: 4 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 438 - m_Y: 830 - m_Width: 40 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 27 - m_Metrics: - m_Width: 42 - m_Height: 61 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 733 - m_Y: 648 - m_Width: 42 - m_Height: 61 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 28 - m_Metrics: - m_Width: 40 - m_Height: 61 - m_HorizontalBearingX: 4 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 856 - m_Y: 484 - m_Width: 40 - m_Height: 61 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 29 - m_Metrics: - m_Width: 10 - m_Height: 45 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 45 - m_HorizontalAdvance: 24 - m_GlyphRect: - m_X: 897 - m_Y: 819 - m_Width: 10 - m_Height: 45 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 30 - m_Metrics: - m_Width: 10 - m_Height: 57 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 45 - m_HorizontalAdvance: 24 - m_GlyphRect: - m_X: 429 - m_Y: 287 - m_Width: 10 - m_Height: 57 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 31 - m_Metrics: - m_Width: 42 - m_Height: 43 - m_HorizontalBearingX: 4 - m_HorizontalBearingY: 50 - m_HorizontalAdvance: 50 - m_GlyphRect: - m_X: 846 - m_Y: 341 - m_Width: 42 - m_Height: 43 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 32 - m_Metrics: - m_Width: 42 - m_Height: 29 - m_HorizontalBearingX: 4 - m_HorizontalBearingY: 42 - m_HorizontalAdvance: 50 - m_GlyphRect: - m_X: 227 - m_Y: 281 - m_Width: 42 - m_Height: 29 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 33 - m_Metrics: - m_Width: 42 - m_Height: 43 - m_HorizontalBearingX: 4 - m_HorizontalBearingY: 50 - m_HorizontalAdvance: 50 - m_GlyphRect: - m_X: 972 - m_Y: 392 - m_Width: 42 - m_Height: 43 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 34 - m_Metrics: - m_Width: 42 - m_Height: 60 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 733 - m_Y: 728 - m_Width: 42 - m_Height: 60 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 35 - m_Metrics: - m_Width: 74 - m_Height: 74 - m_HorizontalBearingX: 6 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 87 - m_GlyphRect: - m_X: 10 - m_Y: 10 - m_Width: 74 - m_Height: 74 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 36 - m_Metrics: - m_Width: 57 - m_Height: 59 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 57 - m_GlyphRect: - m_X: 828 - m_Y: 103 - m_Width: 57 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 37 - m_Metrics: - m_Width: 46 - m_Height: 59 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 57 - m_GlyphRect: - m_X: 542 - m_Y: 486 - m_Width: 46 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 38 - m_Metrics: - m_Width: 55 - m_Height: 61 - m_HorizontalBearingX: 4 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 62 - m_GlyphRect: - m_X: 509 - m_Y: 88 - m_Width: 55 - m_Height: 61 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 39 - m_Metrics: - m_Width: 51 - m_Height: 59 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 62 - m_GlyphRect: - m_X: 655 - m_Y: 252 - m_Width: 51 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 40 - m_Metrics: - m_Width: 47 - m_Height: 59 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 57 - m_GlyphRect: - m_X: 629 - m_Y: 409 - m_Width: 47 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 41 - m_Metrics: - m_Width: 43 - m_Height: 59 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 53 - m_GlyphRect: - m_X: 789 - m_Y: 259 - m_Width: 43 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 42 - m_Metrics: - m_Width: 57 - m_Height: 61 - m_HorizontalBearingX: 4 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 67 - m_GlyphRect: - m_X: 904 - m_Y: 103 - m_Width: 57 - m_Height: 61 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 43 - m_Metrics: - m_Width: 48 - m_Height: 59 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 62 - m_GlyphRect: - m_X: 495 - m_Y: 407 - m_Width: 48 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 44 - m_Metrics: - m_Width: 9 - m_Height: 59 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 24 - m_GlyphRect: - m_X: 552 - m_Y: 919 - m_Width: 9 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 45 - m_Metrics: - m_Width: 36 - m_Height: 60 - m_HorizontalBearingX: 1 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 43 - m_GlyphRect: - m_X: 797 - m_Y: 569 - m_Width: 36 - m_Height: 60 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 46 - m_Metrics: - m_Width: 50 - m_Height: 59 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 57 - m_GlyphRect: - m_X: 458 - m_Y: 326 - m_Width: 50 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 47 - m_Metrics: - m_Width: 39 - m_Height: 59 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 497 - m_Y: 816 - m_Width: 39 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 48 - m_Metrics: - m_Width: 59 - m_Height: 59 - m_HorizontalBearingX: 6 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 71 - m_GlyphRect: - m_X: 97 - m_Y: 955 - m_Width: 59 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 49 - m_Metrics: - m_Width: 48 - m_Height: 59 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 62 - m_GlyphRect: - m_X: 562 - m_Y: 408 - m_Width: 48 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 50 - m_Metrics: - m_Width: 59 - m_Height: 61 - m_HorizontalBearingX: 4 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 67 - m_GlyphRect: - m_X: 583 - m_Y: 89 - m_Width: 59 - m_Height: 61 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 51 - m_Metrics: - m_Width: 46 - m_Height: 59 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 57 - m_GlyphRect: - m_X: 669 - m_Y: 491 - m_Width: 46 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 52 - m_Metrics: - m_Width: 59 - m_Height: 76 - m_HorizontalBearingX: 4 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 67 - m_GlyphRect: - m_X: 10 - m_Y: 103 - m_Width: 59 - m_Height: 76 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 53 - m_Metrics: - m_Width: 52 - m_Height: 59 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 62 - m_GlyphRect: - m_X: 461 - m_Y: 248 - m_Width: 52 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 54 - m_Metrics: - m_Width: 51 - m_Height: 61 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 57 - m_GlyphRect: - m_X: 288 - m_Y: 273 - m_Width: 51 - m_Height: 61 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 55 - m_Metrics: - m_Width: 50 - m_Height: 59 - m_HorizontalBearingX: 1 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 52 - m_GlyphRect: - m_X: 527 - m_Y: 329 - m_Width: 50 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 56 - m_Metrics: - m_Width: 50 - m_Height: 60 - m_HorizontalBearingX: 6 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 62 - m_GlyphRect: - m_X: 655 - m_Y: 330 - m_Width: 50 - m_Height: 60 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 57 - m_Metrics: - m_Width: 57 - m_Height: 59 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 57 - m_GlyphRect: - m_X: 273 - m_Y: 195 - m_Width: 57 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 58 - m_Metrics: - m_Width: 85 - m_Height: 59 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 85 - m_GlyphRect: - m_X: 103 - m_Y: 10 - m_Width: 85 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 59 - m_Metrics: - m_Width: 56 - m_Height: 59 - m_HorizontalBearingX: 1 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 58 - m_GlyphRect: - m_X: 175 - m_Y: 955 - m_Width: 56 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 60 - m_Metrics: - m_Width: 54 - m_Height: 59 - m_HorizontalBearingX: 1 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 56 - m_GlyphRect: - m_X: 582 - m_Y: 169 - m_Width: 54 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 61 - m_Metrics: - m_Width: 49 - m_Height: 59 - m_HorizontalBearingX: 2 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 53 - m_GlyphRect: - m_X: 427 - m_Y: 404 - m_Width: 49 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 62 - m_Metrics: - m_Width: 18 - m_Height: 80 - m_HorizontalBearingX: 6 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 24 - m_GlyphRect: - m_X: 232 - m_Y: 671 - m_Width: 18 - m_Height: 80 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 63 - m_Metrics: - m_Width: 24 - m_Height: 63 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 24 - m_GlyphRect: - m_X: 375 - m_Y: 951 - m_Width: 24 - m_Height: 63 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 64 - m_Metrics: - m_Width: 18 - m_Height: 80 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 24 - m_GlyphRect: - m_X: 223 - m_Y: 393 - m_Width: 18 - m_Height: 80 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 65 - m_Metrics: - m_Width: 38 - m_Height: 31 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 38 - m_GlyphRect: - m_X: 630 - m_Y: 870 - m_Width: 38 - m_Height: 31 - m_Scale: 1 - m_AtlasIndex: 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: 497 - m_Y: 894 - m_Width: 51 - m_Height: 6 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 67 - m_Metrics: - m_Width: 19 - m_Height: 13 - m_HorizontalBearingX: 4 - m_HorizontalBearingY: 63 - m_HorizontalAdvance: 29 - m_GlyphRect: - m_X: 456 - m_Y: 997 - m_Width: 19 - m_Height: 13 - m_Scale: 1 - m_AtlasIndex: 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: 669 - m_Y: 648 - m_Width: 45 - m_Height: 47 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 69 - m_Metrics: - m_Width: 40 - m_Height: 63 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 738 - m_Y: 409 - m_Width: 40 - m_Height: 63 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 70 - m_Metrics: - m_Width: 38 - m_Height: 47 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 46 - m_HorizontalAdvance: 43 - m_GlyphRect: - m_X: 908 - m_Y: 579 - m_Width: 38 - m_Height: 47 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 71 - m_Metrics: - m_Width: 40 - m_Height: 63 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 797 - m_Y: 403 - m_Width: 40 - m_Height: 63 - m_Scale: 1 - m_AtlasIndex: 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: 785 - m_Y: 337 - m_Width: 42 - m_Height: 47 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 73 - m_Metrics: - m_Width: 25 - m_Height: 62 - m_HorizontalBearingX: 1 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 25 - m_GlyphRect: - m_X: 538 - m_Y: 168 - m_Width: 25 - m_Height: 62 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 74 - m_Metrics: - m_Width: 40 - m_Height: 64 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 46 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 86 - m_Y: 872 - m_Width: 40 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 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: 430 - m_Y: 666 - m_Width: 38 - m_Height: 62 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 76 - m_Metrics: - m_Width: 9 - m_Height: 62 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 19 - m_GlyphRect: - m_X: 852 - m_Y: 567 - m_Width: 9 - m_Height: 62 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 77 - m_Metrics: - m_Width: 17 - m_Height: 80 - m_HorizontalBearingX: -3 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 20 - m_GlyphRect: - m_X: 145 - m_Y: 773 - m_Width: 17 - m_Height: 80 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 78 - m_Metrics: - m_Width: 40 - m_Height: 62 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 44 - m_GlyphRect: - m_X: 856 - m_Y: 403 - m_Width: 40 - m_Height: 62 - m_Scale: 1 - m_AtlasIndex: 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: 880 - m_Y: 564 - m_Width: 9 - m_Height: 62 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 80 - m_Metrics: - m_Width: 64 - m_Height: 46 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 46 - m_HorizontalAdvance: 74 - m_GlyphRect: - m_X: 378 - m_Y: 222 - m_Width: 64 - m_Height: 46 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 81 - m_Metrics: - m_Width: 38 - m_Height: 46 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 46 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 630 - m_Y: 805 - m_Width: 38 - m_Height: 46 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 82 - m_Metrics: - m_Width: 42 - m_Height: 47 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 46 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 972 - m_Y: 264 - m_Width: 42 - m_Height: 47 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 83 - m_Metrics: - m_Width: 40 - m_Height: 64 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 46 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 145 - m_Y: 872 - m_Width: 40 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 84 - m_Metrics: - m_Width: 40 - m_Height: 64 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 46 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 329 - m_Y: 666 - m_Width: 40 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 85 - m_Metrics: - m_Width: 23 - m_Height: 46 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 46 - m_HorizontalAdvance: 29 - m_GlyphRect: - m_X: 926 - m_Y: 816 - m_Width: 23 - m_Height: 46 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 86 - m_Metrics: - m_Width: 38 - m_Height: 47 - m_HorizontalBearingX: 2 - m_HorizontalBearingY: 46 - m_HorizontalAdvance: 43 - m_GlyphRect: - m_X: 956 - m_Y: 740 - m_Width: 38 - m_Height: 47 - m_Scale: 1 - m_AtlasIndex: 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: 388 - m_Y: 672 - m_Width: 23 - m_Height: 56 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 88 - m_Metrics: - m_Width: 38 - m_Height: 46 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 45 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 495 - m_Y: 919 - m_Width: 38 - m_Height: 46 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 89 - m_Metrics: - m_Width: 43 - m_Height: 45 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 45 - m_HorizontalAdvance: 43 - m_GlyphRect: - m_X: 226 - m_Y: 329 - m_Width: 43 - m_Height: 45 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 90 - m_Metrics: - m_Width: 63 - m_Height: 45 - m_HorizontalBearingX: -1 - m_HorizontalBearingY: 45 - m_HorizontalAdvance: 61 - m_GlyphRect: - m_X: 655 - m_Y: 188 - m_Width: 63 - m_Height: 45 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 91 - m_Metrics: - m_Width: 43 - m_Height: 45 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 45 - m_HorizontalAdvance: 43 - m_GlyphRect: - m_X: 737 - m_Y: 188 - m_Width: 43 - m_Height: 45 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 92 - m_Metrics: - m_Width: 41 - m_Height: 63 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 45 - m_HorizontalAdvance: 41 - m_GlyphRect: - m_X: 609 - m_Y: 640 - m_Width: 41 - m_Height: 63 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 93 - m_Metrics: - m_Width: 35 - m_Height: 45 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 45 - m_HorizontalAdvance: 42 - m_GlyphRect: - m_X: 968 - m_Y: 806 - m_Width: 35 - m_Height: 45 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 94 - m_Metrics: - m_Width: 27 - m_Height: 80 - m_HorizontalBearingX: 1 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 29 - m_GlyphRect: - m_X: 164 - m_Y: 113 - m_Width: 27 - m_Height: 80 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 95 - m_Metrics: - m_Width: 8 - m_Height: 80 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 22 - m_GlyphRect: - m_X: 181 - m_Y: 772 - m_Width: 8 - m_Height: 80 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 96 - m_Metrics: - m_Width: 27 - m_Height: 80 - m_HorizontalBearingX: 1 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 29 - m_GlyphRect: - m_X: 227 - m_Y: 182 - m_Width: 27 - m_Height: 80 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 97 - m_Metrics: - m_Width: 44 - m_Height: 11 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 34 - m_HorizontalAdvance: 50 - m_GlyphRect: - m_X: 333 - m_Y: 832 - m_Width: 44 - m_Height: 11 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 98 - m_Metrics: - m_Width: 0 - m_Height: 0 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 0 - m_HorizontalAdvance: 24 - m_GlyphRect: - m_X: 0 - m_Y: 0 - m_Width: 0 - m_Height: 0 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 99 - m_Metrics: - m_Width: 10 - m_Height: 59 - m_HorizontalBearingX: 9 - m_HorizontalBearingY: 45 - m_HorizontalAdvance: 28 - m_GlyphRect: - m_X: 349 - m_Y: 195 - m_Width: 10 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 100 - m_Metrics: - m_Width: 38 - m_Height: 60 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 915 - m_Y: 422 - m_Width: 38 - m_Height: 60 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 101 - m_Metrics: - m_Width: 45 - m_Height: 60 - m_HorizontalBearingX: 2 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 669 - m_Y: 569 - m_Width: 45 - m_Height: 60 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 102 - m_Metrics: - m_Width: 40 - m_Height: 40 - m_HorizontalBearingX: 4 - m_HorizontalBearingY: 48 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 733 - m_Y: 807 - m_Width: 40 - m_Height: 40 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 103 - m_Metrics: - m_Width: 50 - m_Height: 59 - m_HorizontalBearingX: -1 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 358 - m_Y: 357 - m_Width: 50 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 104 - m_Metrics: - m_Width: 8 - m_Height: 80 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 22 - m_GlyphRect: - m_X: 306 - m_Y: 766 - m_Width: 8 - m_Height: 80 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 105 - m_Metrics: - m_Width: 40 - m_Height: 69 - m_HorizontalBearingX: 4 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 223 - m_Y: 492 - m_Width: 40 - m_Height: 69 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 106 - m_Metrics: - m_Width: 25 - m_Height: 8 - m_HorizontalBearingX: 1 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 29 - m_GlyphRect: - m_X: 931 - m_Y: 961 - m_Width: 25 - m_Height: 8 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 107 - m_Metrics: - m_Width: 61 - m_Height: 61 - m_HorizontalBearingX: 1 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 63 - m_GlyphRect: - m_X: 277 - m_Y: 90 - m_Width: 61 - m_Height: 61 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 108 - m_Metrics: - m_Width: 32 - m_Height: 33 - m_HorizontalBearingX: 1 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 32 - m_GlyphRect: - m_X: 784 - m_Y: 870 - m_Width: 32 - m_Height: 33 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 109 - m_Metrics: - m_Width: 42 - m_Height: 34 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 39 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 972 - m_Y: 454 - m_Width: 42 - m_Height: 34 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 110 - m_Metrics: - m_Width: 42 - m_Height: 24 - m_HorizontalBearingX: 4 - m_HorizontalBearingY: 32 - m_HorizontalAdvance: 50 - m_GlyphRect: - m_X: 972 - m_Y: 560 - m_Width: 42 - m_Height: 24 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 111 - m_Metrics: - m_Width: 23 - m_Height: 7 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 26 - m_HorizontalAdvance: 29 - m_GlyphRect: - m_X: 583 - m_Y: 890 - m_Width: 23 - m_Height: 7 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 112 - m_Metrics: - m_Width: 61 - m_Height: 61 - m_HorizontalBearingX: 1 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 63 - m_GlyphRect: - m_X: 357 - m_Y: 90 - m_Width: 61 - m_Height: 61 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 113 - m_Metrics: - m_Width: 50 - m_Height: 4 - m_HorizontalBearingX: -1 - m_HorizontalBearingY: 65 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 862 - m_Y: 961 - m_Width: 50 - m_Height: 4 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 114 - m_Metrics: - m_Width: 24 - m_Height: 24 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 34 - m_GlyphRect: - m_X: 687 - m_Y: 906 - m_Width: 24 - m_Height: 24 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 115 - m_Metrics: - m_Width: 43 - m_Height: 52 - m_HorizontalBearingX: 2 - m_HorizontalBearingY: 52 - m_HorizontalAdvance: 47 - m_GlyphRect: - m_X: 607 - m_Y: 487 - m_Width: 43 - m_Height: 52 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 116 - m_Metrics: - m_Width: 27 - m_Height: 36 - m_HorizontalBearingX: 1 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 29 - m_GlyphRect: - m_X: 792 - m_Y: 815 - m_Width: 27 - m_Height: 36 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 117 - m_Metrics: - m_Width: 27 - m_Height: 37 - m_HorizontalBearingX: 1 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 29 - m_GlyphRect: - m_X: 687 - m_Y: 796 - m_Width: 27 - m_Height: 37 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 118 - m_Metrics: - m_Width: 19 - m_Height: 13 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 63 - m_HorizontalAdvance: 29 - m_GlyphRect: - m_X: 545 - m_Y: 997 - m_Width: 19 - m_Height: 13 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 119 - m_Metrics: - m_Width: 43 - m_Height: 63 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 45 - m_HorizontalAdvance: 50 - m_GlyphRect: - m_X: 593 - m_Y: 247 - m_Width: 43 - m_Height: 63 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 120 - m_Metrics: - m_Width: 40 - m_Height: 70 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 46 - m_GlyphRect: - m_X: 208 - m_Y: 770 - m_Width: 40 - m_Height: 70 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 121 - m_Metrics: - m_Width: 10 - m_Height: 10 - m_HorizontalBearingX: 9 - m_HorizontalBearingY: 28 - m_HorizontalAdvance: 29 - m_GlyphRect: - m_X: 996 - m_Y: 932 - m_Width: 10 - m_Height: 10 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 122 - m_Metrics: - m_Width: 16 - m_Height: 18 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 0 - m_HorizontalAdvance: 29 - m_GlyphRect: - m_X: 622 - m_Y: 958 - m_Width: 16 - m_Height: 18 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 123 - m_Metrics: - m_Width: 24 - m_Height: 35 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 29 - m_GlyphRect: - m_X: 687 - m_Y: 852 - m_Width: 24 - m_Height: 35 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 124 - m_Metrics: - m_Width: 29 - m_Height: 33 - m_HorizontalBearingX: 1 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 31 - m_GlyphRect: - m_X: 835 - m_Y: 877 - m_Width: 29 - m_Height: 33 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 125 - m_Metrics: - m_Width: 42 - m_Height: 34 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 39 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 972 - m_Y: 507 - m_Width: 42 - m_Height: 34 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 126 - m_Metrics: - m_Width: 67 - m_Height: 59 - m_HorizontalBearingX: 2 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 72 - m_GlyphRect: - m_X: 498 - m_Y: 10 - m_Width: 67 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 127 - m_Metrics: - m_Width: 68 - m_Height: 59 - m_HorizontalBearingX: 2 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 72 - m_GlyphRect: - m_X: 10 - m_Y: 955 - m_Width: 68 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 128 - m_Metrics: - m_Width: 66 - m_Height: 60 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 72 - m_GlyphRect: - m_X: 584 - m_Y: 10 - m_Width: 66 - m_Height: 60 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 129 - m_Metrics: - m_Width: 43 - m_Height: 60 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 45 - m_HorizontalAdvance: 53 - m_GlyphRect: - m_X: 903 - m_Y: 183 - m_Width: 43 - m_Height: 60 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 130 - m_Metrics: - m_Width: 57 - m_Height: 74 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 74 - m_HorizontalAdvance: 57 - m_GlyphRect: - m_X: 829 - m_Y: 10 - m_Width: 57 - m_Height: 74 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 131 - m_Metrics: - m_Width: 57 - m_Height: 74 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 74 - m_HorizontalAdvance: 57 - m_GlyphRect: - m_X: 905 - m_Y: 10 - m_Width: 57 - m_Height: 74 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 132 - m_Metrics: - m_Width: 57 - m_Height: 75 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 75 - m_HorizontalAdvance: 57 - m_GlyphRect: - m_X: 10 - m_Y: 673 - m_Width: 57 - m_Height: 75 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 133 - m_Metrics: - m_Width: 57 - m_Height: 75 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 75 - m_HorizontalAdvance: 57 - m_GlyphRect: - m_X: 10 - m_Y: 767 - m_Width: 57 - m_Height: 75 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 134 - m_Metrics: - m_Width: 57 - m_Height: 72 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 72 - m_HorizontalAdvance: 57 - m_GlyphRect: - m_X: 88 - m_Y: 113 - m_Width: 57 - m_Height: 72 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 135 - m_Metrics: - m_Width: 57 - m_Height: 75 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 75 - m_HorizontalAdvance: 57 - m_GlyphRect: - m_X: 10 - m_Y: 861 - m_Width: 57 - m_Height: 75 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 136 - m_Metrics: - m_Width: 82 - m_Height: 59 - m_HorizontalBearingX: 1 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 86 - m_GlyphRect: - m_X: 207 - m_Y: 10 - m_Width: 82 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 137 - m_Metrics: - m_Width: 55 - m_Height: 78 - m_HorizontalBearingX: 4 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 62 - m_GlyphRect: - m_X: 10 - m_Y: 576 - m_Width: 55 - m_Height: 78 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 138 - m_Metrics: - m_Width: 47 - m_Height: 74 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 74 - m_HorizontalAdvance: 57 - m_GlyphRect: - m_X: 84 - m_Y: 580 - m_Width: 47 - m_Height: 74 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 139 - m_Metrics: - m_Width: 47 - m_Height: 74 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 74 - m_HorizontalAdvance: 57 - m_GlyphRect: - m_X: 157 - m_Y: 487 - m_Width: 47 - m_Height: 74 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 140 - m_Metrics: - m_Width: 47 - m_Height: 75 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 75 - m_HorizontalAdvance: 57 - m_GlyphRect: - m_X: 157 - m_Y: 393 - m_Width: 47 - m_Height: 75 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 141 - m_Metrics: - m_Width: 47 - m_Height: 72 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 72 - m_HorizontalAdvance: 57 - m_GlyphRect: - m_X: 150 - m_Y: 580 - m_Width: 47 - m_Height: 72 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 142 - m_Metrics: - m_Width: 19 - m_Height: 74 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 74 - m_HorizontalAdvance: 24 - m_GlyphRect: - m_X: 227 - m_Y: 859 - m_Width: 19 - m_Height: 74 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 143 - m_Metrics: - m_Width: 19 - m_Height: 74 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 74 - m_HorizontalAdvance: 24 - m_GlyphRect: - m_X: 265 - m_Y: 859 - m_Width: 19 - m_Height: 74 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 144 - m_Metrics: - m_Width: 28 - m_Height: 75 - m_HorizontalBearingX: -2 - m_HorizontalBearingY: 75 - m_HorizontalAdvance: 24 - m_GlyphRect: - m_X: 981 - m_Y: 10 - m_Width: 28 - m_Height: 75 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 145 - m_Metrics: - m_Width: 25 - m_Height: 72 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 72 - m_HorizontalAdvance: 24 - m_GlyphRect: - m_X: 216 - m_Y: 580 - m_Width: 25 - m_Height: 72 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 146 - m_Metrics: - m_Width: 58 - m_Height: 59 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 62 - m_GlyphRect: - m_X: 751 - m_Y: 102 - m_Width: 58 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 147 - m_Metrics: - m_Width: 48 - m_Height: 75 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 75 - m_HorizontalAdvance: 62 - m_GlyphRect: - m_X: 210 - m_Y: 88 - m_Width: 48 - m_Height: 75 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 148 - m_Metrics: - m_Width: 59 - m_Height: 75 - m_HorizontalBearingX: 4 - m_HorizontalBearingY: 74 - m_HorizontalAdvance: 67 - m_GlyphRect: - m_X: 10 - m_Y: 388 - m_Width: 59 - m_Height: 75 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 149 - m_Metrics: - m_Width: 59 - m_Height: 75 - m_HorizontalBearingX: 4 - m_HorizontalBearingY: 74 - m_HorizontalAdvance: 67 - m_GlyphRect: - m_X: 10 - m_Y: 482 - m_Width: 59 - m_Height: 75 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 150 - m_Metrics: - m_Width: 59 - m_Height: 76 - m_HorizontalBearingX: 4 - m_HorizontalBearingY: 75 - m_HorizontalAdvance: 67 - m_GlyphRect: - m_X: 10 - m_Y: 198 - m_Width: 59 - m_Height: 76 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 151 - m_Metrics: - m_Width: 59 - m_Height: 76 - m_HorizontalBearingX: 4 - m_HorizontalBearingY: 75 - m_HorizontalAdvance: 67 - m_GlyphRect: - m_X: 10 - m_Y: 293 - m_Width: 59 - m_Height: 76 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 152 - m_Metrics: - m_Width: 59 - m_Height: 73 - m_HorizontalBearingX: 4 - m_HorizontalBearingY: 72 - m_HorizontalAdvance: 67 - m_GlyphRect: - m_X: 751 - m_Y: 10 - m_Width: 59 - m_Height: 73 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 153 - m_Metrics: - m_Width: 40 - m_Height: 39 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 48 - m_HorizontalAdvance: 50 - m_GlyphRect: - m_X: 838 - m_Y: 819 - m_Width: 40 - m_Height: 39 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 154 - m_Metrics: - m_Width: 63 - m_Height: 65 - m_HorizontalBearingX: 2 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 67 - m_GlyphRect: - m_X: 669 - m_Y: 10 - m_Width: 63 - m_Height: 65 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 155 - m_Metrics: - m_Width: 50 - m_Height: 75 - m_HorizontalBearingX: 6 - m_HorizontalBearingY: 74 - m_HorizontalAdvance: 62 - m_GlyphRect: - m_X: 88 - m_Y: 392 - m_Width: 50 - m_Height: 75 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 156 - m_Metrics: - m_Width: 50 - m_Height: 75 - m_HorizontalBearingX: 6 - m_HorizontalBearingY: 74 - m_HorizontalAdvance: 62 - m_GlyphRect: - m_X: 88 - m_Y: 486 - m_Width: 50 - m_Height: 75 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 157 - m_Metrics: - m_Width: 50 - m_Height: 76 - m_HorizontalBearingX: 6 - m_HorizontalBearingY: 75 - m_HorizontalAdvance: 62 - m_GlyphRect: - m_X: 88 - m_Y: 297 - m_Width: 50 - m_Height: 76 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 158 - m_Metrics: - m_Width: 50 - m_Height: 73 - m_HorizontalBearingX: 6 - m_HorizontalBearingY: 72 - m_HorizontalAdvance: 62 - m_GlyphRect: - m_X: 157 - m_Y: 301 - m_Width: 50 - m_Height: 73 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 159 - m_Metrics: - m_Width: 54 - m_Height: 74 - m_HorizontalBearingX: 1 - m_HorizontalBearingY: 74 - m_HorizontalAdvance: 56 - m_GlyphRect: - m_X: 88 - m_Y: 204 - m_Width: 54 - m_Height: 74 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 160 - m_Metrics: - m_Width: 46 - m_Height: 59 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 57 - m_GlyphRect: - m_X: 734 - m_Y: 491 - m_Width: 46 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 161 - m_Metrics: - m_Width: 44 - m_Height: 63 - m_HorizontalBearingX: 6 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 53 - m_GlyphRect: - m_X: 545 - m_Y: 564 - m_Width: 44 - m_Height: 63 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 162 - m_Metrics: - m_Width: 45 - m_Height: 64 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 63 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 324 - m_Y: 583 - m_Width: 45 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 163 - m_Metrics: - m_Width: 45 - m_Height: 64 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 63 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 333 - m_Y: 749 - m_Width: 45 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 164 - m_Metrics: - m_Width: 45 - m_Height: 63 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 478 - m_Y: 485 - m_Width: 45 - m_Height: 63 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 165 - m_Metrics: - m_Width: 45 - m_Height: 62 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 61 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 250 - m_Y: 952 - m_Width: 45 - m_Height: 62 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 166 - m_Metrics: - m_Width: 45 - m_Height: 60 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 733 - m_Y: 569 - m_Width: 45 - m_Height: 60 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 167 - m_Metrics: - m_Width: 45 - m_Height: 71 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 70 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 260 - m_Y: 580 - m_Width: 45 - m_Height: 71 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 168 - m_Metrics: - m_Width: 71 - m_Height: 47 - m_HorizontalBearingX: 2 - m_HorizontalBearingY: 46 - m_HorizontalAdvance: 76 - m_GlyphRect: - m_X: 661 - m_Y: 94 - m_Width: 71 - m_Height: 47 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 169 - m_Metrics: - m_Width: 38 - m_Height: 64 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 46 - m_HorizontalAdvance: 43 - m_GlyphRect: - m_X: 427 - m_Y: 583 - m_Width: 38 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 170 - m_Metrics: - m_Width: 42 - m_Height: 64 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 63 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 436 - m_Y: 747 - m_Width: 42 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 171 - m_Metrics: - m_Width: 42 - m_Height: 64 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 63 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 484 - m_Y: 567 - m_Width: 42 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 172 - m_Metrics: - m_Width: 42 - m_Height: 63 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 608 - m_Y: 558 - m_Width: 42 - m_Height: 63 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 173 - m_Metrics: - m_Width: 42 - m_Height: 60 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 851 - m_Y: 262 - m_Width: 42 - m_Height: 60 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 174 - m_Metrics: - m_Width: 19 - m_Height: 63 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 63 - m_HorizontalAdvance: 24 - m_GlyphRect: - m_X: 838 - m_Y: 737 - m_Width: 19 - m_Height: 63 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 175 - m_Metrics: - m_Width: 19 - m_Height: 63 - m_HorizontalBearingX: 6 - m_HorizontalBearingY: 63 - m_HorizontalAdvance: 24 - m_GlyphRect: - m_X: 418 - m_Y: 951 - m_Width: 19 - m_Height: 63 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 176 - m_Metrics: - m_Width: 29 - m_Height: 62 - m_HorizontalBearingX: -2 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 24 - m_GlyphRect: - m_X: 980 - m_Y: 104 - m_Width: 29 - m_Height: 62 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 177 - m_Metrics: - m_Width: 25 - m_Height: 59 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 24 - m_GlyphRect: - m_X: 794 - m_Y: 737 - m_Width: 25 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 178 - m_Metrics: - m_Width: 42 - m_Height: 64 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 63 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 487 - m_Y: 650 - m_Width: 42 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 179 - m_Metrics: - m_Width: 38 - m_Height: 61 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 61 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 915 - m_Y: 342 - m_Width: 38 - m_Height: 61 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 180 - m_Metrics: - m_Width: 42 - m_Height: 64 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 63 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 548 - m_Y: 646 - m_Width: 42 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 181 - m_Metrics: - m_Width: 42 - m_Height: 64 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 63 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 497 - m_Y: 733 - m_Width: 42 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 182 - m_Metrics: - m_Width: 42 - m_Height: 63 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 672 - m_Y: 714 - m_Width: 42 - m_Height: 63 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 183 - m_Metrics: - m_Width: 42 - m_Height: 62 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 61 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 314 - m_Y: 952 - m_Width: 42 - m_Height: 62 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 184 - m_Metrics: - m_Width: 42 - m_Height: 60 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 972 - m_Y: 185 - m_Width: 42 - m_Height: 60 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 185 - m_Metrics: - m_Width: 43 - m_Height: 39 - m_HorizontalBearingX: 2 - m_HorizontalBearingY: 48 - m_HorizontalAdvance: 47 - m_GlyphRect: - m_X: 965 - m_Y: 603 - m_Width: 43 - m_Height: 39 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 186 - m_Metrics: - m_Width: 50 - m_Height: 49 - m_HorizontalBearingX: 1 - m_HorizontalBearingY: 47 - m_HorizontalAdvance: 53 - m_GlyphRect: - m_X: 357 - m_Y: 435 - m_Width: 50 - m_Height: 49 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 187 - m_Metrics: - m_Width: 38 - m_Height: 64 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 63 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 558 - m_Y: 729 - m_Width: 38 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 188 - m_Metrics: - m_Width: 38 - m_Height: 64 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 63 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 615 - m_Y: 722 - m_Width: 38 - m_Height: 64 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 189 - m_Metrics: - m_Width: 38 - m_Height: 63 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 799 - m_Y: 485 - m_Width: 38 - m_Height: 63 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 190 - m_Metrics: - m_Width: 38 - m_Height: 60 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 956 - m_Y: 661 - m_Width: 38 - m_Height: 60 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 191 - m_Metrics: - m_Width: 41 - m_Height: 81 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 63 - m_HorizontalAdvance: 41 - m_GlyphRect: - m_X: 86 - m_Y: 673 - m_Width: 41 - m_Height: 81 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 192 - m_Metrics: - m_Width: 40 - m_Height: 80 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 86 - m_Y: 773 - m_Width: 40 - m_Height: 80 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 193 - m_Metrics: - m_Width: 41 - m_Height: 77 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 41 - m_GlyphRect: - m_X: 269 - m_Y: 670 - m_Width: 41 - m_Height: 77 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 1997 - m_Metrics: - m_Width: 0 - m_Height: 0 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 0 - m_HorizontalAdvance: 43 - m_GlyphRect: - m_X: 0 - m_Y: 0 - m_Width: 0 - m_Height: 0 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 1998 - m_Metrics: - m_Width: 0 - m_Height: 0 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 0 - m_HorizontalAdvance: 86 - m_GlyphRect: - m_X: 0 - m_Y: 0 - m_Width: 0 - m_Height: 0 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 1999 - m_Metrics: - m_Width: 0 - m_Height: 0 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 0 - m_HorizontalAdvance: 43 - m_GlyphRect: - m_X: 0 - m_Y: 0 - m_Width: 0 - m_Height: 0 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2000 - m_Metrics: - m_Width: 0 - m_Height: 0 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 0 - m_HorizontalAdvance: 86 - m_GlyphRect: - m_X: 0 - m_Y: 0 - m_Width: 0 - m_Height: 0 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2001 - m_Metrics: - m_Width: 0 - m_Height: 0 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 0 - m_HorizontalAdvance: 29 - m_GlyphRect: - m_X: 0 - m_Y: 0 - m_Width: 0 - m_Height: 0 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2002 - m_Metrics: - m_Width: 0 - m_Height: 0 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 0 - m_HorizontalAdvance: 22 - m_GlyphRect: - m_X: 0 - m_Y: 0 - m_Width: 0 - m_Height: 0 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2003 - m_Metrics: - m_Width: 0 - m_Height: 0 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 0 - m_HorizontalAdvance: 14 - m_GlyphRect: - m_X: 0 - m_Y: 0 - m_Width: 0 - m_Height: 0 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2004 - m_Metrics: - m_Width: 0 - m_Height: 0 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 0 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 0 - m_Y: 0 - m_Width: 0 - m_Height: 0 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2005 - m_Metrics: - m_Width: 0 - m_Height: 0 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 0 - m_HorizontalAdvance: 24 - m_GlyphRect: - m_X: 0 - m_Y: 0 - m_Width: 0 - m_Height: 0 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2006 - m_Metrics: - m_Width: 0 - m_Height: 0 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 0 - m_HorizontalAdvance: 17 - m_GlyphRect: - m_X: 0 - m_Y: 0 - m_Width: 0 - m_Height: 0 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2007 - m_Metrics: - m_Width: 0 - m_Height: 0 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 0 - m_HorizontalAdvance: 7 - m_GlyphRect: - m_X: 0 - m_Y: 0 - m_Width: 0 - m_Height: 0 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2008 - m_Metrics: - m_Width: 0 - m_Height: 0 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 0 - m_HorizontalAdvance: 0 - m_GlyphRect: - m_X: 0 - m_Y: 0 - m_Width: 0 - m_Height: 0 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2009 - m_Metrics: - m_Width: 4 - m_Height: 65 - m_HorizontalBearingX: -2 - m_HorizontalBearingY: 54 - m_HorizontalAdvance: 0 - m_GlyphRect: - m_X: 204 - m_Y: 871 - m_Width: 4 - m_Height: 65 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2010 - m_Metrics: - m_Width: 20 - m_Height: 70 - m_HorizontalBearingX: -10 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 0 - m_GlyphRect: - m_X: 267 - m_Y: 770 - m_Width: 20 - m_Height: 70 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2011 - m_Metrics: - m_Width: 21 - m_Height: 70 - m_HorizontalBearingX: -2 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 0 - m_GlyphRect: - m_X: 260 - m_Y: 393 - m_Width: 21 - m_Height: 70 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2012 - m_Metrics: - m_Width: 21 - m_Height: 70 - m_HorizontalBearingX: -19 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 0 - m_GlyphRect: - m_X: 282 - m_Y: 482 - m_Width: 21 - m_Height: 70 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2013 - m_Metrics: - m_Width: 48 - m_Height: 6 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 25 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 862 - m_Y: 936 - m_Width: 48 - m_Height: 6 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2014 - m_Metrics: - m_Width: 48 - m_Height: 6 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 25 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 929 - m_Y: 936 - m_Width: 48 - m_Height: 6 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2015 - m_Metrics: - m_Width: 86 - m_Height: 6 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 25 - m_HorizontalAdvance: 86 - m_GlyphRect: - m_X: 103 - m_Y: 88 - m_Width: 86 - m_Height: 6 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2016 - m_Metrics: - m_Width: 86 - m_Height: 6 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 25 - m_HorizontalAdvance: 86 - m_GlyphRect: - m_X: 277 - m_Y: 170 - m_Width: 86 - m_Height: 6 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2017 - m_Metrics: - m_Width: 22 - m_Height: 62 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 36 - m_GlyphRect: - m_X: 862 - m_Y: 181 - m_Width: 22 - m_Height: 62 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2018 - m_Metrics: - m_Width: 51 - m_Height: 15 - m_HorizontalBearingX: -2 - m_HorizontalBearingY: -4 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 288 - m_Y: 353 - m_Width: 51 - m_Height: 15 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2019 - m_Metrics: - m_Width: 9 - m_Height: 19 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 19 - m_GlyphRect: - m_X: 612 - m_Y: 995 - m_Width: 9 - m_Height: 19 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2020 - m_Metrics: - m_Width: 9 - m_Height: 19 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 19 - m_GlyphRect: - m_X: 640 - m_Y: 995 - m_Width: 9 - m_Height: 19 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2021 - m_Metrics: - m_Width: 9 - m_Height: 19 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 8 - m_HorizontalAdvance: 19 - m_GlyphRect: - m_X: 1002 - m_Y: 961 - m_Width: 9 - m_Height: 19 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2022 - m_Metrics: - m_Width: 9 - m_Height: 19 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 19 - m_GlyphRect: - m_X: 686 - m_Y: 949 - m_Width: 9 - m_Height: 19 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2023 - m_Metrics: - m_Width: 23 - m_Height: 19 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 29 - m_GlyphRect: - m_X: 967 - m_Y: 894 - m_Width: 23 - m_Height: 19 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2024 - m_Metrics: - m_Width: 23 - m_Height: 19 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 29 - m_GlyphRect: - m_X: 580 - m_Y: 916 - m_Width: 23 - m_Height: 19 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2025 - m_Metrics: - m_Width: 23 - m_Height: 19 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 8 - m_HorizontalAdvance: 29 - m_GlyphRect: - m_X: 580 - m_Y: 954 - m_Width: 23 - m_Height: 19 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2026 - m_Metrics: - m_Width: 22 - m_Height: 19 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 29 - m_GlyphRect: - m_X: 622 - m_Y: 920 - m_Width: 22 - m_Height: 19 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2027 - m_Metrics: - m_Width: 38 - m_Height: 68 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 303 - m_Y: 865 - m_Width: 38 - m_Height: 68 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2028 - m_Metrics: - m_Width: 38 - m_Height: 68 - m_HorizontalBearingX: 5 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 300 - m_Y: 387 - m_Width: 38 - m_Height: 68 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2029 - m_Metrics: - m_Width: 24 - m_Height: 23 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 40 - m_HorizontalAdvance: 30 - m_GlyphRect: - m_X: 819 - m_Y: 929 - m_Width: 24 - m_Height: 23 - m_Scale: 1 - m_AtlasIndex: 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: 661 - m_Y: 160 - m_Width: 64 - m_Height: 9 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2031 - m_Metrics: - m_Width: 21 - m_Height: 63 - m_HorizontalBearingX: -2 - m_HorizontalBearingY: 52 - m_HorizontalAdvance: 0 - m_GlyphRect: - m_X: 876 - m_Y: 737 - m_Width: 21 - m_Height: 63 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2032 - m_Metrics: - m_Width: 21 - m_Height: 63 - m_HorizontalBearingX: -19 - m_HorizontalBearingY: 52 - m_HorizontalAdvance: 0 - m_GlyphRect: - m_X: 916 - m_Y: 734 - m_Width: 21 - m_Height: 63 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2033 - m_Metrics: - m_Width: 20 - m_Height: 70 - m_HorizontalBearingX: -10 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 0 - m_GlyphRect: - m_X: 388 - m_Y: 583 - m_Width: 20 - m_Height: 70 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2034 - m_Metrics: - m_Width: 20 - m_Height: 70 - m_HorizontalBearingX: -10 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 0 - m_GlyphRect: - m_X: 397 - m_Y: 747 - m_Width: 20 - m_Height: 70 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2035 - m_Metrics: - m_Width: 20 - m_Height: 70 - m_HorizontalBearingX: -10 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 0 - m_GlyphRect: - m_X: 360 - m_Y: 862 - m_Width: 20 - m_Height: 70 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2036 - m_Metrics: - m_Width: 0 - m_Height: 0 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 0 - m_HorizontalAdvance: 17 - m_GlyphRect: - m_X: 0 - m_Y: 0 - m_Width: 0 - m_Height: 0 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2037 - m_Metrics: - m_Width: 82 - m_Height: 61 - m_HorizontalBearingX: 2 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 86 - m_GlyphRect: - m_X: 308 - m_Y: 10 - m_Width: 82 - m_Height: 61 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2038 - m_Metrics: - m_Width: 12 - m_Height: 22 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 16 - m_GlyphRect: - m_X: 427 - m_Y: 363 - m_Width: 12 - m_Height: 22 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2039 - m_Metrics: - m_Width: 26 - m_Height: 22 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 30 - m_GlyphRect: - m_X: 730 - m_Y: 907 - m_Width: 26 - m_Height: 22 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2040 - m_Metrics: - m_Width: 35 - m_Height: 22 - m_HorizontalBearingX: -4 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 30 - m_GlyphRect: - m_X: 730 - m_Y: 866 - m_Width: 35 - m_Height: 22 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2041 - m_Metrics: - m_Width: 23 - m_Height: 34 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 39 - m_HorizontalAdvance: 29 - m_GlyphRect: - m_X: 883 - m_Y: 883 - m_Width: 23 - m_Height: 34 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2042 - m_Metrics: - m_Width: 23 - m_Height: 34 - m_HorizontalBearingX: 3 - m_HorizontalBearingY: 39 - m_HorizontalAdvance: 29 - m_GlyphRect: - m_X: 925 - m_Y: 883 - m_Width: 23 - m_Height: 34 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2043 - m_Metrics: - m_Width: 28 - m_Height: 59 - m_HorizontalBearingX: 9 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 43 - m_GlyphRect: - m_X: 583 - m_Y: 812 - m_Width: 28 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2044 - m_Metrics: - m_Width: 35 - m_Height: 5 - m_HorizontalBearingX: -3 - m_HorizontalBearingY: 68 - m_HorizontalAdvance: 29 - m_GlyphRect: - m_X: 968 - m_Y: 870 - m_Width: 35 - m_Height: 5 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2045 - m_Metrics: - m_Width: 44 - m_Height: 59 - m_HorizontalBearingX: -18 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 14 - m_GlyphRect: - m_X: 799 - m_Y: 181 - m_Width: 44 - m_Height: 59 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2046 - m_Metrics: - m_Width: 10 - m_Height: 62 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 62 - m_HorizontalAdvance: 24 - m_GlyphRect: - m_X: 322 - m_Y: 474 - m_Width: 10 - m_Height: 62 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2047 - m_Metrics: - m_Width: 20 - m_Height: 70 - m_HorizontalBearingX: -10 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 0 - m_GlyphRect: - m_X: 399 - m_Y: 836 - m_Width: 20 - m_Height: 70 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2048 - m_Metrics: - m_Width: 20 - m_Height: 70 - m_HorizontalBearingX: -10 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 0 - m_GlyphRect: - m_X: 794 - m_Y: 648 - m_Width: 20 - m_Height: 70 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2049 - m_Metrics: - m_Width: 22 - m_Height: 70 - m_HorizontalBearingX: -11 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 0 - m_GlyphRect: - m_X: 833 - m_Y: 648 - m_Width: 22 - m_Height: 70 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2050 - m_Metrics: - m_Width: 22 - m_Height: 70 - m_HorizontalBearingX: -11 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 0 - m_GlyphRect: - m_X: 874 - m_Y: 648 - m_Width: 22 - m_Height: 70 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2051 - m_Metrics: - m_Width: 22 - m_Height: 70 - m_HorizontalBearingX: -11 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 0 - m_GlyphRect: - m_X: 915 - m_Y: 645 - m_Width: 22 - m_Height: 70 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2052 - m_Metrics: - m_Width: 20 - m_Height: 70 - m_HorizontalBearingX: -10 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 0 - m_GlyphRect: - m_X: 456 - m_Y: 908 - m_Width: 20 - m_Height: 70 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2075 - m_Metrics: - m_Width: 47 - m_Height: 61 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 60 - m_HorizontalAdvance: 48 - m_GlyphRect: - m_X: 351 - m_Y: 503 - m_Width: 47 - m_Height: 61 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2090 - m_Metrics: - m_Width: 70 - m_Height: 33 - m_HorizontalBearingX: 7 - m_HorizontalBearingY: 59 - m_HorizontalAdvance: 86 - m_GlyphRect: - m_X: 382 - m_Y: 170 - m_Width: 70 - m_Height: 33 - m_Scale: 1 - m_AtlasIndex: 0 - - m_Index: 2179 - m_Metrics: - m_Width: 52 - m_Height: 51 - m_HorizontalBearingX: 0 - m_HorizontalBearingY: 51 - m_HorizontalAdvance: 52 - m_GlyphRect: - m_X: 358 - m_Y: 287 - m_Width: 52 - m_Height: 51 - m_Scale: 1 - m_AtlasIndex: 0 - m_CharacterTable: - - m_ElementType: 1 - m_Unicode: 32 - m_GlyphIndex: 3 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 33 - m_GlyphIndex: 4 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 34 - m_GlyphIndex: 5 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 35 - m_GlyphIndex: 6 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 36 - m_GlyphIndex: 7 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 37 - m_GlyphIndex: 8 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 38 - m_GlyphIndex: 9 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 39 - m_GlyphIndex: 10 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 40 - m_GlyphIndex: 11 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 41 - m_GlyphIndex: 12 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 42 - m_GlyphIndex: 13 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 43 - m_GlyphIndex: 14 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 44 - m_GlyphIndex: 15 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 45 - m_GlyphIndex: 16 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 46 - m_GlyphIndex: 17 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 47 - m_GlyphIndex: 18 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 48 - m_GlyphIndex: 19 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 49 - m_GlyphIndex: 20 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 50 - m_GlyphIndex: 21 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 51 - m_GlyphIndex: 22 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 52 - m_GlyphIndex: 23 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 53 - m_GlyphIndex: 24 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 54 - m_GlyphIndex: 25 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 55 - m_GlyphIndex: 26 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 56 - m_GlyphIndex: 27 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 57 - m_GlyphIndex: 28 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 58 - m_GlyphIndex: 29 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 59 - m_GlyphIndex: 30 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 60 - m_GlyphIndex: 31 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 61 - m_GlyphIndex: 32 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 62 - m_GlyphIndex: 33 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 63 - m_GlyphIndex: 34 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 64 - m_GlyphIndex: 35 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 65 - m_GlyphIndex: 36 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 66 - m_GlyphIndex: 37 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 67 - m_GlyphIndex: 38 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 68 - m_GlyphIndex: 39 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 69 - m_GlyphIndex: 40 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 70 - m_GlyphIndex: 41 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 71 - m_GlyphIndex: 42 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 72 - m_GlyphIndex: 43 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 73 - m_GlyphIndex: 44 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 74 - m_GlyphIndex: 45 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 75 - m_GlyphIndex: 46 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 76 - m_GlyphIndex: 47 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 77 - m_GlyphIndex: 48 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 78 - m_GlyphIndex: 49 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 79 - m_GlyphIndex: 50 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 80 - m_GlyphIndex: 51 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 81 - m_GlyphIndex: 52 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 82 - m_GlyphIndex: 53 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 83 - m_GlyphIndex: 54 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 84 - m_GlyphIndex: 55 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 85 - m_GlyphIndex: 56 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 86 - m_GlyphIndex: 57 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 87 - m_GlyphIndex: 58 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 88 - m_GlyphIndex: 59 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 89 - m_GlyphIndex: 60 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 90 - m_GlyphIndex: 61 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 91 - m_GlyphIndex: 62 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 92 - m_GlyphIndex: 63 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 93 - m_GlyphIndex: 64 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 94 - m_GlyphIndex: 65 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 95 - m_GlyphIndex: 66 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 96 - m_GlyphIndex: 67 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 97 - m_GlyphIndex: 68 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 98 - m_GlyphIndex: 69 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 99 - m_GlyphIndex: 70 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 100 - m_GlyphIndex: 71 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 101 - m_GlyphIndex: 72 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 102 - m_GlyphIndex: 73 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 103 - m_GlyphIndex: 74 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 104 - m_GlyphIndex: 75 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 105 - m_GlyphIndex: 76 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 106 - m_GlyphIndex: 77 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 107 - m_GlyphIndex: 78 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 108 - m_GlyphIndex: 79 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 109 - m_GlyphIndex: 80 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 110 - m_GlyphIndex: 81 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 111 - m_GlyphIndex: 82 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 112 - m_GlyphIndex: 83 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 113 - m_GlyphIndex: 84 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 114 - m_GlyphIndex: 85 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 115 - m_GlyphIndex: 86 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 116 - m_GlyphIndex: 87 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 117 - m_GlyphIndex: 88 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 118 - m_GlyphIndex: 89 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 119 - m_GlyphIndex: 90 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 120 - m_GlyphIndex: 91 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 121 - m_GlyphIndex: 92 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 122 - m_GlyphIndex: 93 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 123 - m_GlyphIndex: 94 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 124 - m_GlyphIndex: 95 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 125 - m_GlyphIndex: 96 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 126 - m_GlyphIndex: 97 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 160 - m_GlyphIndex: 98 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 161 - m_GlyphIndex: 99 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 162 - m_GlyphIndex: 100 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 163 - m_GlyphIndex: 101 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 164 - m_GlyphIndex: 102 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 165 - m_GlyphIndex: 103 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 166 - m_GlyphIndex: 104 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 167 - m_GlyphIndex: 105 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 168 - m_GlyphIndex: 106 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 169 - m_GlyphIndex: 107 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 170 - m_GlyphIndex: 108 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 171 - m_GlyphIndex: 109 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 172 - m_GlyphIndex: 110 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 173 - m_GlyphIndex: 111 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 174 - m_GlyphIndex: 112 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 175 - m_GlyphIndex: 113 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 176 - m_GlyphIndex: 114 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 177 - m_GlyphIndex: 115 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 178 - m_GlyphIndex: 116 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 179 - m_GlyphIndex: 117 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 180 - m_GlyphIndex: 118 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 181 - m_GlyphIndex: 119 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 182 - m_GlyphIndex: 120 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 183 - m_GlyphIndex: 121 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 184 - m_GlyphIndex: 122 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 185 - m_GlyphIndex: 123 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 186 - m_GlyphIndex: 124 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 187 - m_GlyphIndex: 125 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 188 - m_GlyphIndex: 126 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 189 - m_GlyphIndex: 127 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 190 - m_GlyphIndex: 128 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 191 - m_GlyphIndex: 129 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 192 - m_GlyphIndex: 130 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 193 - m_GlyphIndex: 131 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 194 - m_GlyphIndex: 132 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 195 - m_GlyphIndex: 133 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 196 - m_GlyphIndex: 134 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 197 - m_GlyphIndex: 135 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 198 - m_GlyphIndex: 136 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 199 - m_GlyphIndex: 137 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 200 - m_GlyphIndex: 138 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 201 - m_GlyphIndex: 139 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 202 - m_GlyphIndex: 140 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 203 - m_GlyphIndex: 141 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 204 - m_GlyphIndex: 142 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 205 - m_GlyphIndex: 143 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 206 - m_GlyphIndex: 144 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 207 - m_GlyphIndex: 145 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 208 - m_GlyphIndex: 146 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 209 - m_GlyphIndex: 147 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 210 - m_GlyphIndex: 148 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 211 - m_GlyphIndex: 149 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 212 - m_GlyphIndex: 150 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 213 - m_GlyphIndex: 151 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 214 - m_GlyphIndex: 152 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 215 - m_GlyphIndex: 153 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 216 - m_GlyphIndex: 154 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 217 - m_GlyphIndex: 155 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 218 - m_GlyphIndex: 156 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 219 - m_GlyphIndex: 157 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 220 - m_GlyphIndex: 158 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 221 - m_GlyphIndex: 159 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 222 - m_GlyphIndex: 160 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 223 - m_GlyphIndex: 161 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 224 - m_GlyphIndex: 162 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 225 - m_GlyphIndex: 163 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 226 - m_GlyphIndex: 164 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 227 - m_GlyphIndex: 165 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 228 - m_GlyphIndex: 166 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 229 - m_GlyphIndex: 167 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 230 - m_GlyphIndex: 168 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 231 - m_GlyphIndex: 169 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 232 - m_GlyphIndex: 170 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 233 - m_GlyphIndex: 171 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 234 - m_GlyphIndex: 172 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 235 - m_GlyphIndex: 173 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 236 - m_GlyphIndex: 174 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 237 - m_GlyphIndex: 175 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 238 - m_GlyphIndex: 176 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 239 - m_GlyphIndex: 177 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 240 - m_GlyphIndex: 178 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 241 - m_GlyphIndex: 179 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 242 - m_GlyphIndex: 180 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 243 - m_GlyphIndex: 181 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 244 - m_GlyphIndex: 182 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 245 - m_GlyphIndex: 183 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 246 - m_GlyphIndex: 184 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 247 - m_GlyphIndex: 185 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 248 - m_GlyphIndex: 186 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 249 - m_GlyphIndex: 187 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 250 - m_GlyphIndex: 188 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 251 - m_GlyphIndex: 189 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 252 - m_GlyphIndex: 190 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 253 - m_GlyphIndex: 191 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 254 - m_GlyphIndex: 192 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 255 - m_GlyphIndex: 193 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8192 - m_GlyphIndex: 1997 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8193 - m_GlyphIndex: 1998 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8194 - m_GlyphIndex: 1999 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8195 - m_GlyphIndex: 2000 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8196 - m_GlyphIndex: 2001 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8197 - m_GlyphIndex: 2002 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8198 - m_GlyphIndex: 2003 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8199 - m_GlyphIndex: 2004 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8200 - m_GlyphIndex: 2005 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8201 - m_GlyphIndex: 2006 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8202 - m_GlyphIndex: 2007 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8203 - m_GlyphIndex: 2008 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8204 - m_GlyphIndex: 2009 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8205 - m_GlyphIndex: 2010 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8206 - m_GlyphIndex: 2011 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8207 - m_GlyphIndex: 2012 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8210 - m_GlyphIndex: 2013 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8211 - m_GlyphIndex: 2014 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8212 - m_GlyphIndex: 2015 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8213 - m_GlyphIndex: 2016 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8214 - m_GlyphIndex: 2017 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8215 - m_GlyphIndex: 2018 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8216 - m_GlyphIndex: 2019 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8217 - m_GlyphIndex: 2020 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8218 - m_GlyphIndex: 2021 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8219 - m_GlyphIndex: 2022 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8220 - m_GlyphIndex: 2023 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8221 - m_GlyphIndex: 2024 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8222 - m_GlyphIndex: 2025 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8223 - m_GlyphIndex: 2026 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8224 - m_GlyphIndex: 2027 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8225 - m_GlyphIndex: 2028 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8226 - m_GlyphIndex: 2029 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8230 - m_GlyphIndex: 2030 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8234 - m_GlyphIndex: 2031 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8235 - m_GlyphIndex: 2032 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8236 - m_GlyphIndex: 2033 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8237 - m_GlyphIndex: 2034 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8238 - m_GlyphIndex: 2035 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8239 - m_GlyphIndex: 2036 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8240 - m_GlyphIndex: 2037 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8242 - m_GlyphIndex: 2038 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8243 - m_GlyphIndex: 2039 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8244 - m_GlyphIndex: 2040 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8249 - m_GlyphIndex: 2041 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8250 - m_GlyphIndex: 2042 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8252 - m_GlyphIndex: 2043 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8254 - m_GlyphIndex: 2044 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8260 - m_GlyphIndex: 2045 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8286 - m_GlyphIndex: 2046 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8298 - m_GlyphIndex: 2047 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8299 - m_GlyphIndex: 2048 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8300 - m_GlyphIndex: 2049 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8301 - m_GlyphIndex: 2050 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8302 - m_GlyphIndex: 2051 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8303 - m_GlyphIndex: 2052 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8364 - m_GlyphIndex: 2075 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 8482 - m_GlyphIndex: 2090 - m_Scale: 1 - - m_ElementType: 1 - m_Unicode: 9633 - m_GlyphIndex: 2179 - m_Scale: 1 - m_AtlasTextures: - - {fileID: 28684132378477856} - m_AtlasTextureIndex: 0 - m_UsedGlyphRects: - - m_X: 0 - m_Y: 0 - m_Width: 93 - m_Height: 93 - - m_X: 93 - m_Y: 0 - m_Width: 104 - m_Height: 78 - - m_X: 197 - m_Y: 0 - m_Width: 101 - m_Height: 78 - - m_X: 298 - m_Y: 0 - m_Width: 101 - m_Height: 80 - - m_X: 0 - m_Y: 93 - m_Width: 78 - m_Height: 95 - - m_X: 0 - m_Y: 188 - m_Width: 78 - m_Height: 95 - - m_X: 0 - m_Y: 283 - m_Width: 78 - m_Height: 95 - - m_X: 0 - m_Y: 378 - m_Width: 78 - m_Height: 94 - - m_X: 0 - m_Y: 472 - m_Width: 78 - m_Height: 94 - - m_X: 0 - m_Y: 566 - m_Width: 74 - m_Height: 97 - - m_X: 399 - m_Y: 0 - m_Width: 89 - m_Height: 80 - - m_X: 0 - m_Y: 663 - m_Width: 76 - m_Height: 94 - - m_X: 0 - m_Y: 757 - m_Width: 76 - m_Height: 94 - - m_X: 0 - m_Y: 851 - m_Width: 76 - m_Height: 94 - - m_X: 0 - m_Y: 945 - m_Width: 87 - m_Height: 78 - - m_X: 488 - m_Y: 0 - m_Width: 86 - m_Height: 78 - - m_X: 574 - m_Y: 0 - m_Width: 85 - m_Height: 79 - - m_X: 659 - m_Y: 0 - m_Width: 82 - m_Height: 84 - - m_X: 741 - m_Y: 0 - m_Width: 78 - m_Height: 92 - - m_X: 819 - m_Y: 0 - m_Width: 76 - m_Height: 93 - - m_X: 895 - m_Y: 0 - m_Width: 76 - m_Height: 93 - - m_X: 971 - m_Y: 0 - m_Width: 47 - m_Height: 94 - - m_X: 93 - m_Y: 78 - m_Width: 105 - m_Height: 25 - - m_X: 78 - m_Y: 103 - m_Width: 76 - m_Height: 91 - - m_X: 78 - m_Y: 194 - m_Width: 73 - m_Height: 93 - - m_X: 78 - m_Y: 287 - m_Width: 69 - m_Height: 95 - - m_X: 78 - m_Y: 382 - m_Width: 69 - m_Height: 94 - - m_X: 78 - m_Y: 476 - m_Width: 69 - m_Height: 94 - - m_X: 74 - m_Y: 570 - m_Width: 66 - m_Height: 93 - - m_X: 76 - m_Y: 663 - m_Width: 60 - m_Height: 100 - - m_X: 76 - m_Y: 763 - m_Width: 59 - m_Height: 99 - - m_X: 76 - m_Y: 862 - m_Width: 59 - m_Height: 83 - - m_X: 87 - m_Y: 945 - m_Width: 78 - m_Height: 78 - - m_X: 154 - m_Y: 103 - m_Width: 46 - m_Height: 99 - - m_X: 200 - m_Y: 78 - m_Width: 67 - m_Height: 94 - - m_X: 151 - m_Y: 202 - m_Width: 66 - m_Height: 89 - - m_X: 147 - m_Y: 291 - m_Width: 69 - m_Height: 92 - - m_X: 147 - m_Y: 383 - m_Width: 66 - m_Height: 94 - - m_X: 147 - m_Y: 477 - m_Width: 66 - m_Height: 93 - - m_X: 140 - m_Y: 570 - m_Width: 66 - m_Height: 91 - - m_X: 267 - m_Y: 80 - m_Width: 80 - m_Height: 80 - - m_X: 347 - m_Y: 80 - m_Width: 80 - m_Height: 80 - - m_X: 427 - m_Y: 80 - m_Width: 72 - m_Height: 80 - - m_X: 499 - m_Y: 78 - m_Width: 74 - m_Height: 80 - - m_X: 573 - m_Y: 79 - m_Width: 78 - m_Height: 80 - - m_X: 651 - m_Y: 84 - m_Width: 90 - m_Height: 66 - - m_X: 741 - m_Y: 92 - m_Width: 77 - m_Height: 78 - - m_X: 818 - m_Y: 93 - m_Width: 76 - m_Height: 78 - - m_X: 894 - m_Y: 93 - m_Width: 76 - m_Height: 80 - - m_X: 970 - m_Y: 94 - m_Width: 48 - m_Height: 81 - - m_X: 267 - m_Y: 160 - m_Width: 105 - m_Height: 25 - - m_X: 217 - m_Y: 172 - m_Width: 46 - m_Height: 99 - - m_X: 263 - m_Y: 185 - m_Width: 76 - m_Height: 78 - - m_X: 372 - m_Y: 160 - m_Width: 89 - m_Height: 52 - - m_X: 339 - m_Y: 185 - m_Width: 29 - m_Height: 78 - - m_X: 368 - m_Y: 212 - m_Width: 83 - m_Height: 65 - - m_X: 136 - m_Y: 663 - m_Width: 43 - m_Height: 99 - - m_X: 179 - m_Y: 661 - m_Width: 43 - m_Height: 99 - - m_X: 206 - m_Y: 570 - m_Width: 44 - m_Height: 91 - - m_X: 222 - m_Y: 661 - m_Width: 37 - m_Height: 99 - - m_X: 213 - m_Y: 383 - m_Width: 37 - m_Height: 99 - - m_X: 213 - m_Y: 482 - m_Width: 59 - m_Height: 88 - - m_X: 250 - m_Y: 570 - m_Width: 64 - m_Height: 90 - - m_X: 259 - m_Y: 660 - m_Width: 60 - m_Height: 96 - - m_X: 135 - m_Y: 763 - m_Width: 36 - m_Height: 99 - - m_X: 135 - m_Y: 862 - m_Width: 59 - m_Height: 83 - - m_X: 165 - m_Y: 945 - m_Width: 75 - m_Height: 78 - - m_X: 171 - m_Y: 762 - m_Width: 27 - m_Height: 99 - - m_X: 198 - m_Y: 760 - m_Width: 59 - m_Height: 89 - - m_X: 194 - m_Y: 861 - m_Width: 23 - m_Height: 84 - - m_X: 217 - m_Y: 849 - m_Width: 38 - m_Height: 93 - - m_X: 240 - m_Y: 942 - m_Width: 64 - m_Height: 81 - - m_X: 255 - m_Y: 849 - m_Width: 38 - m_Height: 93 - - m_X: 257 - m_Y: 760 - m_Width: 39 - m_Height: 89 - - m_X: 296 - m_Y: 756 - m_Width: 27 - m_Height: 99 - - m_X: 293 - m_Y: 855 - m_Width: 57 - m_Height: 87 - - m_X: 304 - m_Y: 942 - m_Width: 61 - m_Height: 81 - - m_X: 651 - m_Y: 150 - m_Width: 83 - m_Height: 28 - - m_X: 461 - m_Y: 160 - m_Width: 67 - m_Height: 78 - - m_X: 528 - m_Y: 158 - m_Width: 44 - m_Height: 81 - - m_X: 572 - m_Y: 159 - m_Width: 73 - m_Height: 78 - - m_X: 645 - m_Y: 178 - m_Width: 82 - m_Height: 64 - - m_X: 451 - m_Y: 238 - m_Width: 71 - m_Height: 78 - - m_X: 522 - m_Y: 239 - m_Width: 61 - m_Height: 80 - - m_X: 583 - m_Y: 237 - m_Width: 62 - m_Height: 82 - - m_X: 645 - m_Y: 242 - m_Width: 70 - m_Height: 78 - - m_X: 216 - m_Y: 319 - m_Width: 62 - m_Height: 64 - - m_X: 217 - m_Y: 271 - m_Width: 61 - m_Height: 48 - - m_X: 278 - m_Y: 263 - m_Width: 70 - m_Height: 80 - - m_X: 250 - m_Y: 383 - m_Width: 40 - m_Height: 89 - - m_X: 348 - m_Y: 277 - m_Width: 71 - m_Height: 70 - - m_X: 278 - m_Y: 343 - m_Width: 70 - m_Height: 34 - - m_X: 290 - m_Y: 377 - m_Width: 57 - m_Height: 87 - - m_X: 419 - m_Y: 277 - m_Width: 29 - m_Height: 76 - - m_X: 448 - m_Y: 316 - m_Width: 69 - m_Height: 78 - - m_X: 517 - m_Y: 319 - m_Width: 69 - m_Height: 78 - - m_X: 586 - m_Y: 319 - m_Width: 59 - m_Height: 79 - - m_X: 645 - m_Y: 320 - m_Width: 69 - m_Height: 79 - - m_X: 348 - m_Y: 347 - m_Width: 69 - m_Height: 78 - - m_X: 417 - m_Y: 353 - m_Width: 31 - m_Height: 41 - - m_X: 347 - m_Y: 425 - m_Width: 69 - m_Height: 68 - - m_X: 417 - m_Y: 394 - m_Width: 68 - m_Height: 78 - - m_X: 485 - m_Y: 397 - m_Width: 67 - m_Height: 78 - - m_X: 552 - m_Y: 398 - m_Width: 67 - m_Height: 78 - - m_X: 619 - m_Y: 399 - m_Width: 66 - m_Height: 78 - - m_X: 685 - m_Y: 399 - m_Width: 43 - m_Height: 82 - - m_X: 272 - m_Y: 472 - m_Width: 40 - m_Height: 89 - - m_X: 312 - m_Y: 464 - m_Width: 29 - m_Height: 81 - - m_X: 341 - m_Y: 493 - m_Width: 66 - m_Height: 80 - - m_X: 314 - m_Y: 573 - m_Width: 64 - m_Height: 83 - - m_X: 319 - m_Y: 656 - m_Width: 59 - m_Height: 83 - - m_X: 323 - m_Y: 739 - m_Width: 64 - m_Height: 83 - - m_X: 378 - m_Y: 573 - m_Width: 39 - m_Height: 89 - - m_X: 378 - m_Y: 662 - m_Width: 42 - m_Height: 75 - - m_X: 387 - m_Y: 737 - m_Width: 39 - m_Height: 89 - - m_X: 407 - m_Y: 493 - m_Width: 61 - m_Height: 80 - - m_X: 417 - m_Y: 573 - m_Width: 57 - m_Height: 83 - - m_X: 420 - m_Y: 656 - m_Width: 57 - m_Height: 81 - - m_X: 426 - m_Y: 737 - m_Width: 61 - m_Height: 83 - - m_X: 468 - m_Y: 475 - m_Width: 64 - m_Height: 82 - - m_X: 474 - m_Y: 557 - m_Width: 61 - m_Height: 83 - - m_X: 477 - m_Y: 640 - m_Width: 61 - m_Height: 83 - - m_X: 532 - m_Y: 476 - m_Width: 65 - m_Height: 78 - - m_X: 535 - m_Y: 554 - m_Width: 63 - m_Height: 82 - - m_X: 538 - m_Y: 636 - m_Width: 61 - m_Height: 83 - - m_X: 487 - m_Y: 723 - m_Width: 61 - m_Height: 83 - - m_X: 548 - m_Y: 719 - m_Width: 57 - m_Height: 83 - - m_X: 597 - m_Y: 477 - m_Width: 62 - m_Height: 71 - - m_X: 598 - m_Y: 548 - m_Width: 61 - m_Height: 82 - - m_X: 599 - m_Y: 630 - m_Width: 60 - m_Height: 82 - - m_X: 605 - m_Y: 712 - m_Width: 57 - m_Height: 83 - - m_X: 659 - m_Y: 481 - m_Width: 65 - m_Height: 78 - - m_X: 659 - m_Y: 559 - m_Width: 64 - m_Height: 79 - - m_X: 659 - m_Y: 638 - m_Width: 64 - m_Height: 66 - - m_X: 662 - m_Y: 704 - m_Width: 61 - m_Height: 82 - - m_X: 714 - m_Y: 320 - m_Width: 61 - m_Height: 79 - - m_X: 715 - m_Y: 242 - m_Width: 64 - m_Height: 78 - - m_X: 728 - m_Y: 399 - m_Width: 59 - m_Height: 82 - - m_X: 724 - m_Y: 481 - m_Width: 65 - m_Height: 78 - - m_X: 723 - m_Y: 559 - m_Width: 64 - m_Height: 79 - - m_X: 723 - m_Y: 638 - m_Width: 61 - m_Height: 80 - - m_X: 723 - m_Y: 718 - m_Width: 61 - m_Height: 79 - - m_X: 727 - m_Y: 178 - m_Width: 62 - m_Height: 64 - - m_X: 789 - m_Y: 171 - m_Width: 63 - m_Height: 78 - - m_X: 779 - m_Y: 249 - m_Width: 62 - m_Height: 78 - - m_X: 775 - m_Y: 327 - m_Width: 61 - m_Height: 66 - - m_X: 787 - m_Y: 393 - m_Width: 59 - m_Height: 82 - - m_X: 789 - m_Y: 475 - m_Width: 57 - m_Height: 82 - - m_X: 852 - m_Y: 171 - m_Width: 41 - m_Height: 81 - - m_X: 893 - m_Y: 173 - m_Width: 62 - m_Height: 79 - - m_X: 841 - m_Y: 252 - m_Width: 61 - m_Height: 79 - - m_X: 902 - m_Y: 252 - m_Width: 60 - m_Height: 80 - - m_X: 962 - m_Y: 175 - m_Width: 61 - m_Height: 79 - - m_X: 962 - m_Y: 254 - m_Width: 61 - m_Height: 66 - - m_X: 962 - m_Y: 320 - m_Width: 61 - m_Height: 62 - - m_X: 836 - m_Y: 331 - m_Width: 61 - m_Height: 62 - - m_X: 846 - m_Y: 393 - m_Width: 59 - m_Height: 81 - - m_X: 846 - m_Y: 474 - m_Width: 59 - m_Height: 80 - - m_X: 905 - m_Y: 332 - m_Width: 57 - m_Height: 80 - - m_X: 962 - m_Y: 382 - m_Width: 61 - m_Height: 62 - - m_X: 905 - m_Y: 412 - m_Width: 57 - m_Height: 79 - - m_X: 962 - m_Y: 444 - m_Width: 61 - m_Height: 53 - - m_X: 905 - m_Y: 491 - m_Width: 57 - m_Height: 78 - - m_X: 962 - m_Y: 497 - m_Width: 61 - m_Height: 53 - - m_X: 962 - m_Y: 550 - m_Width: 61 - m_Height: 43 - - m_X: 323 - m_Y: 822 - m_Width: 63 - m_Height: 30 - - m_X: 350 - m_Y: 852 - m_Width: 39 - m_Height: 89 - - m_X: 365 - m_Y: 941 - m_Width: 43 - m_Height: 82 - - m_X: 389 - m_Y: 826 - m_Width: 39 - m_Height: 89 - - m_X: 428 - m_Y: 820 - m_Width: 59 - m_Height: 78 - - m_X: 487 - m_Y: 806 - m_Width: 58 - m_Height: 78 - - m_X: 784 - m_Y: 638 - m_Width: 39 - m_Height: 89 - - m_X: 787 - m_Y: 559 - m_Width: 55 - m_Height: 79 - - m_X: 784 - m_Y: 727 - m_Width: 44 - m_Height: 78 - - m_X: 823 - m_Y: 638 - m_Width: 41 - m_Height: 89 - - m_X: 828 - m_Y: 727 - m_Width: 38 - m_Height: 82 - - m_X: 842 - m_Y: 557 - m_Width: 28 - m_Height: 81 - - m_X: 870 - m_Y: 554 - m_Width: 28 - m_Height: 81 - - m_X: 898 - m_Y: 569 - m_Width: 57 - m_Height: 66 - - m_X: 955 - m_Y: 593 - m_Width: 62 - m_Height: 58 - - m_X: 864 - m_Y: 638 - m_Width: 41 - m_Height: 89 - - m_X: 905 - m_Y: 635 - m_Width: 41 - m_Height: 89 - - m_X: 946 - m_Y: 651 - m_Width: 57 - m_Height: 79 - - m_X: 866 - m_Y: 727 - m_Width: 40 - m_Height: 82 - - m_X: 906 - m_Y: 724 - m_Width: 40 - m_Height: 82 - - m_X: 946 - m_Y: 730 - m_Width: 57 - m_Height: 66 - - m_X: 389 - m_Y: 915 - m_Width: 42 - m_Height: 26 - - m_X: 408 - m_Y: 941 - m_Width: 38 - m_Height: 82 - - m_X: 446 - m_Y: 898 - m_Width: 39 - m_Height: 89 - - m_X: 545 - m_Y: 806 - m_Width: 28 - m_Height: 78 - - m_X: 573 - m_Y: 802 - m_Width: 47 - m_Height: 78 - - m_X: 620 - m_Y: 795 - m_Width: 57 - m_Height: 65 - - m_X: 677 - m_Y: 786 - m_Width: 46 - m_Height: 56 - - m_X: 723 - m_Y: 797 - m_Width: 59 - m_Height: 59 - - m_X: 782 - m_Y: 805 - m_Width: 46 - m_Height: 55 - - m_X: 828 - m_Y: 809 - m_Width: 59 - m_Height: 58 - - m_X: 487 - m_Y: 884 - m_Width: 70 - m_Height: 25 - - m_X: 485 - m_Y: 909 - m_Width: 57 - m_Height: 65 - - m_X: 485 - m_Y: 974 - m_Width: 50 - m_Height: 49 - - m_X: 542 - m_Y: 909 - m_Width: 28 - m_Height: 78 - - m_X: 887 - m_Y: 809 - m_Width: 29 - m_Height: 64 - - m_X: 916 - m_Y: 806 - m_Width: 42 - m_Height: 65 - - m_X: 958 - m_Y: 796 - m_Width: 54 - m_Height: 64 - - m_X: 620 - m_Y: 860 - m_Width: 57 - m_Height: 50 - - m_X: 677 - m_Y: 842 - m_Width: 43 - m_Height: 54 - - m_X: 720 - m_Y: 856 - m_Width: 54 - m_Height: 41 - - m_X: 774 - m_Y: 860 - m_Width: 51 - m_Height: 52 - - m_X: 825 - m_Y: 867 - m_Width: 48 - m_Height: 52 - - m_X: 873 - m_Y: 873 - m_Width: 42 - m_Height: 53 - - m_X: 446 - m_Y: 987 - m_Width: 38 - m_Height: 32 - - m_X: 958 - m_Y: 860 - m_Width: 54 - m_Height: 24 - - m_X: 535 - m_Y: 987 - m_Width: 38 - m_Height: 32 - - m_X: 677 - m_Y: 896 - m_Width: 43 - m_Height: 43 - - m_X: 720 - m_Y: 897 - m_Width: 45 - m_Height: 41 - - m_X: 765 - m_Y: 912 - m_Width: 44 - m_Height: 38 - - m_X: 809 - m_Y: 919 - m_Width: 43 - m_Height: 42 - - m_X: 852 - m_Y: 926 - m_Width: 67 - m_Height: 25 - - m_X: 852 - m_Y: 951 - m_Width: 69 - m_Height: 23 - - m_X: 915 - m_Y: 873 - m_Width: 42 - m_Height: 53 - - m_X: 957 - m_Y: 884 - m_Width: 42 - m_Height: 38 - - m_X: 919 - m_Y: 926 - m_Width: 67 - m_Height: 25 - - m_X: 921 - m_Y: 951 - m_Width: 44 - m_Height: 27 - - m_X: 965 - m_Y: 951 - m_Width: 27 - m_Height: 38 - - m_X: 573 - m_Y: 880 - m_Width: 42 - m_Height: 26 - - m_X: 570 - m_Y: 906 - m_Width: 42 - m_Height: 38 - - m_X: 570 - m_Y: 944 - m_Width: 42 - m_Height: 38 - - m_X: 612 - m_Y: 910 - m_Width: 41 - m_Height: 38 - - m_X: 612 - m_Y: 948 - m_Width: 35 - m_Height: 37 - - m_X: 573 - m_Y: 982 - m_Width: 29 - m_Height: 39 - - m_X: 602 - m_Y: 985 - m_Width: 28 - m_Height: 38 - - m_X: 630 - m_Y: 985 - m_Width: 28 - m_Height: 38 - - m_X: 986 - m_Y: 922 - m_Width: 29 - m_Height: 29 - - m_X: 992 - m_Y: 951 - m_Width: 28 - m_Height: 38 - - m_X: 647 - m_Y: 948 - m_Width: 29 - m_Height: 28 - - m_X: 676 - m_Y: 939 - m_Width: 28 - m_Height: 38 - m_FreeGlyphRects: - - m_X: 78 - m_Y: 93 - m_Width: 15 - m_Height: 10 - - m_X: 74 - m_Y: 566 - m_Width: 4 - m_Height: 4 - - m_X: 198 - m_Y: 78 - m_Width: 2 - m_Height: 25 - - m_X: 151 - m_Y: 194 - m_Width: 3 - m_Height: 8 - - m_X: 147 - m_Y: 287 - m_Width: 4 - m_Height: 4 - - m_X: 267 - m_Y: 78 - m_Width: 31 - m_Height: 2 - - m_X: 488 - m_Y: 78 - m_Width: 11 - m_Height: 2 - - m_X: 573 - m_Y: 78 - m_Width: 1 - m_Height: 1 - - m_X: 651 - m_Y: 79 - m_Width: 8 - m_Height: 5 - - m_X: 818 - m_Y: 92 - m_Width: 1 - m_Height: 1 - - m_X: 970 - m_Y: 93 - m_Width: 1 - m_Height: 1 - - m_X: 200 - m_Y: 172 - m_Width: 17 - m_Height: 30 - - m_X: 263 - m_Y: 172 - m_Width: 4 - m_Height: 13 - - m_X: 368 - m_Y: 185 - m_Width: 4 - m_Height: 27 - - m_X: 140 - m_Y: 661 - m_Width: 39 - m_Height: 2 - - m_X: 250 - m_Y: 660 - m_Width: 9 - m_Height: 1 - - m_X: 136 - m_Y: 762 - m_Width: 35 - m_Height: 1 - - m_X: 179 - m_Y: 760 - m_Width: 19 - m_Height: 2 - - m_X: 171 - m_Y: 861 - m_Width: 23 - m_Height: 1 - - m_X: 198 - m_Y: 849 - m_Width: 19 - m_Height: 12 - - m_X: 217 - m_Y: 942 - m_Width: 23 - m_Height: 3 - - m_X: 259 - m_Y: 756 - m_Width: 37 - m_Height: 4 - - m_X: 293 - m_Y: 849 - m_Width: 3 - m_Height: 6 - - m_X: 499 - m_Y: 158 - m_Width: 29 - m_Height: 2 - - m_X: 572 - m_Y: 158 - m_Width: 1 - m_Height: 1 - - m_X: 645 - m_Y: 159 - m_Width: 6 - m_Height: 19 - - m_X: 451 - m_Y: 212 - m_Width: 10 - m_Height: 26 - - m_X: 522 - m_Y: 238 - m_Width: 6 - m_Height: 1 - - m_X: 572 - m_Y: 237 - m_Width: 11 - m_Height: 2 - - m_X: 216 - m_Y: 291 - m_Width: 1 - m_Height: 28 - - m_X: 263 - m_Y: 263 - m_Width: 15 - m_Height: 8 - - m_X: 348 - m_Y: 263 - m_Width: 20 - m_Height: 14 - - m_X: 278 - m_Y: 377 - m_Width: 12 - m_Height: 6 - - m_X: 448 - m_Y: 277 - m_Width: 3 - m_Height: 39 - - m_X: 517 - m_Y: 316 - m_Width: 5 - m_Height: 3 - - m_X: 417 - m_Y: 347 - m_Width: 2 - m_Height: 6 - - m_X: 347 - m_Y: 377 - m_Width: 1 - m_Height: 48 - - m_X: 485 - m_Y: 394 - m_Width: 32 - m_Height: 3 - - m_X: 552 - m_Y: 397 - m_Width: 34 - m_Height: 1 - - m_X: 619 - m_Y: 398 - m_Width: 26 - m_Height: 1 - - m_X: 250 - m_Y: 472 - m_Width: 22 - m_Height: 10 - - m_X: 290 - m_Y: 464 - m_Width: 22 - m_Height: 8 - - m_X: 272 - m_Y: 561 - m_Width: 69 - m_Height: 9 - - m_X: 341 - m_Y: 464 - m_Width: 6 - m_Height: 29 - - m_X: 312 - m_Y: 545 - m_Width: 29 - m_Height: 25 - - m_X: 314 - m_Y: 545 - m_Width: 27 - m_Height: 28 - - m_X: 314 - m_Y: 656 - m_Width: 5 - m_Height: 4 - - m_X: 319 - m_Y: 739 - m_Width: 4 - m_Height: 17 - - m_X: 378 - m_Y: 737 - m_Width: 9 - m_Height: 2 - - m_X: 416 - m_Y: 425 - m_Width: 1 - m_Height: 68 - - m_X: 417 - m_Y: 656 - m_Width: 3 - m_Height: 6 - - m_X: 416 - m_Y: 472 - m_Width: 69 - m_Height: 3 - - m_X: 416 - m_Y: 472 - m_Width: 52 - m_Height: 21 - - m_X: 468 - m_Y: 557 - m_Width: 6 - m_Height: 16 - - m_X: 474 - m_Y: 640 - m_Width: 3 - m_Height: 16 - - m_X: 532 - m_Y: 475 - m_Width: 20 - m_Height: 1 - - m_X: 532 - m_Y: 554 - m_Width: 3 - m_Height: 3 - - m_X: 535 - m_Y: 636 - m_Width: 3 - m_Height: 4 - - m_X: 477 - m_Y: 723 - m_Width: 10 - m_Height: 14 - - m_X: 538 - m_Y: 719 - m_Width: 10 - m_Height: 4 - - m_X: 597 - m_Y: 476 - m_Width: 22 - m_Height: 1 - - m_X: 597 - m_Y: 548 - m_Width: 1 - m_Height: 6 - - m_X: 598 - m_Y: 630 - m_Width: 1 - m_Height: 6 - - m_X: 599 - m_Y: 712 - m_Width: 6 - m_Height: 7 - - m_X: 659 - m_Y: 477 - m_Width: 26 - m_Height: 4 - - m_X: 659 - m_Y: 704 - m_Width: 3 - m_Height: 8 - - m_X: 734 - m_Y: 150 - m_Width: 7 - m_Height: 28 - - m_X: 734 - m_Y: 170 - m_Width: 84 - m_Height: 1 - - m_X: 734 - m_Y: 170 - m_Width: 55 - m_Height: 8 - - m_X: 779 - m_Y: 242 - m_Width: 10 - m_Height: 7 - - m_X: 775 - m_Y: 320 - m_Width: 4 - m_Height: 7 - - m_X: 775 - m_Y: 393 - m_Width: 12 - m_Height: 6 - - m_X: 787 - m_Y: 475 - m_Width: 2 - m_Height: 6 - - m_X: 893 - m_Y: 171 - m_Width: 1 - m_Height: 2 - - m_X: 841 - m_Y: 249 - m_Width: 11 - m_Height: 3 - - m_X: 1018 - m_Y: 0 - m_Width: 5 - m_Height: 175 - - m_X: 955 - m_Y: 173 - m_Width: 15 - m_Height: 2 - - m_X: 955 - m_Y: 173 - m_Width: 7 - m_Height: 79 - - m_X: 836 - m_Y: 327 - m_Width: 5 - m_Height: 4 - - m_X: 897 - m_Y: 331 - m_Width: 5 - m_Height: 62 - - m_X: 897 - m_Y: 332 - m_Width: 8 - m_Height: 61 - - m_X: 386 - m_Y: 822 - m_Width: 1 - m_Height: 30 - - m_X: 323 - m_Y: 852 - m_Width: 27 - m_Height: 3 - - m_X: 350 - m_Y: 941 - m_Width: 15 - m_Height: 1 - - m_X: 386 - m_Y: 826 - m_Width: 3 - m_Height: 26 - - m_X: 426 - m_Y: 820 - m_Width: 2 - m_Height: 6 - - m_X: 789 - m_Y: 557 - m_Width: 53 - m_Height: 2 - - m_X: 846 - m_Y: 554 - m_Width: 24 - m_Height: 3 - - m_X: 898 - m_Y: 554 - m_Width: 7 - m_Height: 15 - - m_X: 955 - m_Y: 569 - m_Width: 7 - m_Height: 24 - - m_X: 870 - m_Y: 635 - m_Width: 35 - m_Height: 3 - - m_X: 946 - m_Y: 635 - m_Width: 9 - m_Height: 16 - - m_X: 905 - m_Y: 724 - m_Width: 1 - m_Height: 3 - - m_X: 428 - m_Y: 898 - m_Width: 18 - m_Height: 17 - - m_X: 431 - m_Y: 898 - m_Width: 15 - m_Height: 43 - - m_X: 548 - m_Y: 802 - m_Width: 25 - m_Height: 4 - - m_X: 605 - m_Y: 795 - m_Width: 15 - m_Height: 7 - - m_X: 662 - m_Y: 786 - m_Width: 15 - m_Height: 9 - - m_X: 782 - m_Y: 797 - m_Width: 2 - m_Height: 8 - - m_X: 485 - m_Y: 898 - m_Width: 2 - m_Height: 11 - - m_X: 906 - m_Y: 806 - m_Width: 10 - m_Height: 3 - - m_X: 1003 - m_Y: 651 - m_Width: 20 - m_Height: 145 - - m_X: 946 - m_Y: 796 - m_Width: 12 - m_Height: 10 - - m_X: 720 - m_Y: 842 - m_Width: 3 - m_Height: 14 - - m_X: 774 - m_Y: 856 - m_Width: 8 - m_Height: 4 - - m_X: 825 - m_Y: 860 - m_Width: 3 - m_Height: 7 - - m_X: 873 - m_Y: 867 - m_Width: 14 - m_Height: 6 - - m_X: 446 - m_Y: 1019 - m_Width: 39 - m_Height: 4 - - m_X: 484 - m_Y: 987 - m_Width: 1 - m_Height: 36 - - m_X: 535 - m_Y: 974 - m_Width: 7 - m_Height: 13 - - m_X: 765 - m_Y: 897 - m_Width: 9 - m_Height: 15 - - m_X: 720 - m_Y: 938 - m_Width: 45 - m_Height: 85 - - m_X: 809 - m_Y: 912 - m_Width: 16 - m_Height: 7 - - m_X: 852 - m_Y: 919 - m_Width: 21 - m_Height: 7 - - m_X: 916 - m_Y: 871 - m_Width: 42 - m_Height: 2 - - m_X: 957 - m_Y: 871 - m_Width: 1 - m_Height: 13 - - m_X: 557 - m_Y: 884 - m_Width: 16 - m_Height: 22 - - m_X: 557 - m_Y: 884 - m_Width: 13 - m_Height: 25 - - m_X: 615 - m_Y: 880 - m_Width: 5 - m_Height: 30 - - m_X: 612 - m_Y: 906 - m_Width: 8 - m_Height: 4 - - m_X: 535 - m_Y: 1019 - m_Width: 38 - m_Height: 4 - - m_X: 570 - m_Y: 982 - m_Width: 3 - m_Height: 5 - - m_X: 535 - m_Y: 1021 - m_Width: 67 - m_Height: 2 - - m_X: 602 - m_Y: 982 - m_Width: 10 - m_Height: 3 - - m_X: 647 - m_Y: 978 - m_Width: 318 - m_Height: 7 - - m_X: 658 - m_Y: 978 - m_Width: 307 - m_Height: 45 - - m_X: 658 - m_Y: 989 - m_Width: 365 - m_Height: 34 - - m_X: 1012 - m_Y: 651 - m_Width: 11 - m_Height: 271 - - m_X: 999 - m_Y: 884 - m_Width: 24 - m_Height: 38 - - m_X: 957 - m_Y: 922 - m_Width: 29 - m_Height: 4 - - m_X: 1017 - m_Y: 593 - m_Width: 6 - m_Height: 358 - - m_X: 1020 - m_Y: 593 - m_Width: 3 - m_Height: 430 - - m_X: 1015 - m_Y: 651 - m_Width: 8 - m_Height: 300 - - m_X: 653 - m_Y: 910 - m_Width: 24 - m_Height: 29 - - m_X: 653 - m_Y: 910 - m_Width: 23 - m_Height: 38 - - m_X: 704 - m_Y: 939 - m_Width: 61 - m_Height: 84 - - m_X: 704 - m_Y: 950 - m_Width: 105 - m_Height: 73 - - m_X: 704 - m_Y: 961 - m_Width: 148 - m_Height: 62 - - m_X: 647 - m_Y: 977 - m_Width: 274 - m_Height: 8 - - m_X: 647 - m_Y: 976 - m_Width: 29 - m_Height: 9 - - m_X: 658 - m_Y: 977 - m_Width: 263 - m_Height: 46 - - m_X: 658 - m_Y: 976 - m_Width: 18 - m_Height: 47 - - m_X: 704 - m_Y: 974 - m_Width: 217 - m_Height: 49 - 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: 1024 - m_AtlasHeight: 1024 - m_AtlasPadding: 9 - m_AtlasRenderMode: 4169 - m_glyphInfoList: [] - m_KerningTable: - kerningPairs: [] - m_FontFeatureTable: - m_GlyphPairAdjustmentRecords: - - m_FirstAdjustmentRecord: - m_GlyphIndex: 3 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -4.75 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 36 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 3 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 3 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 60 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 20 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -6.390625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 20 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 36 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -4.75 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 3 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 36 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -6.390625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 36 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -6.390625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 57 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 36 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -3.1875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 58 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 36 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -6.390625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 60 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 36 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 89 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 36 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 90 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 36 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 92 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 36 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -6.390625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 2020 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 41 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -9.53125 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 15 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 41 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -9.53125 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 17 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 41 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -4.75 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 36 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 47 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -3.1875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 3 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 47 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -6.390625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 47 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -6.390625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 57 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 47 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -6.390625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 58 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 47 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -6.390625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 60 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 47 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -3.1875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 92 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 47 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -4.75 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 2020 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 51 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 3 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 51 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -11.09375 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 15 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 51 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -11.09375 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 17 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 51 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -6.390625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 36 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 53 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 53 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 57 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 53 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 58 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 53 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 60 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 3 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -9.53125 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 15 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -4.75 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 16 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -9.53125 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 17 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -9.53125 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 29 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -9.53125 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 30 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -6.390625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 36 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 50 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -9.53125 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 68 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -9.53125 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 70 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -9.53125 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 72 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -3.1875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 76 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -9.53125 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 82 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -3.1875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 85 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -9.53125 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 86 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -3.1875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 88 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -4.75 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 90 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 55 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -4.75 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 92 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 57 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -7.890625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 15 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 57 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -4.75 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 16 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 57 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -7.890625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 17 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 57 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -3.1875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 29 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 57 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -3.1875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 30 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 57 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -6.390625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 36 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 57 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -6.390625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 68 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 57 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -4.75 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 72 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 57 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 76 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 57 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -4.75 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 82 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 57 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -3.1875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 85 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 57 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -3.1875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 88 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 57 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -3.1875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 92 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 58 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -4.75 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 15 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 58 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 16 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 58 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -4.75 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 17 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 58 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 29 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 58 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 30 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 58 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -3.1875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 36 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 58 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -3.1875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 68 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 58 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 72 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 58 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 82 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 58 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 85 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 58 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 88 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 58 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -0.75 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 92 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 60 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 3 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 60 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -11.09375 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 15 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 60 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -7.890625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 16 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 60 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -11.09375 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 17 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 60 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -4.75 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 29 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 60 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -5.578125 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 30 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 60 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -6.390625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 36 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 60 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -6.390625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 68 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 60 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -7.890625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 72 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 60 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -3.1875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 76 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 60 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -7.890625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 82 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 60 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -6.390625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 83 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 60 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -7.890625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 84 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 60 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -4.75 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 88 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 60 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -4.75 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 89 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 73 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 73 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 73 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 2020 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 85 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -4.75 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 15 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 85 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -4.75 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 17 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 85 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 3.1875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 2020 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 89 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -6.390625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 15 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 89 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -6.390625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 17 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 90 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -4.75 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 15 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 90 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -4.75 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 17 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 92 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -6.390625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 15 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 92 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -6.390625 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 17 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 2019 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 2019 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 2020 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -3.1875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 3 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 2020 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 86 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - - m_FirstAdjustmentRecord: - m_GlyphIndex: 2020 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: -1.546875 - m_YAdvance: 0 - m_SecondAdjustmentRecord: - m_GlyphIndex: 2020 - m_GlyphValueRecord: - m_XPlacement: 0 - m_YPlacement: 0 - m_XAdvance: 0 - m_YAdvance: 0 - m_FeatureLookupFlags: 0 - fallbackFontAssets: [] - m_FallbackFontAssetTable: - - {fileID: 11400000, guid: 2e498d1c8094910479dc3e1b768306a4, type: 2} - m_CreationSettings: - sourceFontFileName: - sourceFontFileGUID: e3265ab4bf004d28a9537516768c1c75 - pointSizeSamplingMode: 0 - pointSize: 86 - padding: 9 - packingMode: 4 - atlasWidth: 1024 - atlasHeight: 1024 - 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 &28684132378477856 -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 - serializedVersion: 2 - m_Width: 1024 - m_Height: 1024 - m_CompleteImageSize: 1048576 - m_TextureFormat: 1 - m_MipCount: 1 - m_IsReadable: 0 - m_StreamingMipmaps: 0 - m_StreamingMipmapsPriority: -92 - 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 - image data: 1048576 - _typelessdata: 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607090b0d0f101112121313131212100f0e0c0a08060603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000407090a1313131313131313130e0d0b08030000000000000000000000000000000000000002070a0c0d1313131313131313130b0a0805000000000000000000000000000000000000000000000000000000000000050a0d0f10131313131313130e0d0b0803000000000000000000000000000000000000000000000004080a0a13131313131313131313131313131313131313131313131313131313131313131313131313131313130a09070400000000000000000000000000000000000000000006060606060600000000000000000000000000000000000000000000020507080c0f1112131211100c080806020000000000000000000000030607090d1011121312110e0a070604010000000000000000000000000000000000000000000000000000000000000000000000000606060606060000000000000000000000000000000000000000000000000000000000010507070c0f1112131312100c08080602000000000000000000000000000000000000000000000000000000000000000000030608091313131313120707050100000000000000000000000000000000000000000000000000000000000105070713131313130c0b09060100000000000000000000000000000000000000000000000000000000000306080913131313131207070501000000000000000000000000000000000000000000000000000000000105070713131313130c0b09060100000000000000000000000000000000000004080a0a0b0b0b0b0b0b0b07060401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030607090b0d0f1111121313121211100f0d0a0807050200000000000000000000000000000000000000000000000000000000000000000003080c0e0e131313131313130f0e0c09040000000000000000000000000000000000000000000000000000000000000003070b0d0e131313131313130e0e0c0803000000000000000000000003080c0e0e131313131313130f0e0c09040000000000000000000000000000000000000000000000000000000000000003070b0d0e131313131313130e0e0c080300000000000000000000000000000000000000000000040613131313131313131312110e09040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205070c10131315171a1c1d1e1e1f20201f1f1e1d1c1b19171513120f0b06060401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b101316172020202020202020201b1a18140f080100000000000000000000000000000000070e1317191a202020202020202020181715110c060000000000000000000000000000000000000000000000000000030a10161a1c1d202020202020201b1a18140f080100000000000000000000000000000000000000050b101416172020202020202020202020202020202020202020202020202020202020202020202020202020202020171614100b0500000000000000000000000000000106090b0c131313131313080705020000000000000000000000000000000002090e111414181c1e1f201f1e1c191514120e090300000000000000060b101213161a1d1e1f201e1d1b171413110d0701000000000000000000000000000000000000000000000000000000000000030608091313131313130b0a0805000000000000000000000000000000000000000000000002080d111314191c1e1f201f1e1c191514120e09030000000000000000000000000000000000000000000000000000000000040a0f12151520202020201f1413110d08020000000000000000000000000000000000000000000000000002080d1113142020202020191815120d060000000000000000000000000000000000000000000000000000040a0f12151520202020201f1413110d080200000000000000000000000000000000000000000000000002080d1113142020202020191815120d06000000000000000000000000000000050b10141617181818181818181413110d07010000000000000000000001030405060606060504040200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104060b10121315171a1c1d1e1f1f201f1f1e1d1b19171514120e0906030000000000000000000000000000000000000000000000000000000001090f14181a1b202020202020201c1b191510090200000000000000000000000000000000000000000000000000000001080e1317191a202020202020201b1a18140f09010000000000000001090f14181a1b202020202020201c1b191510090200000000000000000000000000000000000000000000000000000001080e1317191a202020202020201b1a18140f0901000000000000000000000000000000000001070c10132020202020202020201f1d1a150f0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104090e1214181c1f20222426282a2a2b2c2c2c2c2c2b2a2927262422201f1c171413110d0705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f161c2022232d2d2d2d2d2d2d2d2d282724201a130b0200000000000000000000000000010a12191f2326272d2d2d2d2d2d2d2d2d2424211d171009000000000000000000000000000000000000000000000000040d151c2126292a2d2d2d2d2d2d2d2727241f1a130b0200000000000000000000000000000000000810171c2023242d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2423201c161008000000000000000000000000060d1215181920202020201f1514120e090300000000000000000000000002080e141a1e202125292a2b2c2c2b292622211e1a150e0903000000020a11171c1f2023272a2b2c2c2b2a282420201d18130c07000000000000000000000000000000000000000000000000000000030a0f121515202020202020181715110c060000000000000000000000000000000000000002080d13191e202125292b2c2d2c2b292622211e1a150e09030000000000000000000000000000000000000000000000000000060e151b1f21222c2d2d2d2d2c21201d19130c040000000000000000000000000000000000000000000000050c13191d20212d2d2d2d2d2524221e181109010000000000000000000000000000000000000000000000060e151b1f21222c2d2d2d2d2c21201d19130c0400000000000000000000000000000000000000000000050c13191d20212d2d2d2d2d2524221e181109010000000000000000000000000810171c2023242525252525252520201d18130c0400000000030607090b0e0f1112121313121211100f0d0a0807050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d1113171c1f20222426292a2b2b2c2c2c2b2b2a28262422211e1a1312100c0600000000000000000000000000000000000000000000000000030b131a202427282d2d2d2d2d2d2d292825211b140c0300000000000000000000000000000000000000000000000000020b12191f2326272d2d2d2d2d2d2d282724201a130b030000000000030b131a202427282d2d2d2d2d2d2d292825211b140c0300000000000000000000000000000000000000000000000000020b12191f2326272d2d2d2d2d2d2d282724201a130b03000000000000000000000000000000030b12181c1f2d2d2d2d2d2d2d2d2c2c2a2620191209000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d11141a1e2123282c2d2f31333537373838393939383837353433302e2d2b282221201d1814120e0904000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111921272c2f303939393939393939393433302b251d140b010000000000000000000000000a141c242a2f323339393939393939393931302d28221b120900000000000000000000000000000000000000000000030d161f262d323536393939393939393433302b251d140b0000000000000000000000000000000008111a22282d30313939393939393939393939393939393939393939393939393939393939393939393939393939393939302f2c28211a1108000000000000000000010911181e2224252d2d2d2d2d2c22211e1a140d0600000000000000000000050d14191f252a2d2e3235373839383736322f2e2b26201a150e0600070c141c23282b2d303336383939383734312d2c29241d18120b03000000000000000000000000000000000000000000000000060e151a1f21222c2d2d2d2d2d2424211d1710090000000000000000000000000000000000050c13191e252a2d2e3235373939393836332e2d2b261f1a150e0600000000000000000000000000000000000000000000000006101820262b2e2f3939393939382e2d29251e160e04000000000000000000000000000000000000000000050e161e252a2d2e393939393932312e29231b13090000000000000000000000000000000000000000000006101820262b2e2f3939393939382e2d29251e160e040000000000000000000000000000000000000000050e161e252a2d2e393939393932312e29231b1309000000000000000000000008121a22282d3031313131313131312d2c29241d160d0405060b10121316181a1c1d1f1f20201f1f1e1d1b19171514120e0906030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e13181d2023282b2d2f3133353737383939393837373533312e2d2a26201f1c17110d0802000000000000000000000000000000000000000000010b151d252b303435393939393939393534312c261e150c000000000000000000000000000000000000000000000000000b141d242b303334393939393939393534302b251d150b01000000010b151d252b303435393939393939393534312c261e150c000000000000000000000000000000000000000000000000000b141d242b303334393939393939393534302b251d150b0100000000000000000000000000030d151d23292c3939393939393939393836312b241b1208000000000000000000000000000000000000000000000000000000000000000000000000000003090e13181d20262a2d2e34383a3c3e40424344454546464645454342413f3d3b3938332d2d2c2924201e1a14100c070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f19232b33383c3d46464646464646464641403c362f261d1308000000000000000000000007121c262e353b3f404646464646464646463e3d39342c241b10060000000000000000000000000000000000000000000a151f2831383e42434646464646464641403c362f261d0f05000000000000000000000000000005101a232c33393c3d46464646464646464646464646464646464646464646464646464646464646464646464646464646463d3c38332c231a1005000000000000000009131b23292e31323939393939392e2d2a261f180f060000000000000000080e171e252a30363a3b3f424445464544433f3b3a37312b2620180f0b12181e262e34383a3c40434445464544413d3a39352f28231c150c050000000000000000000000000000000000000000000006101820262b2e2f39393939393931302d28221a1209000000000000000000000000000000070e161e252a3036393a3f424445464645433f3b3a37312b2620180f0900000000000000000000000000000000000000000000040e18222a31373a3c4646464646453a3935302820160c0200000000000000000000000000000000000000020c1620283036394646464646463f3e3a342d251b11060000000000000000000000000000000000000000040e18222a31373a3c4646464646453a3935302820160c02000000000000000000000000000000000000020c1620283036394646464646463f3e3a342d251b110600000000000000000005101a242c33393c3d3e3e3e3e3e3e3e3a39352f281f160b1113171c1f20222527292a2b2c2c2d2c2b2b2a28262422211e1a1312100c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f151a1d24292c2e34383a3c3e404244444546464545444342403d3b3a36312d2c28231c19130d08020000000000000000000000000000000000000009131d272f373c40414646464646464642413d3730271e0e050000000000000000000000000000000000000000000000030d1d262e363c3f414646464646464641403c372f271d130900000009131d272f373c40414646464646464642413d3730271e0e050000000000000000000000000000000000000000000000030d1d262e363c3f414646464646464641403c372f271d1309000000000000000000000000010b151f272f343846464646464646464645423d352d24190f04000000000000000000000000000000000000000000000000000000000000000000000001070c141a1d24292c31363a3b404546484a4d4f505151525353525251504f4e4c4a4846443f3d3a39352f2d2a251f1d18120e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212b353d44484a5353535353535353534e4c4841382f251a0f03000000000000000000020e19242e3840474b4d5353535353535353534b49453e362c22170c000000000000000000000000000000000000000005101c26313a43494e50535353535353534e4c4841382f21170d03000000000000000000000000000b17222c363e44494a53535353535353535353535353535353535353535353535353535353535353535353535353535353534a48443e352c21160b0000000000000006111b252d343a3e3f4646464646463b3a36312921180b0200000000000008111a202930363b4246474b4f51525352514f4c4847423c37312a211b151c232830383f4446494d5051525351504e4a4745403a342e271e170e050000000000000000000000000000000000000000030e18222a31373a3c4646464646463e3d39342c241a0e0500000000000000000000000000071019202830363a4146474c4f51525352514f4c4847423c37312a211b12090100000000000000000000000000000000000000000a15202a343c4347485353535353524746413a32281e13080000000000000000000000000000000000000008131e28323a41465353535353534c4a463f372d23180d01000000000000000000000000000000000000000a15202a343c4347485353535353524746413a32281e130800000000000000000000000000000000000008131e28323a41465353535353534c4a463f372d23180d0100000000000000000b17222c363e44494a4b4b4b4b4b4b4b4745403a31281d191d2023282b2d2f3234363738393939393837373533312e2d2a26201f1c17110d08020000000000000000000000000000000000000000000000000000000000000000000000000000070c151b20262b2f35393a3f4446484a4d4f5051525253525251504e4c4a4846423d3a38342e29251e19140d050000000000000000000000000000000000030f1a252f3941484d4e535353535353534f4d4942393020170d02000000000000000000000000000000000000000000010b151f2e3840474c4d535353535353534e4d4841392f251a0f0300030f1a252f3941484d4e535353535353534f4d4942393020170d02000000000000000000000000000000000000000000010b151f2e3840474c4d535353535353534e4d4841392f251a0f03000000000000000000000007121d2731394045535353535353535353524e473f352b20150900000000000000000000000000000000000000000000000000000000000000000000030b12181f252a2f35393b4246484b51535557595b5d5d5e5f5f5f5f5f5e5d5c5a59575553504a4a4745413b3a36302c29241d1a140f0a03000000000000000000000000000000000000000000000000000000000000000000000000000004101c27333d474f54566060606060606060605b58534a41362b20140400000000000000000007131f2a35404a52575a606060606060606060575550483e34281d1101000000000000000000000000000000000000000a16212d38434c545a5d606060606060605a58534a4133291f140900000000000000000000000004101c28333e48505557606060606060606060606060606060606060606060606060606060606060606060606060606060606057554f473e33281c10040000000000010d18232d373f464a4c5353535353524846423b33291d140a000000000008111a232c323b41464d5254585c5d5e5f5f5e5c5955534d47423c332d241e272e343e424a5053565a5d5e5f5f5e5d5b5753514b444039302920170f05000000000000000000000000000000000000000a15202a343c4347485353535353534b49453e362c20170d020000000000000000000000071119222b323a41464c5254585c5e5f605f5e5c5955534d47423c332d241b130900000000000000000000000000000000000000030f1b26313c464e53555f606060605f54524c443a3025190c030000000000000000000003030303030303010d1925303a444c525f6060606060585651493f34291e1206000000000000000000000000000000000000030f1b26313c464e53555f606060605f54524c443a3025190c0300000000000000000003030303030303010d1925303a444c525f6060606060585651493f34291e12060000000000000004101c28333e485055575858585858585853514b433a2f2625292d2e34383a3c3e414244454546464545444342403d3b3a36312d2c28231c19130d080200000000000000000000000000000000000000000000000000000000000000000000030b121820262b31373a4145474a50535557595c5d5e5e5f5f5f5e5e5d5b595755534d4946443f3835302a251e170e08020000000000000000000000000000000814202b37414b53595b606060606060605c59544b4232291f140900000000000000000000000000000000000000000007121d2731404a52585a606060606060605b59534b41372b201408000814202b37414b53595b606060606060605c59544b4232291f140900000000000000000000000000000000000000000007121d2731404a52585a606060606060605b59534b41372b20140800000000000000000000000c18232f39434b515f606060606060605f5e5951473d31261a0e010000000000000000000000000000000000000000000000000000000000000000060d151d232930363a4045474d5355545c60626466686a6a6b6b6c6c6c6b6b6a6867666361605b545654514b4846423b39352f2a251f1a150e08020000000000000000000000000000000000000000000000000000000000000000000000000713202c38444f5960636c6c6c6c6c6c6c6c6c67645c53483c3020150a0000000000000000000a17232f3b47525c63666c6c6c6c6c6c6c6c6c64615a5045392d1d1207000000000000000000000000000000000000000d1a26323e49545e66696c6c6c6c6c6c6c67645c53453b30251a0e0200000000000000000000000814202d3944505a61646c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6361594f44382c201407000000000006121e29343f4951565860606060605f55534d453b2f261b1106000000050f1a232c353e444c52575e6165686a6b6c6b6a6965625f57534d453f372d27303940444f545c606366696b6c6c6b6a6764605d55514a423b322921170b020000000000000000000000000000000000030f1a26313c464e53555f6060606060575550483e32291e130800000000000000000000050e19232b343d444c52565e6165686a6c6c6c6b6966615f57534d453e362d251b110800000000000000000000000000000000000006121f2b37434e585f626c6c6c6c6c6b615e564c4135291e150b00000000000004080a0a1010101010101010111d2a36414c565e6c6c6c6c6c6c65625b51463a2e22150900000000000000000000000000000000000006121f2b37434e585f626c6c6c6c6c6b615e564c4135291e150b000000000004080a0a1010101010101010111d2a36414c565e6c6c6c6c6c6c65625b51463a2e221509000000000000000814202d3944505a616464646464646464605d554b41382d3035393a3f4446494b4d4f5052525353525251504e4c4a4846423d3a38342e29251e19140d050000000000000000000000000000000000000000000000000000000000000000070c151d232831373c42474b5154545c60626466686a6a6b6c6c6c6b6a6a686664615f575653504a46413a3630292019130d0500000000000000000000000000000c1824303c48535d64686c6c6c6c6c6c6c68655d54443b3025190e0000000000000000000000000000000000000000000c18232f3943525c64676c6c6c6c6c6c6c68645d53483c3024180c000c1824303c48535d64686c6c6c6c6c6c6c68655d54443b3025190e0000000000000000000000000000000000000000000c18232f3943525c64676c6c6c6c6c6c6c68645d53483c3024180c0000000000000000000004101c2934404b555c6c6c6c6c6c6c6c6c6c6a63594e42362a1d1104000000000000000000000000000000000000000000000000000000000000030a11171f272f343b42464b5153575f6165666d6f71737576777878797979787876757472706e6c666663605d5554524d4745403936312b262019140d0500000000000000000000000000000000000000000000000000000000000000000000000916222f3c4854606b70797979797979797979746e64584c3c32261b0f0300000000000000000c1926323f4b57636e73797979797979797979716c615549392f23180c000000000000000000000000000000000000000f1c2935424e5a66707679797979797979746e64574d42362a1f140900000000000000000000000a1623303c4955616c707979797979797979797979797979797979797979797979797979797979797979797979797979797979706b6155483c2f23160900000000000915222e3a46515b62656c6c6c6c6c6c615f574d41382d22170b0300030d17212c353e474f565e61696e7275777879787776726e69625f5751493f373039424a515961666d6f7376777879787774706d67605c544d443b33291d140a000000000000000000000000000000000006121f2b37434e585f626c6c6c6c6c6c64615a50443a3025190e040000000000000000020d17202b353d464f565e61686d7275777879797876726e69625f5750483f372d23190d0400000000000000000000000000000000000815212e3a47535f6a6f7979797979786d685e52463d30271c1207000000050b101416171d1d1d1d1d1d1d1d1d202d3946525e68767979797979726d62564a3e312418080100000000000000000000000000000000000815212e3a47535f6a6f7979797979786d685e52463d30271c12070000050b101416171d1d1d1d1d1d1d1d1d202d3946525e68767979797979726d62564a3e31241808010000000000000a1623303c4955616c70717171717171716d675d53493f383a4146474a505355585a5c5d5e5f5f605f5e5e5d5b595755534d4946443f3835302a251e170e080200000000000000000000000000000000000000000000000000000000000810191e272e343c43474d53555d6064666d6f7173757777787979787877767573706e696763605c54524c46413b322a251e170e06000000000000000000000000000e1a2734404d59646f7479797979797979756f65564d42362a1c11060000000000000000000000000000000000000004101c2934404b55646e7479797979797979746f64594d4034271a0e000e1a2734404d59646f7479797979797979756f65564d42362a1c11060000000000000000000000000000000000000004101c2934404b55646e7479797979797979746f64594d4034271a0e0000000000000000000006131f2c3845515c67767979797979797979756a5e5245382c1f12060000000000000000000000000000000000000000000000000000000000040c151c2328313940454d52555d6065696e7276797b7d80828384848586868585848382817f7d7b797673706d6765615e5753514b46423b37312a251e170e07000000000000000000000000000000000000000000000000000000000000000000030f1b27333f495363707d868686868686868686807467584e43372b1f12060000000000000005111e2a36424d576673808686868686868686867e7164554b4034291c1004000000000000000000000000000000000000101d2a3643505d697682868686868686868074695e52463b30251a0e02000000000000000000000a1724313d4a5764707d86868686868686868686868686868686868686868686868686868686868686868686868686868686867d7063574a3d3024170a00000000000b1824313e4a56626d727979797979796e695f53493f33271f14090009141f29333e474f5961686e747b7e828485868584827f7b756e69625b51493f39424b545c606c70787c80838485868483817d7a726d665e564d453b2f261c1106000000000000000000000000000000000815212e3a47535f6a6f797979797979716c61564c41362a20160c020000000000000009141f29333d474f5960686d747a7f828485868584827f7b756e69625a51493f352b1f160c01000000000000000000000000000000000915222f3c4855626f7c8786868686857a6d61594f42392e23180c03000810171c202324292929292929292929292e3a4754616d7a86868686867f7265584c3f322519130c04000000000000000000000000000000000915222f3c4855626f7c8786868686857a6d61594f42392e23180c030810171c202324292929292929292929292e3a4754616d7a86868686867f7265584c3f322519130c0400000000000a1724313d4a5764707e7e7e7e7e7e7e7e796d655b504443484c5254545c60626567696a6b6c6c6c6c6b6a6a686664615f575653504a46413a3630292019130d0500000000000000000000000000000000000000000000000000000009111a222a303940454e53575f62676d7175797b7d8082838485858685858483817f7d7b7874706d66615e56524c443e36302920180f070000000000000000000000000e1b2835414e5b687481868686868686868175695e5246382d22170b0000000000000000000000000000000000000006131f2c3845515c677480868686868686868174685b4e4135281b0e000e1b2835414e5b687481868686868686868175695e5246382d22170b0000000000000000000000000000000000000006131f2c3845515c677480868686868686868174685b4e4135281b0e000000000000000000000714202d3a4753606d798686868686868687796c5f5346392c20130600000000000000000000000000000000000000000000000000000000060d161e262e343d434b51575e61676d72777b7f8286888a8c8e909091929292929291908f8d8c8a888583807d7a76726e6964605d55534d47433c36302920191007000000000000000000000000000000000000000000000000000000000000000005121f2b3744505b6574818d939393939393939184786a5f53473b2e211508000000000000000714202d3a46525e69778390939393939393938e8275675c5145382c1f13060000000000000000000000000000000000000a1723303d4a5663707d89959393939392867b6e61574d42362a1f1409000000000000000000000a1724313d4a5764707d8a9393939393939393939393939393939393939393939393939393939393939393939393939393938a7d7063574a3d3024170a00000000000c1925323f4c5865727f8686868686867b6e655b50443b31251a0e050e1a25313b454f59616b707a81878b8f90919292918f8c88827b726d625b5147404b545c666d757d84898d9091929291908e8a857f786e695e574d42382d22170b010000000000000000000000000000000915222f3c4855626f7b8786868686867e71685e52463e32281e1308000000000000020e1a25303b454f59606b6f7a81868b8f91929392918f8c87827b716c625b51473d31281d1307000000000000000000000000000000000815212e3a47535f6a73808d9693978e81746b60544a4034281f140908111a21282d303136363636363636363636363a4754616d7a879393938b7f7265584c3f3229241e160d040000000000000000000000000000000815212e3a47535f6a73808d9693978e81746b60544a4034281f1409111a21282d303136363636363636363636363a4754616d7a879393938b7f7265584c3f3229241e160d04000000000a1724303d4a5763707d868b8b8b8b8b8b81776c605a504e54565e6165666d6f7174757778787979787877767573706e696763605c54524c46413b322a251e170e060000000000000000000000000000000000000000000000000009121b232c343c424b51585f62696e747a7d8185888a8c8f9091919292929191908e8c8a8884807d79736d68615e565046413a322a2119100700000000000000000000000916232f3c4956626f7c89959393939392867b6e61544a3f33281c0f030000000000000000000000000000000000000714202d3a4753606d7985929393939395897c6f6356493c30231609000916232f3c4956626f7c89959393939392867b6e61544a3f33281c0f030000000000000000000000000000000000000714202d3a4753606d7985929393939395897c6f6356493c30231609000000000000000000000714202d3a4753606d7a8693939393939286796c5f5346392c201306000000000000000000000000000000000000000000000000000000060f171f2830383f444f555c60696e737a7f84888b8f929897999b9d9d9e9e9f9f9f9e9e9d9b9a99969892908c8986827f7b76716d67615e57534e46413b322b22190f04000000000000000000000000000000000000000000000000000000000000000613202d394653606c7884919e9f9f9f9f9fa196887c6f6255483c3025190d010000000000000814212e3b4754616e7b8795a09f9f9f9f9f9f9285796d6053473a2d22170b0000000000000000000000000000000000000916222f3c4854606b7683909da79fa3998d8074695e52463b3025190e020000000000000000000a1724313d4a5764707d8a979f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f968a7d7063574a3d3024170a00000000000613202d394653606c7782909893988f82776c60574d42362a20170d121e2a36424d57616b707d868e939a9b9d9e9d9d9d9c98948f877f726d62594f45515c666d78818a9196999c9e9d9d9e9d9a98928c837b6e695e544a3f33281d12070000000000000000000000000000000815212e3a47535f6a737f8c95939392857a6d615a50443a3024190d04000000000005111e2a36424d57606b6f7d858d92999b9d9c9b9c9e9c9a938f867e726d62594f433a2f24180d0100000000000000000000000000000006121f2b37434e58606d7984919e9f93887d6f665c51443b31261a0d101a232c33393c3d4343434343434343434343434754616d7a87949f988b7f7265584c3f39352f281f160c01000000000000000000000000000006121f2b37434e58606d7984919e9f93887d6f665c51443b31261a0d1a232c33393c3d4343434343434343434343434754616d7a87949f988b7f7265584c3f39352f281f160c010000000a16232f3c4855616b727f8c93979797938d80736c6158586062686d7175797c7e8082838585868685858483817f7d7b7874706d66615e56524c443e36302920180f07000000000000000000000000000000000000000000000009121b242d353e464e545c606a6f757b81868a8e929797999b9d9d9e9f9f9f9e9d9d9b999796918d8985807a746e68615a524c443c332b22191007000000000000000000000915222e3b4854606a7783909daa9fa3998c7f73665b5044382b1f1409000000000000000000000000000000000006121f2b37434e5864717e8a97a29f9f9d9083776b6054483b2f221509000915222e3b4854606a7783909daa9fa3998c7f73665b5044382b1f1409000000000000000000000000000000000006121f2b37434e5864717e8a97a29f9f9d9083776b6054483b2f221509000000000000000000000714202d3a4753606d7a86939f9f9f9f9286796c5f5346392c2013060000000000000000000000000000000000000000000000000000050e172129313a424a505960676d737b80858b9195989c9fa3a39f9d9b9a999898989898999b9c9d9fa3a29f9c9999928f8b87837e79746e69625f58524c443d342b21160a000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c8996a1adacacacb2a8998c7f7266564c41362a1d1105000000000004101c2834404b5465717e8b98a7b1acacacaea2988a7d7063544a3f33281c0f0300000000000000000000000000000000000714202c38444f5963707d8a959fabab9f92867b6e61564d42362a1f14080000000000000000000a1724313d4a5764707d8a97a3acacb2acaba6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a3968a7d7063574a3d3024170a000000000005121f2b3744505b656e7b86929f9f948b7e72695e53463f32291f1414212d3a46535e69707d8692989f9d9b9691909192999f9e99928b7f726b60554e58606d78818e939ea09e9892909091979d9f9f9590847b6e665b5044392f23180c00000000000000000000000000000006121f2b37434e58606d78839099a1978e81756c61564c4135291f160c01000000000714202d3a46525e696f7d8691979f9f9892908e8f91979f9f98928b7f726b60554b4035291d1307000000000000000000000000000000030f1b26313c45515d67707d8a939e9a9183786d60574d42362a1f1617212c353e44494a5050505050505050505050505054616d7a8794a0988b7f726558504745413a31281e13080000000000000000000000000000030f1b26313c45515d67707d8a939e9a9183786d60574d42362a1f16212c353e44494a5050505050505050505050505054616d7a8794a0988b7f726558504745413a31281e13080000000714202c38444f59636d74818e959fa59c928a7e716a60626a6f757a7e8285888b8d8f9091929293929191908e8c8a8884807d79736d68615e565046413a322a2119100700000000000000000000000000000000000000000007101b242d363e474f585f666d737c82878e92989b9ea2a9a6a8aaa8a7a6a6a6a7a8a9a8a6a8a19e9a97928c86807a716c615e564d453c342b22190e0500000000000000000007131f2c38434e5865727e8b98a2aeab9e9184786c6053463b30251a0e00000000000000000000000000000000000814212e3a47535f6a7683909ca9aea2988b7f7265594f43382c1f13070007131f2c38434e5865727e8b98a2aeab9e9184786c6053463b30251a0e00000000000000000000000000000000000814212e3a47535f6a7683909ca9aea2988b7f7265594f43382c1f1307000000000000000000000714202d3a4753606d7a8693a0acac9f9286796c5f5346392c20130600000000000000000000000000000000000000000000000000030d172029333b434c545c606b707980868d92979da0a29f9b989892908e8d8c8c8b8b8b8c8d8e8f919299979a9d9fa39f9c9a938f8b85807b756e6a615e564e463d32271b0f03000000000000000000000000000000000000000000000000000000000006121e2b37424d576673808d99a8b1acaaacaea99d908376685e5246392d201306000000000006131f2c3845515c6675828f9ba8b0aba9abb0aa9a8e8174665b5044382b1f1206000000000000000000000000000000000004101c27333d4855616b7783909da7aea3988d8074695e52463b3025190e0200000000000000000a1724313d4a5764707d8a97a3b0b2a8a19e9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a968a7d7063574a3d3024170a0000000000030f1b27333f49535f69727f8c959f9f92867b6e615a50443b3025191f2c38434e58616e7b869298a29c938e88848384868c9299a39f93887d6f675c535f6a73808d939ea197928b858483858990959fa0969083786c60554b4034291c10040000000000000000000000000000030f1a26313c44515c666f7c87929f9e938a7d70685d52453d31281d130700000007131f2c38434f59616e7b859298a19a938c86838282858a9297a29f93877d70675d51453a2f24180d010000000000000000000000000000000a15202935404b55616b75818e98a0958c7f72695f53463e31281e1c28333e474f55575c5c5c5c5c5c5c5c5c5c5c5c5c5c616d7a8794a0988b7f72655c5c54524c433a2f24190d0100000000000000000000000000000a15202935404b55616b75818e98a0958c7f72695f53463e31281e28333e474f55575c5c5c5c5c5c5c5c5c5c5c5c5c5c616d7a8794a0988b7f72655c5c54524c433a2f24190d01000004101c28333e47515b606d79839096a1a49f92867c6f6a6f767c81868b8f9298989a9c9d9e9f9f9f9f9e9d9d9b999796918d8985807a746e68615a524c443c332b2219100700000000000000000000000000000000000000050e19222d363e485059616a6f7980878f93999fa3aaabaaaaa29f9d9b9a9a999a9a9b9d9fa2aaa9aba9a19e98928d857e756d685f574e463c342a20170c030000000000000000030f1b27323d4754606d7a85929facaca1968a7d7063574d42362a1c110600000000000000000000000000000004101c2934404b55626e7b88949fabac9f92867a6d6054473d32271b0f0300030f1b27323d4754606d7a85929facaca1968a7d7063574d42362a1c110600000000000000000000000000000004101c2934404b55626e7b88949fabac9f92867a6d6054473d32271b0f03000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000000000000000000020b151f29323b454d565d666d747d848c92999fa29f9c98928f8b88858381807f7f7e7e7f7f8081828486888a8d9092999b9ea19f9c98928d86817c746e6860584e43382c1f130700000000000000000000000000000000000000000000000000000000000814212e3a47535f697784919daaa7a09d9fa2aa9f93867a6d6154473a2e23170c00000000000713202d3a4653606d7985929faca69f9c9fa6ab9e9285796c605346392d20130a0000000000000000000000000000000000000b16212c38444f5964707d8a95a0acaa9f92867b6e61564d41362a1e140800000000000000000a1724313d4a5764707d8a97a3b0aca196918d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8a7d7063574a3d3024170a0000000000000b17222d38414d57606d78839099a2988f82766c62564d41362a20222e3b4854606a75828f98a29c918c817b7876777a7f87929aa49a9184796d6056626e7c87929fa19791857e797776787c838f949f9f958b7f72675c5145382c1f13060000000000000000000000000000000a15202834404a54606a73808d96a09e91857a6d60594f433a2f24180d0300000915222f3b4854606b75828f97a19f9388807a767576797e859297a2999184796d60554b4035291d1104000000000000000000000000000000040c18242f39434f59616e7b85929f9f92867b6e615a50433a2f24202d39444f5961646969696969696969696969696969696d7a8794a0988b7f72696969605d564c4135291d11040000000000000000000000000000040c18242f39434f59616e7b85929f9f92867b6e615a50433a2f242d39444f5961646969696969696969696969696969696d7a8794a0988b7f72696969605d564c4135291d11040000000b17212c353f45515c676e7a849198a2a39891857b747c82898e92999c9fa2aaa7a8aaa8a8a7a6a6a7a8a9a8a6a8a19e9a97928c86807a716c615e564d453c342b22190e050000000000000000000000000000000000020d17202b343e48505a616b707c838c92999fa4abaca7a09d999892908f8d8d8d8d8d8f909298989c9fa4abaaa29f97928a827a6e6960584e463c32291e150b0000000000000000000a16202c3945515d6774818e9aa7b1a89b8f8275695e5246382e23170b00000000000000000000000000000006131f2c3845515c6774808d9aa6b0a79b8e8174685d5245392b21160a0000000a16202c3945515d6774818e9aa7b1a89b8f8275695e5246382e23170b00000000000000000000000000000006131f2c3845515c6774808d9aa6b0a79b8e8174685d5245392b21160a00000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000000000000000a141d27313a444d575f686d78808991969fa39e9b948f8a85827e7b7977757373727171727273747677797b7e8083868a8e92979b9fa29f99928e87817a6f6a6054483b2e22150900000000000000000000000000000000000000000000000000000000000815222f3b4855626e7b8895a0aca095909298a2a4998a7e7164544a3f34281c1003000000000a1723303d4a5663707d8998a2a99f9490949faba197897c6f6356493c31261b0f03000000000000000000000000000000000005101c28333e4653606c7883909da7aea3988d8074685e52463b3025190e02000000000000000a1724313d4a5764707d8a97a3b0ab9e91848080808080808080808080808080808080808080808080808080808080808080807c6e6255483b2f22150800000000000006111b262f3c44505c666f7c86929f9f948b7e71685e52463e32292834404b54626f7c89939e9f948c7f746e696a686d737e88939fa0968b7f72655e6875828f99a39e91857b716d676a6a6f78828f98a29f9285796d6053473a2e23170b000000000000000000000000000000030c18232e39424e58606d7984919aa1978e81746b60554b4035291f150b0105111e2a36414c56636f7c89939e9e938b7e736d6868666d717c85929fa1968c8073675d5145392c2013070000000000000000000000000000000007121d27313e46525e69727f8b959f988f82756c61554c41352923303c4955616c70767676767676767676767676767676767a8794a0988b7f767676766d685d5245392c20130600000000000000000000000000000007121d27313e46525e69727f8b959f988f82756c61554c413529303c4955616c70767676767676767676767676767676767a8794a0988b7f767676766d685d5245392c20130600000005101a232834404b555e686f7c86929aa4a197908381878f949b9fa3abacaaaba39f9d9c9b9a999a9a9b9d9fa2aaa9aba9a19e98928d857e756d685f574e463c342a20170c030000000000000000000000000000000009141f29323d46505a626c717d8690959fa3ababa49f9b95908c898584828180808081828385888b8f93999fa2aaa9a19e938f847b6f6a60584e443b30271d1207000000000000000004111d2935414b55626f7c88959fabac9f92877b6e61544a3f34281c100300000000000000000000000000000714202d3a4753606d7985929eabaca095897c6f63564c413529190f0400000004111d2935414b55626f7c88959fabac9f92877b6e61544a3f34281c100300000000000000000000000000000714202d3a4753606d7985929eabaca095897c6f63564c413529190f0400000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000000000000000006111c262f39434c565f696e7a828d929ea0a09d938e88827d7975716e6c666867666565656565666869666d6e7174767a7d81858a8e92989ea19f99928e867c6f6256493c2f2316090000000000000000000000000000000000000000000000000000000005111e2a36414c5666727f8c99a7aa9d908386929fab9b8e8175665c5044382c1f120600000005121e2a36424d576774808d9aaaa1979083909ca9a99a8d807367584e43372b1f12060000000000000000000000000000000000000b161f2b3744505b65717e8a95a0acaa9f92867b6e61564c41362a1e14080a0a0a0a0a0a0a0a1724313d4a5764707d8a97a3b0a99c8f827673737373737373737373737373737373737373737373737373737373737373736e6a5f53473a2e211408000000000000000a141d28343f4a545f6a737f8c95a09f92857b6e615a50443a302c3845515c6674818e9aa59c9082786c615f575d616c74818d99a49d9083776a616d7a86929fa0958a7d7069605c5860666e7b86929fa2978a7e7164544a3f34281c100300000000000000000000000000000007121c27303c45515c676f7d88939f9d93897d70675d51453d31271d12070714202d3946525e6875828f9ca59b8e81756c615d565c606a717e8b96a09f92857a6d6053473a2f24180c00000000000000000000000000000000010b151f2a36424d56606c788390999e948a7e71675d51453c3026313d4a5764707d8283838383838383838383838383838383909ca99e9184838383827a6d6054473a2d211407000000000000000000000000000000010b151f2a36424d56606c788390999e948a7e71675d51453c30313d4a5764707d8283838383838383838383838383838383909ca99e9184838383827a6d6054473a2d21140700000000081118232e39434c565f6a717e88939fa5a095908d93999fa6acaaa8a09d999992908f8e8d8d8d8d8f909298989c9fa4abaaa29f97928a827a6e6960584e463c32291e150b000000000000000000000000000000030d1925303b444e58626c717e879298a0a7afa79f99938e88837f7c79777574737373747577797c7f83878d92989ea5ada59e9691857c6f6a5f564c42392e23180c0300000000000000010d18242f3a47535f6a7683909da9afa3998c7f73665c5044382b1f14090a0a0a0a0a0a0a0a0a0a0a0a0a0a121f2b37434e5864717e8b97a2adaa9d9083776b6054443a2f24190700000000010d18242f3a47535f6a7683909da9afa3998c7f73665c5044382b1f14090a0a0a0a0a0a0a0a0a0a0a0a0a0a121f2b37434e5864717e8b97a2adaa9d9083776b6054443a2f2419070000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000000000000000b17222d38424b555e686e7b838f949da49c969189817c76706d666561605b545a5959585858595a5b545c60626467676d7174797d81868c91969da09e9285796d6053473a2d201407000000000000000000000000000000000000000000000000000000000714202d3946525e687683909da9a79a8d80828f9ca99f9285796d6053463a2d2013090000000714212d3a46535f697784919daa9e91857e8a97a8aa9e9184776a5f53473a2e211509000000000000000000000000000000000000030f1b27333f4953606c7884919da8aea3988d8074685e52463b3025191616161616161616161724313d4a5764707d8a97a3b0a99c8f82766967676767676767676767676767676767676767676767676767676767676767625f584e43372b1f120600000000000000020b17232e38424e58606d78839099a2978f82756c61564c41362d3a4653606d7985929fa2988a7d70655b534d5259616e7b87939f9f95887b6f65727e8b99a39d9184786c6057514e545e6874818d9aa99c8f8276665c5044382b1f1206000000000000000000000000000000000b151e2934404b55606b74808d96a19e9184796d60594f43392f24180c0814212e3b4754616e7a86929f9f94887b6e615a524c5058606c7884919da2978b7e7164554b4035291d100400000000000000000000000000000000030d1925303b44505b666f7c87929f9e91847a6d60584e42382e323f4b5865727e8b8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f90949faba096918f8f8f877a6d6154473a2e21140700000000000000000000000000000000030d1925303b44505b666f7c87929f9e91847a6d60584e42382e3f4b5865727e8b8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f90949faba096918f8f8f877a6d6154473a2e211407000000000007121d27303b444e58616c73808c939ea7a09d9a9fa4abaca59e9b96918c898684828180808081828385888b8f93999fa2aaa9a19e938f847b6f6a60584e443b30271d120700000000000000000000000000010b151f2a36424d56606a717e889299a2aaafa49c959087817c77726f6d6668676766676768666c6f72767b80868e939fa3aaa8a09792867c6f685e544b403428201509000000000000000007131d2b37434e5864717e8b97a2adab9e9184786d6053463b31251a16161616161616161616161616161616212e3a47535f6a7683909ca9aea2988b7f7265594f4332281e1308000000000007131d2b37434e5864717e8b97a2adab9e9184786d6053463b31251a16161616161616161616161616161616212e3a47535f6a7683909ca9aea2988b7f7265594f4332281e13080000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000000000000030f1c28333f4a545d676d7a8491959fa39f928d847d756f6a64605c545553504a4d4c4c4b4b4c4c4d4e4a51535557555d6064666d70757a7f848a9095978c7f72675d5145392c1f1306000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a87939faca7978a7e7f8c99aba297897c6f6356493c31251a0e0200000815222e3b4855616e7b8896a0a89b8e827a8796a0aca096887b6f6255483c31251a0e020000000000000000000000000000000000000b17222d3844505b66717e8a96a0acaa9f92867a6e61564c41362a232323232323232323232324313d4a5764707d8a97a3b0a99c8f8276695c5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a55534e463c31261a0f02000000000000000006111c26303c44515c666f7c87929f9e938a7e71685e52463e323c4956626f7c8997a29f9285796d6053494246535f697683909da7988b7f726875828f9bab998c8073655b5045424d5663707c8998a39f9285796d6053463a2d20130700000000000000000000000000000000030c18232f39434f59606d7984919ea1968d80746b60554b4035291e150b1825323e4b5865717e8b99a39c908376695f53464144505b65727f8c99a99c8f8276675d5145392c1f1306000000000000000000000000000000000009141f28333f4a545f6a74808d96a1978d80746a60544a3f34323f4b5865727e8b989c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9fa6b0a8a09e9c9c94877a6d6154473a2e211407000000000000000000000000000000000009141f28333f4a545f6a74808d96a1978d80746a60544a3f343f4b5865727e8b989c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9fa6b0a8a09e9c9c94877a6d6154473a2e2114070000000000000b151e29323c46505a606c77818e96a0acaaa7acafa7a09d938e89847f7c7a777575747373747577797c7f83878d92989ea5ada59e9691857c6f6a5f564c42392e23180c0300000000000000000000000007121d27313946525e696f7c86929aa3ababa39f928d837c756f6a6662605c545a5a5a5a5a545b606265696e747b818a9298a2a9a9a19891847a6e665c51453c31261a0e0500000000000000010f1b26323c4753606d7985929fabada1968a7d7063574d42362a23232323232323232323232323232323232934404b55626e7b88949fabac9f92867a6d6054473d3221160c010000000000010f1b26323c4753606d7985929fabada1968a7d7063574d42362a23232323232323232323232323232323232934404b55626e7b88949fabac9f92867a6d6054473d3221160c010000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000000000005101a232b3844505b666d79839096a0a299928b8079706b625f5853514b4846443f40403f3e3e3f3f4041404446484b4c5154545c6063686d72797e838a91857a6d60554b4035291d100400000000000000000000000000000000000000000000000000000004111d2935414c5565727e8b9aa4aca095877a7d8999a3a9998d807366574d42362a1e12050004101d2935404b5565727f8b98a8a9988b7f7784919daaa8998c7f7366574d42362a1e120500000000000000000000000000000000000006111b28333f4a54606d7884919ea8aea2988d8073685e52463a30303030303030303030303030313d4a5764707d8a97a3b0a99c8f8276695c4f4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4847433c332a201509000000000000000000000a141e2834404a545f6a73808d95a09e92857a6d615a50443a3f4b5865727e8b98a99c8f8276665c504138424d576673808d99a69b8e8174677784919eab96897d706353493f3b4653606d7986929fa298887b6e6255483b2f221508000000000000000000000000000000000007121d27313d45515d67707d89939e9f93887d6f675d51453d30271c121d2935414c566875828e9bab998c7f7266574d42353f4953626e7b8897a29f92867a6d6053473a2d2014070000000000000000000000000000000000020b17222d38424e58606d7984919e9f93877c6f665c50443b303f4b5865727e8b98a9a49f969393939393939393939394979ea8a39b98939393877a6d6154473a2e2114070000000000000000000000000000000000020b17222d38424e58606d7984919e9f93877c6f665c50443b3f4b5865727e8b98a9a49f969393939393939393939394979ea8a39b98939393877a6d6154473a2e211407000000000000030c17202a343e44505b656d7a84919daab6b4b3a9a0959189817c7773706d6769686766676768666c6f72767b80868e939fa3aaa8a09792867c6f685e544b4034282015090000000000000000000000000c18232f3943505a616e7b859198a3acaca399928b80786f6a625f585653504a4e4d4d4d4e4a505355575e61696e757e869297a2aaaaa1969082786d60574e42372b21170b00000000000000000a151f2c3845515d6774808d9aa6b0a89c8f8275695e5346382e3030303030303030303030303030303030303845515c6774808d9aa6b0a79b8e8174685d5245392c201304000000000000000a151f2c3845515d6774808d9aa6b0a89c8f8275695e5346382e3030303030303030303030303030303030303845515c6774808d9aa6b0a79b8e8174685d5245392c201304000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000000000b17212a36424d57606c78818f959fa29892877e736d676059534e46454040434546464544423f3b3a373134383a3b3e4145474a5053565d60666d71787e847f73675d5143392f24180c000000000000000000000000000000000000000000000000000000000613202c3945515d6776828f9cacaa9d9184777a86929faa9d908477695e53463a2d2114070006131f2c3945515d6776828f9ca9a197887c74818d9aa7aa9d908377695e53463a2d211408000000000000000000000000000000000000000b17222d3844505c66717e8b96a1acaa9f92867a6e61564c413d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4a5764707d8a97a3b0a99c8f8276695c4f43404040404040404040404040404040404040404040404040404040403b3a37312a21180e0300000000000000000000020c18232e39424e58606d79839199a1978e81756c61564c41414e5b6774818e9aa79a8d807467544a3f2f3e4b5764717e8a97a49d9083776d7a86939fa399877b6e6154473b3845515c677784909daa978a7e7164574b3e3124180b0000000000000000000000000000000000010b151f2935404b55616b74818e97a19a9184796d60584e42392e2318202d3946525d687884919ea996897c706356493d31394653606c7985929fa398897c6f6356493c3023160900000000000000000000000000000000000006111c262f3c45515d67707d8a949e999083786d60574d42363f4b5865727e8b97a19a938a86868686868686868686878c97a39b918b868686867a6d6154473a2e21140700000000000000000000000000000000000006111c262f3c45515d67707d8a949e999083786d60574d423f4b5865727e8b97a19a938a86868686868686868686878c97a39b918b868686867a6d6154473a2e2114070000000000000008131e28313a46535e696f7d86929facb9b9ada29791837d75706b6663605d555b5a5a5a5a545b606265696e747b818a9298a2a9a9a19891847a6e665c51453c31261a0e050000000000000000000004101c2934404b55616c76828f97a1aaafa49a92877e736d665f58534e4946443f41404040413f4446484d53565e616c717c859298a2aca89f948d80736a5f53473e33281c10040000000000000004101d2935404b55626e7b88949fabac9f93877b6e61544a3f3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4753606d7985929eabaca095897c6f63564c4135291d11040000000000000004101d2935404b55626e7b88949fabac9f93877b6e61544a3f3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4753606d7985929eabaca095897c6f63564c4135291d1104000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000000000004101c28333a46525e69727f8b939ea39992867d716c605c554f47434446494d5051525352514f4c4847433c37332d2f2f35393a3f44464c52545c60656c7179796d60554b4131271f1911060000000000000000000000000000000000000000000000000000000714212d3a4754606d7a86929faca79a8d81747683909da9a095877b6e6154483b2f24180c000714202d3a4753606d7a86929fab9e928579717e8a97a7aca095877b6e6154483b3025190d0100000000000000000000000000000000000006111c28343f4a54606d7984919ea8aea2988d8073685e52494949494949494949494949494949494a5764707d8a97a3b0a99c8f8276695c4f43363434343434343434343434343434343434343434343434343434342f2e2b2620180f0600000000000000000000000007121c27303c45515c676f7c87939f9e938a7e70685d5246434f5c6976828f9ca5988b7f7265584c3f2e3c4956636f7c8996a29f9285786f7b889aa49f9286796c6053463934404b556975828f9ca5998c7f7266594c3f3326190c000000000000000000000000000000000000030d18242f3a434f59606d7a85919ea0968d80736a60544a4034281e212e3a4754616d7a8796a1a297877a6d6054473a2d3744505b6576828f9caa988b7f7265584c3f3225190c000000000000000000000000000000000000000a141d2935414b55616c75828f98a0958b7f72695e52463e3a4754616d7a85919a93867d797979797979797979797a8794a0988b7f7979797976685e5246392d201307000000000000000000000000000000000000000a141d2935414b55616c75828f98a0958b7f72695e52463e4754616d7a85919a93867d797979797979797979797a8794a0988b7f7979797976685e5246392d201307000000000000010d19242f3a43505a616e7b859299a3aebbb8ab9e92857a706b6360595653514b4e4d4d4d4e4a505355575e61696e757e869297a2aaaaa1969082786d60574e42372b21170b0000000000000000000006131f2c3845515c67707d8a949fa9b0a69f93887e716c605c544e47433c3a38342e3433342d3338393c42464d525a616a6f7c86929aa4afa69f92877b6e62594f44392d20150a00000000000000000c18242f3947535f6a7683909ca9afa4998c8073665c504949494949494949494949494949494949494949494e5864717e8b97a2adaa9d9083776b6054443a2f24190d0100000000000000000c18242f3947535f6a7683909ca9afa4998c8073665c504949494949494949494949494949494949494949494e5864717e8b97a2adaa9d9083776b6054443a2f24190d01000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000000000714202c38444f59616e7b86929fa59f92877d706b615a514b4344495053565a5c5e5f5f5f5e5c5955534e46443f382f27343c424a5053565b5d5f5f5b60666c6d675c51454039312b2317110a0200000000000000000000000000000000000000000000000004101c2834404b5464717e8a99a3aea7978a7e7173808d99aba7988b7f7265554b4035291d10040a1724303d4a5763707d8a98a3a89b8f82756e7a8795a0aca7988b7f7265564c4135291d1105000000000000000000000000000000000000000b17232e3844515c66727e8b96a1adaa9f92867a6d615656565656565656565656565656565656565764707d8a97a3b0a99c8f8276695c4f433629272727272727272727272727272727272727272727272727272722211f1a150e0600000000000000000000000000000b151e2834404b55606a73808d96a09e91857a6d61594f43505d6a7683909da4978a7e7164574b3e313b4855616e7b8894a19f9286796f7c8996ac9e918578655b5044372e414e5b6774818e9aa6998d8073665a4d4033271a0d0000000000000000000000000000000000000007131d28313d45525d68717e8a939e9f92877c6f665c51443c3026232f3c4956626f7c8995a89f928578685d5245392c333f49536774818e9aa79a8d8174675a4e4134271b0e00000000000000000000000000000000000000020b18242f3a43505a616e7b86929f9f92867b6e61594f433946525e68707d88939a92857a6e656c6c6c6c6c6c6d7a8794a0988b7f726c6c6c6c5e564c41362a1d110500000000000000000000000000000000000000020b18242f3a43505a616e7b86929f9f92867b6e61594f4346525e68707d88939a92857a6e656c6c6c6c6c6c6d7a8794a0988b7f726c6c6c6c5e564c41362a1d110500000000000004111d2935414c55626c76828f97a1abb5afacada2978e81776c605a504947454042414040413f4446484d53565e616c717c859298a2aca89f948d80736a5f53473e33281c1004000000000000000003101c28343f4a54606d7984919ea6b0aa9e948c7f736c625a504a423c37322d2c282327272722282b2d31363b42465058606a707e88939fa8aea3998f82766c6155493c31261b0f000000000000000007121d2b37434e5864717e8a97a1adab9e9184796d6056565656565656565656565656565656565656565656565f6a7683909ca9aea2988b7f7265594f4332281e130800000000000000000007121d2b37434e5864717e8a97a1adab9e9184796d6056565656565656565656565656565656565656565656565f6a7683909ca9aea2988b7f7265594f4332281e130800000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000000000a16232f3c4855616b75828f98a29d938b7e716b60595045414950535b606366696b6c6c6c6b6866625f58535049413d333d464e545b6063676a6b6c6c6b696663605c54514b433d3528221c140b02000000000000000000000000000000000000000000000006131f2c3845515c6675818e9babaca095877a6e707d8999a3a89c8f8275675d5145392c1f1306121f2b37434e586774818d9aaaa8988b7f72687784919daaa99c8f8376685e5246392d2013070000000000000000000000000000000000000006111c2834404a54606d7984919ea9aea2988d8073686363636363636363636363636363636363636364707d8a97a3b0a99c8f8276695c4f4336291c1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1514120f0903000000000000000000000000000000030c18232e39434e58606d7984919aa1978e81746b61564c515e6a7784919da3978a7d7064574a3d313b4754616e7a8794a1a399867a707d8a96a39e9184776b5e493f3334414d5a6774808d9aa79a8d8174675a4e4134271b0e000000000000000000000000000000030608090d0c161f2935414c56616c75818f97a2999083786d60584e42382e23313e4a5764717d8a97a49d9084776a564c4135292d404c5966737f8c99a69c8f8276695c4f4336291c10000000000000000000000006060606060606060007131d28313e46535e69727f8c95a0988e81756b61554b40414c56616b74808d95978f82776c6058606060616d7a8794a0988b7f726560605f524c443a3025190d010000000000000000000000000000020608080c0e07131d28313e46535e69727f8c95a0988e81756b61554b414c56616b74808d95978f82776c6058606060616d7a8794a0988b7f726560605f524c443a3025190d010000000000000613202c3945515d67717e8b949fa9b3aba39fa3a99e938c80736c61584e453b352f3433342d3338393c42464d525a616a6f7c86929aa4afa69f92877b6e62594f44392d20150a000000000000000006121f2b3844505c66727f8c96a0acaea2988f82776c605a50443f38302b26201f1c171a1a1a171c1f20252a30363e464e58616c73808d96a1acab9f948a7d7064584e43372b1d120700000000000000010f1a26313c4653606d7985929eacada1968a7d70646363636363636363636363636363636363636363636363636e7b88949fabac9f92867a6d6054473d3221160c01000000000000000000010f1a26313c4653606d7985929eacada1968a7d70646363636363636363636363636363636363636363636363636e7b88949fabac9f92867a6d6054473d3221160c0100000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000007131f2c38434f5963707d8a949ea1978e81746c62594f47444c535b60656c6f7376787979787775726e6a64605b534e443f464e585f666c707477787979777673706d66605d554f4740332d261d140a00000000000000000000000000000000000000000000000713202d3a4653606d7985929fabaa9d908477686d7a86929fac9f92867a6d6053473a2d20140a15212e3a47535f6a7884919eaba196887b6e6774818d9aabac9f92867a6d6154473a2f24180c00000000000000000000000000000000000000000c18232e3945515c66727f8b97a1adaa9f92867a707070707070707070707070707070707070707070707d8a97a3b0a99c8f8276695c4f4336291c100d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0808060200000000000000000000000000000000000007121d27303d45515d67707d88939f9e938a7d70685d52515e6b7884919ea3968a7d7063574a3d303a4754616d7a8794a0a194877a717d8a97a49d9184776a5e51442d34404d5a6773808d9aa69b8e8175685b4e4235281b0f00000000000000000000000000040a0f1315161a1d1f1924303a44505a616e7a85929ea0958c7f736a5f544a3f3428323f4b5865727e8b98a59c8f8376695c50432f24323e4b5865717e8b98a49d9083776a5d5044372a1d1100000000000002060a0c0d131313131313131313130c161f2a36424d57606d788390999e938a7d70675d51453c444f59606d79839098948c7f726a60554b54616d7a8794a0988b7f726558535346413a32281e13080000000000000000000000000003090e121415191b1d1e161f2a36424d57606d788390999e938a7d70675d5145444f59606d79839098948c7f726a60554b54616d7a8794a0988b7f726558535346413a32281e130800000000000004111d2935414c55606d7a85929ea6b0aaa2999299a1a59c928a7e716a60574d43392f26272722282b2d31363b42465058606a707e88939fa8aea3998f82766c6155493c31261b0f00000000000000000713202d3a4653606d7884919ea8b2a99f92867b6e655b50483e342e261e1b1312100c060d060b0f12131a1f252a343d46505a606d7984919ea8b0a69c8f83766a5f5347392e23180c000000000000000009151f2c3845515c6673808d9aa4afa99c8f82757070707070707070707070707070707070707070707070707074808d9aa6b0a79b8e8174685d5245392c201304000000000000000000000009151f2c3845515c6673808d9aa4afa99c8f82757070707070707070707070707070707070707070707070707074808d9aa6b0a79b8e8174685d5245392c2013040000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000000000915222f3b4854606b7683909da69e91857a6d605a5047454d565e656c71787c80838485868584827f7b77716c65605850494e58606a6f787d81838586858483807c78726d67605952443f382f261c1106000000000000000000000000000000000000000000030f1b27333f495363707d8a98a2aeaa9a8d807367677683909ca9a3988a7d7063574a3d31261b0f15222f3c4855626f7b8896a1ab9e9184786a64717d8a99a3afa3998b7e7164554b4035291d10040000000000000000000000000000000000000007121c2834404b54606d7985919ea9aea2988e817c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7f8c99a6b2a99c8f8276695c4f4336291c1003010101010101010101010101010101010101010101010100000000000000000000000000000000000000000000000b151e2935404b55606b74818d96a19e91847a6d60594f5e6a7784919da3978a7d7064574a3d313b4754616e7a8794a1aa93877a707d8a96a39e9184776b5e51442f34414d5a6774808d9aa79a8e8174675b4e4134281b0e0000000000000000000000040a0f151b1f212226292b2c2c28323e46525e68717e8b949e9f92877c6f665c50443c2f33404c5966737f8c99a69c8f8275695c4f423629313e4b5764717e8a97a49e9184786b5e5145382b1e120000000000070d121619192020202020202020202020201a25313b44505c666f7c87939f9e9184796d60584e413d45515c676f7c86929f92867c6f675d5154616d7a8794a0988b7f7265584c3f3936302820160c020000000000000000000000060c11151a1e212226282a2b2c2c25313b44505c666f7c87939f9e9184796d60584e4145515c676f7c86929f92867c6f675d5154616d7a8794a0988b7f7265584c3f3936302820160c020000000000000613202c3945515d67737f8c97a2adaea29892869196a1a49f92867c6f695e554b41382d2217171c1f20252a30363e464e58616c73808d96a1acab9f948a7d7064584e43372b1d120700000000000005111e2a36414c5664707d8a96a1adada1978c7f72695e53493f3628231c140c0a060300000000000306090e1419222b343e45515d67717e8a96a0acab9f94887c6f62544b4034281c10040000000000000004101c2834404b54616e7b87939facac9f93877d7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7d85929fabaca095897c6f63564c4135291d1104000000000000000000000004101c2834404b54616e7b87939facac9f93877d7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7d85929fabaca095897c6f63564c4135291d11040000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000005111e2a36424d56636f7c89959f9f958a7e71685d5248434d575e686d777e84898d8f91929292918f8c88837e786f6a605b5354606a6f7c83898e9092929291908c89847f796f6b635c504a42382d22171007000000000000000000000000000000000000000005121f2b3744505b6574818e9aaaaea398897d70636673808c99a9aa9a8d817467584e43372b1f121d2935414c5666727f8c99a8ac9b8e817468606d7a86929facab9b8f8275675d5145382c1f130600000000000000000000000000000000000000000c18232e3945515d67727f8c97a1adaa9d938e898989898989898989898989898989898989898989898c919ca8b5a99c8f8276695c4f4336291c100300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c18242f39434f59606d7984919ea1968e81746b60555d6a7783909da4978a7d7164574a3e313b4855616e7b8894a1a2988679707c8996a39e9184786b564c413534414e5b6774818e9aa69a8d8073675a4d4034271a0d00000000000000000000070e151b20262b2e2f3336383939393736414c56626c76828f98a2999083786d60574d41382d404d596673808c99a69b8e8275685b4f423528313d4a5764707d8a97a39e9285786b5f5245382c1f12000000010a12191e2325262d2d2d2d2d2d2d2d2d2d2d2d2d2d28343f4a54606a74808d97a1968d80736a5f53493f404b555f6a727f8b94999184796d605a54616d7a8794a0988b7f7265584c3f322a251e160e050000000000000000000002090e171d1f262b2e2f3235373839393938343f4a54606a74808d97a1968d80736a5f5349404b555f6a727f8b94999184796d605a54616d7a8794a0988b7f7265584c3f322a251e160e05000000000000000714212d3a4754606d7a85929fa9b3a99f92867c849198a2a29891847b6e675d53493f332722190f12131a1f252a343d46505a606d7984919ea8b0a69c8f83766a5f5347392e23180c0000000000000714202d3946525e6876828f9ca8b2ab9e9185796d60574d41382d2417110a02000000000000000000000002091019222935404b55606c7884919dabb0a69a8e8174665c5145382c1f130600000000000000000c18232e3946535f6976828f9ca9afa499938a89898989898989898989898989898989898989898989898989899297a2adaa9d9084776b6054443a2f24190d010000000000000000000000000c18232e3946535f6976828f9ca9afa499938a89898989898989898989898989898989898989898989898989899297a2adaa9d9084776b6054443a2f24190d010000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000714202d3a46525e6975828f9ba79d9083766c61564c414b555e696e7a828b9196999c9e9f9f9f9e9b9995908a837c726c655c5c666f7c8690959a9d9e9f9f9e9c9996918b847d736e605b544a3f332822190c02000000000000000000000000000000000000000613202d394653606c7885919eabac9f9286796d60636f7c8997a2ab9e9184786a5f53473a2e2115202c3945525d687683909ca9a49a8a7e71645d687683909ca9ac9f9285796d6053473a2e23170b000000000000000000000000000000000000000007121d2935404b55606d7985929ea9afa59d9a96969696969696969696969696969696969696969696999ca3adb5a99c8f8276695c4f4336291c100c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0706040000000000000000000000000000000000000000000000000007121d27313d45515d67707d89939d9d93897d70675d5c6976838f9ca4988b7e7165584b3e323c4855626f7b8895a29f9285796f7c8895a99f928578685d52453935424e5b6875818e9ba6998c807366594d4033261a0d00000000000000000109101920272b32373b3c40434546464544423e44505a616e7b86929f9f958c7f72695f53493f33404d5a6673808d99a69b8e8174685b4e413528303d4a5663707d8996a39f9285786c5f5245392c1f120000000a131c232a2f32333939393939393939393939393939392e38424e58606d7a85919e9f92877c6f655b50443a434e58626d75828f97968e81746c6157616d7a8794a0988b7f7265584c3f322519130c0500000000000000000000050d141a22282d31373a3b3f414445454646454441424e58606d7a85919e9f92877c6f655b5044434e58626d75828f97968e81746c6157616d7a8794a0988b7f7265584c3f322519130c050000000000000006121e2b37424d5765727e8b97a2adada1978c7f727c86929aa4a1969083796d655b50443e342b20170d090e1419222b343e45515d67717e8a96a0acab9f94887c6f62544b4034281c100400000000000814212e3b4754616e7a87939facafa3998c7f72675d51453b2f261b1206000000000000000000000000000000071018242f3944505b66727e8b99a3aeac9f9285796d6053463a2d201308000000000000000007121d2a36424d5764707d8a96a1adaba49f9796969696969696969696969696969696969696969696969696969fa2a9aea2988b7f7265594f4332281e13080000000000000000000000000007121d2a36424d5764707d8a96a1adaba49f9796969696969696969696969696969696969696969696969696969fa2a9aea2988b7f7265594f4332281e1308000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000814212e3b4754616e7b87939fa1968a7e71645a504445515d676e7b848f949ea0a8a39f9c9a999a9b9e9f9d9590877f776d66606d79849198a0a79f9d979595989c9f9e96918780746c665b50443f342b1e140a00000000000000000000000000000000000000091623303c4956636f7c8997a1ada99c8f8276675d606d7985929faba196887b6f6255483c302419212d3a4754606d7a86929fac9f93877a6e615666737f8c99a8aea2988a7d7064544a3f34281c100300000000000000000000000000000000000000000c18242f3945515d67727f8c97a2adafa9a7a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a6a8adb5b5a99c8f8276695c4f4336291c1919191919191919191919191919191919191919191313100c070000000000000000000000000000000000000000000000010b151f2935414b55606b74818e97a19e9184796d60596875818e9ba6998c807366594d40313d4a5763707d8a96a39e9184776e7a8797a1a298877a6d6054473a36424d57697683909cac988b7e7265584b3f3225180c00000000000000010a131b222b32373c4347494d5052525352514e4b4746535e69727f8b949f9f92867b6e655b50443b404d5a6673808d99a69b8e8174685b4e413528303d4a5663707d8996a39f9285786c5f5245392c1f12000007121c252e353b3e4046464646464646464646464646464646464645525d68717e8a949f999083776c60564c413c46515b616d7a85919a938a7e71695e616d7a8794a0988b7f7265584c3f322519080200000000000000000000060f171f252a34393c4247484c4e505152535252514e4c48525d68717e8a949f999083776c60564c4146515b616d7a85919a938a7e71695e616d7a8794a0988b7f7265584c3f322519080200000000000000000814212e3a47535f697683909da9b3ab9e9185796d717e88939fa59f958e81776c605a50463c32291f150b02091019222935404b55606c7884919dabb0a69a8e8174665c5145382c1f130600000000030f1b27333f495364717e8b9aa4afac9f92867a6e61554b4033291d140a000000000000000000000000000000000007121d28333f4a54616d7a86929facaea298897d706356493d2f24190d0100000000000000000e1a26313b4653606d7984919eabb5afaca3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3abadb3ac9f92867a6d6054473d3221160c0100000000000000000000000000000e1a26313b4653606d7984919eabb5afaca3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3abadb3ac9f92867a6d6054473d3221160c01000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000004101d2935404b5565727e8b99a49e9184786d605346434e58606d798391969fa6a49f9992908e8d8d8e91969a9f99928c81786d66717e8a96a0a89f95908a88898b8f949da099938c81786c605b51463d30261c1106000000000000000000000000000000000006121f2b37434e586773808d9aa9b2a8988c7f7265555c6675828f9ba8a8998c7f7266564c4135291d27333f495364717d8a99a3aa9d908377685e55626f7c8896a1adaa9b8e8174665c5044382b1f1206000000000000000000000000000000000000000007121d2935404b55606d7a85929faab3b5b4b1acaa9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa3a6abb4b5a99c8f8276695c4f43362926262626262626262626262626262626262626262626201f1c18120b0300000000000000000000000000000000000000000000030d18242f3a434f59606d7a84919ea1968d80746b6066727f8c99ab9b8e817568574d42373f4a5465727f8b98a59b8f8275697885929eaa95887c6f6255493c3a46535e697885919ea49a897c6f6256493c2f231609000000000000000a131c252d343c43474e5355595c5e5f5f5f5d5b5853514d57606c77829098a3989082776c60574d42404d596673808c99a69b8e8175685b4e423528303d4a5763707d8a96a39e9285786b5f5245382c1f1200020d19232e3740464b4c535353535353535353535353535353535353534c56616c76828f989f948b7e71685e52463d3f46525e68707d88939f92857b6e66616d7a8794a0988b7f7265584c3f3225190c00000000000000000000060f18212930363e45494d5355595b5d5e5f5f5f5e5d5b58555356616c76828f989f948b7e71685e52463f46525e68707d88939f92857b6e66616d7a8794a0988b7f7265584c3f3225190c0000000000000000000815222f3b4855626e7b88959fabafa3998c7f73676c73808c939ea79e938c7f736c61584e443b31271d120700071018242f3944505b66727e8b99a3aeac9f9285796d6053463a2d2013080000000005121f2b3744505b6575818e9bacb6a99c8f8276685e5243392f21170b020000000000000000000000000000000000010b17222d3846525d6875828f9ca8b4aa9a8d807367564c4135291d1104000000000000000009141f2c3844505c6673808c99a3afbbb9b1acaa9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa7a9afb8bab1a79b8e8174685d5245392c20130400000000000000000000000000000009141f2c3844505c6673808c99a3afbbb9b1acaa9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa7a9afb8bab1a79b8e8174685d5245392c20130400000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000613202c3945515d6775828f9ca8998c7f72665c50444854606a74808d95a0a8a499938d87838180808184888d92989f938e81786c74818e9ba8a09690837d7b7c7e828991969f9f938e81746d62584e42382e23170b01000000000000000000000000000000000815212e3a47535f6a7784919eaaaca196887c6f62555465717e8b98a7a99c908376685d5246392d202b3744505b6574818e9babaa9a8d80736756535f6a7884919eabab9e9285796d6053463a2d20130a0000000000000000000000000000000000000000010d18242f3945515d6773808c98a2aebab1a7a09d93939393939393939393939393939393939393979aa2abb5a99c8f8276695c4f433633333333333333333333333333333333333333333333332d2c28231d150c030000000000000000000000000000000000000000010407131d28313d45525d68707d8a939e9f93887d6f6763707d8a99a39e918478695f53473f44505c6675818e9ba9998c7f736976838f9ca5988b7f7265574d423f4854616e7b8796a19f93867a6d6053473a2d20140700000000000008121c252e373f464e54585f6266696b6c6c6c6a6864605d55515b656e7b86929f9f948b7f72695e5346404c5966737f8c99a69b8f8275685c4f423529313e4a5764717d8a97a49e9184786b5e5145382b1e120006121e2a3540495157596060606060606060606060606060606060606060605a616e7b86929f9e92857a6d61594f4239414c56616b74808d95979083786d616d7a8794a0988b7f7265584c3f3225190c000000000000000000030d18212a333b42465055575f6265686a6b6c6c6c6b6a6865615f575a616e7b86929f9e92857a6d61594f42414c56616b74808d95979083786d616d7a8794a0988b7f7265584c3f3225190c0000000000000000030f1c28333f4a5465727f8b98a7b1ac9f92867b6e61606c77818e95a0a59f93887e716a60564d43392f231812080007121d28333f4a54616d7a86929facaea298897d706356493d2f24190d010000000613202d394653606c7885929eabb3a9988b7f7265564c4131271d0f050000000000000000000000000000000000000006111c2935414c5665727f8b98aab4aa9d918477685d5245392c201306000000000000000003101c28343f4a54616e7b87929facb9b1a7a0939393939393939393939393939393939393939393939b9ea5afb8aca095897c6f63564c4135291d110400000000000000000000000000000003101c28343f4a54616e7b87929facb9b1a7a0939393939393939393939393939393939393939393939b9ea5afb8aca095897c6f63564c4135291d110400000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000714202d3a4753606d7a86929fa096887b6e62544a414d56626f7c87939fa7a4999387807a7674737375777b80868e939f938c807376838f9ca99e918478706e6f71767d848f949f9d938b7f726a60544a3f34281d1207000000000000000000000000000000000915222f3c4855626f7b8896a0acab9e9184786a5f5354616e7b8795a0ac9f92867a6d6154473a2d222d394653606c7885929eaba298897d7063564e586774818e9aaaada197897c706356493d32261b0f03000000000000000000000000000000000000000007121d2935414c55606d7a85929faab4aca09591868686868686868686868686868686868686868a909aa6b5a99c8f8276695c4f433f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3a38342e271e150b00000000000000000000000000000000000001080d111314161f2935414c56616c75818e97a19a9184796d616d7a86929fa196887b6e6259504a4e56606d7985919ea197897d706673808d99a79c8f8275695f544d4a505b65717e8b98a99d908377675d5145392c2013060000000000040e1a242e374049515860626a6f7376787979787775716d67605c555f69727f8c959f9f92867b6e615a50444b5865727e8b98a59c8f8276695c4f432f24313e4b5864717e8b97a49d9083776a5d5044372a1d11000a16232f3b46515b63666c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b69727f8c95a0978e81746b60544b403a444f59606d79839098958c80736b6d7a8794a0988b7f7265584c3f3225190c0000000000000000010b151f2a333c454d525a6164696e72747778787979787774726e6963605f69727f8c95a0978e81746b60544b40444f59606d79839098958c80736b6d7a8794a0988b7f7265584c3f3225190c000000000000000006121f2b3844505b6676828f9ca9b5a99c8f8276685e5b656d79839097a1a49a92867c6f685e554b403429241a1006010b17222d3846525d6875828f9ca8b4aa9a8d807367564c4135291d11040000000815222e3b4855616e7b8897a1adada197887b6e6255483b3022150b0000000000000000000000000000000000000000000d1924303c4855626f7b8898a2aeaca095877a6d6054473a2d2114070000000000000000000c17232e3846525e6975828f9ca8b2aca095898686868686868686868686868686868686868686868e939ea9b4aa9d9084776b6054443a2f24190d01000000000000000000000000000000000c17232e3846525e6975828f9ca8b2aca095898686868686868686868686868686868686868686868e939ea9b4aa9d9084776b6054443a2f24190d0100000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000a1724303d4a5763707d8a98a39e9184776a5f534246525e6875828f99a4a89f93877e746d6867666768696e737a818b929893887d7783909da5988c7f72666262656b707a828f959f9f92877c6f665c5044392f24180d00000000000000000000000000000005121e2a36424d5766737f8c99a8b2aa9a8d807467584e525e697783909daaa3998a7e7164544a3f33282f3c4956626f7c8997a1ab9f9285796d60534a5764707d8a98a3aea99a8d807467584e43372b1f13060000000000000000000000000000000000000000010d19242f3a45525d6873808d98a2aeaa9d9184777979797979797979797979797979797979797e8a97a3b0a99c8f8276695c4f4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4645403930271d120700000000000000000000000000000001070c13191d20212428242f3a444f59616d7a85929ea0968d80736a6876828f9ca89a8d80746b605b54585f68707d8a97a19e9185796d626f7b8895a09f93877b6e665e57545c606d7683909da4998c7f7266554b4035291d110400000000020c16202c364049525b626a6f767c80838585868584817e7a736d675e57606d78839099a2988f82766c62564d4a5764717d8a97a49d9083776a554b403529323f4c5965727f8c98a59c8f8276695c4f4336291c10000c1925323e4b57636d737979797979797979797979797979797979797979797978736d7883919a9e93897d70665c51453c3d45515c676f7c86929f93877d706d7a8794a0988b7f7265584c3f3225190c000000000000000007121d27313c464e575e616c71777b7f8183848586858584817f7b76706b60606d7883919a9e93897d70665c51453d45515c676f7c86929f93877d706d7a8794a0988b7f7265584c3f3225190c00000000000000000613202d394653606c7985929facb3a9988b7f726556535d676e7b859198a3a29891847a6e675c514540362c22180e0506111c2935414c5665727f8b98aab4aa9d918477685d5245392c2013060000000a1724303d4a5763707d8a96a9b3ab9e928578695f53473a2e2114030000000000000000000000000000000000000000000813202d394653606c7985929facb1a795897c6f6256493c2f23160900000000000000000006111c2a36424d5763707d8a96a1acaa9d9083797979797979797979797979797979797979797979818e9ba7aea2988b7f7265594f4332281e1308000000000000000000000000000000000006111c2a36424d5763707d8a96a1acaa9d9083797979797979797979797979797979797979797979818e9ba7aea2988b7f7265594f4332281e13080000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000c1926333f4c5966727f8c99aa9a8d807467584e434754616e7b86929faba1968c7f736c615e565a5a575f61686d757e86929891857a83909ca3968a7d706354565960686d79839096a1999083786d60554b4035291c110600000000000000000000000000000714202d3a46525e697783909daaaea298897d7063564a4d566673808d99a9ab9b8e8175665b5044382b36414c566673808c99a9ab9b8e8275665c514753606d7a86929facab9e9184786a5f53473b2e21150900000000000000000000000000000000000000000008131e2935414c56616d7a86929faaaca0958a7d706c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c707d8a97a3b0a99c8f8276695c595959595959595959595959595959595959595959595959595953514b43392e23180c0000000000000000000000000000030b12181e24292c2d31353738323e46525e68717e8a939e9f93877c6f67717e8a95a09f92877d716c6667676a6e7a84919ea2988d8073665f6a7783909da4998f82786e696767666d727f8b959f9f93877b6e6154483b2f24180d010000000008131e28323e48525b636d727c82888c8f91929292908e8b857f796e695e5c666f7c87929f9f948b7e71685e524956626f7c8995a99e918578675d5145392c34404d5a6773808d9aa69a8e8174675b4e4134281b0e000d192633404c5966737f868686868686868686868686868686868686868686868578666f7d88939f9d9184796d60574d4237404b555f6a727f8b94999184796d7a8794a0988b7f7265584c3f3225190c00000000000000000c18242f39434e585f696e767e83888c8e909192929291908e8b87827d746d67666f7d88939f9d9184796d60574d42404b555f6a727f8b94999184796d7a8794a0988b7f7265584c3f3225190c00000000000000000815222f3b4855626e7b8898a2aeada197887b6e62554b555e696f7c86929fa4a1969083796d605b51483e342a20170c030d1924303c4855626f7b8898a2aeaca095877a6d6054473a2d2114070000000c1926323f4c5965727f8c98a5b2a99c8f837669574d42372b1e120600000000000000000000000000000000000000000006121f2b3844505b667783909daab1a4978b7e7164584b3e3125180b000000000000000000000e1a25303b4653606c7884919eabaca095897c6f6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6d7a86929facac9f92867a6d6054473d3221160c010000000000000000000000000000000000000e1a25303b4653606c7884919eabaca095897c6f6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6d7a86929facac9f92867a6d6054473d3221160c010000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000030f1b27333f49536874818e9bab978a7e7164574b3f4c5965727f8c99a3ab9e9184796d605a524c4d4d4d53565e616c717d8692978d80828f9ca396897c706356494f565d676e7a84919ea0958b7f72675d5145382d22170b00000000000000000000000000000815212e3b4854616e7b87939facab9f9285796d6053464956636f7c8997a1ab9e9285796c605346392d3946525e687783909daaa4998b7e7164544b45515d6776828f9ca9aca196887c6f6255493c31261a0e020000000000000000000000000000000000000000010d1924303a46525e6873808d98a3aea79c9083766b606060606060606060606060606064707d8a97a3b0a99c8f827669666666666666666666666666666666666666666666666666666666605c554b4034281c1004000000000000000000000000060d151d24292f35393a3e4144454645414c56616c75828f97a2999183796d6d7984919da39992857e78757474767b839096a19f92867b6e615864717d8a949e9f948f827b76747475797f87929fa1978e8174695e52463a2d1d130700000000010d1924303a44505a636e737f878f94999c9e9e9d9e9d9b98928c837b6e695e5f6a73808c95a09f92857b6e615a5054616d7a8797a1a197867a6d6053473a2d35414c566875828f9bac998c7f7266594c3f3326190c000d192633404c5966737f8c93939393939393939393939393939393939393939185786b6b74818e97a0968c7f73695f53463e39434e58626d75828f97968d80747a8794a0988b7f7265584c3f3225190c0000000000000004101d2935404b555f6a6e7b838a9095989b9c9a989898999c9b9a938f8981796d676b74818e97a0968c7f73695f53463e434e58626d75828f97968d80747a8794a0988b7f7265584c3f3225190c00000000000000000b1824313e4b5764717e8a97aab4ab9e928578695f53474d57606a717e8a929ca59f958e81756d635a50463c32291e150b0813202d394653606c7985929facb1a795897c6f6256493c2f2316090000000e1b2834414e5b6774818e9aa7b3a79a8d8074675a4d4131261a0e02000000000000000000000000000000000000000000030f1c28333f4a546875818e9ba8b3a6998d8073665a4d4033271a0d0000000000000000000009141f2b3844505b66727f8c99a3aea79a8d8174675c606060606060606060606060605765717e8b98a2aea79b8e8174685d5245392c2013040000000000000000000000000000000000000009141f2b3844505b66727f8c99a3aea79a8d8174675c606060606060606060606060605765717e8b98a2aea79b8e8174685d5245392c201304000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000005121f2b3744505b657783909da499887c6f625549424d566875828f9baba9998c7f73675c514641404042474c525a626b707d8792928785919ea3968a7d7063574a434c555e68707d8a939e9f9285796d60544a3f33281c0f0300000000000000000000000004111d2935414c5665727f8b9aa4afab9b8e8275665c51444653606d7985929eaba197897c6f6356493c303a4754616d7a87939fac9f93867a6d615447404b5565727e8b98a7b1a8998c807366574d42362a1e120500000000000000000000000000000000000000000008131e2a36414c56616e7a86929fabab9f94897c6f63574e535353535353535353535764707d8a97a3b0a99c8f8276727272727272727272727272727272727272727272727272727272726d675c5145382c1f13060000000000000000000000060f181f272f353a4145474a4e505253525150505a616e7a85929fa0958d80736a707d89919fa297928a8482808183879095a09e938c7f72695e55616c75828f95a09f948f8783818082858b9299a29892857a6d61574d42362a1e0c010000000005111d2935414c56616c73808c92999f9f9992919091979c9e9f9590847b6e675c606d79839099a2978f82756c6156525e687885919ea995897c6f6256493c303946525d687784919ea49a897d7063564a3d3023170a000d192633404c5966737f8c999999999999999da0a7a9a29f999999999999999185786b616d7a85929e9f92867b6e615a50443a3c46515b616d7a85919a93887d7a8794a0988b7f7265584c3f3225190c0000000000000006131f2c3945515d676e7c8490959d9d9993908d8b8b8b8d8f92999f9c938e82796d616d7a85929e9f92867b6e615a50443c46515b616d7a85919a93887d7a8794a0988b7f7265584c3f3225190c00000000000000000d1a2633404d596673808c99a6b3a99c8f827669574d42454e58616c73808d939ea79e938c7f736c61584e443b30271d1207121f2b3844505b667783909daab1a4978b7e7164584b3e3125180b000000101c2936434f5c6976828f9ca9b2a5998c7f7266594c3f3326190900000000000000000000000000000000000000000000000b17222d404d5a6773808d9aa6b3a89b8e8175685b4f4235281c0f00000000000000000000030f1c28333f4a54616e7a86929facab9f9285796d60535353535353535353535353535f697683909caaaca095897c6f63564c4135291d110400000000000000000000000000000000000000030f1c28333f4a54616e7a86929facab9f9285796d60535353535353535353535353535f697683909caaaca095897c6f63564c4135291d1104000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000613202d394653606c7985929f9f93867a6d60534746525e697885919eaba297887b6e62554b40363031373a41465059616b727f8b93929197a1a4978b7e7164584b3e434c56616c75828f9ba2978b7f72665b5044382b1f12060000000000000000000000000713202c3945525d6876828f9cacafa3998a7e7164544a4044505c6675818e9baba9998c807366574d42363f4a5464717e8b9aa4a99d908376685e52463b4854616e7b8795a0acaa9d908377695f53463a2d211408000000000000000000000000000000000000000000020d1925303a46525e6874808d99a3aea69b8f82756a5f534746464646464646464a5764707d8a97a3b0aa9d91847f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f796d6053463a2d20130700000000000000000000060f18212a313940454c5254575b5d5e5f5f5e5d59565e68717e8b949e9f92877c6f6b737f8c93999e9f97918e8d8e90939aa09e938e81786d6056505a616e7a8390959e9f9993908e8d8e92979f9f9892867d70685e52453b30251a0e00000000000713202d3946525d68717e8a929fa198928b86848385888f949da0969083796d605c666f7c87939f9e938a7e71685e52566975828f9ca5988b7f7265574d42363b4754616d7a86939f9f93867a6d6154473a2e211407000d192633404c5966737f8c8c8c8c8c8c8c8c9095a0a297928c8c8c8c8c8c8c8c85786b5d68717e8b949f988f82766c61564c41353f46525e68707d88939a91847a8794a0988b7f7265584c3f3225190c00000000000004111d2935414c55606d798391969f9b938e8783807f7e7f8082878f949e9d948e81746a68717e8b949f988f82766c61564c413f46525e68707d88939a91847a8794a0988b7f7265584c3f3225190c00000000000000010e1b2834414e5b6774818e9aa7b4a79a8d8174675a4e413d46505a606c77818f95a0a59f93887e706a5f564c43392e2318110f1c28333f4a546875818e9ba8b3a6998d8073665a4d4033271a0d000000101d2a3643505d697683909ca9b1a4978a7e7164574b3e3124180b0000000000000000000000000000000000000000000000061926323f4c5965727f8c98a5b2a89c8f8275695c4f4236291c0f00000000000000000000000b17222d3846525e6875828e9ba8ada2978a7e7164574d42464646464646463f4a54626e7b88949fabaa9d9084776b6054443a2f24190d0100000000000000000000000000000000000000000b17222d3846525e6875828e9ba8ada2978a7e7164574d42464646464646463f4a54626e7b88949fabaa9d9084776b6054443a2f24190d01000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000714212d3a4754606d7a8798a29e918478675c51454754616e7a8797a1ab9e928578695f5343392f25262b30363e474f59626d74818e979ea1a9a6998c7f7366594c403b444f59626f7c88949e9e9184786c605346392d22170b0000000000000000000000000714212d3a4754606d7a86929facac9f92867a6d6054473a3f4a5464717e8a99a3aa9d908377695e52463a44505c6675828e9baca8998c7f7366564c413a46535e697783909daaaca095887b6e6155483b3025190d0100000000000000000000000000000000000000000008131e2a36414c56616e7b86929fabac9f93877b6e62564d423639393939393d4a5764707d8a97a3b0aca096918c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c877a6d6054473a2d211407000000000000000000030c18212a333c434b51565d6064686a6b6c6c6b69666260626c76828f98a2999083786d6d737f878f94989b9d9b9a9a9d9c9996918a81786d665c5046525e686e7a838b92979a9c9c9a9a9b9d9b9a938e867d706b60564c4133291f14090000000004111d2935414c56616d7a85929ea19792867f7a7776787c828d929d9f958c7f73685e606a73808d96a09e92857a6d61595965727f8c98a79c8f8275695e524641444f5964717e8a9aa49d908377685e5246392d20130700091623303c4956636f7d808080808080808083909d9f928580808080808080807f726556626c76828f989f948a7e71685d52453d36414c56616b74808d95958c808c99a5988b7f7265584c3f3225190c0000000000000613202c3945515d6773808d95a09b918c817b767372717273767b828f939e9f93877c6f626c76828f989f948a7e71685d52453d414c56616b74808d95958c808c99a5988b7f7265584c3f3225190c0000000000000003101c2936434f5c6976828f9ca9b2a5988c7f7265594c3f343e44505b656d79839097a1a49a92867c6f685e554b403428231a1017222d404d5a6773808d9aa6b3a89b8e8275685b4f4235281c0f020000111e2a3744515d6a7783909daab0a3968a7d7063574a3d3024170a00000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4b1a99c908376695d5043362a1d10000000000000000000000006111c2a36414c5663707d8996a0aca99c8f8276695e5246382d393939393844505c6673808d99a6aea2988b7f7265594f4332281e130800000000000000000000000000000000000000000006111c2a36414c5663707d8996a0aca99c8f8276695e5246382d393939393844505c6673808d99a6aea2988b7f7265594f4332281e130800000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000815212e3b4854616e7b8794aa9d9083776a554b404955626f7c8895a9a99c8f837669574d4231271d1a1e252a353e47515b616d7a85929ea7b1a79a8e8174675b4e41323e47535f6a75828f9ca096897d7063544a3f33281c0f030000000000000000000004101c2934404b5564717e8b99a3afa99c8f8376685d5245393a4754606d7a86929faca095877b6e6154473b4653606d7985929faba196887c6f6255493c36424d576673808d99a9b1a7988c7f7265564c41362a1d1105000000000000000000000000000000000000000000020e1925303b46525e6974818d99a3afa49a8e8174695e52463a2f242d2d313d4a5764707d8a97a3b0b2a8a09d99999999999999999999999999999999999999999999999999999993877a6d6054473a2d2114070000000000000000000b151e2a333c454d555d60686d7174777879787776736f6c65616e7b86929fa0958c7f736a6d727c82888b8f9091929291908d89847d756d665c544a414c565e686d787e85898d9091929291908f8b87817b706b60594f443a3021170d02000000000713202c3945525d6873808d97a19e92857c726d676a6a6f77808d95a09f92867a6e6158606d7984919aa1978e81756b6155616e7b88959f9f92867b6e615a524d5056606b75828f9ca4998c7f7366564c4135291d1105000915222f3b4854606b6f7373737373737374818e9b9e91847873737373737373726d62575a626e7b86929f9e91857a6d60584e42383a444f59606d798390989285929fa5988b7f7265584c3f3225190c0000000000000714212d3a4754606d7a85929f9e948c7f746e696765656566696e78818f98a39a8e817566626e7b86929f9e91857a6d60584e423a444f59606d798390989285929fa5988b7f7265584c3f3225190c0000000000000004111d2a3744505d6a7783909daab1a4978a7e7164574b3e31333f49535d676e7b859299a3a29891847a6e675c51453f352c22181926323f4c5965727f8c98a5b2a89c8f8275695c4f4236291c0f030000111e2b3844515e6b7784919eaaafa396897c706356493d3023160a00000000000000000000000000000000000000000000000b1824313e4b5764717e8a97a4b1aa9d9083776a5d5044372a1d110000000000000000000000000d1925303b4854606b7784919daaac9f93877b6e6153493f33272d2d2d3a4653606d7984919eabac9f92867a6d6054473d3221160c01000000000000000000000000000000000000000000000d1925303b4854606b7784919daaac9f93877b6e6153493f33272d2d2d3a4653606d7984919eabac9f92867a6d6054473d3221160c0100000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000815222f3b4855626e7b8895a19c8f8376695c5043495663707c8996a3a89b8e8175685b4e423128150e1319232c353f46525d68717e8a95a0aca99c90837669574d423637434e5864707d8a97a29a8e8174665b5044382b1f12060000000000000000000006131f2c3845515c6775828f9babb1a7988b7f7265564c41353945525d687683909ca9a7988b7e7165544b40495663707c8997a2ab9e9184786a5f53473b313c4956636f7c8997a1ada99c908376685e5246392d2013070000000000000000000000000000000000000000000008141e2a36424d57616e7b87929fabac9f92867b6e61564c4135291d24313d4a5764707d8a97a3b0bab2acaaa5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a093877a6d6054473a2d211407000000000000000007121d27303c454e575f676d737a7e81838586858483807c78706b69727e8b949f9f92867c6f666a6f757b7f82848586858483807c79706c605c544a423b444c565e666d72797d80838485868584827e7b746e6860594f473d32281e0f0500000000000714212d3a4754606d7a86929f9f958a7e716a605d585f656d7883919da3988d8073665c5d67707d88939f9e938a7d70675d5f697683909da3998e81756c615e565b60686f7d87939f9f93877b6e6155483b3025190d01000713202c38444f5960636666666666666874818e9b9e9184786b66666666666665625b51535f6973808c96a0978d80746a60544a3f343d45515c676f7c8692989298a2a5988b7f7265584c3f3225190c0000000000000b1825323e4b5865717e8b989e9c8f82756d615e57585858575e666e7b86929f9e9285796d606973808c96a0978d80746a60544a3f3d45515c676f7c8692989298a2a5988b7f7265584c3f3225190c0000000000000004111e2b3744515e6a7784919daab0a3968a7d7063574a3d302d38414b555e696f7d87929fa4a1969083796d605b51473e342a201725323e4b5865717e8b98a4b1a99c908376695d5043362a1d10030000121f2b3845525e6b7885919eabafa296897c6f6356493c3023160900000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0aa9e9184776b5e5144382b1e1100000000000000000000000008141e2c38444f5965727f8c98a3aea4998c7f73655b5044372b1f2a36414c5663707d8a97a1ada79b8e8174685d5245392c201304000000000000000000000000000000000000000000000008141e2c38444f5965727f8c98a3aea4998c7f73655b5044372b1f2a36414c5663707d8a97a1ada79b8e8174685d5245392c2013040000000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000916232f3c4956626f7c8995a29c8f8275695c4f424a5764707d8a97a3a79a8e8174675b4e4134281b0e08111a232935414c56616c7783909da8ab9f928578695e52463a323c4653606d7985929e9e9285796c605346392d201306000000000000000000000714202d3a4753606d7985929facaca095887b6e6155483b3035414c5666727f8c99a8a89b8f8275665c51454d576673808d99a9aa9a8d817467584e43372d394653606c7985929eabac9f93867a6d6154473a2f24180d01000000000000000000000000000000000000000000020e1a25303b46535e6974818e99a3aea3998d8073685d5245392e2324313d4a5764707d8a97a3b0b8b0aaa99f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f93877a6d6054473a2d21140700000000000000000c18232e39424e575f696e7980868a8e9091929291908c89837d746c6c77828f98a2999083786d6062696e7275777879787776736f6d66615a504a4238323b444c545c60676d707376777879787775716e69615e564f473d352b20160c000000000004101d2935404b5565727e8b98a29d9083766c6158514e535c66707d8a97a19e9185796d6055606b74818e96a19e91847a6d605964717e8a95a09e938b7e736e6869666c707a84919aa3998f8275695f53463a2d1e13080000030f1b27323d474f545659595959595b6874818e9b9e9184786b5e5959595959595751494d57606d7984919e9f93877c6f665c50443b34404b555f6a727f8b949fa2aaa5988b7f7265584c3f3225190c0000000000000e1b2835414e5b6874818e909192897c6f635b524d4c4b4c4d545e6976828f9ca297887b6e61606d7984919e9f93877c6f665c50443b404b555f6a727f8b949fa2aaa5988b7f7265584c3f3225190c0000000000000005121e2b3845515e6b7884919eabafa396897c706356493d30262f3a434d57606b717e8b929da69f958e81756d635a50463c32291e24313e4b5764717e8a97a4b1aa9d9083776a5d5044372a1d11040000121f2b3845525e6b7884919eabafa296897c6f6356493c3023160900000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4b0aa9d9184776a5e5144372b1e1100000000000000000000000002101c27333d4754616d7a86929facab9e9184786c6053463a2f242d3946525e6875828f9ba9aca095897c6f63564c4135291d1104000000000000000000000000000000000000000000000002101c27333d4754616d7a86929facab9e9184786c6053463a2f242d3946525e6875828f9ba9aca095897c6f63564c4135291d11040000000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000a1623303d495663707c8996a39b8e8275685b4f424b5764717e8a97a4a79a8d8074675a4d4134271a0e0008111924303a44505a64717e8a96a1aca297877b6e6154473b2e3845515c6674818e9ba197897c6f6356493c30231608000000000000000000030f1c28333f4a5463707d8a98a2aeaa9d908477695f53463a2d303c4855626f7b8896a1ac9f9285796d605346535e697784909daaa2988a7d7063574a3d322b3844505b6674818e9babafa4998b7e7165554b4035291d10040000000000000000000000000000000000000000000009141f2a36424d57616e7b87929fabab9f92857a6d60554b40342824313d4a5764707d8a97a3b0b0a69f9c93939393939393939393939393939393939393939393939393939393877a6d6054473a2d2114070000000000000004101c2834404b545f6a6e7b848c92989b9d9e9d9d9e9c9995908980776c6e7b86929f9f958c7f72695f5f6165686a6b6c6c6b696663605c5450443f383029323a424a50555c606367696b6c6c6b6a6865615e57524d443d352b23190e04000000000006131f2c3945515d6776828f9ca8988b7f72655a5045414a54606d7985919ea197897c70635659606d7a84919ea1968e81746b60606c78839098a39b908b807b777576797d849196a09f92877c6e62574d42362a1e0c020000000b16212b353d4448494d4d4d4d4e5b6874818e9b9e9184786b5e514d4d4d4d4c4a463f45515c67707d89939e999083786d60574d423639434e58626d75828f97a19f9f988b7f7265584c3f3225190c0000000000000c1926323f4c5965727f8283848586786d605346423f3e3f424d576773808d9aa995897c6f625c67707d89939e999083786d60574d4239434e58626d75828f97a19f9f988b7f7265584c3f3225190c0000000000000005121f2c3845525f6b7885929eabafa296897c6f6356493c302328313b454f59626c73808d949ea79e938c7f726c61584e443a302724313d4a5764707d8a97a3b0aa9e9184776b5e5144382b1e11050000111e2b3844515e6b7784919eaab0a396897d7063564a3d3023170a00000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a99d9083766a5d5043372a1d10000000000000000000000000000b16202d3946525d6875818e9ba7aca096897c7063554b4135292e3a4754616d7a86929facaa9d9084776b6054443a2f24190d010000000000000000000000000000000000000000000000000b16202d3946525d6875818e9ba7aca096897c7063554b4135292e3a4754616d7a86929facaa9d9084776b6054443a2f24190d010000000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000091623303c4956636f7c8996a29b8f8275685c4f424a5763707d8a96a3a79a8e8174675b4e4134281b07000008131e28323e4653606d7984919eaba9978a7d7064574a3d2d34404b5464717e8a97a8998c7f7266594c3f2f24190d01000000000000000006121f2b3844505b6674818e9baab3a9998d807366574d42362a2e3a47535f6a7884919eaba298897d7063564954616e7b8795a0ac9f9286796d6053473a2d28333f4a5464717d8a99a3aeab9c8f8275675d5145392c20130600000000000000000000000000000000000000000000020e1a25313b46535f6975818e99a4aea2988c7f72675c5145382d22313d4a5764707d8a97a3b0aa9f948f86868686868686868686868686868686868686868686868686868686867a6d6054473a2d2114070000000000000006131f2c3845515c666e7c8591969f9f9c9791909092989fa09d928d81786c727f8c959f9f92867b6e665b55585c5d5e5f5f5e5d5a5653504a423e342e26202930383f444b5153565a5d5e5f5f5e5d5c5854524d46413b322b231911080000000000000714202d3a4753606d7a86929fa196877a6e6154473e3944505c6674818d9aa9998d80736654515d67707d8a939e9f93887d70675d666f7c869299a29b928d86838283858a9196a09d938c80736a5f53453b31261a0e00000000040f19232b32383b3c404040414e5b6874818e9b9e9184786b5e51454040403f3e3a34404b55606b75818e97a0958c7f72695e52463e313c46515b616d7a85919a9393938b7f7265584c3f3225190c0000000000000c1825313e4a57636d7275767778796d665c5044383030363f4c5966727f8c99ab96897d706355606b75818e97a0958c7f72695e52463e3c46515b616d7a85919a9393938b7f7265584c3f3225190c0000000000000005121f2b3845525e6b7885919eabafa296897c6f6356493c30231f29333d47505a606c78828f95a0a59f93887e706a5f564c42392e23313e4a5764717d8a97a4b0aa9d9184776a5e5144372b1e11040000111e2a3744515d6a7784909daab0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000c1825323f4b5865727e8b98a5b1a99c8f8276695c504336291d100000000000000000000000000005111d2935414c56636f7c8995a0aca89b8e8174675d5145392c37434e5865727f8b99a3aea2988b7f7265594f4332281e13080000000000000000000000000000000000000000000000000005111d2935414c56636f7c8995a0aca89b8e8174675d5145392c37434e5865727f8b99a3aea2988b7f7265594f4332281e1308000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000916232f3c4956626f7c8995a29c8f8275695c4f42495663707c8996a3a89b8e8175685b4e422e23180c0000020c16202c3844505c6673808d99a9a6998c807366544a3f332e3a4754616d7a8796a19b8f827568564c4135291d110400000000000000000613202d394653606c7985929eabada197897c6f6256493c31262b37434e586774808d9aaaaa9a8d807367574d5565727e8b98a7a89c8f8275675d5145382c222d3a4754606d7a86929facac9f92867a6d6053473a2e23170c000000000000000000000000000000000000000000000009141f2b37424d57626e7b87939facaa9e9184796d6053493f3327313d4a5764707d8a97a3b0a99c8f82797979797979797979797979797979797979797979797979797979797976685d5245392c20130700000000000004111d2935414c56606d79849197a19e949089858384858b9297a29d938c7f726c78839098a3989083786c60574d4f5152535251504d4946443f383028231c171e262e34394045474a4d5051525352514f4b4846423b3630292019110800000000000000091623303c4956636f7c8998a39e918478685e524639343f4a5464717e8b97ac9c908376665b5055616b75818e97a19a9184796d60606a717e8792989f9d9992908f8f91979ea09d938e81786d60584e4333291f1409000000000007111921272c2f30333335414e5b6874818e9b9e9184786b5e514538333332312e2e39434f59616d7a85929f9f92867b6e61594f4339343f46525e68707d8786868686867f7265584c3f3225190c0000000000000916222e3a46515b636568696b676d675c544a3f41414142464e586673808d99a399887c6f625559616d7a85929f9f92867b6e61594f43393f46525e68707d8786868686867f7265584c3f3225190c0000000000000005111e2b3844515e6b7784919eaab0a396897d7063564a3d302317212b353f44505b666d79839197a2a49a92867c6f685e544b403428313e4b5864717e8b97a4b1aa9d9084776a5d5144372a1e11040000101d2a3643505d697683909ca9b1a5988b7e7265584b3f3225180700000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3a89b8f8275685c4f4235291c0f00000000000000000000000000010d1924303a4854606b7783909daaac9f92857a6d6054473c313b4754606a7783909dabac9f92867a6d6054473d3221160c0100000000000000000000000000000000000000000000000000010d1924303a4854606b7783909daaac9f92857a6d6054473c313b4754606a7783909dabac9f92867a6d6054473d3221160c01000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000915222f3c4855626f7b8895ab9c908376695d50434955626f7c8895a9a99c8f837669554b4034281c1004000004101c28343f4a54626f7c8996a1a99c8f8276665b5044382d3946525e687884919e9e918578685d5245392c2013070000000000000000091623303c4956636f7c8997a1adab9e9185786c605346392d2026313d4a5663707d8998a2aa9d918477695e535c6775828f9ca8a7988b7e7265554b403529202c3945515d6776828f9ca9aea3988a7d7164544a3f34281c100300000000000000000000000000000000000000000000030e1a26313c47535f6a75818e9aa4ada1978b7e71655b5044372b313d4a5764707d8a97a3b0a99c8f82766c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5d564c4135291d11040000000000000613202c3945525d68737f8c96a09e938e827c787677797e859298a29f92867b6e6e7b86929f9f948b7f72695f53493f4546454443403c3a38342e261e17110c151c23282f34383a3d40434445464544423e3b3a36302a251f170e0800000000000000000c1925323f4c5865727f8b98aa9b8f827568564d41362e3b4855626e7b889aa49f9285796c60534f59616d7a85929ea0968d80746a60616c717e868e92999b9d9d9c9c9e9c9a96918a81786d665c50463c3121180d03000000000000070f161b202223262835414e5b6874818e9b9e9184786b5e5145382b2626251d27303d46525e68717e8b949f988f82756c61554b403536414c56616b70797979797979726d62564a3e3124180b00000000000006121e2a353f495157595b5d555c605c554b474e4e4e4e4d52575f6a76838f9c9f92867a6d6054525e68717e8b949f988f82756c61554b4036414c56616b70797979797979726d62564a3e3124180b0000000000000004111e2a3744515d6a7784909daab0a3978a7d7064574a3d312417192328333f4a545d676e7b859299a3a29891847a6d665c51453f35323f4b5865727e8b98a5b1a99d9083766a5d5043372a1d100400000f1c2835424f5b6875818e9ba8b3a6998c807366594d402f23180c00000000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7b4a79a8e8174675b4e4134281b0e000000000000000000000000000008131e2c38434f5965727f8b98a2aea2988b7e7165574d4237404b55626f7c8895a0aca79b8e8174685d5245392c20130400000000000000000000000000000000000000000000000000000008131e2c38434f5965727f8b98a2aea2988b7e7165574d4237404b55626f7c8895a0aca79b8e8174685d5245392c20130400000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000714212e3a4754616d7a8799a49d9184776a564c414754606d7a8797a1ab9e918478675c5145382c1f13060000000c17232e394653606c7884919eab9f9285796c605346392d36414c566975828f9ca197877a6d6054473a2d2114070000000000000006121f2b37434e586773808d9aa9b3aa9a8e8174655b5044372b1f202d3a4653606d7985929faca095877b6e6154606d7985929faca095877b6e6154483b2f241d2935414c5565727f8b98a7b1aa9b8e8175665c5044382c1f1206000000000000000000000000000000000000000000000009141f2b37434e58626f7c87939faca99d9184786c6053463d32313d4a5764707d8a97a3b0a99c8f8276696060606060606060606060606060606060606060606060606060605f524c443a2f24190d010000000000000714212d3a4754606d7a86929fa1978e81786f6a6a676d717c86929fa2988e81746a727f8c95a09f92867b6e655b50443b3039383633302d2c28231c150c06030a11171d23292c2d303436383939383735322e2d2a251f19140d050000000000000000000e1b2734414e5a6774818d9aa69a8d8073675a4d40302d3a4653606d7986939fa298877b6e615448525e68717e8a939e9f93877c6f675c616c717b81868b8f9192929291908d89847d746d665c544a3f342a200f060000000000000000040b0f1315161b2835414e5b6874818e9b9e9184786b5e5145382b1e1918151e2a36414c56606c778390999e938a7d70675d51453c2f3a444f5961636c6c6c6c6c6c65625b51463a2e221509000000000000010d18232d373f464a4c4f504b5153514c52545a5a5a5b575e61696f7c87929f9c8f8376675d514c56606c778390999e938a7d70675d51453c3a444f5961636c6c6c6c6c6c65625b51463a2e2215090000000000000003101d2a3643505d697683909ca9b1a5988b7e7265584b3f3225181017222d38424c555f69707d87929fa4a1969082786d605b51473e34404d596673808c99a6b3a89c8f8275695c4f4236291c0f0300000d1a2734404d5a6773808d9aa6b3a89b8e817568554b4034291c100400000000000000000000000000000000000000000005121e2a36424d576976838f9ca9b2a5988c7f7265594c3f3226190c0000000000000000000000000000020f1b27323d4754606d7a86929facaa9c908376695f53473845515c6774808d9aa7aca095897c6f63564c4135291d1104000000000000000000000000000000000000000000000000000000020f1b27323d4754606d7a86929facaa9c908376695f53473845515c6774808d9aa7aca095897c6f63564c4135291d110400000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000613202d394653606c7986939f9f928578685d524545515d677885919eab9f9386796d6053463a2d20130800000006121f2b3744505b6575818e9ba8a298887b6f6255483c2f30404d5a6673808d99a995887c6f6255493c2f221609000000000000000815212e3b47535f6a7784919eaaaea2988a7d706453493f33271b1f2c3845515c6775828f9baca7988b7e72655463707d8998a2aa9d908377695e52463a2d1d19242f3b4855616e7b8895a0acab9f9285796d6053463a2d20130a0000000000000000000000000000000000000000000000030f1a26313c47535f6a75828f9ba6aca0968a7d7064594f4438313d4a5764707d8a97a3b0a99c8f8276695c53535353535353535353535353535353535353535353535353535345413a32281e130800000000000004101c2934404b5565717e8b98a29e92857a6d6660585c606a717e8b96a19f92857a6d6d78839099a2988f82776c60574d42362a2b2a2723201f1c17110a03000000060c12181c1f2023272a2b2c2c2b2a292521201e1a140e0802000000000000000000000f1c2936424f5c6975828f9ca5988c7f7265594c3f322c3845515c667885929eaa96897c706356494c56616c75828f97a2999183796d605a61696e757b7f82848586858583807c78706c605c544b42382e22180e00000000000000000000000307090e1b2835414e5b6874818e9b9e9184786b5e5145382b1e120b0c1925303a44505b656f7c87929f9e9184796d60584e4138323d474f5556606060606060585651493f34291e12060000000000000007111c252d353a3e3f42434045474c565d616767676869696e727b8491999e938a7d7063554b44505b656f7c87929f9e9184796d60584e41383d474f5556606060606060585651493f34291e120600000000000000020f1c2835424f5b6875828e9ba8b3a6998c807366594d402f23180c111c262f3a434d57606b727f8b929da69f948e81746d63594f463c414e5b6774818e9aa7b4a79a8e8174675b4e4134281b0e0100000c1925323f4c5865727f8b98abb5aa9d908477675c5145382c1f13060000000000000000000000000000000000000000000714212d3a46535f697885929fabb4aa968a7d7063574a3d3024170a0000000000000000000000000000000a16202c3945515d6774818e9aa7ab9f94887b6e62544a3f4653606d7985929fabaa9d9084776b6054443a3024190d01000000000000000000000000000000000000000000000000000000000a16202c3945515d6774818e9aa7ab9f94887b6e62544a3f4653606d7985929fabaa9d9084776b6054443a3024190d0100000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000006121f2b3844505b667884919ea297877a6d605447414c556976838f9ca9a499897c6f6356493c3025190d000000030f1b27333f495365727e8b98acaa988b7e7265584b3f30323f4b5865727e8b98a3978a7d7064574a3d3124170a000000000000000915222f3c4855626f7c8896a0acac9f9286796d6053473a2d22171c2834404b5565717e8b9aa4a89c8f8275665c6774808d9aaaa9998d807366574d42362a1e14212d3a46535f697784919daaada297897d706356493d32271b0f0300000000000000000000000000000000000000000000000915202b37434e58626f7c88949eaaa89d9083766b6054483c313d4a5764707d8a97a3b0a99c8f8276695c4f464646464646464646464646464646464646464646464646464639352f2820160c0100000000000006131f2c3845515c677683909ca9998c7f73675d544e5157606d7984919ea2988b7e71666f7c87929f9f948b7e72695e52463e32291f1a161312100c0600000000000001070c101314171a1d1e1f201f1e1c181514120e0902000000000000000000000000111d2a3744505d6a7783909da4978a7d7164574a3e312834404b546a7783909da4978a7d7164574a44505a616e7b85929fa0958c80736a5f575f61696e727577787979787673706c65615a514b423930261c0f0600000000000000000000000000020e1b2835414e5b6874818e9b9e9184786b5e5145382b1e120008131e27333f49535f6a73808d96a0968d80736a5f53493f33353d44484a5353535353534c4a463f372d23180d0100000000000000000a131c232a2e3132352f343946525d686d7474747475777b7f8591969e938e81746b6155433f49535f6a73808d96a0968d80736a5f53493f333d44484a5353535353534c4a463f372d23180d0100000000000000010d1a2734404d5a6773808d9aa6b3a89b8e817568554b4034291c100a141d28313b454f59626d74808d949fa69d938c7f726b61584e44424d57697683909ca9b2a6998c7f7366594c403326190d000000091623303c4956636f7c8999a4afac9f9286796d6053473a2d22170b0000000000000000000000000000000000000000000815222e3b4855616e7b8897a2adaea298887b6e6155483b2e22150800000000000000000000000000000004111d2935414c55626f7c88959faba6998d8073665c50444d5764717e8a97a2ada2988b7f7265594f4332281e1308000000000000000000000000000000000000000000000000000000000004111d2935414c55626f7c88959faba6998d8073665c50444d5764717e8a97a2ada2988b7f7265594f4332281e13080000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000030f1c28333f4a546976838f9ca995897c6f625649404d5a6673808d99aaab998c7f7266564c41362a1c11060000000b17222d3c4956626f7c899aa4a89b8e817568564c4136313d4a5764707d8a97a3988b7f7265584c3f3225190c00000000000005121e2a36424d5766737f8c99a8b2ac9c8f8275675d5145382c1b1118232e3b4754616e7a87939fac9f9285796d60697784919daaa197897c6f6256493c30251a121e2a36424d576673808d99a9b3a99a8d807467584e43372b1f13060000000000000000000000000000000000000000000000030f1b26313c4754606a75828f9ca6ab9f95897c6f63584e43373d4a5764707d8a97a3b0a99c8f8276695c4f43393939393939393939393939393939393939393939393939392c29241e160d04000000000000000714202d3a4753606d7986929fa197887b6f62554b4245515c6674818d9aaa9b8e8174686a73808c95a09f92867b6e615a50443b3025190e07060300000000000000000000000406070a0d1011121312110f0b080705020000000000000000000000000000121e2b3845515e6b7884919ea3968a7d7063574a3d30232e43505d697683909ca5988b7e7265584b3f46525e69717e8b949f9f92877c6f665c53575e6165686a6c6c6c6b696763605b535045403930271e140a0000000000000000000000000205070e1b2835414e5b6874818e9b9e9184786b5e5145382b1e1205020b17222d38414e58606d7984919e9f92877c6f655b50443b3033383c3d4646464646463f3e3a342d251b1106000000000000000000010a11181e22252628232e3a4754616d7a808181818284878c929796918b81796d60594f4438414e58606d7984919e9f92877c6f655b50443b33383c3d4646464646463f3e3a342d251b11060000000000000000000c1925323f4c5865727f8b98abb5aa9d908477675c5145382c1f13060b161f2a333d47515b606d78828f96a0a59f93877d706a5f564c47535f697885929eabb4aa978a7e7164574b3e3124180b0000000714202d3a4753606d7a86939facaea399897d706353493f33271b0f030000000000000000000000000000000000000004111d2935414c5565717e8b98a9b3ac9f9285786d6053463a2d201307000000000000000000000000000000010d19242f3a47545f6a7783909da9ab9e9184796d605346525e6976828f9ca9ac9f92867a6d6054473d3221160c020000000000000000000000000000000000000000000000000000000000010d19242f3a47545f6a7783909da9ab9e9184796d605346525e6976828f9ca9ac9f92867a6d6054473d3221160c020000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000b17222d414e5b6774818e9aa4978b7e7164584b3e495663707c8998a2a99c8f8276685e5246382d22170b0000000614202d3a4753606d7a86939faa9e918477685e5246392f3c4956626f7c8995a2998c7f7266594c3f3326190c0000000000000714212d3a46535e697783909daaafa49a8b7e7165554b4035291d0a14202d3946525e687783909daaa298897c70636e7b8796a0ab9e9285796c605346392d20130e1a26313c4956636f7c8997a1adab9e9184786a6054473b2e2215090000000000000000000000000000000000000000000000000a15202b37434e58626f7c89949faba79c8f82756a5f53473b3d4a5764707d8a97a3b0a99c8f8276695c4f43362d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d201d19130c0400000000000000000916232f3c4956626f7c8999a39e9285796c6053463a404a5464717d8a97ac9d90847767606d79839099a2988f82766c62564d41362a20170c0200000000000000000000000000000000010305060605040200000000000000000000000000000000000000121f2c3845525f6b7885929ea396897c706356493d302936434f5c6976828f9ca5988c7f7265594c3f424d56626c76828f98a2999083786d60584e5254585c5e5f5f5f5e5d5a56535049413e342e271e150c020000000000000000000002090e1114141b2835414e5b6874818e9b9e9184786b5e5145382b1e12050006111b262f3c45515d67707d8a939e999083776c60564c41362a2c2f3039393939393932312e29231b1309000000000000000000000000070d121618191c212e3b4854616e7b878d8d8e8f9193938f8d89847e756d675c51473e2f3c45515d67707d8a939e999083776c60564c41362c2f3039393939393932312e29231b130900000000000000000000091623303c4956636f7c8999a4afac9f9286796d6053473a2d22170b040d18212b353f44505c666d7a849197a2a49992867c6f685e544b55626e7b8897a2adaea298887b6f6255483c2f2215090000000613202c3945515d677784909daab4ab9a8d8073655b5044372b1f140a000000000000000000000000000000000000010c13202c3945515d6775828e9ba8b5a89c8f8275665c5044382b1f12060000000000000000000000000000000008131e2b37434e5865717e8b97a2ada1968a7d7063564c54616e7b87939faca79b8e8174685d5245392c2013040000000000000000000000000000000000000000000000000000000000000008131e2b37434e5865717e8b97a2ada1968a7d7063564c54616e7b87939faca79b8e8174685d5245392c201304000000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000061825323f4b5865727e8b98aa9a8d817467564c414653606d7986929fac9f92867a6e61544a3f33281d1207000006131f2c3945515d677885919eaba096877a6e6154473b2f3c4955626f7c8895a2998c807366594d4033261a0d0000000000000815212e3b4854616e7b8795a0acac9f93877a6e6154473b2f24180c111e2a36414c5666737f8c99a9aa998d807366717e8b97a8ab9b8e8174665b5044382b1f120913202d3a4653606d7985929eabada196887c6f6255493c31261a0e020000000000000000000000000000000000000000000000040f1b27323c4854606a76828f9ca6ac9f93877c6f62574d423d4a5764707d8a97a3b0a99c8f8276695c4f433629202020202020202020202020202020202020202020201413110d08010000000000000000000b1825323e4b5865717e8b98ab9c908376655b5044373b4855626e7b889aa49f9286796d60666f7c87929f9e948b7e71685e52463e32291e130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2c3945525f6c7885929fa296897c6f6356493c302935424f5c6875828f9ba6998c7f7366594c403b44505a616e7b86929fa0958c7f726a5f544a484c4f5152535252504d4946443f382f28231d150c0300000000000000000000050d14191e2021272835414e5b6874818e9b9e9184786b5e5145382b1e120500000a141d2935404b55616b75818e989f958b7e72685e52463d302723232d2d2d2d2d2d2524221e18110901000000000000000000000000000106090c0c15212e3b4854616e7b87949a9b9c9e938682807d78716c605c554b40352935404b55616b75818e989f958b7e72685e52463d3027232d2d2d2d2d2d2524221e18110901000000000000000000000714202d3a4753606d7a86939facaea399897d706353493f33271b0f03060f192328343f4a545d686e7b859299a3a29891847a6d665c515665717e8b98a9b3ac9f9285796d6053463a2d20130700000004101d2935404b556773808d9aa9b3ab9e9184786c6053463c2f261b1106000000000000000000000000000000000007131d28333f4a54606d7a86929facb1a7988b7f7265544a3f34281c100300000000000000000000000000000000010f1b26323c4753606d7985929faba99b8e8275685d525966737f8c99a4aca095897c6f63564c4135291d110400000000000000000000000000000000000000000000000000000000000000010f1b26323c4753606d7985929faba99b8e8275685d525966737f8c99a4aca095897c6f63564c4135291d1104000000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000916222f3c4955626f7c8898a29d908377685d524545515c6775828e9ba8a3998b7f72665b5044392e23180f060004101d2935404b556a7784909daaa8978a7d7064574a3d2f3b4855626e7b8895a19a8d8074675a4d4134271a0e000000000005111d2a36414c5665727f8b98a7b1a99d908376685e5246392d1d12070e1925303c4955626f7c8896a1a99d9083766774818e9ba7a3998a7d7164544a3f33281c0f06121f2b3844505c6674818e9babb2a8998c807366574d42372b1e12060000000000000000000000000000000000000000000000000a15202c38434e5863707d89949faba49a8e8174695e52463d4a5764707d8a97a3b0a99c8f8276695c4f4336291c1313131313131313131313131313131313131313130707040100000000000000000000000d1a2633404d596673808c99a69b8e81746853493f333a4653606d7986939fa399887b6e61606a73808d96a09f92857b6e615a50443a3025190e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2c3945525f6c7885929fa295897c6f6256493c2f2935424f5c6875828f9ba6998c7f7366594c40323f46535e69727f8b949f9f92867c6e665b50443f42444546464543403d3937332d261d18120b0300000000000000000000050e171f252a2d2e342d35414e5b6874818e9b9e9184786b5e5145382b1e12050000020b18242f39434f59616e7b85929f9f92857a6e61594f43392e2318202020202020191815120d06000000000000000000000000000000060b0f12131c212e3b4854616e7b8793939495989a9285817d756e685e574d43392e242f39434f59616e7b85929f9f92857a6e61594f43392e23182020202020191815120d060000000000000000000000000613202c3945515d677784909daab5ab9a8d8073655b5044372b1f140a00071117232e38424c565f69707d87929fa5a0969082786d605b5d6875828f9ca8b5a99c908376665c5044382b1f1206000000010d18242f3d495663707c8997a1adaca196897d7063584e41382d22170f06000000000000000000000000000000071118242f3844505b66717e8b98a2aeaca095887b6e6155483b2e23170b0000000000000000000000000000000000000a151f2c3945515d6774808d9aa6ac9f92867a6d6154606b7784919eabaa9d9084776b6054443a3024190d0100000000000000000000000000000000000000000000000000000000000000000a151f2c3945515d6774808d9aa6ac9f92867a6d6154606b7784919eabaa9d9084776b6054443a3024190d01000000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000713202d3a4653606d7985929f9f93867a6d605447404b5563707d8996a1ab9e9184786c60554b4034282118100b09111d2a36414c566a7784919daaa69a8d807367554b40343b4855616e7b8894a19a8d8174675a4e4134271b0e00000000000713202d3946525e6876838f9ca9b2a8998c7f7266564c41362a1e0b010815222e3b47545f6a7884919eab9f92867a6d7784919eaa9f92867a6d6054473a2d22170b03101c28343f4a5464717d8a99a3aeaa9d908477695f53473a2d211408000000000000000000000000000000000000000000000000040f1b27323d4854606b7683909ca7ac9f92867b6e61564c414a5764707d8a97a3b0a99c8f8276695c4f4336291c100d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0a0a08040000000000000000000e1a2734414d5a6774808d9aa69a8d8073675a4d402d3845515c677885929fab95887c6f6258606d79849199a2978f82756c61564c41362a20160c020000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2c3845525f6b7885929ea296897c6f6356493c302936434f5c6976828f9ca5998c7f7266594c3f3336424d57606c78839098a3989083786c60574d41382d393939383634302d2b27221b140b070000000000000000000000020d17202930363a3b413a38414e5b6874818e9b9e9184786b5e5145382b1e120500000007121d27313e46525e68727f8b959f978e81756b60554b4034281f1509131313130c0b0906010000000000000000000000000000020a11171c1f2028232e3b4854616e7b86868687898c9195928e89827a6e695e544a40342827313e46525e68727f8b959f978e81756b60554b4034281f15091313130c0b0906010000000000000000000000000004111d2935404b556773808d9aa9b3ab9e9184786c6053463c2f261b11060006111c26303a444d57606b727f8b939da69f948e81746d62606d7a86929facb2a8998c7f7266544a3f34281c1003000000000713202d3a4653606d7985929eacb2a89c8f82756a5f53493f332721180f0802000000000000000000000003091119232935404b55606c7884919daab3a99d908477695f53463a2d1c110600000000000000000000000000000000000004101d2935404b55626f7b88949faba3998b7e726557636f7c8996a0aca2988b7f7265594f4332281e130800000000000000000000000000000000000000000000000000000000000000000004101d2935404b55626f7b88949faba3998b7e726557636f7c8996a0aca2988b7f7265594f4332281e130800000000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000006121f2c3844515c6676828f9ca4998a7d7164554b404653606c7884919ea8a0968a7d71675c51453d332a221c18181a222d3946525e687885929eaba99d908376675c5145383c4955626f7c8895a2998d8073665a4d4033271a0d00000000000714212e3a4754616d7a86929facaca096887b6f6255483c3025190d0006131f2b37434e586774818e9aaaa399897d707b8796a0a99c8f8276675d5145392c1c1106000b17232e3a4754606d7a86929facaca095887b6e6155483b3025190d010000000000000000000000000000000000000000000000000a16212c38444f5963707d89959faba3998d8073685d52454a5764707d8a97a3b0a99c8f8276695c4f4336291c1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a171614100b05000000000000000e1b2835414e5b6874818e9ba6998d8073665a4d403334404b556b7885919ea396897c7063565c676f7c87939f9e938a7e71685e52463e32281e13080000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2b3845525e6b7885919ea396897d7063564a3d30293643505c6976838f9ca5988b7f7265584c3f32313b44505b666e7b86929f9f958b7f72695f53493f33272c2c2b2a2723201f1b17110a0200000000000000000000000009141f29323b4246474d4745404e5b6874818e9b9e9184786b5e5145382b1e1205000000010b151f2a36414d56606c788390999e93897d70675c51453c31261a0e04060606000000000000000000000000000000000000020b141c22282b2d352e343a46535e69767979797a7c7f848c9399948f847b6e665c5144382c1f2a36414d56606c788390999e93897d70675c51453c31261a0e040606000000000000000000000000000000000000010d18242f3d495663707c8997a1adaca196897d7063584e41382d22170f06000a151e28323c454f59626d74818e949fa69d938c7f726b66727f8b98a3aeaca096887c6f6255493c2e23170b000000000006121f2c3844505c6673808d9aa4afaa9e94887c6f655b50443d332a2219140e09060400000100000406090e141a232b353d45515d67717e8a95a0acada2978b7e7265574d42362a1e0a00000000000000000000000000000000000000000c18242f3947535f6a7683909ca9ab9d908376695f6774818e9aa8ac9f92867a6d6054473d3221160c02000000000000000000000000000000000000000000000000000000000000000000000c18242f3947535f6a7683909ca9ab9d908376695f6774818e9aa8ac9f92867a6d6054473d3221160c0200000000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000004101c2834404a5465727f8c98a79b8e8175675c514544505b66727f8c96a1a89e9184796d60594f453c342c272524262a343c4754616d7a86939facac9f9286796d6053473a3d495663707c8996a3998c7f7266594c3f3326190c0000000004101d2935404b5564717e8b99a3afaa9e9184776a5f53473a2e1e140800030f1b26323d4a5763707d8a98a2ab998c80737e8a97a8a8988c7f7265554c4135291d0a00000613202c3945515d6776828f9ca9b1a7988c7f7265564c41362a1e110500000000000000000000000000000000000000000000000004101b27323d4854606b7683909da7ab9f92857a6d60554b4a5764707d8a97a3b0a99c8f8276695c4f4336292727272727272727272727272727272727272727272727272423201c1710080000000000000f1c2835424f5b6875828e9ba6998c7f7366594c40332e44515e6b7784919ea3968a7d70635755606b74808d96a09e92857a6d615a50443a3024190d0400000000000000000000000000000000000000000000000000000000000000000000000000000000111e2a3744515d6a7784909da3978a7d7064574a3d312a3743505d6a7683909da4978b7e7164584b3e3128333f4a545f6a737f8c95a09f92867b6e655b50443b30251a1f1d1a1613120f0b0600000000000000000000000000020e1925303b444d52545a53514b4e5b6874818e9b9e9184786b5e5145382b1e120500000000030d1925303b44505b666f7c87929f9e9184796d60574d42372b20160c0200000000000000000000000000000000000000000a141d262d33383942434045464d575e6c6c666d6d6f72787f87939f969083786d6053463c312625303b44505b666f7c87929f9e9184796d60574d42372b20160c0200000000000000000000000000000000000000000713202d3a4653606d7985929eacb2a89c8f82756a5f53493f332721180f08030c16202a333d47515b606d78828f96a0a59f93877d706d7984919eaab4aa9d9184776a5f53473b2e1c1106000000000003101c28343f4a54616e7b87939fabb0a69c9083776c60584e453c342a251e1a1312100c070e070c1013131a1f262a353d47505a606d7984919ea7b1a99f9285796d6053473b31261a0e000000000000000000000000000000000000000007121d2b37434e5864717e8a97a1ab9f95887b6e616d7985929faba79b8e8174685d5245392c201304000000000000000000000000000000000000000000000000000000000000000000000007121d2b37434e5864717e8a97a1ab9f95887b6e616d7985929faba79b8e8174685d5245392c2013040000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000c18232e3b4855616e7b88959f9f9285796d6053473f4a54606d7984919ea6a0968c7f736b60574e463f3833313131363d46505a64717e8a9aa4afaea399897c6f6356493c3d4a5764707d8a97a3988b7f7265584c3f3225190c0000000006131f2c3945515d6775828f9babb3a99a8d807467584e43372b1f0d0200000a14202d3a4753606d7986929fa99c908376818d9aa7a096887b6e6155483b2f24190d000004111d2935414c5565727f8b98a7b1a99c908376685e5246392d201407000000000000000000000000000000000000000000000000000b16212c38444f5963707d8a95a0aba2988c7f72675c514a5764707d8a97a3b0a99c8f8276695c4f43363434343434343434343434343434343434343434343434343431302d28221a110800000000000f1b2835424e5b6875818e9ba6998c807366594d40333845525e6b7885919ea396897c7063564f59606d7984919ea1978e81756c61564c4135291f160c01000000000000000000000000000000000000000000000000000000000000000000000000000000101d293643505c6976838f9ca4988b7e7165584b3e322935414c566b7784919eac968a7d7063574a3d30222d38424e57606d78839099a2988f82776c60574d42362a20170d0d0a06050300000000000000000000000000000005111e2a36424d565e6167605c554e5b6874818e9b9e9184786b5e5145382b1e1205000000000008141f28333f4a545f6a73808d96a0968c8073695f53473e32281e13080000000000000000000000000000000000000006111c262f383f44464f504b51535452535f605c606162666c727f8b95a0958c7f7265574e42372b1f28333f4a545f6a73808d96a0968c8073695f53473e32281e1308000000000000000000000000000000000000000006121f2c3844505c6673808d9aa4afaa9e94887c6f655b50443d332a2219140e090e18212c353f44515c666d7a849198a2a49992867c717e8b96a0acaea3988c7f7265584e43372b1f0a000000000000000c17232e3846535f6975828e99a3afab9f948b7f726a60574e463e36302a25201f1c181b1a1b181c1f20262b31363f474f59616c74808d96a1adada2978d8073675d5145392a1f14090000000000000000000000000000000000000000010f1a26313c4653606d7985929eaca7998c7f7366717d8a98a2aca095897c6f63564c4135291d11040000000000000000000000000000000000000000000000000000000000000000000000010f1a26313c4653606d7985929eaca7998c7f7366717d8a98a2aca095897c6f63564c4135291d11040000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000714212d3a46535f697783909da2988a7e7164584e4345515c67717e8b949fa89f92877d70695f585048443f3e3e3f42464f58616c7683909cacaab0ab998c7f7266594c3f3f4c5865727f8b98a4978b7e7164584b3e3125180b000000000714202d3a4753606d7a86929facada297897c706356493d31261a0f00000006131f2c3845515d6775828f9ca89f92867983909daa9d918477695f53473a2d1e13080000010d19242f3b4855616e7b8895a0acac9f93867a6e6154473b2f24180d0100000000000000000000000000000000000000000000000004101c27333d4855616b7783909da7aa9e9285796d60544a5764707d8a97a3b0a99c8f8276695c4f4340404040404040404040404040404040404040404040404040403d3c39332c231a1005000000000e1b2734414e5a6774818d9aa69a8d8073675a4d40343744505b657885929ea295897c6f625649515d67707d89939d9e938a7d70685d52453e31281e13080000000000000000000000000000000000000000000000000000000000000000000000000000000f1b2835424e5b6875818e9ba6998c7f7366594c402e2c3945525d687985929fa49a887b6f6255483c2f22262f3c44505c666f7c87929f9f948b7e71695e52463e32291e1308000000000000000000000000000000000000000714202d3a46525e696e746d675f585b6874818e9b9e9184786b5e5145382b1e12050000000000020b17222d38424e58606d7984919e9f92867b6e625a50443a3024190c030000000000000000000000000000000000000b17222d38424a50535b5d555c60605d564c4a505354545b606c7883909d9e9184786a5f53473a2e21222d38424e58606d7984919e9f92867b6e625a50443a3024190c030000000000000000000000000000000000000003101c28343f4a54616e7b87939fabb0a69c9083776c60584e453c342a251e1a1312101a232834404a545e686f7c869299a4a29891847b85929ea8b2aa9f92867a6d6154473c32261b0f0000000000000006111c2a36424d57626e7b87929fa8b0a69f92877c6f695f585046413b36312d2c282327272723282c2d31373b42465159606b717e8a929da8b1a79f92857a6d61554b4035291d10040000000000000000000000000000000000000000000a151f2c3845515c6773808d9aa4aa9d9184776a75828e9baaaa9d9084776b6054443a3024190d010000000000000000000000000000000000000000000000000000000000000000000000000a151f2c3845515c6773808d9aa4aa9d9184776a75828e9baaaa9d9084776b6054443a3024190d010000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000005121e2b37424d5765727f8c98a39c9083766a605447404b55606c77828f97a2a39992857b6f6a625a554f4c4b4b4c4d5359606a707d8a949f9b9ea6a89b8f827568574d42404b546774818e9aa896897c6f6356493c3023160900000003101c28343f4a5464707d8a98a2aeab9f9285796d6053463a2d20130a00000004101d2935404b5565727e8b98a7a3988a7d87939fa99a8d807367574d42372b1e0c010000000814212d3a46535f697784919daaafa4998b7e7165554b4135291d1104000000000000000000000000000000000000000000000000000b16212c38444f5964707d8a95a0aca1978b7e72665b505764707d8a97a3b0a99c8f8276695c4f4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4a49443e362c22170b000000000d1a2734404d5a6773808d9aa69a8e8174675b4e4130394653606c7986929fa895887b6e6255484b55606b74818e96a19e91857a6d60594f433a2f24190d0400000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c99a69a8e817467544b40342d3a4754606d7a8798a29f93867a6d6053473a2d201d28343f4a545f6a73808d95a09f92857b6e615a50443a3025190e040000000000000000000000000000000000000814212e3b4754616e7b80796f6a605b6874818e9b9e9184786b5e5145382b1e120500000000000006111c262f3c45515d67707d8a939e988f82766c61564c4135291e150a0000000000000000000000000000000000030f1c28333f4a545b6068696b676d6d685d52454446474a505b6573808c99a196887b6e6255483b2f221c262f3c45515d67707d8a939e988f82766c61564c4135291e150a00000000000000000000000000000000000000000c17232e3846535f6975828e99a3afab9f948b7f726a60574e463e36302a25201f1c1818232e39424c565f6a707d87939fa5a09691859297a1adaea2988d8074685e5246392a20150a00000000000000000e1a26313b47535f6974808d96a0abaea39991857b6e6a615a524c46423c3a38342e3434342e34383a3c42474d535b626b707d86929fa4aeaaa0958b7f72685e5243392f24180d0100000000000000000000000000000000000000000004101c2834404b55616e7b87939faca095887b6f7985929faca3988b7f7265594f4332281e13080000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b55616e7b87939faca095887b6f7985929faca3988b7f7265594f4332281e1308000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000000020e1a26313c4754616d7a86929f9f94887c6f62584e4244505b656e7b859299a4a19791857c716c63615959585758575f616b707c869299938f939eab9e928578695f534745515c667683909da196877a6d6054473a2d21140700000006121f2c3844505c6674818e9baab4ab9b8e8175665c5044382c1f1206000000000c18242f3b4754616e7b8795a0aa9c8f838f99a4a297897c706356493d31261a0e0000000005121e2a36424d576673808d99a9b3ab9c8f8275675d5145392c2013070000000000000000000000000000000000000000000000000005101c28333e4653606c7883909da8a99e9184786c60555764707d8a97a3b0a99c8f8276695c5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a575550483e33281c10040000000c1926323f4c5965727f8c98a59c8f827669564c41363b4754616e7a8799a3a196877a6d605447434f59606d7a84919ea1978e81746b61554c4135291f160c01000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a89d908376665c514538303d495663707c8996aa9e918477675d5145392c1f17232e38424e58606d79849199a2988f82756c61564c41362a20160c0200000000000000000000000000000000000815212e3b4854616e7b87837c726c656874818e9b9e9184786b5e5145382b1e1205000000000000000a141d2935404b55616c75828f989f948a7e71685d52453d30261c11060000000000000000000000000000000006121f2b3844505b666c75767778797a6d60544b403a3a3f495364717e8b97a8978a7d7164574a3e3124141d2935404b55616c75828f989f948a7e71685d52453d30261c11060000000000000000000000000000000000000006111c2a36424d57626e7b87929fa8b0a69f92877c6f695f585046413b36312d2c2823272727303a444e58616b727f8c939ea7a0989298a1a9b1a79f92867a6e61564c41362a1e1105000000000000000009141f2b37424d57606d79849199a4afaba19791847c706c615e56534d494644404141414141404546494d53575f616d727d869298a2aeaca2989083786c60564c4131281d120700000000000000000000000000000000000000000000000c18232e3946535f6976828f9ca9a7998c7f737d8a98a2ac9f92867a6d6054473d3221160c0200000000000000000000000000000000000000000000000000000000000000000000000000000c18232e3946535f6976828f9ca9a7998c7f737d8a98a2ac9f92867a6d6054473d3221160c02000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000000000914202d3946525e6874818e9aa49b8f82756a60544a3f49535e69717e87939fa3a19791867e76706b686564646567696e747d8592989387828f9baaa197887b6e6255484653606d7985929f9e918478675d5145392c2013060000000713202d3a4653606d7985929eabaea3998a7e7164544a3f34281c1003000000000714202d3a46525e697783909daa9f948f949fab9f9285796d6053463a2d20130900000000020e1a26313c4956636f7c8997a1adac9f92867a6d6054473a2e23180c00000000000000000000000000000000000000000000000000000b161f2b3744505b65717e8a95a0aca0968a7d7064626264707d8a97a3b0a99c8f827669676767676767676767676767676767676767676767676767676767676764615a5044392d2014080000000a1723303d4a5663707d8996a89e918477685e5246393c4956626f7c8995ab9e918478685d52453d45515d67707d8a939e9e938a7d70675d51453d31281d1207000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8796a09f9286796d6053463c36414c5665727f8c98ab9b8e817568554b4035291d111c26303c45515c676f7c87939f9e948a7e71685e52463e32281e130800000000000000000000000000000000000815212e3b4854616e7b8790867f776e6974818e9b9e9184786b5e5145382b1e120500000000000000020b18242f3a43505a616e7b86929f9e92857a6d60594f42382e23170c030000000000000000000000000000000613202d394653606c7881838485868275665c5145403f414a5464717e8b97a4988b7e7165584b3e32251818242f3a43505a616e7b86929f9e92857a6d60594f42382e23170c03000000000000000000000000000000000000000e1a26313b47535f6974808d96a0abaea39991857b6e6a615a524c46423c3a38342e34343430353c464f59636d74818e959faaa29fa2aab3aaa0958c7f72685e52443a3025190d010000000000000000030e1a26313c45515d676f7d87939fa4aea9a19691867e756e68615e575653514a4e4e4d4e4e4b515356575f62696e767f879298a2aaafa49a92867c6f665b50443a301f160c01000000000000000000000000000000000000000000000007121d2b37424d5764717d8a97a1aa9d908377818e9baaa79b8e8174685d5245392c20130400000000000000000000000000000000000000000000000000000000000000000000000000000007121d2b37424d5764717d8a97a1aa9d908377818e9baaa79b8e8174685d5245392c20130400000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000005111d2935414c56626f7c87939f9f93877c6f665b5044414d57616c727f8b919fa3a198928b827d78757271717274777b81879297978e817d8998a3a9978b7e7164584b4a5463707d8a98a29c8f827569554c4135291d11040000000a1623303d495663707d8997a2adac9f92867a6d6054473a2e23170c000000000005111e2a36424d576673808c99a9a69f9c9fa6ab9b8e8275665c5044382c1f120600000000000913202d394653606c7985929eabaea3988a7d7164544a4034281c100400000000000000000000000000000000000000000000000000030f1b27333f4953606c7884919da8a89c9083766e6e6e6e707d8a97a3b0a99c8f8276737373737373737373737373737373737373737373737373737373737373706c6155493c3023160a0000000714212e3a4754616d7a8796a0a096877a6d61544740414d5765727f8c98ac9c8f827569564c4135414c55616b75818e97a19e91847a6d60594f43392f24180d030000000000000000000000000000000000000000000000000000000000000000000000000714202d3a46525e697784919ea398897d7063584e433f46525e6876828f9ca3998b7e7164584b3e2f24180c151e2834404b55606b74808d96a19e92857a6d615a50443a3024190d04000000000000000000000000000000000815212e3b4854616e7b8798928c827b7174818e9b9e9184786b5e5145382b1e1205000000000000000007131d28313e46525e69727f8c95a0978e81746b60544a3f34281f140900000000000000000000000000000006121f2b3844505b6677849091929285796d6058514a4c4b515b6673808d99a9978a7d7164574a3e312417131d28313e46525e69727f8c95a0978e81746b60544a3f34281f14090000000000000000000000000000000000000009141f2b37424d57606d79849199a4afaba19791847c706c615e56534d49464440414141414241464749505b606d79839098a2aeacaeb4aea2989083786d60564c4132291e13080000000000000000000009151f2935404b55606b727f8b929da4ada9a198928a817a746e696562605c545b5a5a5a5b545c606266696e747b828b9299a2aaaea39f93887e706a5f544a3f32291e0d04000000000000000000000000000000000000000000000000000e1a26313c4653606d7984919eaba095887b85929faba095897c6f63564c4135291d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a26313c4653606d7984919eaba095887b85929faba095897c6f63564c4135291d110400000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000000010d1925303a47535f6a75828f9aa49a9083786c60564c4145505a626d737f8a9298a0a29f948f8984817f7e7e7f8083878e92999992857b7986929fa79a8e817467564c505c6674818e9aa7988c7f7265594c3f2f24190d01000006131f2b37434e586774808d9aa9b3a99c8f8276675d5145392c1c11060000000000020e1a25303c4955626f7c8897a1adaba9abafa4998b7e7164544a3f34281c1003000000000006121f2b3844505b6674818e9babb4aa9b8e8175665c5144382c1f120600000000000000000000000000000000000000000000000000000b17222d3844505b66717e8b96a0ab9f948a7d7b7b7b7b7b7f8b98a5b1ab9e9184808080808080808080808080808080808080808080808080808080808080807e7064574a3d3124170a0000000713202d3946525e687784919ea8978a7e71645b514b4c535f6976828f9ca49a8c7f7266594c3f2f3a434f59616d7a85919ea1968e81746b60554b4035291f150b01000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d576773808d9aa69b8e81746a5f554e4a5059616d7a86929f9f92867a6d6154473a2e2114070c18232e39434f59606d7984919ea1978e81756c61564c4135291f160c010000000000000000000000000000000815212e3b4854616e7b879298948f857e74818e9b9e9184786b5e5145382b1e12050000000000000000010c161f2a36424d57606d788390999f93887c6f665c50443b31251a0d040000000000000000000000000000030f1c28333f4a546774818e9a9f978b7e716a605c5459555d606c7884919da297897c6f6356493c3023160c161f2a36424d57606d788390999f93887c6f665c50443b31251a0d04000000000000000000000000000000000000030e1a26313c45515d676f7d87939fa4aea9a19691867e756e68615e575653514a4e4e4d4e4f4c5254535b60636b6f7a85929facb8bab2a89f92867c6f665c50443b3020170d0200000000000000000000030d18242f3a434f59626d74808d929ca3adaaa29f938e86807b76726f6d6669686767676869666d6f72777b81868f949fa3ababa39f918c7f726c61584e42382d20170d000000000000000000000000000000000000000000000000000009141f2c3844505c6673808c99a4a79c8f828f97a2aa9d9084776b6054443a3024190d010000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2c3844505c6673808c99a4a79c8f828f97a2aa9d9084776b6054443a3024190d0100000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000000000008131e2b37434e58626f7c87939f9f958b7f72685e53493f48515b636d737e8691969fa39f9c96918e8c8b8a8b8d9093999f9993877d707683909ca99d918477685d5253606d7985919ea095887b6e6155483b2e2215080000000815222e3b4754606a7884919eabb1a7988b7f7265554c4135291d0a000000000000000913202d394653606c7884919eabb8b6b9ac9f93867a6d6154473a2e23170c000000000000030f1c28333f4a5464717d8a99a3aeab9f9285796d6053463a2d22170b000000000000000000000000000000000000000000000000000006111b28333f4a54606d7884919ea8a69a8f8a88888888888b919ba7b3aca196918d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8074675a4e4134271b0e01000005111d2a36414c566673808c99a59d9083766d605c55565e656e7b87939f9f93877b6e6154483b2e313e46525d68717e8a939e9d93897d70675d51453d31271d12070000000000000000000000000000000000000000000000000000000000000000000000020e1a25303c4855626f7c88949f9f92867c6f676058545c606b73808d99a39c8f8275685e5246392d20130707121d27303d45515d67707d89939d9e938a7d70685d52453d31281d13070000000000000000000000000000000613202d394653606c787f86909597928a81818e9b9e9184786b5e5145382b1e1205000000000000000000040d1a25303b44505c666f7c87939f9a9083786d60574d42362a1f160c0100000000000000000000000000000b17222d3c4956626f7c89949f9f92857c716d66666666676d737f8c96a09f9285796d6053463a2d2013070d1a25303b44505c666f7c87939f9a9083786d60574d42362a1f160c0100000000000000000000000000000000000009151f2935404b55606b727f8b929da4ada9a198928a817a746e696562605c545b5a5a5b5c565d6163656c70757d839098a2aebab9aca0968a7e716a5f544a3f32291e0e0500000000000000000000000007131d28313d47515b606c77808c919ea1a9aea59e98928d87837f7c79777674747474747677797c7f83888e92999fa6aea8a199928b7f736d635a50463c2f261c0e05000000000000000000000000000000000000000000000000000003101c28343f4a54616e7b87939fac9e948f949ea9a3988b7f7265594f4332281e1308000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54616e7b87939fac9e948f949ea9a3988b7f7265594f4332281e13080000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000000020f1b26323c47535f6a74818e97a29f92857a6d655b50443f49515b636c717c848c92989ea1a19e9b989797989a9d9f9f9791877e716b73808c99a09f93867a6d61545b65717e8a97a19d918477695f53473a2d2114080000000916222f3c4955626f7c8896a1adaca095877b6e6154483b2f24190d0000000000000005121f2b3744505b6574818e9aaab4bfb6a99c908376685e5246392d1c1106000000000000000b17222d3a4754606d7a86929facada297897d706353493f33271b0f0300000000000000000000000000000000000000000000000000000b17222d3844505c66717e8b96a1aca19a969595959595989ba3adb8b2a8a19e9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a8d8174675a4e4134271b0e010000010d1925303b4855626e7b88939e9f958b7f736d676767686d77828f99a49c908376695e53463a2d2935414c56616c75818e97a19e9184796d60594f43392f24180c0400000000000000000000000000000000000000000000000000000000000000000000000915212e3b47535f6a76828f9aa3999083796f6a6867666d717d87929f9f94897d7063564c41362a1e1105000b151e2935404b55606b74818e97a19e91857a6d60594f433a2f24180d04000000000000000000000000000006121f2b3844505b666c727c838c9299938e8e939e9e9184786b5e5145382b1e12050000000000000000000009141f28343f4a54606a74808d97a0958c7f72695e53463e31281d130700000000000000000000000000000615222e3b4754606a76828f98a29792857e7975737273757a8088939fa1978d8074665c5144382c1f120609141f28343f4a54606a74808d97a0958c7f72695e53463e31281d1307000000000000000000000000000000000000030d18242f3a434f59626d74808d929ca3adaaa29f938e86807b76726f6d6669686767676869686d7073787d82899095a0aab4b4b7aa9e9184796d605b51473e342a20160c030000000000000000000000010c161f2b353f44505b656c747f8a92979ea6acaaa29f9a93908c898684828181808181828486898c90959a9fa3ababa49f9691877e736d635b51473e342a1d140a000000000000000000000000000000000000000000000000000000000c17232e3846535e6975828f9ca8a69e9c9ea6ac9f92867a6d6054473d3221160c020000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17232e3846535e6975828f9ca8a69e9c9ea6ac9f92867a6d6054473d3221160c020000000000000000000000000000000000000000000000000000000104000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060503000000000000000000000000000000000000000a15202b37434e58616d7a85929fa2978f81776c605a50464049515a616a6f797f868c9196999c9d9e9f9f9e9c9a98928d857d716c63707d899994949a8a7d706355606c7883909da3998c807366574d42372b1e1206000005121e2a36424d576673808c99a8b2aa9d908377695e53463a2d1e130800000000000000030f1b27333f495364707d8a98a2aeacb2a8998c7f7266564c41362a1d0a00000000000000000613202c3945515d6776828f9ca9b3a99a8d8174655b5044372b1f1205000000000000000000000000000000000000000000000000000006111c28343f4a54606d7984919ea8aba5a3a1a1a1a1a1a5a7adacacacb2acaba6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a69a8d8174675a4e4134271b0e010000000814212e3a47535f6975818e98a29f92877f79757474767a818f949f9e93897d7063574d42362a24303a44505a616d7a85929ea0968d80746b60554b40352920150a000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e58626f7c87939f9f9590837c77757475797e869299a2988f82766b6054443a3025190d0100030c18242f39434f59606d7a84919ea1978e81746b60554b40352921160a0000000000000000000000000000030f1c28333f4a545b606a6e787f8690959b9b9ea59e9184786b5e5145382b1e120500000000000000000000030b17232e38424e58606d7a84919e9f92867b6e615a50433a2f24180d010000000000000000000000000006131f2b37434e58616e7b869298a097928b8582807f8082858d939aa19892857a6d61544a4034281c1004030b17232e38424e58606d7a84919e9f92867b6e615a50433a2f24180d0100000000000000000000000000000000000007131d28313d47515b606c77808c919ea1a9aea59e98928d87837f7c797776747474747576777a7d8084898e939da0a7afaaa8abaca0968e81746d62594f463c32281e150b000000000000000000000000040d192327333f49535b606d737d858f949da0a7acaca49f9c989892918f8e8d8d8d8e8f919298999d9fa7acaca69f99938d847d716c635b51493f352c22180b020000000000000000000000000000000000000000000000000000000006111c2a36424d5763707d8a96a1acaaa8aab0a79b8e8174685d5245392c2013040000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2a36424d5763707d8a96a1acaaa8aab0a79b8e8174685d5245392c201304000000000000000000000000000000000000000000000000000004090e11131314202d3a4753606d7a8693a0acac9f9286796c5f5346392c201312110f0c070100000000000000000000000000000000040f1b26323c46525e68717e8b949e9e938c80736c61584f474048505860676d737b8084898c8f9192929291908d8a85807a706b61606d798787878787878073665d67707d8a95a09f92867b6e6154483c31261a0e0200000714212d3a46535f697784909d9f9fa9998c807366574d42362a1e120500000000000000000b17222d3a4753606d7a86929f9f9f9fa196887b6f6255483c3025190d000000000000000004111d2935414b5565727f8b98a79f9f9e9184786c605346392d2013060000000000000000000000000000000000000000000000000000000b17232e3844515c66727e8b96a19f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9a8d8174675a4e4134271b0e0100000006121e2b37424d57616e7b859298a299928c8582818182868f939e9f958e81756b6054453b31251e28323e46525e68717e8a949e9f93887d6f675d51453d32271b0f0300000000000000000000000000000000000000000000000000000000000000000000030f1b26323c4754606a74808d949e9f95908983818082848b9298a29992857b6e61594f4432291e130800000007121d28313d45525d68707d8a939e9d93897d70675d51453d32271b0f0300000000000000000000000000000b17222d38424a50585f666d727c838c9299a0a79e9184786b5e5145382b1e1205000000000000000000000006111c26303d45515d67717e8a949e988f82756c61554b4035291d110400000000000000000000000000030f1b27323d46535f69707d8691969e9f97928e8c8c8d8f92989f9f9691867d6f685e5242392e23180c000006111c26303d45515d67717e8a949e988f82756c61554b4035291d1104000000000000000000000000000000000000010c161f2b353f44505b656c747f8a92979ea6acaaa29f9a93908c898684828181808182838487898c91969b9ea5acaba59e9b9ea1a89d938c7f726b61584e443a30271c1207000000000000000000000000071017222d384149505b636b707b828990959c9fa4acaca9aaa39f9d9c9b9a9a9a9b9c9d9fa3aaaaababa39f9b948f878079706b625a514940372e231a10060000000000000000000000000000000000000000000000000000000000000e1a25313b4653606c7884919e9f9f9f9f9fa095897c6f63564c4135291d110400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a25313b4653606c7884919e9f9f9f9f9fa095897c6f63564c4135291d110400000000000000000000000000000000000000000000000000080f151a1d1f2020202d3a4753606d7a86939f9f9f9f9286796c5f5346392c20201f1e1c18130c05000000000000000000000000000000000a15202a36414c56626d76828f97a19f93887e716a60594f473f464e555c60696e73797c7f82848586858583817d79736d6860595d67757a7a7a7a7a7a796d60606d7984919ea49a8e8174695e53463a2a1f15090000000815222e3b4855616e7b88959393939396897c6f6256493c31251a0e02000000000000000006131f2c3945515d6775828f93939393939184786a5f53473a2e1e13080000000000000000010d18242f3b4854616e7b87959393939396897c6f6256493c2f23160900000000000000000000000000000000000000000000000000000006111c2834404a54606d7984919393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393938d8174675a4e4134271b0e01000000020e1a26313c46525e69707d8692989f9f98928f8d8d8f92999e9f9590837a6d61594f4433291f16202a36414c56616c75828f97a29a9184796d60584e43372b1f130600000000000000000000000000000000000000000000000000000000000000000000000a15202b37434e58606d78828e939da09d95908e8d8e91969f9f9792877d70695f53473d3320170d02000000010c161f2935414c56616c75818e97a19e9184796d60594f44382c1f1307000000000000000000000000000006111c262f383f444e545c606a6f788087909593939184786b5e5145382b1e12050000000000000000000000000a141e2935414c55616c75828f9893948a7d70675d5145392c20130600000000000000000000000000000a15202a36424d57606b707c848c9196999c9b9999999b9d9a97928d847d6f6b60564c4130271c12070000000a141e2935414c55616c75828f9893948a7d70675d5145392c20130600000000000000000000000000000000000000040d192327333f49535b606d737d858f949da0a7acaca49f9c989892918f8e8d8d8e8f8f919696999ea1a8aaaca69f9c938e9196a1a59f93877d706a5f564c42392e2318110800000000000000000000000006111b262f383f44515961696e757d83898f939a9c9fa2aaa7a8aaa9a7a7a7a7a7a9a9a8a6a9a29e9b99928e88827c746d676059504840372e251c11080000000000000000000000000000000000000000000000000000000000000009141f2b3844505b66737f8c999393939393939084776b6054443a3024190d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2b3844505b66737f8c999393939393939084776b6054443a3024190d0100000000000000000000000000000000000000000000000009121a20262a2c2d2d2d2d3a4753606d7a8693939393939286796c5f5346392d2d2d2c2b28241e170f07000000000000000000000000000000040d1925303a44505a616e7b859299a39a92867c6f6b6159504641434b51565e61666d6f737677787979787674706d67615d564f555d686d6d6d6d6d6d6d67616b74808d96a19f93877c6f62574d42362a180e030000000c1926323f4c5965727f8686868686868684786c605346392d20130900000000000000000004101d2935404b5565727f86868686868686807467584e43372b1f12060000000000000000000714212d3a46535e697783868686868686868073665a4d4033271a0d000000000000000000000000000000000000000000000000000000000c18232e3945515c67727f86868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868074675a4e4134271b0e01000000000915202a36424d56616b707d868e92999b9d9b9a9a9c9d9a97928b837a6d685d52473d3321170e1925303a44505a616e7b85929393968d80736a6054473b2e2215080000000000000000000000000000000000000000000000000000000000000000000000040f1b27323d44515c666d79818a9195999c9d9b9a9b9e9c99928e857d706b61574d42352b210e050000000000040d19242f3a44505a616d7a85929393968d80746b6054483b2f2215090000000000000000000000000000000a141d262d333c424a50585f666d737c838686868684786b5e5145382b1e1205000000000000000000000000020c19242f3a43505a616e7b8686868686847a6d6053473a2d2014070000000000000000000000000000040e1a26313b454f59606a6f797f848a8d8f9192929291908d8a8580796f6b60594f443a301e150b00000000020c19242f3a43505a616e7b8686868686847a6d6053473a2d2014070000000000000000000000000000000000000000071017222d384149505b636b707b828990959c9fa4acaca9aaa39f9d9c9b9a9a9a9b9c9ea0a8a6abacaba39f9b94908981849198a2a49992867c6e685e544a40342823190b020000000000000000000000000a141d262d3340474f575e616b70777d82878b8f9298989a9b9d9e9e9f9f9f9e9d9d9b999797928e8a86817c766f6a605d554f473e362e251c130a0000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a54616e7a8786868686868686867f7265594f4332281e1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a54616e7a8786868686868686867f7265594f4332281e130800000000000000000000000000000000000000000000000008121b242b323639393939393a4753606d798686868686868687796c5f5346393939393837342f2921190f0500000000000000000000000000000008131e29323f46525e69707d87929fa29892857d706b625a524c4440454d52545c606366696a6b6c6c6b696764605c55524c444c565d61616161616160606a707d88939fa2978e81756a5f53453b31251a06000000000b1825313e4a57626d7279797979797979786c655b5044372b1f1205000000000000000000000c18242f394a56626d7279797979797979746e6458463c31261b0f0300000000000000000005121e2a36424d5767717779797979797979736e63584b3f3226190c0000000000000000000000000000000000000000000000000000000007121c2834404b55626d727979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979746e64584c3f33261a0d0000000000030e1925303b444f59616b707a81868b8e9091929291908d8a857f786d685e564c41352b210f08131e29323e46525e69717e8686868686877c6f6256493c2f2316090000000000000000000000000000000000000000000000000000000000000000000000000a16202834404a545c676d747d84898d8f91929292918f8c87817b706b61594f453b3123190f0000000000000008131e28323e46525e68717e8686868686887c6f6356493c30231609000000000000000000000000000000020b141c222830383f444e545c606a6f77797979797872685c5043372a1d11040000000000000000000000000008131e28313e46535f696e7979797979786d675d5145392c20130600000000000000000000000000000009141f29333d474f5860676d72787d8082848586858483807e79736d6760594f473d32281e0c03000000000008131e28313e46535f696e7979797979786d675d5145392c20130600000000000000000000000000000000000000000006111b262f383f44515961696e757d83898f939a9c9fa2aaa7a8aaa9a7a7a7a7a8a9aaa8a6aaa29f9c99928f89837d757c86929aa4a29891847a6d665c51443f352b1d140a000000000000000000000000020b141b2227353e454d525960636b70757b7e8285888b8d8f9091929292929191908e8c8a8885817e7a746f6a626058514b433d352d241c130a010000000000000000000000000000000000000000000000000000000000000000000b17222d3846525e686e797979797979797979726d6256473d32261e140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3846525e686e797979797979797979726d6256473d3220160c020000000000000000000000000000000000000000000000040f1a242d363d4245464646464545515c67767979797979797979756a5e523e454646464544403a332b21170c010000000000000000000000000000020d17202a36424d56606b727f8b929ca29792867d716c615e5650474242464a505356595c5e5f5f5f5e5d5a5753514b46413a444c5254545454545960696f7c86929aa49f92857b6e61584e4333291f1409000000000916222e3a46515b62656c6c6c6c6c6c6c6b605b53493f33271b0f030000000000000000000007121d2e3a45515b62656c6c6c6c6c6c6c67645c5247342a20150a00000000000000000000020e1a25313b45555f676a6c6c6c6c6c6c6c66635c52473b2f23170a00000000000000000000000000000000000000000000000000000000000c18232e3943515b62656c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c67645c52473c3024170b00000000000009141f29323e474f5960686e747a7e81838485858483817d79726d665e564c443a3023190f020d17202a36424d57626c717979797979796f6a6054473b2e221508000000000000000000000000000000000000000000000000000000000000000000000000040c18232e39424b555c606c70777c80838485868584827f7b756e6961594f473e332a1f110700000000000000010c16202a36414c56616c717979797979796f6b6054483b2f22150900000000000000000000000000000000020a11171e262e343c424a51585f626a6c6c6c6c6b6860564b3f33271b0f0200000000000000000000000000010c161f2a36424d575f616c6c6c6c6c6b605d554b4035291d1104000000000000000000000000000000030d17212b353d464e555c60666d70737677787978787674716d67605d554f473d352b20160c000000000000010c161f2a36424d575f616c6c6c6c6c6b605d554b4035291d1104000000000000000000000000000000000000000000000a141d262d3340474f575e616b70777d82878b8f9298989a9b9d9e9e9f9f9f9f9e9d9c9a9898928f8b86827d76706b707e88939fa5a0968f82786d605b51473d2f261b1106000000000000000000000000020a1117232c333b42464f54596063696e7276797c7e808283848585868585848382807d7b7975716d68625f58544e45403a312b231b120a010000000000000000000000000000000000000000000000000000000000000000000006111c2a36414d565e616c6c6c6c6c6c6c6c6c65625b51443f3830261c110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2a36414d565e616c6c6c6c6c6c6c6c6c65625b5146342b210e040000000000000000000000000000000000000000000000000915202b363f484e5253535353514a4b555c6c6c6c6c6c6c6c6c6c6a6359464b5253535352504c453d33291e1307000000000000000000000000000000050e1925303b444f59626d73808d929da29892877e756d68615a534e47433f4446494c4f5152535252504e4a4745403935323a414647474d535b626b707b859198a29e948b7e71685e52463c3121170d030000000006121e29353f49515759606060606060605e53504941382d22170b000000000000000000000001111d29343f48515658606060606060605a58524a413622180e04000000000000000000000009141f2933434d555b5d606060606060605a58524a40352a1f1307000000000000000000000000000000000000000000000000000000000007121d27303f4951565860606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060605a58524a41362b1f1408000000000000020d17202c353e474f565e61686e717577787979787674706d67605c544c443a32281e110700050e1a25303b45505a62656c6c6c6c6c6c6260584e43372b1f13060000000000000000000000000000000000000000000000000000000000000000000000000007121c273039434b515a61646b6f7376787979797775726e69615e574f473e352c21180e000000000000000000040d1925303a44505a61646c6c6c6c6c6c6360594f44382c1f1307000000000000000000000000000000000000060c141c2328303940444e54555d606060605e5c564e443a2f23170b000000000000000000000000000000040d1a26313b454d53555f606060605e53514b433a2f24180d0100000000000000000000000000000000060f19232b343d434b51545c606366696b6c6c6c6b6a6764605d55514b433d342b23190e0400000000000000040d1a26313b454d53555f606060605e53514b433a2f24180d0100000000000000000000000000000000000000000000020b141b2227353e454d525960636b70757b7e8285888b8d8f9091929293929291908f8d8b8885827e7a75706b63616c737f8c939ea79f948d80746d62594f41382d22170b000000000000000000000000000006111a202930363d44484f54565e6165666d6f7174757778787979787877767573716f6d6664605d56534e47433d352f281f191109000000000000000000000000000000000000000000000000000000000000000000000000000e1925303b444d52545f606060606060606060605f5e504a42382e23170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e38424a505e5f606060606060606060585651493f3422190f000000000000000000000000000000000000000000000000000e1a26323d4851595e606060605e575550515f606060606060605f5e595053585f6060605f5c574f453a2f24180c0000000000000000000000000000000009141f29323d47515b636e74808d929fa299928b817a706c625f57534e4745413c4043444546464543413d3a383435393a3d43474c52575f626d727d859197a1a0958f82756c62564d41342a200f050000000000010d18232d373f464a4c535353535353535246443f382f261b11060000000000000000000000010c18232d363f454a4b535353535353534e4c4741382f241006000000000000000000000000030d1721323b434a4f51535353535353534d4b4740382e24190e020000000000000000000000000000000000000000000000000000000000000b151e2d373f464a4c53535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353534e4c4741382f241a0e0300000000000000050e1a232c353d444c52565e6164686a6b6c6c6b6a6763605d55504a423a322820160c00000009141f29333f4850565860606060605f56544e463d32271b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000b151e2730394045505559606366696b6c6c6c6b6965615e57524d453e352c231a0f060000000000000000000008131e29323e4850555760606060606056544f473d32271b0f0300000000000000000000000000000000000000020a11171e272e343c434749515353535351504b443c32281d12070000000000000000000000000000000009141f29333b4246485253535353514745403a31281d1307000000000000000000000000000000000000081119222b303940454a5053575a5c5e5f5f5f5e5d5a5753514b45413a312b2219110700000000000000000009141f29333b4246485253535353514745403a31281d1307000000000000000000000000000000000000000000000000020a1117232c333b42464f54596063696e7276797c7e808283848585868685848382807e7c7975726e686360595a636d75818e95999999928b7f726b6053493f33271b0f030000000000000000000000000000080e171f252a33383d44484d535f605c60626567686a6b6b6c6c6c6b6a6a68666462605c605f534d47433c383229241d160d07000000000000000000000000000000000000000000000000000000000000000000000000000008141f29323b41464753534d545b60666c6c6c6c6c6a5c544a3f34281c10030000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a545c6a6c6c6c6c6c66605b544d4c4a463f372d23130c04000000000000000000000000000000000000000000000000111d2a36424e59636b6c6c6c6c6b64615a534d53535353535353534d535b60656c6c6c6c6b6861574c4034281c0f00000000000000000000000000000000020d17202b353f49525c646e74808c9399a29f938e857d756e6a625f5854524c49474540413f3e3e3d3d3e3f3f404045474a4e53565e61696e767e879297a1a1969083796d605a50443b3022180e0000000000000007111b252d353a3e3f46464646464646453937332d261d140a0000000000000000000000000006111b242d343a3d3f4646464646464641403c362f261d130000000000000000000000000000050f202932393f434446464646464646403f3b352e261c120800000000000000000000000000000000000000000000000000000000000000030c1b252d343a3e3f4646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646413f3c362f261d130800000000000000000008111a232c323b41464c5254585b5d5e5f5f5e5d5a5753514b443f38302820160e04000000020d17202d363f454a4b5353535353534947433d342b20150a000000000000000000000000000000000000000000000000000000000000000000000000000000030c151e272e343e44494f54565a5c5e5f5f5f5e5c5954524d46423b332c231a11080000000000000000000000020d17202c363e45494b5353535353534948443d352b21160a00000000000000000000000000000000000000000000060c151c232832373b3c444646464645433f3a322a20160c0100000000000000000000000000000000030d17212931363a3b4646464646453a39352f281f160c01000000000000000000000000000000000000000810191e272e34383f44464a4d505152535251504d4a47454039352f281f19100700000000000000000000030d17212931363a3b4646464646453a39352f281f160c01000000000000000000000000000000000000000000000000000006111a202930363d44484f54565e6165666d6f7174757778787979797878777573716f6d6665615e56544f515b606d79838c8c8c8c8c8c867d70655b5044372b1f1205000000000000000000000000000000050d141a21272c36424d575e6c6c6c6c6c6c6c6a665f5f5f5f5f5e5e66696c6c6c6c6c6c6c5e574d42362b272018130c04000000000000000000000000000000000000000000000000000000000000000000000000000001070e17202930363b424651575f666c72797979797975665c5044382b1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c66757979797979726c665f575146423b3229251e160e070100000000000000000000000000000000000000000000131f2c3945525e6b757979797978706c615f57514b434646424b51575f656c71787979797873685c5044372b1e110000000000000000000000000000000000050e19232d37404a525c646e737f8792979f9e97928a827b756f6a65605d565653514b4d4c4b4b4a4a4b4b4c4d4b515357585f62686d737b828b9299a19f9791847a6e675d51483e32291f100600000000000000000a131b23292e313239393939393939382d2b27221b140b02000000000000000000000000000009121b23292e3132393939393939393433302b241d140b0100000000000000000000000000000e1720272e3336373939393939393933322f2a241c140a00000000000000000000000000000000000000000000000000000000000000000009131b23292e313239393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393433302b241d140b010000000000000000000008111a202930363b4146474b4e5051525251504e4a47454039342e261e160e040000000000050e1b242d343a3d3e4646464646463c3b37322b22190f0400000000000000000000000000000000000000000000000000000000000000000000000000000000030c151d232833393d4348494d5051525352514f4c4846423b363029211a110800000000000000000000000000050e1b242c34393d3e4646464646463c3b38322b23190f040000000000000000000000000000000000000000000000030b121820262b2e2f37393939393837332f2820180f05000000000000000000000000000000000000060f171f262a2d2e3939393939382d2c29241d160d04000000000000000000000000000000000000000000070c151d23282e34383a3d4043444546454543413e3a38352f29241d160d07000000000000000000000000060f171f262a2d2e3939393939382d2c29241d160d0400000000000000000000000000000000000000000000000000000000080e171f252a33383d44484d5254545c60626567686a6b6b6c6c6c6c6b6a69676562605c5454524c484445515c676e7b808080808080807f786c605346392d2013060000000000000000000000000000000002090e16212d3a46535e69767979797979797771665b5253525a66707679797979797976695e53463a2d21160d07010000000000000000000000000000000000000000000000000000000000000000000000000000040c1318202830353e444d525b62696e787f8686868687796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7987868686867f786e69625b524d443e3530282018130c0400000000000000000000000000000000000000000013202d394653606c7987868686847d756e69605c554f46454f545c60696e777e8586868685786b5f5245382c1f1200000000000000000000000000000000000007111b252e38414a525c646d727d8590949fa19e938f87817c76716d686663605d555a59585757575858595a555d6063676a6f747a80868f949fa39e9590857c6e685e554c41362d20170d000000000000000000010a11181e2225262d2d2d2d2d2d2d2b201f1b17110a02000000000000000000000000000000000911181d2224252d2d2d2d2d2d2d2726241f1a130b02000000000000000000000000000000050e161c2227292a2d2d2d2d2d2d2d2726231f19120a02000000000000000000000000000000000000000000000000000000000000000000010911181e2225252d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2726241f1a130b02000000000000000000000000080e171e252a3036393b3e42444546464543413d3a39352f28231c150c040000000000000009121b22292e31323939393939392f2e2b2720191007000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b121822282d32383b3c40434546464644423f3b3a36302a251f170f0800000000000000000000000000000009121b22282d3031393939393939302f2c27211911070000000000000000000000000000000000000000000000000000070c151b1f22222a2d2d2d2d2b2a27231d160f060000000000000000000000000000000000000000060d141a1e21222c2d2d2d2d2b20201d18130c040000000000000000000000000000000000000000000000030b12181c23282b2d30333638393939383734312d2c29241d18130c040000000000000000000000000000060d141a1e21222c2d2d2d2d2b20201d18130c04000000000000000000000000000000000000000000000000000000000000050d141a21272c33383b4246474a505355585a5c5d5e5f5f605f5f5e5d5c5a585553504a4746413b38404b555e696e73737373737373726c655b5044372b1f12050000000000000000000000000000000000000815212e3b4854616e7b86868686868683776a5d50464f5c6976828686868686867b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000070d161d2429323a414650565e616d727b828c929992877e71665c5044382b1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c66717e879399928c827b726d615e565046413a3229241d160d0700000000000000000000000000000000000000000b1825313e4b5864717e889396918a827b736d67615953525960666d737b828b929792877e7064574a3d3124170a0000000000000000000000000000000000000009131c262f38414a525b626b707b828c92989e9e99928e88837e7a76726f6d67696766656464646465666769676d7074777c81868d92999fa19e938e837b6e6a5f564d433a2f241b0e050000000000000000000000070d12161819202020202020201f13120f0b0600000000000000000000000000000000000000060c11151718202020202020201b1a17140e08010000000000000000000000000000000000040b11161a1d1e202020202020201a1917130e0800000000000000000000000000000000000000000000000000000000000000000000000000070d1216181920202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201b1a17140e08010000000000000000000000000000050d14191e252a2d2e313537383939383734302d2c29241d17110a030000000000000000000911181d2124252d2d2d2d2d2c23221f1b150f07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c171c21272c2f303336383939393836322e2d2a251f1a140d0500000000000000000000000000000000000910171d2124242d2d2d2d2d2d23221f1b160f0700000000000000000000000000000000000000000000000000000000040a0f1315161e202020201e1d1b17120c050000000000000000000000000000000000000000000003090e1214151f202020201e1413110d07010000000000000000000000000000000000000000000000000000070c11171c1f202427292b2c2c2c2b2a2724201f1d18120d07010000000000000000000000000000000003090e1214151f202020201e1413110d0701000000000000000000000000000000000000000000000000000000000000000002090e161c21272c30363a3b3f4446494b4d4f5051525253535251504f4d4b4946443f3b3936302f39434d565e616666666666666665605b53493f33271b0f030000000000000000000000000000000000000815212e3b4854616e7b87939393939083776a5d50444f5c6976828f93939393877b6e6154483b2e21150800000000000000000000000000000000000000000000000000000000000000000000000000000710191f282f353e444c525a61696e767f8690949a93877e716c61544a3f34281c10030000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54616c717e87939a9490867f766e69615a524c443e352f281f191007000000000000000000000000000000000000000a1724303d4956626c717f8b919e948f868079706b615f5d606b6f797f868f949f93887e716c6155493c3023160a00000000000000000000000000000000000000010a141d262f384049515961696e787f868f949c9f9f9b94908b86837f7c7a77757472717170707172727376787a7d8084888e92989fa39f97928b81796e695f574e443b31281e1209000000000000000000000000000106090b0c1313131313131312060503000000000000000000000000000000000000000000000105090b0c131313131313130e0d0b0803000000000000000000000000000000000000000000060b0e1011131313131313130d0c0a07020000000000000000000000000000000000000000000000000000000000000000000000000000000106090b0c13131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313130e0d0b0803000000000000000000000000000000000002080e14191e202125282a2b2c2c2b2a2724201f1d18120c06000000000000000000000000060c111517182020202020201615130f0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b10161b1f222327292b2c2c2c2b292621201e1a140e090300000000000000000000000000000000000000060c111517182020202020201615130f0a040000000000000000000000000000000000000000000000000000000000000003060809111313131312110f0b0701000000000000000000000000000000000000000000000000000205070813131313131207060401000000000000000000000000000000000000000000000000000000000000060b101213171a1d1e1f201f1e1d1a171413100c070100000000000000000000000000000000000000000205070813131313131207060401000000000000000000000000000000000000000000000000000000000000000000000000050b10161c1f252a2d2e34383a3c3e414244454546464645454442403e3c3a38342e2d2a2527313b444d5254595959595959595953504941382d22170b000000000000000000000000000000000000000815212e3b4854616e7b87949f9f9d9083776a5d50444f5c6976828f9c9f9f94877b6e6154483b2e21150800000000000000000000000000000000000000000000000000000000000000000000000000040f19222b313a41454f565e616c717b828b92989a93887e716c615a5042382e23170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e3842505a616c717e88939a98928b827b716c615e564f45413a312b22190f040000000000000000000000000000000000000815212d3945505a626d727f8b919c98928c847d756e69686d747c838c92989c918b7f726c625a5044392d2014080000000000000000000000000000000000000000020b141d262e373f474f575e666d727b828990949b9f9f9c9992908c89868482807f7e7e7d7d7e7e7f808284868a8d91969b9fa39f99938d857e756d675e574e453c32291f160c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080e111414181b1d1e1f1f1e1d1b171413100c070100000000000000000000000000000105090b0b13131313131309080603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f1315161a1d1e1f201f1e1c191514120e0903000000000000000000000000000000000000000000000005080a0b1313131313130909070300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306070a0d101112131212100e0b070604000000000000000000000000000000000000000000000000000000060606060605000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b1014191e2023282c2d2f3234353738383939393938373634322f2d2c2823201e191f29323b4246474d4d4d4d4d4d4d4c46443f382f261b1106000000000000000000000000000000000000000815212e3b4854616e7b8794a1aa9d9083776a5d50444f5c6976828f9ca9a194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000a16212b343d434b515961686d757e858f949f9f93887f716c625a50483e30261c110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303e48505a626c717f88939f9f948f857e756d686159514b433d342b21160a00000000000000000000000000000000000005111d29343e48505a626d727f8c929c9f96918a827b73717a818891959f9d928c7f736d625a50483e33281c1004000000000000000000000000000000000000000000020b141c252d353e454d545c60696e757c83898f93999da09f9c999992918f8d8c8b8a8a8a8b8b8c8d8f91939a9a9ea0a19e99928e87817a716c605d554d453c332a20170d040000000000000000000000000000050a0d0f10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100f0d0a0500000000000000000000000002080d101213131313131313090806030000000000000000000000000000000000000000000000010407071213131313131313131313120f0a0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080b0f1112131312100e0a07060400000000000000000000000000000000000000000000060606060606000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030709090d1012131313110f0c08070502000000000000000000000000000000000000000000000000000000000006060606060600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607090b0d0f1111121313121111100d0b08060603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090e1114171c1f20222527292a2b2c2c2d2c2c2b2a29272522201f1c1714110d17202930363a3b404040404040403f3937332d261d140a00000000000000000000000000000000000000000815212e3b4854616e7b8794a1a99d9083776a5d50444f5c6976828f9ca9a194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000030f1b27323d464e555d606b707a818a92979f9b918b7f726d625a50483e362c1e140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141e2c363e48505a626d727f8b919b9e97928a817a706b605d554e463d32271b0f030000000000000000000000000000000000000c17222d363f48515b636d737f8c929ca09e948f867f7d848d939aa09d938d80736d635b51483e362c22170b0000000000000000000000000000000000000000000000020a131b232c333b424a50575f616b6f767c82878c9196989c9fa29f9d9c9a99989797979798999a9c9e9fa39f9c9997918c86817c746d68625a514b433b332a21180e0500000000000000000000000000030a1016191c1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1c1916100a03000000000000000000060d14191c1f1f2020202020201515120f0a030000000000000000000000000000000000000001080d1113141f202020202020202020201e1b161009010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104070c10121316181a1c1d1e1f1f201f1e1d1c1a181513120f0b060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030607090b0d0f1111121313121211100f0d0a08070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205060c10121316181a1c1d1e1f1f20201f1e1d1c1a18161312100c0605050e171f252a2d2e33333333333333322d2b27221b140b0200000000000000000000000000000000000000000815212e3b4854616e7b87949c9c9c9083776a5d50444f5c6976828f9c9c9c94877b6e6154483b2e21150800000000000000000000000000000000000000000000000000000000000000000000000007131f2c38434e5860676d747d858e939fa29b918b7f726d625a50483f362d241a0c020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c1a242d363f48505a626d727f8b919ba29f938e857d746d6760584e43382c1f130700000000000000000000000000000000000006101b242d363f49515b636d73808d929da49e98928c8a91969fa49e938e81746e645b51493f362d241a10050000000000000000000000000000000000000000000000000109111a212930383f444d535960636b6f757b7f84888c8f929797999b9c9d9e9f9f9f9f9e9d9d9b99979992908c8884807a746f6a615d5650454039312920180f0600000000000000000000000000040d151c21262929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292926211c150d04000000000000000810181f25292b2c2d2d2d2d2d2d22211f1b150e060000000000000000000000000000000000040c13191d20212b2d2d2d2d2d2d2d2d2d2d2b27211b130a0100000000000000000000000000000000000000000000000000000000000000030506090c0e1011121313131211100e0b090605030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030506090c0e1011121313131211100e0b090605030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010507070b0d0f111213131312110f0d0b07070501000000000000000000020608080c0f1112131312110f0c080705020000000000000000000000000000000000000000000000000000000001080d1113181c1f20222527292a2b2c2c2c2c2b2a29272422201f1c1712100c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104060b10121315171a1c1d1e1f1f201f1f1e1d1b19171514120e0906030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030607090b0e0f1112121313131212110f0d0b0907060300000000050d14191e20212626262626262626201f1b17110a020000000000000000000000000000000000000000000815212e3b4854616e7b878f8f8f8f8f83776a5d50444f5c6976828f8f8f8f8f877b6e6154483b2e2115080000000000000000000000000000000000000000000000000000000000000000000000000915222e3b4854606a6f79818a91979ea39c918c7f726d625b51483f362d241b12080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121b242d363f48515b626d727f8c919ca39e97918a81796f6a6054483b2e2215090000000000000000000000000000000000000009121b242d373f49525b636e74808d929da5a39f99979ea1a69e948e81786c605c524940372d241b1108000000000000000000000000000000000000000000000000000000080f171e262e343b42464f54596063696e73777b7f8285888a8c8e8f9192929292929191908f8d8b8886837f7c78736e68625f58524c443f352f271f170e0600000000000000000000000000030d161f262d3235363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363635322d261f160d03000000000006101a222a303538393939393939392f2e2b2620181006000000000000000000000000000000040d161e24292c2d383939393939393939393937332c251c13090000000000000000000000000000000000000000000000000000000003060b0f121315181b1d1e1f2020201f1e1c1a181513120f0b0603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003060b0f121315181b1d1e1f2020201f1e1c1a181513120f0b060300000000000000000000000000000000000000000000000000000000000000000000000000000000000004080d111314171a1c1e1f1f20201f1e1c1a171413110d08040100000000030a0f121415191c1e1f20201f1e1c191514120e090300000000000000000000000000000000000000000000000003090e13191d2023282c2d2f31333637383839393838373634312f2d2b28221f1c17110d0802000000000000000000000000000000000000000000000000000000000000000000000000000001070d1113171c1f20222426292a2b2b2c2c2c2b2b2a28262422211e1a1312100c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010204050506060606050403010000000000000000000002090e1114141a1a1a1a1a1a1a1913120f0b0600000000000000000000000000000000000000000000000814212e3b4754616e7a8283838383828074675a4e414d5a6673808283838383827a6e6154473b2e2114080000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c848e9393939393918c7f726d625b51493f362d241b120900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b242d363f49515b626d727f8c9193939393938e847c6f6256493c2f231609000000000000000000000000000000000000000009121b252d374049525c646e74808d939da59f9f9f9fa79f948f82786d665b504a40372e251b12090000000000000000000000000000000000000000000000000000000000050c141c232831363d44484f54575e61666a6e7276797b7e80818384858586868584848382807e7c7a76726f6c65615e56534e46413a3229241d150d0500000000000000000000000000000a151f2831383e424343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343423e3831281f150a00000000020d18222c343b4144464646464646463c3a37312a22180e0300000000000000000000000000010c1620282f35393a4546464646464646464646433e372e251b100500000000000000000000000000000000000000000000000000060b1012171b1f20222527292b2c2c2d2c2c2b29272522201f1b17120f0b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b1012171b1f20222527292b2c2c2d2c2c2b29272522201f1b17120f0b060000000000000000000000000000000000000000000000000000000000000000000000000001070c1013191d20212427292a2c2c2d2c2c2b29272421201d1913100d0701060b0f151a1f212226292b2c2c2c2c2a282621211e1a140d05000000000000000000000000000000000000000000030a0f151a1e24292c2e34383a3c3e4042444445464645444443403e3b3938332d2c28231c19130d08010000000000000000000000000000000000000000000000000000000000000000000003090e13181d2023282b2d2f3133353737383939393837373533312e2d2a26201f1c17110d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080d0d0d0d0d0d0d0c060503000000000000000000000000000000000000000000000000000714202d3946525e686e767676767676746e64584c404b58636e737676767676766e685e5246392d2014070000000000000000000000000000000000000000000000000000000000000000000000010e1b2734414e5a67748186868686868686867f736d635b51493f372d241b1209000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b242d373f49515b636d737f86868686868686868174675a4e4134271b0e01000000000000000000000000000000000000000009131c252e37404a525c606c77818e93939393939393959082796d665c544a3f382e251c130900000000000000000000000000000000000000000000000000000000000000020a11171f262a32383d44484d5354575f6265666c6f717375767778797979787877767573716f6d676662605b53524c47433c3530282018120b03000000000000000000000000000005101c26313a42494e50505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050504e49423a31261c100500000008141f2a343e464d51525353535353534847433c342a20150a0000000000000000000000000008131e28323a41454752535353535353535353534f4940372c21160a0000000000000000000000000000000000000000000002080d11171c1f22272b2d2f323436373939393938373634322f2d2b27221f1c17110d08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d11171c1f22272b2d2f323436373939393938373634322f2d2b27221f1c17110d0802000000000000000000000000000000000000000000000000000000000000000000060b12181d1f252a2d2e313336373839393939373634312e2d2a25201d18120d11171b1f262b2e2f323537393939393735322e2d2a251f170f0500000000000000000000000000000000000000060b151a1f262b2f35393a404446494b4d4f50515252535251504f4d4b4846443f3a38342e29241e19130c0400000000000000000000000000000000000000000000000000000000000000040a0f151a1d24292c2e34383a3c3e404244444546464545444342403d3b3a36312d2c28231c19130d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36414c565e6169696969696967645c52473c47525c6366696969696969615e564c41362a1e11050000000000000000000000000000000000000000000000000000000000000000000000010d1a2733404c58646e747979797979797979736d635b51493f372d251b12090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b252d373f49515b636d737979797979797979746e64584c4033271a0d010000000000000000000000000000000000000000010a131c252e384044505b656c7881868686868686868683796d675d544a42382d261c130a01000000000000000000000000000000000000000000000000000000000000000000060b141a21272c32383b4246484e5355545b6062646668696a6b6c6c6c6c6b6a6a68666462605d555553504946413b373229241e160e07010000000000000000000000000000000a16212d38424c545a5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5a544c42382d21160a0000000d1925303b4650585d5f60606060606055534e463c31261b0f030000000000000000000000030c19242f3a444c52545e6060606060606060605f5a52493e33271b0f000000000000000000000000000000000000000001070d13191c23282b2d3337393c3f41434445464646454443413e3c3937332d2b28221c19130d070100000000000000000000000000000000000000000000000000000000000000000000000000000001070d13191c23282b2d3337393c3f41434445464646454443413e3c3937332d2b28221c19130d07010000000000000000000000000000000000000000000000000000000000020a11171d24292c3036393a3e40424445464646454442403e3a3936302c29241d191b22272b31373a3b3f42444546464544423f3b3a36312921170d0300000000000000000000000000000000020a111720262b31373a4145474a515355585a5c5d5e5f5f5f5f5e5d5c5a575553504a46443f38353029241e160d070000000000000000000000000000000000000000000000000000000000070c151b20262b2f35393a3f4446484a4d4f5051525253525251504e4c4a4846423d3a38342e29251e19140d0500000000000000000000000000000000000000000000000000000000000000010407070a0d10111213131211100d0b07070501000000000000000000000000000000010406070a0d0f11121213131211100e0c0908060300000000000000000000000000000000000000000000000000000000000000000000000000010d1925303b444c52545c5c5c5c5c5c5a58524a4136404a52585a5c5c5c5c5c5c54524c443b3025190d010000000000000000000000000000000000000000000000000000000000000000000000000b1824303c48535c64676c6c6c6c6c6c6c6c66635b51493f372d251b130900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131b252d373f49515b63666c6c6c6c6c6c6c6c67645c53483c3024180b00000000000000000000000000000000000000000000010a131c2627333f49535b666c757979797979797979776d675d554b42392f261c140a01000000000000000000000000000000000000000000000000000000000000000000000003090e161b21272c31363a3c4247484a50535557595b5c5e5f5f5f5f5f5e5e5d5c5a585553514b4946443f3836302b262019130c0400000000000000000000000000000000000d1926323e49545e666969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969665e54493e3226190d000000101c2935414d5862696c6c6c6c6c6c6c625f584e43372b1f120600000000000000000000000b151e2935414c565d606b6c6c6c6c6c6c6c6c6c6c645a4f43372b1e1200000000000000000000000000000000000000040c13181e24292e34383a3f4446484b4e50515253535352514f4d4b4846443f3938332d29241e18130c0400000000000000000000000000000000000000000000000000000000000000000000000000040c13181e24292e34383a3f4446484b4e50515253535352514f4d4b4846443f3938332d29241e18130c04000000000000000000000000000000000000000000000000000000060c141c23282f35393a4146474a4d4f515252535352514f4d4a4746413a39352f2924262d33373c4347484c4f5152535352514f4c4846423b33291f1409000000000000000000000000000000060c141c232831373c42474c5154545c60626466696a6b6b6c6c6b6b6a69676462605b5453504a45413a352f281f18120b0300000000000000000000000000000000000000000000000000030b121820262b31373a4145474a50535557595c5d5e5e5f5f5f5e5e5d5b595755534d4946443f3835302a251e170e080200000000000000000000000000000000000000000000000000000002080d111314171a1d1e1f201f1f1e1c1a181413110d0803000000000000000000000003080d111314171a1c1e1f1f201f1f1e1d1b181615130f0a0602000000000000000000000000000000000000000000000000000000000000000000000008141e29323b4146475050505050504e4c4741382f3840474b4d5050505050504746413b32291e1408000000000000000000000000000000000000000000000000000000000000000000000000000814202b36414a53585a60606060606060605957514940372e251b1309000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000109131b252e37404951575960606060606060605a58534a41362b2014080000000000000000000000000000000000000000000000010a1417222d38414a545b60686c6c6c6c6c6c6c6c6a605d554c433930271d140a020000000000000000000000000000000000000000000000000000000000000000000000000000040a0f161b1f252a2d31373a3b3f4446484b4d4e505152525353525151504f4d4b494745403c3937332d2a251e1b150d08020000000000000000000000000000000000000f1c2935424e5a6670767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767670665a4e4235291c0f000000121f2b3844515d697479797979797979766a5f53473a2e2115080000000000000000000007121d27303945525d686d78797979797979797979766c5f5346392d2013000000000000000000000000000000000001070d161d24293035383f444649505355585a5c5e5f5f605f5f5e5c5a585553504946443f38353029241d160d080200000000000000000000000000000000000000000000000000000000000000000001070d161d24293035383f444649505355585a5c5e5f5f605f5f5e5c5a585553504946443f38353029241d160d0802000000000000000000000000000000000000000000000000070f181e262e34394045474c5254575a5c5d5f5f605f5f5e5c5a5754524c47454039352f2f383f44464e5355595c5e5f5f5f5f5d5b5954534d453b31251a0e0200000000000000000000000000070f181e262e343c43474d53555d6064666d6f71737577777879797877777673716e6c6663605c54524c45413a3128231d150c040000000000000000000000000000000000000000000000070c151d232831373c42474b5154545c60626466686a6a6b6c6c6c6b6a6a686664615f575653504a46413a3630292019130d0500000000000000000000000000000000000000000000000003090e13191d202124272a2b2c2c2c2c2b29272421201d1913100c0600000000000000060b0f13191d20212426292a2b2c2c2c2b2b29272522211f1b15120e0903000000000000000000000000000000000000000000000000000000000000000000020d1720293036393b43434343434341403c362f262e353b3f404343434343433b3936302920170d0200000000000000000000000000000000000000000000000000000000000000000000000000030f1a252f3841484c4e53535353535353534c4b4640372e251c1309010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131c252e3740464b4c53535353535353534e4c4841382f251a0f030000000000000000000000000000000000000000000000000006111b262f38424a50535b60606060606060605d54514c433a31271e150b020000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f141a1e21262b2e2d3338393c3e40424344454646464545444342403e3c3a39352f2d2b27221b19140f0a040000000000000000000000000000000000000000101d293643505c6976828383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838276695c504336291d10000000131f2c3946525f6c79868686868686867c6f6255483c2f221509000000000000000000000c18232e39424f59606d7a85868686868686868686796c605346392d201300000000000000000000000000000000040c13181f282f353a41454a5053535b60626567696a6c6c6c6c6b6a69676562605b5353504a45413a352f281f19130c0400000000000000000000000000000000000000000000000000000000000000040c13181f282f353a41454a5053535b60626567696a6c6c6c6c6b6a69676562605b5353504a45413a352f281f19130c0400000000000000000000000000000000000000000000071019212a30383f444b5153565e616466696a6b6c6c6c6c6a696764615e5653514b45413a3c41495053585f6265686a6c6c6c6c6a6865615e574d42362a1e1205000000000000000000000000081019212a30383f444e53575f62676d7175797c7e8082838485858685848382807e7b7974706d66605d56524c433d342e271e160e050000000000000000000000000000000000000000000810191e272e343c43474d53555d6064666d6f7173757777787979787877767573706e696763605c54524c46413b322a251e170e0600000000000000000000000000000000000000000000060e141a1e24292c2d3134363738393938383634312e2d29251f1c17110a03000000020a11171b1f24292c2d313335373839393938383634322f2e2b26211e1a150e09030000000000000000000000000000000000000000000000000000000000000000050e171e252a2d2e3636363636363433302b241d242a2f32333636363636362e2d2a251e170e0500000000000000000000000000000000000000000000000000000000000000000000000000000008131d262f363c40414646464646464646403e3b352e251c130a0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131c252e353b3e40464646464646464641403c362f261d13080000000000000000000000000000000000000000000000000000000a141d262f383f44464e5353535353535353504745413a31281f150c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e12151a1e2122282b2d2f313335363738393939393837373533312f2d2c2924201f1b17110e08020000000000000000000000000000000000000000000013202d394653606c79868f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f86796c605346392d2013000000131f2c3946525f6c79859293939393887b6f6255483c2f22150900000000000000000005101c2834404b54606b74818e979393939393939386796c605346392d2013000000000000000000000000000000070d161d2429313a40454c52545c6063656c6f727476777879797978777674716f6c6563605b54524c45413a3129241e160e070000000000000000000000000000000000000000000000000000000000070d161d2429313a40454c52545c6063656c6f727476777879797978777674716f6c6563605b54524c45413a3129241e160e070000000000000000000000000000000000000000071019232b333b424a50555d6065686d717375777879797978777573716d6865605d55524c44464e535b60646a6e727577787979787775726e695e53463a2d211407000000000000000000000008111a222b333c424a50585f62696e747a7e8185888b8d8f90919292929291908f8d8a8885817d79736d68605d564f454039302820160e050000000000000000000000000000000000000009111a222a303940454e53575f62676d7175797b7d8082838485858685858483817f7d7b7874706d66615e56524c443e36302920180f070000000000000000000000000000000000000000060f181f262b3035393a3d404344454646454443403e3a3935302c28231c150c0802070b141b22272b2f35393a3d40424445454646454443413f3c3b37322e2b26201a150e060000000000000000000000000000000000000000000000000000000000000000050d14191e20212929292929292726241f1a13191f23262729292929292921201e19140d0500000000000000000000000000000000000000000000000000000000000000000000000000000000010b141d252b303334393939393939393933322f2a231c130a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131c232a2f323339393939393939393433302b251d140b01000000000000000000000000000000000000000000000000000000020b141d262d333839424646464646464646443a39352f281f160d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205090e1214171c1f2022242628292b2c2c2c2c2c2b2b2a2927252220201d1813120f0b060000000000000000000000000000000000000000000000000013202d394653606c7986939c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9386796c605346392d2013000000131f2c3946525f6c7985929f9f9f95887b6f6255483c2f2215090000000000000000050e1b242c3845515c666f7c88939fa99f9f9f9f9f9386796c605346392d201300000000000000000000000000000810191f282f353e434b51565d60666d7074787b7e81838485868686858482807e7b7874706c66605d56514b433e353028201910080000000000000000000000000000000000000000000000000000000810191f282f353e434b51565d60666d7074787b7e81838485868686858482807e7b7874706c66605d56514b433e35302820191008000000000000000000000000000000000000050e19222b353d454d545c60676d72767a7e80828485858686858482807d7a76726d67605d565050585f656c71767b7f82848586868584827f7b6e6154483b2e2115080000000000000000000007111a232b343d454d545c606a6e757b81868a8e929897999c9d9e9e9f9f9e9e9d9c9a9797928e8985807a736d686059514b423a322820170e05000000000000000000000000000000000009121b232c343c424b51585f62696e747a7d8185888a8c8f9091919292929191908e8c8a8884807d79736d68615e565046413a322a211910070000000000000000000000000000000000020a1117212a31373a4145474a4d505152535252514f4d4b4746413a38342e261e19130d12181d262d33373a4145474a4d4f51525253525251504e4b4947433c3a37312b2620180f06000000000000000000000000000000000000000000000000000000000000000002080d1114141d1d1d1d1d1d1b1a17140e080e1317191a1d1d1d1d1d1d1414110d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b131a202427272d2d2d2d2d2d2d2d2625231e19120a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a12191e2325262d2d2d2d2d2d2d2d272724201a130b020000000000000000000000000000000000000000000000000000000000020b141c22282b2d353939393939393939372d2c29241e160d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000206060b0f121315181a1b1d1e1f1f20201f1e1e1d1c1a18161413110d07050300000000000000000000000000000000000000000000000000000013202d394653606c7986939f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9386796c605346392d2013000000131f2c3946525f6c7985929faca295887b6f6255483c2f22150900000000000000020c16202b37424d57606d7983919aa4afacacacac9f9386796c605346392d20130000000000000000000000000009111a222b313a41454f555d60686d73797d8185888b8d8f919292939292918f8d8b8885817d78726d68605d555046413a322b221a11090000000000000000000000000000000000000000000000000009111a222b313a41454f555d60686d73797d8185888b8d8f919292939292918f8d8b8885817d78726d68605d555046413a322b221a110900000000000000000000000000000000020d17202b343d474f575f666d72797e83878a8d8f909292939292918f8d8a86837e79736d68605b5a626a6e787d83888c8f9192929292908e8c8275685b4f4235281c0f000000000000000000050f19232b353d464e575f666d727c81878e92999b9fa2aaa6a8aaa9a8a7a7a8a9aaa9a6a9a29e9a97928d85807a706b605c544c443a322920170c0300000000000000000000000000000009121b242d353e464e545c606a6f757b81868a8e929797999b9d9d9e9f9f9f9e9d9d9b999796918d8985807a746e68615a524c443c332b22191007000000000000000000000000000000020b141b2227333c42464c5254575a5d5e5f5f5f5f5e5c5a5754524c46443f38302a251e171d24292f383f44464c515457595c5d5e5f5f5f5e5e5c5a5855534e4847423c37312a2117110a020000000000000000000000000000000000000000000000000000000000000000010507081010101010100e0d0b08030002070a0c0d1010101010100807050100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080f14181a1b2020202020202020191916120d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d1216191920202020202020201b1a18140f080100000000000000000000000000000000000000000000000000000000000000020a11171c1f20282d2d2d2d2d2d2d2d2a21201d19130c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030606090b0d0f101112131313121211100f0d0b090706040100000000000000000000000000000000000000000000000000000000000013202d394653606c798693939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939386796c605346392d2013000000131f2c3946525f6c7985929faca295887b6f6255483c2f2215090000000000000008131e28323a47535f69737f8c95a0acb6b8b9beac9f9386796c605346392d201300000000000000000000000009121b232c343d434b515961676d737a7f848a8e92979899969494989298949496999897918e89847f7a736d67615a524c443d342c231b1209000000000000000000000000000000000000000000000009121b232c343d434b515961676d737a7f848a8e92979899969494989298949496999897918e89847f7a736d67615a524c443d342c231b120900000000000000000000000000000008141e29323d464f5960696e787f858b90939a999c9d9e9f9f9f9f9d9c9a9992908b85807a726c65636c717c838a9095989b9d9f9f9f9f9d9b8e8275685b4f4235281c0f0000000000000000030d17212b353d474f5860696e787f868e93999fa3ababaca8a9a29e9d9b9b9a9b9c9d9fa3aaa9aba9a19e98928c857d736d665d564c443a32291e150a000000000000000000000000000007101b242d363e474f585f666d737c82878e92989b9ea2a9a6a8aaa8a7a6a6a6a7a8a9a8a6a8a19e9a97928c86807a716c615e564d453c342b22190e0500000000000000000000000000000a141d262d333f454d53565d606467696a6b6c6c6b6b696764615e5653504a423e36302920272f353e41495053555d606466686a6b6c6c6c6b6b696765625f5855534e47423c3328221c140b020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003080b0d0e13131313131313130d0c0a0602000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002060a0c0d13131313131313130e0d0b08030000000000000000000000000000000000000000000000000000000000000000000000060b0f12131b20202020202020201d1413110d08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202d394653606c798686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686796c605346392d2013000000131f2c3946525f6c7985929faca295887b6f6255483c2f221509000000000000030d1925303a44505a616e7b86929fa7afacabadb3ac9f9386796c605346392d2013000000000000000000000009121b242d353e464e555d606c707980868c91969a97918e8c8988878685868788898c8f91979a96918c868079706c615d564e463e352d241b120900000000000000000000000000000000000000000009121b242d353e464e555d606c707980868c91969a97918e8c8988878685868788898c8f91979a96918c868079706c615d564e463e352d241b120900000000000000000000000000020e1925303b444e58606b6f7b838b92979c9fa4a9a19e9c9a9a999a9c9ea1a39f9c97928d857e776e6d737e8690959d9fa7a8aba49f9f9f9f9b8e8275685b4f4235281c0f00000000000000010b151f29333d474f59606a6f7b838c92999fa4abadaaa29f9b979792908f8e8e8e8f909298989d9fa7acaaa29f97918880786d685e564c443a30261c1106000000000000000000000000050e19222d363e485059616a6f7980878f93999fa3aaabaaaaa29f9d9b9a9a999a9a9b9d9fa2aaa9aba9a19e98928d857e756d685f574e463c342a20170c0300000000000000000000000006111b262f383f4451575f61686d7073767778797978777673716d6864605c545046413a322a313940454f535b6064676d707375777878797978777674726f6a67625f57534d453f332d261d140b0200000000000000000000000000000000000002080d10121313131313131313131313131313131313131313131313121211100e0b09070604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306060f131313131313131311070604010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030608090c0f111213131211100e0c0a07060401000000000000000000000000000000000000000000000000000000000013202d3946535f6c767979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979766c5f5346392d2013000000131f2c3946525f6c7985929faca295887b6f6255483c2f2215090000000000010b151f2a36414c56626c76828f98a3aca49f9ea1a9b39f9386796c605346392d20130000000000000000000007111b242d363e474f5860676d747d848c929897928d8985827f7d7b7a7979797a7b7d7f8285898d929798928c857d756d6860584f473f362d241b11070000000000000000000000000000000000000007111b242d363e474f5860676d747d848c929897928d8985827f7d7b7a7979797a7b7d7f8285898d929798928c857d756d6860584f473f362d241b110700000000000000000000000005111e2a36414c56606a6f7d8590959ea1a9a29e9997928f8e8d8d8d8f9197999ea1a29f97928b827a747f8b92989fa7a9a19e999993929292998e8275685b4f4235281c0f0000000000000007121d27313b454f59606b707c8590959fa3abaea9a19e98928e8a87858382818181828386888b90959b9fa4aca9a19a938d837a6d685e564c42382e23170d0400000000000000000000020d17202b343e48505a616b707c838c92999fa4abaca7a09d999892908f8d8d8d8d8d8f909298989c9fa4abaaa29f97928a827a6e6960584e463c32291e150b0000000000000000000000000b17222d384149505b62696e747a7d808384858685858482807e7a76716d66615a524c443b333a434b515961656c71757a7d80828485858685858483817e7c78746e6a625f5751443f382f261d140a0000000000000000000000000000000000060d14191c1f1f202020202020202020202020202020202020202020201f1e1e1c1a18161413100c070501000000000000000000000000000000000000000000000000000000000003080c0e0e131313131313130f0e0c09040000000000000000000000000000000000000000000000000000000000000003070b0d0e131313131313130e0e0c080300000000000000000000000000000000000000000000000000000000000000000001040707090c0e101111121313121211100f0d0b0907060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f131516191c1e1f1f201f1e1d1b19161413110d0801000000000000000000000000000000000000000000000000000000121e2b37434f5a646c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c645a4f43372b1e12000000131f2c3946525f6c7985929faca295887b6f6255483c2f221509000000000007121d27313946525e68717e8b949faaa49a939297a1ad9f9386796c605346392d2013000000000000000000060f19232d363e485059616a6f79818a919797918b85817c797572706e6d6d666d6d6e707275797c81858b919697918a817a6f6a615951483f362d23190f060000000000000000000000000000000000060f19232d363e485059616a6f79818a919797918b85817c797572706e6d6d666d6d6e707275797c81858b919697918a817a6f6a615951483f362d23190f0600000000000000000000000714202d3946525e686f7c869297a0a7a49d97928c888582818080808285888c91969ea1a29f948f84818c919fa3aaa39f97928d898685858687898275685b4f4235281c0f000000000000000c18242f39434d57606b707d8692979fa7aeaba39f96918b86817e7b7876757474757677797c7f83888e939a9fa7aca49f9590837a6d685e544a3f34281f160c0100000000000000000009141f29323d46505a626c717d8690959fa3ababa49f9b95908c898584828180808081828385888b8f93999fa2aaa9a19e938f847b6f6a60584e443b30271d120700000000000000000000030f1b27333f49535b606d727b81868a8d909192929292918f8d8a86837e78716c615e564d453c444c555d606c70787d82868a8c8f909192929291918f8d8b8884807b756e69625b504a42382f261b11060000000000000000000000000000000810181f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2c2b2a29272523201f1c1813110d08020000000000000000000000000000000000000000000000000001090f14181a1b202020202020201c1b191510090200000000000000000000000000000000000000000000000000000001080e1317191a202020202020201b1a18140f0901000000000000000000000000000000000000000000000000000000000206080d11131416181a1c1e1e1f1f201f1f1e1d1b1a18161312100b060603000000000000000000000000000000000000000000000000000000000000000000000000060a0e1011131313131313100f0d0a05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c10151b1f222226292a2b2c2c2b2b2a28252321201d19130c0400000000000000000000000000000000000000000000000000000f1b27333e49525a5f60606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060605f5a52493e33271b0f000000131f2c3946525f6c7985929faca295887b6f6255483c2f22150900000000020b18232f39434f59616d7a85929ea6a99f938785929eab9f9386796c605346392d20130000000000000000030c18212b353e48505a626b707c848e9398928c857f7974706c6666636161605c6061616366666c7074797f848b9298938e857c706b625b51483e352b21180c03000000000000000000000000000000030c18212b353e48505a626b707c848e9398928c857f7974706c6666636161605c6061616366666c7074797f848b9298938e857c706b625b51483e352b21180c0300000000000000000007131f2c38444f59616e7a859198a2a9a39f928d85807b78757473737475787b7f848b91969ea59f96918d929ca4a9a199928c85807c797878797a7d7e7164574a3e3124170b00000000000004101d2935404b555e69707d879298a2a9b1a8a099928c847f7a75716e696a6868676869666d6f72767b818790959da4afa79f9590837a6d665c50443e31281d13070000000000000000030d1925303b444e58626c717e879298a0a7afa79f99938e88837f7c79777574737373747577797c7f83878d92989ea5ada59e9691857c6f6a5f564c42392e23180c030000000000000000040f19232b3744505b656c747f868d92989a9c9d9e9f9f9e9e9c9a9992908a847e756d685f574e464c565d676d747d838a8f9299999b9d9e9f9f9f9e9e9c9a9896918d87817b726d605b544a41382d22170b040000000000000000000000000006101a222a30353839393939393939393939393939393939393939393939393838373634322f2d2c2923201d19130f0a0300000000000000000000000000000000000000000000030b131a202427282d2d2d2d2d2d2d292825211b140c0300000000000000000000000000000000000000000000000000020b12191f2326272d2d2d2d2d2d2d282724201a130b0300000000000000000000000000000000000000000000000000040a0f1214191d2021232527292a2b2c2c2c2c2b2b2a28272522201f1c1715120f0a050200000000000000000000000000000000000000000000000000000000000000040b11161a1d1e2020202020201d1c1916100a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181d1f272b2e2f3235373839393837363532302d2c29241e160d04000000000000000000000000000000000000000000000000000a16212c3740494f535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353534f4940372c21160a000000131f2c3946525f6c7985929faca295887b6f6255483c2f221509000000000a141d2934404b55606b74818e97a1ada1978e8183909da99f9386796c605346392d201300000000000000000b151e2a333d47505a626c717d8691969490867f79726d6763605b54565554535053545556545b6063676d72797f858f949791867d726d625a50473d332a1e150a0000000000000000000000000000000b151e2a333d47505a626c717d8691969490867f79726d6763605b54565554535053545556545b6063676d72797f858f949791867d726d625a50473d332a1e150a0000000000000000000915222f3b4854606b75818e97a1aaa399928a8079736e69696767666769696e73797f848e939fa3a19e9a9da4a8a09691877f79736f6d67666c6e70716c6155493c3023170a000000000005101a232c3945515d676e7b859299a2aab1a79f9691878079726d6764615e575c5b5b5b545c6062656a6e747c838d929fa3aba7a0959082786d60594f433a2f24180d02000000000000010b151f2a36424d56606a717e889299a2aaafa49c959087817c77726f6d6668676766676768666c6f72767b80868e939fa3aaa8a09792867c6f685e544b40342820150900000000000000000b16212c38444f59606c77818b92999fa2aaa9a8a09e9c9b9c9d9fa29f9c96918a827a6e695f584e555d686d79818a90959c9fa3aba39f9e9c9b9c9d9ea1a9a8a19e99938e867f746c665b53493f332720150a000000000000000000000000020d18222c343b4144464646464646464646464646464646464646464646464645454443413e3c3a38342f2d29241e1a150f0a0400000000000000000000000000000000000000010b151d252b303435393939393939393534312c261e150c000000000000000000000000000000000000000000000000000b141d242b303334393939393939393534302b251d150b0100000000000000000000000000000000000000000000070c10151a1f2124292c2d303234363738383939393838373533322f2d2b2823211f1b15120e090300000000000000000000000000000000000000000000000000000000050d151c2227292a2d2d2d2d2d2d292926211c150d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d151d24292c32373b3c3f4244454646454443413f3d3a39352f281f160c0100000000000000000000000000000000000000000000000005101b252e373e4346464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646433e372e251b1005000000131f2c3946525f6c7985929faca295887b6f6255483c2f22150900000006111b262f3845515c67707d89939ea9a69e91857a84919daa9f9386796c605346392d20130000000000000007121d27303c454f59626c717e879298938c827b726d67605c5553504a4d505152535352514e4a5053555c60676d727b828b929892877f726c61594f453c30261c11060000000000000000000000000007121d27303c454f59626c717e879298938c827b726d67605c5553504a4a484746444647484a4a5053555c60676d727b828b929892877f726c61594f453c30261c11060000000000000005111d2a36414c56636f7c89939ea9a59f92877e746d67625f575b5a5a5a575f62666d7279818c9299a3aba7a9aca09691847c736d6762605c5b60616364615a5045392d21140800000000000b16212b37434e58606d79839097a1abb1a79f9590847c736d67605d5554524d4f4e4e4e4a505355585f626a6f78808a9299a3aba79f948d80736b61554b4035291f140900000000000007121d27313946525e696f7c86929aa3ababa39f928d837c756f6a6662605c545a5a5a5a5a545b606265696e747b818a9298a2a9a9a19891847a6e665c51453c31261a0e0500000000000003101b27323b4854606b73808c939fa3aba9a19e9896918f8f8f909297989d9f9e938f847b6e6a5f565d676d7a838e939da0a7a59e9b999291908f8f909297979c9fa6a49f98928b81786c655b50443c32261b0f05000000000000000000000008141f2a343e464d5152535353535353535353535353535353535353535353535251514f4d4b494745403a3935302b26201b150c0700000000000000000000000000000000000009131d272f373c40414646464646464642413d3730271e0e050000000000000000000000000000000000000000000000030d1d262e363c3f414646464646464641403c372f271d13090000000000000000000000000000000000000000070c12181c1f262b2e2f35393a3c3f414344444546464545444342403e3c3a38342e2e2b26211e1a140f0a0400000000000000000000000000000000000000000000000000040d171f272e3336373939393939393635322d261f160d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a10191f272f35383c4347494c4f515252535251504e4c494745413a31281e13080000000000000000000000000000000000000000000000000009131c252c33373939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393937332c251c130900000000131f2c3946525f6c7985929faca295887b6f6255483c2f2215090000000b17222d38414e58606d7984919ea5aa9e948a7e7885919eab9f9386796c605346392d2013000000000000000c18232e39434d57606b717e8b929992887f786e69605d55514b5153575a5c5e5f5f5f5f5d5b5854524d51555c60696e767f879298928b7e716b60574e42382e23170c030000000000000000000000000c18232e39434d57606b717e8b929992887f786e69605d55514b514f4b443b3a3a383a3a3b3d3f44464b51555c60696e767f879298928b7e716b60574e42382e23170c030000000000000713202d3946525e6875828f9ca5ab9e938b7e716c605d55534d4e4d4d4d4d53545c60676d757f87929facb4b7aa9e91847b6f6a605d55535150535456575550483e33281c11050000000004101c27333a47535f6a74808d95a0a9b2a89f9590837a6f6a605c55514b484642424141423f4446494e53585f666d737e879299a4afa69f93887d70675d51453b30251a0e0200000000000c18232f3943505a616e7b859198a3acaca399928b80786f6a625f585653504a4e4d4d4d4e4a505355575e61696e757e869297a2aaaaa1969082786d60574e42372b21170b0000000000000713202c38444f5963707d88939fa5aea69f97918c87848382828385888b90959d9e9691857c6e685e606d798390959da5a8a09d938f8a86848382828385878b8f949da0a7a29f938e81776c60584e43372b21160b00000000000000000000000d1925303b4650585d5f6060606060606060606060606060606060606060605f5f5e5d5c5a585653514b4746413a37312b262018120b03000000000000000000000000000000030f1a252f3941484d4e535353535353534f4d4942393020170d02000000000000000000000000000000000000000000010b151f2e3840474c4d535353535353534e4d4841392f251a0f030000000000000000000000000000000000030b12181c23282c31373a3b414547494b4d4f5151525253525251504e4d4b4946443f3c3a37312d2a251f1b160f0a0400000000000000000000000000000000000000000000000b151f2931393f424446464646464643423e3831281f150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b131c222b31394045474e5455595c5d5e5f5f5e5e5d5b585654514c433a2f24190d01000000000000000000000000000000000000000000000000010a131b21272b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b27211b130a0100000000131f2c3946525f6c7985929faca295887b6f6255483c2f2215090000040f1b27333f49535f6a73808c96a0aca2988f82757985929fac9f9386796c605346392d201300000000000004101c2834404b555f69707d87929892877e726c665f57514d53555c606467696b6c6c6c6b6a6865615e57544f51575e616d727d86929792877d706a5f544a3f3428201509000000000000000000000004101c2834404b555f69707d87929892877e726c665f57606060605e5c564e44392d2c2d2e323f49515759606060575e616d727d86929792877d706a5f544a3f34282015090000000000000714212e3a4754616d7a86929faca3998e81756d625a514b47424140404142474b51555e69707c86929facb8b0a3968a7d70696058514b46454446474a4a49453e362c22170c00000000000714202c38444f59626e7c87929fa7b1aaa1969083796d685f58514b45413b3a363035342e34383a3c43474e545c606c717e87939fa5afa49a9185796d60574d42362a1e11050000000004101c2934404b55616c76828f97a1aaafa49a92877e736d665f58534e4946443f41404040413f4446484d53565e616c717c859298a2aca89f948d80736a5f53473e33281c100400000000000916222f3b4854606b7683909aa4afa89f948f847f7a7776757676787b7f838990959c9791847a6d666c75818f959fa7a79f959189827e7a7776757676787b7e828990959ea5a59d938c7f736a5f53473d33271c100400000000000000000003101c2935414d5862696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6b6a69676562605c5554524c47433c373228231d150c0700000000000000000000000000000814202b37414b53595b606060606060605c59544b4232291f140900000000000000000000000000000000000000000007121d2731404a52585a606060606060605b59534b41372b20140800000000000000000000000000000001070c151d23282e34383c4347484c525456585a5c5d5e5f5f5f5f5e5e5d5b5a585553504a4847433c3a36312b27201b150d0802000000000000000000000000000000000000000006111c27313b434a4f51535353535353504e49423a31261c1005000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b141c252e343d434b515358606265686a6b6c6c6b6a69686563605d554c4135291d110400000000000000000000000000000000000000000000000000010910161b1e202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201e1b161009010000000000131f2c3946525f6c7985929faca295887b6f6255483c2f22150900040d1a232b3744505b656f7c87929fa8a79f92867b6e7986939fac9f9386796c605346392d20130000000000050f1a232c3845515c676e7b85929992867d716c605b544d51575f61676d70737677787979787775726e69636059524d525b626b707c85929892857c6e665c50443c31261a0f04000000000000000000050f1a232c3845515c676e7b85929992867d716c605b63666c6c6c6c6b6760564b3f331f25303b44515b62656c6c6c6c6c67646b707c85929892857c6e665c50443c31261a0f0400000000000b1825313e4b5864717e8b99a3ac9f92867b6e625a504540393731343331373c45515c676e7b859299a3aeabaea99c9083786c60564c413a3838393b3d3e3c39332c241a100500000000000916232f3c4855616b76828f99a3afaea39891847a6d675e564e454039352f2d2a25282823282c2d31373c424a505a616c727f8b939ea8aca1978c8073695e52463a2d2014070000000006131f2c3845515c67707d8a949fa9b0a69f93887e716c605c544e47433c3a38342e3433342d3338393c42464d525a616a6f7c86929aa4afa69f92877b6e62594f44392d20150a00000000000a1623303d495663707c89949facaca0958f827a726d686968696a696e72767d838c929f968f82786d717e8b939ea7a79f9590837d75716d676968696a696e71767d838e939ea5a59f92877c6f62594f44382c20140700000000000000000005121f2b3844515d697479797979797979797979797979797979797979797979797878777674716f6d6764615d56534e47433c342e271e191008000000000000000000000000000c1824303c48535d64686c6c6c6c6c6c6c68655d54443b3025190e0000000000000000000000000000000000000000000c18232f3943525c64676c6c6c6c6c6c6c68645d53483c3024180c0000000000000000000000000000030b12181e272e34394044464e5355565d60636567696a6b6b6c6c6c6b6b6a68666562605c5455534e4846423b37322b262019130c04000000000000000000000000000000000000000a16222e39434d555b5d6060606060605c5a544c42382d21160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131c262e3740464f555d60656a6f7275777879797877767472706d675d5145392c201306000000000000000000000000000000000000000000000000000000050a0f1213131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313120f0a0500000000000000131f2c3946525f6c7985929faca295887b6f6255483c2f221509010c161f2a36414c56606c77839099a3aba0958c7f726d7a879aa4af9f9386796c605346392d201300000000000b16212b37434e58606d7983919792877d706b615a504d555c60696e74797d8082848586868584817f7b76706b605d564e5159606a6f7c8692979083786d60584e43372b21160a0000000000000000000b16212b37434e58606d7983919792877d706b615a636d72797979797772675c4f43372a2a36414d56626d727979797979746e646a6f7c8692979083786d60584e43372b21160a00000000000e1b2834414e5b6774818e9aaba99c8f8276695f53483f352f2b262727313c46515b606d79839097a1aaa29fa2aa9f948b7e71685e52463c322b2d2e3031302d28221a1208000000000005121e2a36424d5763707d89949fabb2a89f92867c6f685e554c443c342e2924201e1a1b1b171c1f20262b30383f44505a626d75818e96a0aca79f92867b6e6154473b2e21140800000003101c28343f4a54606d7984919ea6b0aa9e948c7f736c625a504a423c37322d2c282327272722282b2d31363b42465058606a707e88939fa8aea3998f82766c6155493c31261b0f0000000004101d2935404b556774808d9aa6b0a99d91837a6d68615e565c5c575f61656b7078808b9399948c7f737a85929fa5aba095908279706b64605d555c5c565e61646b7079818e939ea8a3999083776b6054483c2f22160900000000000000000006131f2c3946525f6c79868686868686868686868686868686868686868686868685848482807e7c7975716d68625f58534e454039302a221a11090000000000000000000000000e1a2734404d59646f7479797979797979756f65564d42362a1c11060000000000000000000000000000000000000004101c2934404b55646e7479797979797979746f64594d4034271a0e00000000000000000000000000040d151d2329303940454a5153585f6266686d6f7274767777787979787877767573716f6d6666625f5854534d47433d373129241e160e060000000000000000000000000000000000010e1a27333f4a555f676a6c6c6c6c6c6c69665e54493e3226190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101b252e384049515960676d71777c7f8284858586858483817f7d796d6054473a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929faca295887b6f6255483c2f22150907121d28313946525e68727e8b949faba3999083786d6e7a8794a1b69f9386796c605346392d20130000000004101c27333a47535f6a73808c95928b7f726b6159504d575e676d737b81858a8d8f9192929292908e8b87827d756d685f584e4f58606a707e8793958c7f726a5f53473d32271b0f040000000000000004101c27333a47535f6a73808c95928b7f726b61595966727f8686868684776b5e51443826303846525e68727f8686868686817467606a707e8793958c7f726a5f53473d32271b0f0400000000101d2a3743505d6a7683909da9a5988c7f7265574d423629241d1a242f39434e58626d74818e959fa9a29892989fa69e92857a6d61584e43372b2021232423211c1710080000000000000714212d3a46535e6975828f9ca6b0aca0968c7f736a60564c433a3228231d1814120e09060c1012131a1e262e343e48515b606d7984919ea09d95908a807366594d4033261a0d00000006121f2b3844505c66727f8c96a0acaea2988f82776c605a50443f38302b26201f1c171a1a1a171c1f20252a30363e464e58616c73808d96a1acab9f948a7d7064584e43372b1d120700000006131f2c3945515d677784909daaada1978a7d70675e56524c4f4f4d53555960666d737e87939f92867b7f8c97a2ada39990837a6d67605954514c4f4f4d52545960676d78818f96a0a49f95897d7063564a3d3023170a00000000000000000006131f2c3946525f6c7985929393939393939393939393939393939393939399929291908f8d8b8985827e7a756f6a625f58514b433c342c231b120900000000000000000000000e1b2835414e5b687481868686868686868175695e5246382d22170b0000000000000000000000000000000000000006131f2c3845515c677480868686868686868174685b4e4135281b0e000000000000000000000000050e161f272f343d434b51545c60646a6e72767a7c7e808284848585868585848381807e7c7976736f6a66615e57544e47433c3530282017110a0200000000000000000000000000000003101d2936424f5b6771777979797979797670665a4e4235291c0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c19222d37404a525b636b6f797e84888c8f909192929191908e8b897f7266594c3f3326190c0000000000000000000000000003080c0e0e131313131313130f0e0c09040000000000000000000000000000000000000000000000000000000000000003070b0d0e131313131313130e0e0c0803000000000000000000000000000000000000000000000000000000000406070b0e11121313131313130c0c0a0602000000000000131f2c3946525f6c7985929faca295887b6f6255483c2f2215090b18242f39434f59616e7a85929fa6a89f92877c6f666e7b8894a1ac9f9386796c605346392d2013000000000714202c38444f59626f7c8792968e81746d62594f4d575e696e7980868d92989a9c9b999898999b9b9a938f89827a6f6a5f574d4e58616c737f8c9592867c6e62594f43382c20150a000000000000000714202c38444f59626f7c8792968e81746d62594f5966727f8c93939184776b5e5144382e38424f59616e7b8692939391857a6d6058616c737f8c9592867c6e62594f43382c20150a00000000121f2b3845525e6b7885919eaba295897c6f6256493c31231817202935404b555f6a727f8b939da7a298928590949fa1978e81746a5f53473c32261b17171714110c05000000000000000815212e3b4854616e7b87939facb2a89d9184796d60584e443a31292018120d0705020000000306090c151c2328363f45515d676f7d899395908a837e776c605346392d2013060000000713202d3a4653606d7884919ea8b2a99f92867b6e655b50483e342e261e1b1312100c060d060b0f12131a1f252a343d46505a606d7984919ea8b0a69c8f83766a5f5347392e23180c0000000714202d3a4753606d7a86939facab9e9285786c60554c464142434246484f545c606c727f8b9398908385929ea9ab9f92877c6f685d554f47454142434246474f555d666d7984919b9a93908c8276695c4f4336291c1003000000000000000006131f2c3946525f6c7985929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa39f9e9e9d9c9a9898928f8b86817c756f6a605c554e463e352d241b1209000000000000000000000916232f3c4956626f7c89959393939392867b6e61544a3f33281c0f030000000000000000000000000000000000000714202d3a4753606d7985929393939395897c6f6356493c302316090000000000000000000000050f172028313940454f555c60666d71777b7f8386898b8d8f9091929292929191908e8d8b8885827f7c77736e69626058534e46413a3228221c140b03000000000000000000000000000004111e2a3744515d6a77838686868686868276695c504336291d10030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151e2b343f49525c646d737c848b9095989b9d9e9f9f9e9d9c9b988c7f7266594c3f3326190c000000000000000000000001090f14181a1b202020202020201c1b191510090200000000000000000000000000000000000000000000000000000001080e1317191a202020202020201b1a18140f0901000000000000000000000000000000000000000000000001070c101314171b1e1f202020202020191816120d070000000000131f2c3946525f6c7985929faca295887b6f6255483c2f22150a141d2935404b55616b75818e97a2aca1968d80746a626f7b8895a2ac9f9386796c605346392d2013000000000916232f3c4855606b768390999184796d605b514b555e696e7b838d92999f9c96918e8c8b8b8c8e92979e9c938f847c6f695f564c505a606d788390988f82766b6054483d32271b0f000000000000000916232f3c4855606b768390999184796d605b514c5966727f8c999e9184776b5e514438343f4a54606b75818e989e948a7e71685d525a606d788390988f82766b6054483d32271b0f00000000131f2c3946525f6c7985929faca194887b6e6155483b2e22151f29333b45515d676f7c86929fa5a49a92867b829099a39f93877c6f62584e43372b20150a0a0805000000000000000005121e2a36424d576673808d99a4afaca0968a7e71665c51463c32281f170e0700000000000000000000030a1117242935414b55606b75818e8a837d78706c655b5044372b1f1205000005111e2a36414c5664707d8a96a1adada1978c7f72695e53493f3628231c140c0a060300000000000306090e1419222b343e45515d67717e8a96a0acab9f94887c6f62544b4034281c100400000815212e3b4854616e7b879aa4afa89b8f8275655b50433a363031363a3d424a515a626d75818e9794909297a1ada3998d80736a5f564c433d39352f30363a3d434b545d67707d8a8e8b87837f7c6f6255493c2f22160900000000000000000006131f2c3946525f6c7985929facacacada7a5a5a5a5a5a5a5a5a5a5a5a5a5a5a6a6a7aaa9a7aaa29f9b99928e87827c736d675f584f473f362d241b10070000000000000000000915222e3b4854606a7783909daa9fa3998c7f73665b5044382b1f1409000000000000000000000000000000000006121f2b37434e5864717e8a97a29f9f9d9083776b6054483b2f22150900000000000000000000050e172129323a434b515960676d72797e83888c909399989a9c9d9e9e9f9f9f9e9e9d9b999898928f8c8884807b756f6a625f58524c443d332d261d150c040000000000000000000000000004111e2a3744515d6a778490939393938f8376695c504336291d1003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303d46515b646e737f8791969da0a7a8aaa8a4a2a0a0a0a1998c7f7266594c3f3326190c00000000000000000000030b131a202427282d2d2d2d2d2d2d292825211b140c0300000000000000000000000000000000000000000000000000020b12191f2326272d2d2d2d2d2d2d282724201a130b03000000000000000000000000000000000000000000060b12181c1f2024282a2b2c2d2d2d2d2d2625221e18120a01000000131f2c3946525f6c7985929faca295887b6f6255483c2f2215111c262f3845515d67707d8a939ea9a59e9184796d60626f7c8895a2ac9f9386796c605346392d201300000007131f2c38434f5963707d899593897d70675d5145515d676e7b8490959f9f948f898481807e7e7f82858a91969e9691857b6e685d5245505c666f7c879294897c6f63584e43372b1c1106000000000007131f2c38434f5963707d899593897d70675d51494c5966727f8c999e9184776b5e5144383844505c666f7d89939e988f82756c61564c505c666f7c879294897c6f63584e43372b1c110600000013202c3946535f6c7986929faca093877a6d6054473a2d211a25303b45505a606d79839199a3a59f93887e707c87929fa49a8f82756a5f53473c32261b0f01000000000000000000000714212d3a46535f697784919eabb5ab9d9184786c60544b40342b20160d0500000000000000000000000000061218242f3a434f59616e7b837e78716c65605b53493f33271b0f0300000714202d3946525e6876828f9ca8b2ab9e9185796d60574d41382d2417110a02000000000000000000000002091019222935404b55606c7884919dabb0a69a8e8174665c5145382c1f130600000916222f3c4955626f7c8895acb6a79a8d81746753493f312a25262a2d30394044515b616d7a85929f9c9ea1a9ac9f92867a6d61584e433a312c2924252a2d3139424b55606c7783827e7a76736f6a6054473b2e22150800000000000000000006131f2c3946525f6c7985929facb8ada39c9898989898989898989898989898999a9b9d9fa3aaaaacaba39f9a938f8780796f6a615950483f362d22190f05000000000000000007131f2c38434e5865727e8b98a2aeab9e9184786c6053463b30251a0e00000000000000000000000000000000000814212e3a47535f6a7683909ca9aea2988b7f7265594f43382c1f1307000000000000000000030d172029333b444c555c606b6f797f848b9095999c9fa4aba7a9a9a8a7a6a6a7a7a8a9a8a6aaa29f9c9995918c87817c766f6a615d564f443f382f271e160d0400000000000000000000000004111e2a3744515d6a7784909d9f9f9c8f8376695c504336291d100300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17232e38424e58626d73808c9299a0a8acaaa39f9b979594939394958c7f7266594c3f3326190c000000000000000000010b151d252b303435393939393939393534312c261e150c000000000000000000000000000000000000000000000000000b141d242b303334393939393939393534302b251d150b01000000000000000000000000000000000000020a11171d23292c2d3134373839393939393933322f2a231c130a000000131f2c3946525f6c7985929faca295887b6f6255483c2f221517222d38424e58606d7984919ea5a99e938a7d70675d626f7c8995a2ac9f9386796c605346392d20130000000915222f3b4854606b7683909a8e81756b60554b4e58606d798390969f99928b827c78747372727375797e848e939d9791847a6d605a504a545f6a74808d988f82766a605447382e23170c00000000000915222f3b4854606b7683909a8e81756b60554b414c5966727f8c999e9184776b5e514436414c56606d7883909d9f92867b6e615a50444a545f6a74808d988f82766a605447382e23170c000000121f2c3945525f6c7885929faba194877a6e6154473b2e21202a36424d57616c74818e95a0a89e938c7f736c74808d97a29f93877c6f62584e43372b1e1308000000000000000000000815222e3b4855616e7b8896a0acafa3998c7f72665b5042392e22190e0500000000000000000000000000000007131d28313d46535f696e77716c65605b53504941382d22170b0000000814212e3b4754616e7a87939facafa3998c7f72675d51453b2f261b1206000000000000000000000000000000071018242f3944505b66727e8b99a3aeac9f9285796d6053463a2d2013080000091623303c4956636f7c8996a2afa69a8d8073675a4d403025191a1e21272e343f46525e6873808c99a3abadb3a89c8f8275685e52463c3128201d19191e2027303944505b656c7675716d68666260584e43372b1f130600000000000000000006131f2c3946525f6c7985929facb8a79c918c8b8b8b8b8b8b8b8b8b8b8b8b8b8c8d8e909298999da0a7aaaca49f99928d837c706b625a50483e342b21170d0300000000000000030f1b27323d4754606d7a85929facaca1968a7d7063574d42362a1c110600000000000000000000000000000004101c2934404b55626e7b88949fabac9f92867a6d6054473d32271b0f030000000000000000010b151f29333b454d565d676d747c848c91969da0a7a9aca8a9a19e9c9b9a9a999a9a9b9d9fa2a9a6aaa9a7a09d99928e89827c746d686059504a423930281f160c01000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54606a727f8b929fa3abaca49f98928e8b8887868687898b7f7266594c3f3326190c00000000000000000009131d272f373c40414646464646464642413d3730271e0e050000000000000000000000000000000000000000000000030d1d262e363c3f414646464646464641403c372f271d13090000000000000000000000000000000000030b141b22272f34383a3e4144454646464646463f3e3a352e251c12070000131f2c3946525f6c7985929faca295887b6f6255483c2f22151c28333f4a545f6a73808d96a1aca2978e81756b6155626f7c8995a2ac9f9386796c605346392d2013000004101c2934404b55636f7c899493877c6f62594f4754606a74808d95a09892877e766f6c6566656566666d7179818e939d968e81756c61554b4e58616e7b869294897c6f62544a3f34281c100300000004101c2934404b55636f7c899493877c6f62594f433f4c5966727f8c999e9184776b5e51443846525e68727f8b959f958b7f72695e53483e424e58616e7b869294897c6f62544a3f34281c10030000111e2b3844515e6b7784919eaaa295887c6f6255493c2f2428323a46525e69707e8a939da8a0958e81776c606d7a85929fa49a8f82756a5f53473a2f24190d010000000000000000000c1825323f4b5865727e8b98a8b2ac9f92867a6e61544a3f30271d100700000000000000000000000000000000010c161f2a36424d575f616a64605b535049443f382f261b11060000030f1b27333f495364717e8b9aa4afac9f92867a6e61554b4033291d140a000000000000000000000000000000000007121d28333f4a54616d7a86929facaea298897d706356493d2f24190d01000916222f3c4955626f7c8895aab4a79b8e817468564c41362a24201d191c232a36414c56616e7a86929facb9b3a9978a7e7164564c41342a1f161d1d1d1d151e27333f49535b606a6864615e5655544e463c32271b0f0300000000000000000006131f2c3946525f6c7985929facb2a5988c7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f80818386888c91959c9ea6acaba39f9591867d716c625a50463d33291f140900000000000000000a16202c3945515d6774818e9aa7b1a89b8f8275695e5246382e23170b00000000000000000000000000000006131f2c3845515c6774808d9aa6b0a79b8e8174685d5245392b21160a00000000000000000007121d27313b454d575e686d79808791959ea1a8acaaa29f9b979791908e8d8d8d8d8e8f909297979a9ea0a8ababa39f9b948f87817a706b605b544b433a31281d1307000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040707121f2c3844505c666f7c87929fa4afaaa39a938d86817e7b7a797a7a7c7e7d6f6356493c302316090000000000000000030f1a252f3941484d4e535353535353534f4d4942393020170d02000000000000000000000000000000000000000000010b151f2e3840474c4d535353535353534e4d4841392f251a0f03000000000000000000000000000000030c151d262d33394045474a4e51525353535353534c4b463f372e23180d0200131f2c3946525f6c7985929faca295887b6f6255483c2f221a242b3844505b666f7c87929fa8a69f92857a6e615956626f7c8995a2ac9f9386796c605346392d2013000006131f2c3845515c6775818e9b8f82756a5f53474d57626f7c87939f9f92867d716c62605b535858545c60676d77818e959e938a7e71675d5146525e6974818d9a8e8174665c5044382c1f120600000006131f2c3845515c6775818e9b8f82756a5f53473d3f4c5966727f8c999e9184776b5e5144424e58616d7a85929f999083786c60574d42363c46525e6974818d9a8e8174665c5044382c1f12060000101d293643505c6976838f9ca9a4978b7e7164564c413529303a44505a616e7b85929ea5a3989183796d655d6873808d98a39f93877c6f62564c4135291d1104000000000000000004101d2935404b556875828f9ba8b5a99c908376685e5242382d1e150b000000000000000000000000000000000000040d1a26313b454d53555d57535049443f38332d261d140a00000005121f2b3744505b6575818e9bacb6a99c8f8276685e5243392f21170b020000000000000000000000000000000000010b17222d3846525d6875828f9ca8b4aa9a8d807367564c4135291d1104000814212e3b4754616e7a8798a2aeaa9d908377685e52463c352f2c2924272625303a46525e6876828f9ca9b6ada197877b6e6154483b302a2a2a2a2a2a2a2a2a222d38414950535d5b5854524c4947433c342b20150a0000000000000000000006131f2c3946525f6c7985929facada093877a7272727272727272727272727273737477797c8084898f949da0a7afa7a09892877e716c61584e453b30251a0d040000000000000004111d2935414b55626f7c88959fabac9f92877b6e61544a3f34281c100300000000000000000000000000000714202d3a4753606d7985929eabaca095897c6f63564c413529190f040000000000000000040e18242f39434d575e696e7a828d9399a0a8ada8a19e98928e8a878583818180808081828385878a8d9196999ea1a9aca69f99928d847d736c665c554b433a2f24180d010000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000000000000000000000000000000000000000000000000000000000000000000000000000000206080d1113141d2935404b55606d78839099a3aeaba3989288817a75716f6d6d6d6e6f716f6b6054483b2f22150900000000000000000814202b37414b53595b606060606060605c59544b4232291f140900000000000000000000000000000000000000000007121d2731404a52585a606060606060605b59534b41372b2014080000000000000000000000000000000b151e272f383f444b5153575b5d5e5f6060606060595751493f352a1e120600131f2c3946525f6c7985929faca295887b6f6255483c2f221f2a36424d57606c78839099a3ab9f948b7e71685e5256626f7c8995a2ac9f9386796c605346392d201300000714202d3a4753606d79859296897c6f63584e46535f6975828f9a9f948b7f726b615a5350494b4b4b51555d656d78839099999184796d6053474d56616e7b88959285796d6053463a2d2013070000000714202d3a4753606d79859296897c6f63584e43353f4c5966727f8c999e9184776b5e513f4a54606a74818e979f92877c6f665b50453b3136424d56616e7b88959285796d6053463a2d20130700000d1a2633404d596673808c99a9a79b8e8174685d52453b3136414c56616c75828f97a2a59f92867c6f675d56616e7a86929fa49a8e8174685d5245392c20150a000000000000000006131f2c3845515d677884919eabb6ac998c7f7266564c412f261c0c030000000000000000000000000000000000000009141f29333b424648504a46443f38332d27221b140b020000000613202d394653606c7885929eabb3a9988b7f7265564c4131271d0f050000000000000000000000000000000000000006111c2935414c5665727f8b98aab4aa9d918477685d5245392c201306000714202d3a46525e697885929fabac9f92867a6e61584e45403a39352f3433333236414c566673808c99a6b3ab9e928578695e53463a3737373737373737373737372f383f4446504f4b4746413c3b37322b2620180f0600000000000000000006131f2c3946525f6c7985929facada093877a6d656565656565656565656565666768666d6f73777c828990959fa4acaaa299928b7e716a60574d42362a1f160c01000000000000010d18242f3a47535f6a7683909da9afa3998c7f73665c5044382b1f14090a0a0a0a0a0a0a0a0a0a0a0a0a0a121f2b37434e5864717e8b97a2adaa9d9083776b6054443a2f2419070000000000000000020c16202935404b555e696e7b8390949fa4abaaa29f96918b86817e7b78767574737374747577787b7d8084888d92979ea1a8aba39f96918780786d675d554b4035291d11040000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000000000000000000000000000000000000000000000000000000000000000000000000003090e1214191d2021242c3945515d67727f8b95a0abafa39992867d746d6864626160606162656360594f43382c1f130700000000000000000c1824303c48535d64686c6c6c6c6c6c6c68655d54443b3025190e0000000000000000000000000000000000000000000c18232f3943525c64676c6c6c6c6c6c6c68645d53483c3024180c000000000000000000000000000007121d273039414950555c6064676a6b6c6c6c6c6c6c66635b51463a2f22160a00131f2c3946525f6c7985929faca295887b6f6255483c2f2228313a46525e69727f8b959faba3999082776c60564c56626f7c8995a2ac9f9386796c605346392d201300000a1724313d4a5764707d8a989184786c6053464855616e7b88949e9c9083786c60595046443f3f3f40454b535c666e7b878e8a86827c6f62554846535f6976839097897d7063564a3d2f23180c0000000a1724313d4a5764707d8a989184786c6053463c313f4c5966727f8c999e9184776b5e5144505b666f7c87939f968d80736a5f544a3f3329303b46535f6976839097897d7063564a3d2f23180c00000a1723303d4a5663707d8997a1ac9f92867a6d60574d43393946525e68717e8a949ea89e938b7f726a5f55525e6874818d9aa49f92867a6d6054473d32271b0f03000000000000000714202d3a4753606d7a86939facafa49a897c6f6356493c3023140a0000000000000000000000000000000000000000030d17212931363a3b443e3937332d27221b17110a02000000000815222e3b4855616e7b8897a1adada197887b6e6255483b3022150b0000000000000000000000000000000000000000000d1924303c4855626f7b8898a2aeaca095877a6d6054473a2d2114070005111e2a36424d566976828f9caaafa3998c80736a5f58514b4745414240403f3f3f3e4a5764717d8a97a4b0a99c8f827669574d4244444444444444444444444444444444444444444444444444443b3a37312a21180e03000000000000000006131f2c3946525f6c7985929facada093877a6d605858585858585858585858595a545c6062666b6f767c838d939aa3ababa39f92867c6f695e52463e31281d13070000000000000007131d2b37434e5864717e8b97a2adab9e9184786d6053463b31251a16161616161616161616161616161616212e3a47535f6a7683909ca9aea2988b7f7265594f4332281e1308000000000000000008131e28323a45515d676e7b8491959fa6afa7a098928c847f7a75716e6969686767666767686a696e7173777b80858b91969fa2aaa9a199938c81796d675d5145392c2013060000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000000000000000000000000000000000000000000000000000000000000000000000060c10151a1e2124292c2d30333f4a54606d7985929ea7b1a79f92877d706b615e565554535354565856544f473d32271b0f0300000000000000000e1a2734404d59646f7479797979797979756f65564d42362a1c11060000000000000000000000000000000000000004101c2934404b55646e7479797979797979746f64594d4034271a0e00000000000000000000000000040d18232e39434b535b60676d71747778797979797979726d63574b3e3225180c00131f2c3946525f6c7985929faca295887b6f6255483c2f242f3a43505a616e7b86929fa7a89f92867c6e655b504956626f7c8995a2ac9f9386796c605346392d20130004111d2935414c566874818e9a8d8073655b50444b5566737f8c99a096897d70665b50473e37332d2e3439414a545f697380827e7a766f6a5f5347424d5765727f8c988d817467554b4034291c10040004111d2935414c566874818e9a8d8073655b504437333f4c5966727f8c999e9184776b5e514c56606c7883909a9e9184796d60584e42382d212a36424d5765727f8c988d817467554b4034291c1004000713202d3a4653606d7985929eaaa2988c7f72695f554b43424f59616d7a85929ea6a1968f81756d62584e4c56616e7b87939fa2988b7f7265584e43372b1f1306000000000000000915222f3c4855626f7b889aa4afac9f93867a6d6054473a2d211407000000000000000000000000000000000000000000060f171f262a2d2e37312d2b27221b17110b060000000000000a1724303d4a5763707d8a96a9b3ab9e928578695f53473a2e2114030000000000000000000000000000000000000000000813202d394653606c7985929facb1a795897c6f6256493c2f23160900020e1925303f4b5865727e8b98a2aeab9f92867c6f6a605d5554524c4e4d4d4c4c4b4b4b5663707c8996a3afa79b8e8174685b505050505050505050505050505050505050505050505050505050504847433c332a201509000000000000000006131f2c3946525f6c7985929facada093877a6d60544c4c4c4c4c4c4c4c4c4c4c4d4a5053555960636a6f7980889299a3abaea39891857b6e615a50433a2f24180d00000000000000010f1b26323c4753606d7985929fabada1968a7d7063574d42362a23232323232323232323232323232323232934404b55626e7b88949fabac9f92867a6d6054473d3221160c0100000000000000010d1925303a44505a606d79839096a0a8b0a69e9591867f79726d6764615e575b5a5a5a5a5b5c575e6164676a6e73797e848c92989fa7aba49f938e82796d6053473a2d2014070000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000000000000000000000000000000000000000000000000000000030a11171c1f262b2e2f35393a3d4044505b66727f8b97a1adaca0958c7f736b6159524c4847464747494b4948433d352b21160a0000000000000000000e1b2835414e5b687481868686868686868175695e5246382d22170b0000000000000000000000000000000000000006131f2c3845515c677480868686868686868174685b4e4135281b0e000000000000000000000000010c161f2834404b555c656c71797d8184858686868686867f7266594c3f3326190c00131f2c3946525f6c7985929faca295887b6f6255483c2f2935414c55616c75828f98a2aca0968c80736a5f53494956626f7c8995a2ac9f9386796c605346392d2013000713202c3945525d6877849199897c6f62534945515d677683909d9e9184786c60544a3f352b272223282f38424d57636e7375716d68625f584e433b4854616e7b8797908477675c5145382c1f1306000713202c3945525d6877849199897c6f6253493f33333f4c5966727f8c999e9184776b5e53535d68717e8b959e93897d70675d51463c2f261c26313b4854616e7b8797908477675c5145382c1f13060006131f2c3845515c6773808c98a2aa9f92867b6e675d554c4a54616b75818e97a1a59e91847a6d605b514646535f697683909caa9d9083776a6054473b2e221509000000000000000b1724313e4a5764717d8a97acb6aa9e918477675d5145392c20130600000000000000000000000000000000000000000000060d141a1e21222a24201f1b17110b0600000000000000000c1926323f4c5965727f8c98a5b2a99c8f837669574d42372b1e120600000000000000000000000000000000000000000006121f2b3844505b667783909daab1a4978b7e7164584b3e3125180b00000914212d3a4754606d7a85929fa7aea29891847c726d6763605d565b5a59595858585857626f7c8995a2afa79a8d8074675d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d55534e463c31261a0f020000000000000006131f2c3946525f6c7985929facada093877a6d6054473f3f3f3f3f3f3f3f3f40403f4446494f545860676d737e879299a3aeaaa1978f82766c61554b4135291d1207000000000000000a151f2c3845515d6774808d9aa6b0a89c8f8275695e5346382e3030303030303030303030303030303030303845515c6774808d9aa6b0a79b8e8174685d5245392c201304000000000000000005111d2935414c56626d75818e959fa8b0a69e948f837b726d66605d5554534d4e4e4d4d4d4e4f4d525457585f62666d71797f8690959ea5afa59e948d8073665a4d4033271a0d0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000000000000000000000000000000000000000000000000000000000000003090c151c23282c31373a3b4145474a4d4e53606c7884919ea9b1a79d9083786c60594f46413c3a3a3a3b3c3e3c3b38322b23190f040000000000000000000916232f3c4956626f7c89959393939392867b6e61544a3f33281c0f030000000000000000000000000000000000000714202d3a4753606d7985929393939395897c6f6356493c3023160900000000000000000000000007131d28313a45515c676d777e848a8e909192999393938c7f7266594c3f3326190c00131f2c3946525f6c7985929faca295887b6f6255483c2f303845515d67707d8a939eaaa49a9184796d60584e414956626f7c8995a2ac9f9386796c605346392d2013000714212d3a4754606d7a87969286796d6053464753606d7a86939f998d8073655b5042382d231b17181d26303b45525c63666864615d56534e463c3a46535e697885919286796d6053473a2d201407000714212d3a4754606d7a87969286796d6053463a2d333f4c5966727f8c999e9184776b606060606d7a85929e978e81746b60554b40342a1d14212d3a46535e697885919286796d6053473a2d2014070004101c2834404b55616e7a86929fa6a2989083796d675e56515c66707d8a939ea99e938a7d70685d52493f424d5765717e8b98a3a095897c6f6256493c31261a0e020000000000000c1926323f4c5965727f8c98a5b2a99c8f837669554b4135291d1104000000000000000000000000000000000000000000000003090e1214151d1713120f0b06000000000000000000000e1b2834414e5b6774818e9aa7b3a79a8d8074675a4d4131261a0e02000000000000000000000000000000000000000000030f1c28333f4a546875818e9ba8b3a6998d8073665a4d4033271a0d00000713202c3945525d68737f8c95a0a8aaa19691867f7974706d6869686766666565656464646f7c8995a2afa6998c7f736a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a625f584e43372b1f12060000000000000006131f2c3946525f6c7985929facada093877a6d6054473a3232323232323232332e34383a3d43484e555c606c717e87929fa5afa99f948a7e71675d5145392e23180c0000000000000004101d2935404b55626e7b88949fabac9f93877b6e61544a3f3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4753606d7985929eabaca095897c6f63564c4135291d110400000000000000000713202d3946525e68717e8b939ea7b1a79e948f82796e69605c54514b484642424140404141424246484a4e53545c60666d727b838f939ea8afa69a8d8074675a4d4134271a0e0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000000000000000000000000000000000000000000000000050d141a1e262e34383c4247484c525457595b5563707d8996a0acab9f95897d70665b504745403a37322d2e2f32302f2c2721191007000000000000000000000915222e3b4854606a7783909daa9fa3998c7f73665b5044382b1f1409000000000000000000000000000000000006121f2b37434e5864717e8a97a29f9f9d9083776b6054483b2f2215090000000000000000000000010d18242f3a43515b606d79818b91969a9d9e9fa39f9f998c7f7266594c3f3326190c00131f2c3946525f6c7985929faca295887b6f6255483c2e38424e58606d7a84919ea6a99f93887d70675c51463c4956626f7c8995a2ac9f9386796c605346392d2013000a1623303d495663707d8996908377665c51454956626f7c8999a4978a7d706453493f2f261c0f0b0b151e2a33404a5257595b5754524c47433c3436424d576976828f99897c6f6256493c2f231609000a1623303d495663707d8996908377665c5145382c333f4c5966727f8c999e9184776d6d6d6d6d74808d979e92857a6d61594f433b322920171e2a36424d576976828f99897c6f6256493c2f23160900000c18232e3946525e68727f8b949fa89f958f82796e68615a606d7884919ea5a1978e81756b61564c41373b4754606d7a86929fa79a8d807467574d42372b1e12060000000000000d192633404c5966737f8c99a6b2a89b8e8175685b4e422f24180d010000000000000000000000000000000000000000000000000002050708110b060503000000000000000000000000101c2936434f5c6976828f9ca9b2a5998c7f7266594c3f3326190900000000000000000000000000000000000000000000000b17222d404d5a6773808d9aa6b3a89b8e8175685b4f4235281c0f000004111d2935414c56606d79839096a0a7a8a198928c85807d7a787675737372727271717171707c8995a2afa5988c7f777777777777777777777777777777777777777777777777777777777777776e6a5f53473a2e2114080000000000000006131f2c3946525f6c7985929facada093877a6d6054473a2d252525252525252623282c2d32383d434b515a616c727f8b939ea9b0a69e91847a6d60544b4034281c1004000000000000000c18242f3947535f6a7683909ca9afa4998c8073665c504949494949494949494949494949494949494949494e5864717e8b97a2adaa9d9083776b6054443a2f24190d010000000000000006121f2b37434e58616d7a85929ea5afa9a0958f82796d675f57514a45403b3a3631343433343430363a3b3e43474b51545c60696e79818f96a0aca79a8d8074675a4d4134271a0e0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000000000000000000000000000000000000000000000000000000000080f171f252a30383f44464d5355565d60636668696775818e9ba8b2aa9d9083776b605b5353514b47433c3731292423221f1b160f07000000000000000000000007131f2c38434e5865727e8b98a2aeab9e9184786c6053463b30251a0e00000000000000000000000000000000000814212e3a47535f6a7683909ca9aea2988b7f7265594f43382c1f1307000000000000000000000004111d2935414b55626d75818e939ea1a8aaa29f9c9998988c7f7266594c3f3326190c00131f2c3946525f6c7985929faca295887b6f6255483c343f4a54606a74808d96a1ada1978e81746b60554b403c4956626f7c8995a2ac9f9386796c605346392d2013000c1925323f4c5865727f8b988e817467544b404b5864717e8b97a398877b6e6154473b2d21140a00030c18212e3840474b4d4f4b4746413a37322a31404d596673808c988b7e7165584b3e3225180b000c1925323f4c5865727f8b988e817467544b403428333f4c5966727f8c999e9184797a7a7a7a7a7c87929f978b7e7168605b544d443b32291d1a2531404d596673808c988b7e7165584b3e3225180b000007121d2a36414c56606c78829096a1a79e948f837a716c6268727f8c96a0a69e91857a6d61594f443a303945525d6875828f9bac9e918477695f53473a2e2114080000000000000d1a2734404d5a6773808d9aa6b3a79a8d8074675a4d4134271a070000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000101d2a3643505d697683909ca9b1a4978a7e7164574b3e3124180b0000000000000000000000000000000000000000000000061926323f4c5965727f8c98a5b2a89c8f8275695c4f4236291c0f0000010d19242f3a45515c666e7b8490959fa3aaa29f97928d898784838180807f7f7e7e7e7e7d7d7f8c98a5b2ab9e9184838383838383838383838383838383838383838383838383838383838383837c6e6255483b2f2215080000000000000006131f2c3946525f6c7985929facada093877a6d6054473a2d2119191919191919171c1f20272c30394045505a626d74818e97a1adada1968c7f73665c5145382c1f14090000000000000007121d2b37434e5864717e8a97a1adab9e9184796d6056565656565656565656565656565656565656565656565f6a7683909ca9aea2988b7f7265594f4332281e130800000000000000000815212e3a47535f6a74818e97a2adada2979083796d675d554d444039352f2d2a252727272728252a2d2e31373940454b51575f676d7884919eaaa79a8d8074675a4d4134271a0e0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000000000000000000000000000000000000000000020a121a212931363e424a5053575f6266686d70737576777986929facb1a4988b7e716e6c6564605d55534e47433c352f281f180f0a04000000000000000000000000030f1b27323d4754606d7a85929facaca1968a7d7063574d42362a1c110600000000000000000000000000000004101c2934404b55626e7b88949fabac9f92867a6d6054473d32271b0f0300000000000000000000000613202c3945515d67727f8b939ea5ada49d98928f8d8c8b8b7f7266594c3f3326190c00131f2c3946525f6c7985929faca295887b6f6255483c3844505c666f7c87939fa9a69e92857a6d60594f43393c4956626f7c8995a2ac9f9386796c605346392d2013000d1a2733404d5a6673808d998c7f7366594c404c5966727f8c999f928579695e52463a2d2014020000060f1c262e353b3f40423e3a3935302b2625323e4b5865717e8b988c7f7266594c3f3326190c000d1a2733404d5a6673808d998c7f7366594c402e23333f4c5966727f8c99a096918686868686868892999e92857c78716c665e564d443b2f261b25323e4b5865717e8b988c7f7266594c3f3326190c0000000d1925303b44505b666e7b849197a1a69e9590857e756f6d7a85929fa89f948a7e71685d52473e322935414c5664717e8a9aa4a096887b6e6255483b2f2215080000000000000e1b2734414e5a6774818d9aa7b3a69a8d8073675a4d4034271a0d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2a3744515d6a7783909daab0a3968a7d7063574a3d3024170a00000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4b1a99c908376695d5043362a1d1000000008131e2834404b545e696e7b838d92999fa2a9a29e9a9696918f8e8d8c8c8b8b8b8b8a8a8a8c919ba7b4ada19691909090909090909090909090909090909090909090909090909090909090887c6f6255493c2f2216090000000000000006131f2c3946525f6c7985929facada093877a6d6054473a2d21140c0c0c0c0c060c1012131b1e272e343e47515b606d7985919ea7b1a99e9185796d6053463b31251a0e02000000000000010f1a26313c4653606d7985929eacada1968a7d70646363636363636363636363636363636363636363636363636e7b88949fabac9f92867a6d6054473d3221160c010000000000000005111d2935414c56626f7c87939fa9b0a69f92857b6e675d554b433c342e2924211e1a1b1a1a1a1b1a1e2021262b2e343940454d555c667784909daaa79a8d8074675a4d4134271a0e0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000000000000000000000000000000000000000000000000000020b141c242c333b424650545c6065696e73777a7d80818384869298a2aeb3a69a8d807d7b7975716d67625f58534e454039312a211a1108000000000000000000000000000a16202c3945515d6774818e9aa7b1a89b8f8275695e5246382e23170b00000000000000000000000000000006131f2c3845515c6774808d9aa6b0a79b8e8174685d5245392b21160a0000000000000000000000000714212d3a4754606d7a85929fa6ada39c928d8682807f7f7f7c6f6255493c2f22160900131f2c3946525f6c7985929faca295887b6f6255483c424d57606d78839099a4aa9e948a7e71685d52473d303c4956626f7c8995a2ac9f9386796c605346392d2013000e1b2734414e5a6774818d988b7e7265584b404d5a6773808d9a9e9185786b574d42362a1e11050000000a131c242a2f323335312e2d29241e1b24313e4a5764717d8a978d8073665a4d4033271a0d000e1b2734414e5a6774818d988b7e7265584b3f3226333f4c5966727f8c99a8a09e939393939393959fa3a1979289847e786e685e564d41382d2224313e4a5764717d8a978d8073665a4d4033271a0d00000008141e28333f4a545e696e7b8591969fa69f97918a827c76808d97a2a3998f82766c61564c41352c242f3a4754616d7a87939fa1988c7f7265594c3f3226190c0000000000000e1b2835414e5b6874818e9ba7b3a6998c807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3844515e6b7784919eaaafa396897c706356493d3023160a00000000000000000000000000000000000000000000000b1824313e4b5764717e8a97a4b1aa9d9083776a5d5044372a1d11000000010c18232e39424d575e696e7980878e92989b9ea1a9a8a19e9c9b9a999998989897979797989ba3adb8b2a8a19e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d95887b6e6255483b2f2215080000000000000006131f2c3946525f6c7985929facada093877a6d6054473a2d21140700000000000003060a0c151d2328353f45515d67717e8b95a0acada1978b7e7164574d42362a1e12050000000000000009151f2c3845515c6673808d9aa4afa99c8f82757070707070707070707070707070707070707070707070707074808d9aa6b0a79b8e8174685d5245392c20130400000000000000000713202d3946525e6874818e9aa4afab9f948b7e71695e554b433a3128231c1814120e090d0d0e090e1214151a1d23282e343c434b546a7784909daaa79a8d8074675a4d4134271a0e0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000000000000000000000000020b141c262e363e454d535a61666d71767b8084868a8c8e90919298a2aab4b5a89d928d8a8885817e7a756f6a625f58514b433c332c231a120800000000000000000000000004111d2935414b55626f7c88959fabac9f92877b6e61544a3f34281c100300000000000000000000000000000714202d3a4753606d7985929eabaca095897c6f63564c413529190f04000000000000000000000004101c2934404b5565727f8b98a2aea79c918c807a75737272726f6a5f54473b2e22150800131f2c3946525f6c7985929faca295887b6f6255483c46535f69727f8c95a0aba2988f82766c61564c41352f3c4956626f7c8995a2ac9f9386796c605346392d2013000f1b2835424e5b6875818e978a7e7164574b414d5a6774808d9a9d9184776a5e514430251a0e02000000010a12191f232626282421201d19131723303d4a5663707d89968d8174675a4e4134271b0e000f1b2835424e5b6875818e978a7e7164574b3e3126333f4c5966727f8c99a8a09393939393939393939496999e96918b827a6e685e53493f332723303d4a5663707d89968d8174675a4e4134271b0e000000020b17222d38424d575f696f7c8490949fa3a19e948f888287929fa99f92877c6e625a50443a3028232d3946525e687783909997928e8376695c504336291d100300000000000e1b2835414e5b6874818e9ba7b3a6998d8073665a4d4033271a0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2b3845525e6b7885919eabafa296897c6f6356493c3023160900000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0aa9e9184776b5e5144382b1e110000000007121d27303b454d575e676d747b81868b8e929796989a9b9c9d9d9d9e9e9e9e9e9f9f9f9fa4acb6c0b6aea9a79f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa8aaaaaaaaab94887b6e6155483b2e2215080000000000000006131f2c3946525f6c7985929facada093877a6d6054473a2d211407000000000000000000030b1218232935414b55606c7883909da9b3a99d908377695e53463a2d2114060000000000000004101c2834404b54616e7b87939facac9f93877d7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7d85929fabaca095897c6f63564c4135291d110400000000000000000714212e3a4754616d7a86929facb0a69c9082766c62574d433930281f18120d07050c111517181c1c1c1c1c1c1c181d23283144515d6a7784909daaa79a8d8074675a4d4134271a0e0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000000000000000000000000000000000000000a141c262e38404850575e616c71787e83888d90939a999b9c9e9fa2aab4b1b2aea49d9a9797928e8b86817c756f6a605d554e463e352c241a11080000000000000000000000010d18242f3a47535f6a7683909da9afa3998c7f73665c5044382b1f14090a0a0a0a0a0a0a0a0a0a0a0a0a0a121f2b37434e5864717e8b97a2adaa9d9083776b6054443a2f24190700000000000000000000000006131f2c3845515c677683909daaaca0958c7f746d6866656565625f584e43372b1f130600131f2c3946525f6c7985929faca295887b6f62554844505a616e7b86929fa7a79f92867b6e615a50443a302f3c4956626f7c8995a2ac9f9386796c605346392d2013000f1c2935424f5c6875828f978a7d7064574a414e5a6774818d9a9d9184776a5e51442f24180d0100000000040c13181d2020201d1814120f0916232f3c4956626f7c89958e8175685b4e4235281b0f000f1c2935424f5c6875828f978a7d7064574a3d3126333f4c5966727f8c99a09689868686868686868687898d92989e948f847a6e655b5044372b232f3c4956626f7c89958e8175685b4e4235281b0f0000000006111c262f3b454d575f6a6f7a828d92999fa69e9c948f9299a3a2978d80746a5f534b454039342e2a36414c566673808d8c8985817e7064574a3d3124170a0000000000000e1b2734414e5a6774818d9aa7b3a69a8d8073675a4d4034271a0d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2b3845525e6b7884919eabafa296897c6f6356493c3023160900000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4b0aa9d9184776a5e5144372b1e1100000000000b151e29333b454d555d60696e747a7e8285888a8c8d8e8f9090919191919192929292939aa4afbbaea49d9a93939393939393939393939393939393939393939393939b9ea5afafa499877a6d6154473a2e2114070000000000000003131f2c3946525f6c7985929facada093877a6d6054473a2d21140c0c0c0c0c0c0c0c07060400071118242f3a44505b65717e8b97a2adab9f95877b6e6154483b2e23170c00000000000000000c18232e3946535f6976828f9ca9afa499938a89898989898989898989898989898989898989898989898989899297a2adaa9d9084776b6054443a2f24190d010000000000000005111e2a36424d5666727f8c98a3aeab9f94897c6f635a50453b31271e160d07000911181d212425292929292929292929292a3744515d6a7784909daaa79a8d8074675a4d4134271a0e0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000000000000000000000009121c262e38404a525a61696e767e848b9095999d9fa4aca8a9a8a6a5a4a4a4a5a6a8aaa6a9a19e9b98928e88827c736d675f584f473e362c231a1007000000000000000000000007131d2b37434e5864717e8b97a2adab9e9184786d6053463b31251a16161616161616161616161616161616212e3a47535f6a7683909ca9aea2988b7f7265594f4332281e13080000000000000000000000000714202d3a4753606d7986929facac9d9083786c605d5659585855544e463c32261b0f0300131f2c3946525f6c7985929faca295887b6f6255484c56616c76828f98a2aba0958c7f72695e53483e32282f3c4956626f7c8995a2ac9f9386796c605346392d2013000f1b2835424e5b6875818e978a7e7164574b404d5a6773808d9a9e9184786b554b4035291d1004000000080d161d24292c2d2c2924211f1a151723303d4a5663707d89968d8174675a4e4134271b0e000f1b2835424e5b6875818e978a7e7164574b3e3126333f4c5966727f8c999e918479797979797979797a7c808590959f969082776c6053463c3126303d4a5663707d89968d8174675a4e4134271b0e00000000000a141d29333c454e585f686d78808790959ea0a69e9c9fa3ab9f92857a6d65605c54514b443f3830303d495663707d83807c7874706c6155493c3023160a0000000000000d1a2734404d5a6773808d9aa6b3a79a8d8174675a4e4134271b090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3844515e6b7784919eaab0a396897d7063564a3d3023170a00000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a99d9083766a5d5043372a1d100000000000030c172129333b434b51575f62686d7175787b7d7f808283838484848485858585858687939facb9a99d928d86868686868686868686868686868686868686868686868e939eaaac9f9386796c605346392d2013060000000000040a0f131f2c3946525f6c7985929facada093877a6d6054473a2d211919191919191919191313100c0707131d27333f4953606d7985929fabb1a7988b7e7265544a3f34281c10030000000000000007121d2a36424d5764707d8a96a1adaba49f9796969696969696969696969696969696969696969696969696969fa2a9aea2988b7f7265594f4332281e130800000000000000000714202d3a46525e697784909daab4aa9c9083766b6054483f33291f150c040009121b22292e313236363636363636363636363744515d6a7784909daaa79a8d8074675a4d4134271a0e0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000000000000000000000000000000000006101b242e38404a525c636c717b838a91969d9fa7aaacaba39f9d9b999897979898999b9d9fa3ababaaa29f9b948f8780796e6a615950483e352c22180d0400000000000000000000010f1b26323c4753606d7985929fabada1968a7d7063574d42362a23232323232323232323232323232323232934404b55626e7b88949fabac9f92867a6d6054473d3221160c010000000000000000000000000916232f3c4956626f7c8999a3aea49a8b7e71665b524c4c4c4c4947433c342a20150a0000131f2c3946525f6c7985929faca295887b6f625548525d68717e8a949faaa4999083786d60574d42362c232f3c4956626f7c8995a2ac9f9386796c605346392d2013000e1b2734414e5a6774818d988b7f7265584c404d596673808c999f928578675d5145392c20130600000811191f282f35393a39352f2e2b26201824313e4a5764717d8a978d8073665a4d4033271a0d000e1b2734414e5a6774818d988b7f7265584c3f3226333f4c5966727f8c999e9184776c6c6c6c6c666c6d6f737b8390969f948b7e7165574d42372b313e4a5764717d8a978d8073665a4d4033271a0d0000000000020b17202a333c464e565e666d737c838b91969ea1a9acafaa9d90837d77716d66605d55504a423d353b4854606b7077736f6c656461594f44392d2014080000000000000d192633404c5966737f8c99a6b2a89b8f8275685c4f4230251a0e0200000000000000000000000000000000000000000000000000000102030000000000000000000000000000000000111e2a3744515d6a7784909daab0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000c1825323f4b5865727e8b98a5b1a99c8f8276695c504336291d100000000000040d161e2429313940454d53565d606468696e707274757676777777787878787879797c8995a2afa79a8d807979797979797979797979797979797979797979797979818e9ba8ab9e928578665b5044382b1f120600000000070e151b1f222c3946525f6c7985929facada093877a6d6054473a2d26262626262626262626201f1c18120b0b17222d3845515d6774818e9aabb5a89c8f8275665c5044382c1f120600000000000000000e1a26313b4653606d7984919eabb5afaca3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3abadb3ac9f92867a6d6054473d3221160c0100000000000000000814212e3b4754616e7b8795a0acaea2988a7e7164594f44362d21170d030006111b242d343a3d3e43434343434343434343434344515d6a7784909daaa79a8d8074675a4d4134271a0e0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000000000000000000030c18222d36404a525c646e737e8590949da0a8abaaa29f9b9992908e8c8b8b8a8b8b8c8e9092999a9ea1a9aca69e99928d837c706b615a50473e342a1f160c01000000000000000000000a151f2c3845515d6774808d9aa6b0a89c8f8275695e5346382e3030303030303030303030303030303030303845515c6774808d9aa6b0a79b8e8174685d5245392c201304000000000000000000000000000a1724313d4a5764707d8a97abac9f93867a6d61544a413f3f3f3c3b37322a22190e040000131f2c3946525f6c7985929faca295887b6f62554f59606d7a85929ea6a89f93877c6f665c50453b3124232f3c4956626f7c8995a2ac9f9386796c605346392d2013000d1a2733404d5a6673808d998c7f7366594c404b5865727e8b989f93867a6d6053473a2d20140900030d19232b313a40454745403b3a37312a2125323e4b5865717e8b988c7f7266594c3f3326190c000d1a2733404d5a6673808d998c7f7366594c402e23333f4c5966727f8c999e9184776b606060605b606163696e7a84919e9d908377695f53463a2d323e4b5865717e8b988c7f7266594c3f3326190c000000000000050e18212a343c444c545c606a6f787e848b9297a1adb8aca0959089837e79726d67605c544f45403a444f5960636a6662605b53554f473e33281c10040000000000000b1825313e4b5864717e8b97a4b1a99d9083766a574d42362a1e1105000000000000000000000000000000000000000000000003080c0e0e0f0b07070401000000000000000000000000101d2a3643505d697683909ca9b1a5988b7e7265584b3f3225180700000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3a89b8f8275685c4f4235291c0f00000000010c161f282f35393a3e3f42474c525458575f6163656768696a6a6a6b6b6b6b6b6c6c6f7c8995a2afa89b8e82756c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c7783909daaa99d9083766a544a3f33281c0f0300000007101920262b2e2f3946525f6c7985929facada093877a6d6054473a33333333333333333333332d2c28231d150c111b2935404b5564717d8a99a3afac9f9285796d6053463a2d201307000000000000000009141f2c3844505c6673808c99a3afbbb9b1acaa9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa7a9afb8bab1a79b8e8174685d5245392c2013040000000000000000000b1825323e4b5865717e8b98a7b1ac9f9285796d6053473d32201b0f0500010c18222d363f454a4b4f4f4f4f4f4f4f4f4f4f4f4f4f515d6a7784909daaa79a8d8074675a4d4134271a0e0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000000000000000000000000000000000b151e2a343f48525c646e73808a92979fa6aca9a29f98928e8a868381807f7e7e7e7f80818386898d92979ea0a8aba39f9591867d716c61594f463c31281e13080000000000000000000004101d2935404b55626e7b88949fabac9f93877b6e61544a3f3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4753606d7985929eabaca095897c6f63564c4135291d1104000000000000000000000000000b1825313e4b5864717e8b97a4ab9e918478685e5242382f32322f2e2b2620191007000000131f2c3946525f6c7985929faca295887b6f625554606b74818e97a1ada1968d80746a60544a3f33291f232f3c4956626f7c8995a2ac9f9386796c605346392d2013000c1925323f4c5865727f8b988e817468554b404a5663707d8996a49a897c6f6356493c30251a0e090c151f2b353d434b5153514b4847433c332f2633404d596673808c988b7e7165584b3e3225180b000c1925323f4c5865727f8b988e817468554b403428333f4c5966727f8c999e9184776b5e53534a505354565e68727e8b9aa095887b6e6155483b2e33404d596673808c988b7e7165584b3e3225180b00000000000000060f18222a323a424b51585f666c71787e85929eabadaba7a09d95908b847f79726d666059514b433d474f54565d595653504949443e352c21170b000000000000000a1723303d4a5663707d8996aab4ab9f928578695e52463a2d20140700000000000000000000000000000000000000000001090f14181a1b1c181413110d0805010000000000000000000f1c2835424f5b6875818e9ba8b3a6998c807366594d402f23180c00000000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7b4a79a8e8174675b4e4134281b0e0000000008131e28313a4145474b4c4d4e4f5052504d535557595a5b5c5d5d5e5e5e5e5e5f5f626f7c8995a2afa99c908376655b60606060606060606060606060606060605e697885929faba79b8e8174685b4e412d22170b000000040e19222a32373b3c3f46525f6c7985929facada093877a6d6054473f3f3f3f3f3f3f3f3f3f3f3f3a38342e271e150c18242f3a4754606d7a86929facaea298887b6e6255483b2f221508000000000000000003101c28343f4a54616e7b87929facb9b1a7a0939393939393939393939393939393939393939393939b9ea5afb8aca095897c6f63564c4135291d1104000000000000000004101d2935404b556875828e9ba8b5a89b8f8275675d5145392c1f1309000005111d29343f485056585c5c5c5c5c5c5c5c5c5c5c5c5c5c5d6a7784909daaa79a8d8074675a4d4134271a0e0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000000000000000007121d27303c46505a646e73808d929fa2a9aea59e97928c86817d7a77757372717171727375777a7d81858b91969fa3aba7a09892877e716b61584e433a2f24190c03000000000000000000000c18242f3947535f6a7683909ca9afa4998c8073665c504949494949494949494949494949494949494949494e5864717e8b97a2adaa9d9083776b6054443a2f24190d01000000000000000000000000000c1925323f4c5865727f8b98a5a99c8f827669564c412f26252522221f1b150e0700000000131f2c3946525f6c7985929faca295887b6f62555c666f7d88939fa9a59e9184796d60584e42382e2117232f3c4956626f7c8995a2ac9f9386796c605346392d2013000a1623303d495663707d8996908377675c51454754616e7a8796a1988b7f7265574d42362a201a19191e27313d474f555d605d5555534e4641382a36424d576976828f99897c6f6256493c2f231609000a1623303d495663707d8996908377675c5145382c333f4c5966727f8c999e9184776b5e51463f4446474d56616d7a87939f978a7e7164574b3e3136424d576976828f99897c6f6256493c2f23160900000000000000000610182029303940454e545b60666d7a85929fa9a19e989ea0a09d97918c857f78706b605d554e463d444849514d4946443f3839332c231a1005000000000000000815222e3b4855616e7b8898a2aeada297877b6e6154473b2e21140a0000000000000000000000000000000000000000030b131a20242728292521201d1913110d0802000000000000000d1a2734404d5a6773808d9aa6b3a89b8e817568554b4034291c100400000000000000000000000000000000000000000005121e2a36424d576976838f9ca9b2a5988c7f7265594c3f3226190c000000010d19242f3a434c525457595a5b5c5d5e5d5a54484a4c4d4f5050515151515252525663707d8996a3b0ab9e9285796c605353535353535353535353535353535354616e7b8798a2aeaa988c7f7265594c3f322619060000000a15202a343c4347494c4c525f6c7985929facada093877a6d60544c4c4c4c4c4c4c4c4c4c4c4c4c4645403930271d1213202c3945525d687783909daab4aa978a7d7064574a3d3124170a0000000000000000000c17232e3846525e6975828f9ca8b2aca095898686868686868686868686868686868686868686868e939ea9b4aa9d9084776b6054443a2f24190d01000000000000000006131f2c3845515d677884919eabb5ab988b7e7265554b4035291d100400000915212e3a45505a62656969696969696969696969696969696a7784909daaa79a8d8074675a4d4134271a0e0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000000000000000000000000000000000000000000c18232e39434e58626c73808d929ca4adaaa39f938e857f7a75706d67686665646465656668676d7074797e848c9299a1a9aaa29992877d706a5f554c4135291e150a0000000000000000000007121d2b37434e5864717e8a97a1adab9e9184796d6056565656565656565656565656565656565656565656565f6a7683909ca9aea2988b7f7265594f4332281e130800000000000000000000000000000c1925323f4c5865727f8b98a5a89b8e8275685b4f42302814191615130f0a040000000000131f2c3946525f6c7985929faca295887b6f6257606d7984919aa4a99e938a7d70675d51463c30261c16232f3c4956626f7c8995a2ac9f9386796c605346392d2013000714212d3a4754606d7a87969286796d60534646525e687884919e9c8f8275695e52463c332a262524293039434f5960676d6765625f58534a41363a46535f697885919286796d6053473a2d201407000714212d3a4754606d7a87969286796d6053463a2d333f4c5966727f8c999e9184776b5e51443338393b46525d687784919e998c7f7366594c40333a46535f697885919286796d6053473a2d201407000000000000000000060e171e272e343c424a505b66727f8c98a2a197918c91969d9fa19e97918b837d746d675f584f473d3b3d44403c3937332d2d28211a110800000000000000000613202d394653606c7985929facb3a9968a7d7063574a3d31261b0f01000000000000000000000000000000000000000b151d252b30343536312d2c2924201d19130c070100000000000c1925323f4c5865727f8b98abb5aa9d908477675c5145382c1f13060000000000000000000000000000000000000000000714212d3a46535f697885929fabb4aa968a7d7063574a3d3024170a00000004111d2935414c565d6064656668696a6b69665e54423f414243434444444545454a5764717d8a97a4b0ada297887b6f625548464646464646464646464646414c5665717e8b98aaaea298897c6f6256493c2f2316090000030f1b26323c464e54555959595f6c7985929facada093877a6d60595959595959595959595959595953514b43392e2318111d2935414c566875818e9ba8b2a5998c7f7266594c3f3326190c00000000000000000006111c2a36424d5763707d8a96a1acaa9d9083797979797979797979797979797979797979797979818e9ba7aea2988b7f7265594f4332281e13080000000000000000000714202d3a4753606d7986939facaea399887b6f6255483c2f24180c0000000b1724313d4a56626c71767676767676767676767676767676767784909daaa79a8d8074675a4d4134271a0e0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000000000000000000000000000004101c2834404b555f6a717e8b929da4aeaaa298928b817a736d6863605d5559585857585859555d6063676d717980879197a0a8aba39992867c6f675d51453d30261c1106000000000000000000010f1a26313c4653606d7985929eacada1968a7d70646363636363636363636363636363636363636363636363636e7b88949fabac9f92867a6d6054473d3221160c0100000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0e0908060300000000000000131f2c3946525f6c7985929faca195887b6e625f69737f8c95a0aca2978e81756b61554b40342b1e1516232f3c4956626f7c8995a2ac9f9386796c605346392d2013000713202c3945525d6877849199897c6f635349414d566774818e9a9f92877b6e61584e453c3631322f353a424b55606b707a76726e6a645c53483c3b4855616e7b8897908477675c5145382c1f1306000713202c3945525d6877849199897c6f6353493f33333f4c5966727f8c999e9184776b5e5144382e2e35414c566a7683909d9a8d8073675a4d40343b4855616e7b8897908477675c5145382c1f130600000000000000000000050c151d23282f394653606c7884919eaa9e91857f848a90959c9fa19e95918981796e6a60594f463c3237332f2d2b27221b1c17100800000000000000000006121f2b3844505b667683909ca9b3a79a8d807467584e43372b1e1308000000000000000000000000000000000000060f1d272f373c4041423e3a39352f2d29251e18120b0300000000091623303c4956636f7c8999a4afac9f9286796d6053473a2d22170b0000000000000000000000000000000000000000000815222e3b4855616e7b8897a2adaea298887b6e6155483b2e2215080000000613202c3945525d686d71727374757778767066544b403435363737373838383f4b5865727e8b98a5b1b3a9988b7f7265594f42392e393939393939392d3945525d6875828e9ba8ac9f9285796d6053463a2d201307000006131f2b37434e585f62666666666c7985929facada093877a6d666666666666666666666666666666605c554b4034281c1019242f404d596673808c99a6b3a79b8e8174685b4e4135281b0e000000000000000000000e1a25303b4653606c7884919eabaca095897c6f6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6d7a86929facac9f92867a6d6054473d3221160c010000000000000000000916222f3c4955626f7c889aa4afac9f9286796d6053463a2d2013070000000b1825323e4b5865717e828282828282828282828282828282828286929faca79a8d8074675a4d4134271a0e0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000000000000000000000000000006131f2c3845515c676f7c86929fa4aeaaa29892867e756d68605d5654514b4d4c4b4b4b4c4d4b5153555c60676d737d859196a0a8aba29891847a6d60594f42382e23170c0000000000000000000009151f2c3845515c6673808d9aa4afa99c8f82757070707070707070707070707070707070707070707070707074808d9aa6b0a79b8e8174685d5245392c2013040000000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0e0200000000000000000000131f2c3946525f6c7985929faca194887b6e61626e7b86929fa8a69f92857b6e61594f433a2f22190c16232f3c4956626f7c8995a2ac9f9386796c605346392d20130004111d2935414c566875818e9a8d8074655b5044495663707d8996a0998d80736a5f574e4642403f3f41454c545d67707d86837f7b746e64584c40424d5765727f8c988e817467554b4034291c10040004111d2935414c566875818e9a8d8074655b504437333f4c5966727f8c999e9184776b5e51443b3b3b3c44505c667783909d998d8073665a4d4037424d5765727f8c988e817467554b4034291c10040000000000000000000000030b121b27333f4953636f7c8996a1a3998c7f73787d83898f949da0a09d938e847c706b60584e443b302523201f1b1711100b0500000000000000000000030f1c28333f4a546774808d9aaab4aa9d9184776a5f53473a2f24190b0200000000000000000000000000000000030e18212f3941484d4e4f4b4745413a39353029241d150d030000000714202d3a4753606d7a86939facaea399897d706353493f33271b0f030000000000000000000000000000000000000004111d2935414c5565717e8b98a9b3ac9f9285786d6053463a2d2013070000000714212d3a4754606d7a7e7f80818283858276665c5145382f2c2924262a2d37434e586774818e9aa7b4b7aa9d9083776b60544b40352f2b2623282b2f38414c56606d7a85929faca99b8e8275665c5144382c1f120600000815222e3b47545f6a6f72727272727985929facada093877a727272727272727272727272727272726d675c5145382c1f131824313e4b5764717e8a97a4b1a89c8f8275695c4f4236291c0f0000000000000000000009141f2b3844505b66727f8c99a3aea79a8d8174675c606060606060606060606060605765717e8b98a2aea79b8e8174685d5245392c201304000000000000000000000b1824313e4b5764717e8a97acb6aa9d908477665c5144382c1f12060000010d1a2734404d5a6773808d8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f9298a2aea79a8d8074675a4d4134271a0e0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000000000000000000000000000000000000004111d2935414c56606d79839198a2aeaea39892867d716c615e56524c474541403f3e3e3e3f404045474b51555c606b6f7b849196a1abaaa0968e81746b60544a3f34281c110600000000000000000004101c2834404b54616e7b87939facac9f93877d7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7d85929fabaca095897c6f63564c4135291d11040000000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0e0200000000000000000000131f2c3946525f6c7985929faca194877a6e616c76828f98a3ab9f948b7e72685e52473e31281d100916232f3c4956626f7c8995a2ac9f9386796c605346392d201300010d19242f3d4a5764707d8a989184786c6053464653606c7884919e9f92877c6f695f58534d4d4c4c4c51565d666d7983918f8c888174675a4e4147535f6977839097897d7063564a3d2f23180c0000010d19242f3d4a5764707d8a989184786c6053463c323f4c5966727f8c999e9184776b5e5148484848494e56606d7985929f988b7f7265584c3f3a47535f6977839097897d7063564a3d2f23180c0000000000000000000000000005121f2b3744505b6574808d9aa89f92867a6e6c70767c828991959fa39d9691867d706a5f564c41362a2113120f0b0600000000000000000000000000000b17222d3d4a5763707d8a98a2aeaca095887c6f62564c4135291d140a000000000000000000000000000000000915202a33414b53595b5c5854524c4746413a352f271f150b0100000613202c3945515d677784909daab4ab9a8d8073655b5044372b1f140a000000000000000000000000000000000000010c13202c3945515d6775828e9ba8b5a89c8f8275665c5044382b1f12060000000714212d3a4754606d7a878c8d8e8f909186796d60544a403a39352f31363a3f47535f6a7783909daab6b8aca095897d70665c5145413a37312e34383b424a525e68727f8c98a2ada1978a7d7164544a4034281c100400000916222f3c4955626f7c7f7f7f7f7f7f86929facb3a6998c807f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f796d6053463a2d20131724303d4a5763707d8a96a3b0a99c908376695d5043362a1d1000000000000000000000030f1c28333f4a54616e7a86929facab9f9285796d60535353535353535353535353535f697683909caaaca095897c6f63564c4135291d1104000000000000000000000c1926333f4c5966727f8c99a5b2a99c8f827669544a4034281c10040000010d1a2734404d5a6773808d9a9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9fa2aab4a79a8d8074675a4d4134271a0e0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000000000000000000000000000713202c3945525d68727f8c95a0aaafa59f92867d706b625a524c45413a39352f32313132322f35383a40454b515960696e7b849199a3aea89e93897d70665c5044382d22170b000000000000000000000c18232e3946535f6976828f9ca9afa499938a89898989898989898989898989898989898989898989898989899297a2adaa9d9084776b6054443a2f24190d010000000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0e0200000000000000000000131f2c3946525f6c7985929faca094877a6d68717e8b949faaa3999083776c60564d41352c1f160c0916232f3c4956626f7c8995a2ac9f9386796c605346392d201300000813202d3a4653606d79859296897c7063584e44505b66717e8b959f9991847b6f6a615f57595859555d60686d78818e959c93877c6f625548424d57616e7b88959285796d6053463a2d2013070000000813202d3a4653606d79859296897c7063584e43373f4c5966727f8c999e9184776b5e545454545556585f68707d8a98a298897d7063564a3d424d57616e7b88959285796d6053463a2d201307000000000000000000000000000613202d394653606c7884919eac9b8f82756860646b6f767d838c9299a2a09892867c6f685e52463d32271b1003000000000000000000000000000000000614202d3a4753606d7985929facb1a79a8d8073685d52453b2f261b1106000000000000000000000000000006101a26313c45535d64686964605d5654524c45403931271d1207000004101d2935404b556773808d9aa9b3ab9e9184786c6053463c2f261b1106000000000000000000000000000000000007131d28333f4a54606d7a86929facb1a7988b7f7265544a3f34281c10030000000613202c3945515d67778390999b9c9d988a7d71665b514b4745404343424648505a626f7b8895a0acb8bcb1a79d9083796d605b524c464242413f44464d545b616d7a85919eaaa99e9184796d6053463a2e23180c0000000c1925323f4c5865727f8b8c8c8c8c8c9299a3aeb4a89c928c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c877a6d6054473a2d21141623303d495663707c8996a3afaa9d9083776a5d5044372a1d1100000000000000000000000b17222d3846525e6875828e9ba8ada2978a7e7164574d42464646464646463f4a54626e7b88949fabaa9d9084776b6054443a2f24190d01000000000000000000000d1a2633404d596673808c99a6b3a79a8e8174675b4e412e23180c000000010d1a2734404d5a6773808d9aa6a9a9a9a9a9a9a9a9a9a9a9a9a9a9acaeb4aca79a8d8074675a4d4134271a0e0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000000000004111d2935404b55606d7a85929fa7b1a99d938b7e716b60595046413a352f2c2924252524252524292c2e343940454f575e696f7c87929fa7afa59d9183786d60544a3f33281c0f0300000000000000000007121d2a36424d5764707d8a96a1adaba49f9796969696969696969696969696969696969696969696969696969fa2a9aea2988b7f7265594f4332281e1308000000000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0e0200000000000000000000131f2c3946525f6c7985929faca093867a6d6d7a85929ea6a89f92867c6e655b50443b30231a0d040916232f3c4956626f7c8995a2ac9f9386796c605346392d2013000006131f2c3845515c6775818e9b8f82756a6054474a54606c78839098a09691847c746e696766656567676d727a828e939e958d80746a5f534746535e6974818e9a8e8174665c5044382c1f120600000006131f2c3845515c6775818e9b8f82756a6054473e3f4c5966727f8c999e9184776b61616161616162656a6f7a84919e9f9285796d6053463a46535e6974818e9a8e8174665c5044382c1f1206000000000000000000000000000815222f3b4855626e7b8896a1a49a8b7e7164565960636b70787f879297a2a29891847a6e61594f44382c1e13080000000000000000000000000000000006131f2c3845515c6775828f9ba8b2ab9f92857a6d60574d41382d2217110a020000000000000000000001081018222b37424e57646f7475716d6865615e56514b43392f24180c0000010d18242f3d495663707c8997a1adaca196897d7063584e41382d22170f06000000000000000000000000000000071118242f3844505b66717e8b98a2aeaca095887b6e6155483b2e23170b0000000004111d2935414c556673808d99a3a8aa9d9083786c605d5553514b50504d53555a626c74818e9aa7b1b6b4b6aca0958d80736d605d56534d4e4e4a5053575e666c75828f97a1ada1978c7f73665c5145382c1c12070000000c1925323f4c5865727f8b98999999999fa3abb4b9ada49c99999999999999999999999999999993877a6d6054473a2d211416222f3c4955626f7c8895a2afaa9e9184776b5e5144382b1e11000000000000000000000006111c2a36414c5663707d8996a0aca99c8f8276695e5246382d393939393844505c6673808d99a6aea2988b7f7265594f4332281e130800000000000000000000000e1a2734414d5a6774808d9aa7b3a69a8d8073675a4d4034271a07000000010d1a2734404d5a6773808d9a9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9a8d8074675a4d4134271a0e0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000000000000000000000000000000000000613202c3945515d6773808d97a2adada1978e81746c61594f473e36302924201d181918181819181d1f23282f343d454d57606a727f8c95a0acaca0958b7e71665b5044382b1f1308000000000000000000000e1a26313b4653606d7984919eabb5afaca3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3abadb3ac9f92867a6d6054473d3221160c01000000000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0e0200000000000000000000131f2c3946525f6c7985929faca39986796d75818e97a2aca0968c80736a5f53493f32291f1108000916232f3c4956626f7c8995a2ac9f9386796c605346392d2013000004101c2834404b55636f7c899494887c6f62594f44505b666e7b869298a0969187807b777473727273767a7f858f939e969083796d60584e434e58616e7b869294897c6f62544a3f34281c100300000004101c2834404b55636f7c899494887c6f62594f443f4c5966727f8c999e9184776e6e6e6e6e6e6e6f72757c839096a0978d8074665c5145434e58616e7b869294897c6f62544a3f34281c1003000000000000000000000000000b1825323e4b5865717e8b98a89f93877a6d61544f545960666d737d859297a2a1968f82756b6054483a2f24190d0100000000000000000000000000000004101c2934404b5563707d8a96a1acaea2988c7f73695e53493f3327221b140b090603000001000205080d1319222a343c47535f6a7481827e7a76716d68605d554b4035291d100400000713202d3a4653606d7985929eacb2a89c8f82756a5f53493f332721180f0802000000000000000000000003091119232935404b55606c7884919daab3a99d908477695f53463a2d1c110600000000010d19242f3b4854616e7b86929fa9ab9f958c7f736d6762605d555d5d575f61656d717e8a939da9afa9a7a9aba79c928c7f746d68615f575b5b545c6062696e78808d949ea9a59e9184796d60544b4034281c0b000000000c1925323f4c5865727f8b98a5a5a5a5acaeb4bdbfb6ada8a6a5a5a5a5a5a5a5a5a5a5a5a5a5a093877a6d6054473a2d211416222f3c4955626f7c8895a2afab9e9184786b5e5145382b1e120000000000000000000000000d1925303b4854606b7784919daaac9f93877b6e6153493f33272d2d2d3a4653606d7984919eabac9f92867a6d6054473d3221160c0100000000000000000000000e1b2834414e5b6774818e9aa7b3a6998c807366594d4033261a0d000000010d1a2734404d5a6773808d939393939393939393939393939393939393939393938d8074675a4d4134271a0e0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000000000000000000000000000000000000714202d3a4753606d7a85929fa9b2a89e91857a6d605a50473d352a251e1913110d070b0b0b070c1013181d2329333b454e58606d7883909da7b1a79e9184786c6053463a3024190d0100000000000000000009141f2c3844505c6673808c99a3afbbb9b1acaa9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa7a9afb8bab1a79b8e8174685d5245392c20130400000000000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0e0200000000000000000000131f2c3946525f6c7985929fac9f928679707d89939ea9a59d9184796d60584e41382d20170d00000916232f3c4956626f7c8995a2ac9f9386796c605346392d20130000000c18232e394854606b76828f9c8f82756c61564c4a545f69707d8692979f99928d888481807f7f8082868b91979e9691847b6e675c51464b55606a74818d998f82766a605442382e23170c00000000000c18232e394854606b76828f9c8f82756c61564c414c5966727f8c999e91847b7b7b7b7b7b7b7b7c7e82879095a09892857a6d61544b404b55606a74818d998f82766a605442382e23170c00000000000000000000000000010e1b2834414e5b6774818e9aa79e918477685e5246484f545c606b707c85929fa59e93897d7063564c4135291d1104000000000000000000000000000000000c18232f394653606c7884919ea8b2aa9f92867b6e655b50443e332d261d1a1312100b060e090e1214191e2429343c46505a626e7b878f8b86827e7a766d675d5145392c1f1306000006121f2c3844505c6673808d9aa4afaa9e94887c6f655b50443d332a2219140e09060400000100000406090e141a232b353d45515d67717e8a95a0acada2978b7e7265574d42362a1e0a0000000000000814212d3a46535e6974818e97a1aba79c918c8079736f6d676a6a6a6a696e71777e87929fa5afa59d9b9c9fa6a49c918c807a726e6969686768666d6f747b828d929da6a69e938a7e71675d5142392e23180c000000000c1925323f4c5865727f8b989f9f9f9fa0aeb4bcb9b0a8a2a09f9f9f9f9f9f9f9f9f9f9f9f9f9f93877a6d6054473a2d211416232f3c4956626f7c8995a2afaa9d9184776a5e5144372b1e1100000000000000000000000008141e2c38444f5965727f8c98a3aea4998c7f73655b5044372b1f2a36414c5663707d8a97a1ada79b8e8174685d5245392c2013040000000000000000000000000f1c2835424f5b6875818e9ba8b2a5998c7f7266594c3f3326190c000000010d1a2734404d5a6773808686868686868686868686868686868686868686868686868074675a4d4134271a0e0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000000000000000000000006121e2b37424d5765717e8b98a2aeaca0968b7e71685d52483e352b2319130d08040100000000000004070c12182129333d44505c66707d89959fabaca0968a7d7064564c4135291d110400000000000000000003101c28343f4a54616e7b87929facb9b1a7a0939393939393939393939393939393939393939393939b9ea5afb8aca095897c6f63564c4135291d110400000000000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0e0200000000000000000000131f2c3946525f6c7985929fac9f9285797984919ea5a99d93897d70675c51463c2f261b0e0500000916232f3c4956626f7c8995a2ac9f9386796c605346392d201300000007121d2c38434f5963707d8994948a7d70685d52454d57606b707d858f949c9f9a95918e8c8b8c8d8f92989e9c938e847b6e695f554b45515c676f7c879394897c6f63584e4330261c1106000000000007121d2c38434f5963707d8994948a7d70685d52454c5966727f8c99a196918787878787878788898b8f93999e9691867d6f685d524245515c676f7c879394897c6f63584e4330261c11060000000000000000000000000004111d2a3744505d6a7783909da89b8e827568564c413d424a5159606a707d8a939ea69c8f8276685d5245392c2013070000000000000000000000000000000007121f2b3844505b66727f8b96a1acaea2988f82776c605a50443f382f2b26201f1c171b1a1b1a1e2124292f353e464e58626c75828f9999928f8b8682796d6053473a2d201407000003101c28343f4a54616e7b87939fabb0a69c9083776c60584e453c342a251e1a1312100c070e070c1013131a1f262a353d47505a606d7984919ea7b1a99f9285796d6053473b31261a0e00000000000005121e2a36424d57616e7b859299a3aba39c928d84807c7a7877767677787b7e838b9299a3aea69d938e90949fa6a39c928d857f7b777675747576797c80868f949da4a69f948e81746c61554b4030271d1207000000000c1925323f4c5865727f8b939393939393a2aab4b3a89e9693939393939393939393939393939393877a6d6054473a2d21141623303d495663707c8996a3afaa9d9083776a5d5044372a1d1100000000000000000000000002101c27333d4754616d7a86929facab9e9184786c6053463a2f242d3946525e6875828f9ba9aca095897c6f63564c4135291d11040000000000000000000000000f1b2835424e5b6875818e9ba8b2a6998c7f7366594c403326190d000000000d1926333f4c58646e73797979797979797979797979797979797979797979797979746e64584c3f33261a0d0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000000000814212e3a47535f697683909daab4aa9e9184786d60564c41362d2319110802000000000000000000000001070f172128343f4a54606b7783909daab2a89b8f8275685d5245392c201307000000000000000000000c17232e3846525e6975828f9ca8b2aca095898686868686868686868686868686868686868686868e939ea9b4aa9d9084776b6054443a2f24190d0100000000000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0e0200000000000000000000131f2c3946525f6c7985929fab9e918578808d96a0aca1978e81746b60554b40342a1d140a0000000916232f3c4956626f7c8995a2ac9f9386796c605346392d2013000000000f1b27323d4854606b7682909991847a6d605b51484f59606b707b828a8f939a9a9d9a9998989a9c9a99928f8981796e695f574d47505a606d798491988f82766b6054463d321e150a000000000000000f1b27323d4854606b7682909991847a6d605b514c5966727f8c99a8a19e949494949494949495989c9a97928d847d6f6b60564c47505a606d798491988f82766b6054463d321e150a000000000000000000000000000004101d2935404b556b7885919ea6998c807366594d40303940444f58616b75818e9ba99f92867a6d6054473a2d21140700000000000000000000000000000000030f1c28333f4a54606d7984919ea6b0aa9e948c7f726c615a5049413c37312d2b2823272728252a2d2f353a41454f585f6a717e8b939ea39f9c998f8275675d5145392c1f13060000000c17232e3846535f6975828e99a3afab9f948b7f726a60574e463e36302a25201f1c181b1a1b181c1f20262b31363f474f59616c74808d96a1adada2978d8073675d5145392a1f1409000000000000020e1a25313b46525e69707d879299a1a9a49c96918d8986858483838485888b90959fa3aba59d948e818390949da5a49d97928c8884828181828385898d92989ea6a49f948f82796d605a5043392f1e150b00000000000c1925323f4c5865727f8686868686868998a2aeafa2968c87868686868686868686868686868686867a6d6054473a2d21141824313e4b5764717e8a97a4b1a99c8f8376695c504336291d10000000000000000000000000000b16202d3946525d6875818e9ba7aca096897c7063554b4135292e3a4754616d7a86929facaa9d9084776b6054443a2f24190d010000000000000000000000000e1b2834414e5b6774818e9aa7b3a6998d8073665a4d4033271a0d000000000b17232f3b47525c64676c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c67645c52473c3023170b0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000000000815222f3b4855626e7b88959fabaea3988b7e72665c50443a2f241b1107000000000000000000000000000000050f17232e38424f5964717e8a98a2aeac9f92867a6d6054473a2d2114080000000000000000000006111c2a36424d5763707d8a96a1acaa9d9083797979797979797979797979797979797979797979818e9ba7aea2988b7f7265594f4332281e13080000000000000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0e0200000000000000000000131f2c3946525f6c7985929faa9d91847b87929fa8a69e92857a6d61594f43392e22180b020000000916232f3c4956626f7c8995a2ac9f9386796c605346392d2013000000000a16212c38444f59626f7c8692978e81746d625a50474f5960696e767d83878b8e909192929291908e8b86827c756d675f574d474f59626c73808d9592867c6e62594f44342b200c03000000000000000a16212c38444f59626f7c8692978e81746d625a505966727f8c9393939393939393939399929291908d8a8580796f6b60594f474f59626c73808d9592867c6e62594f44342b200c03000000000000000000000000000006131f2c3945515d677986929fa5988b7f7265584c3f322e343d464f59626f7c8997a2a3998a7d7164574a3e3124170b00000000000000000000000000000000000b17222d3845515c67717e8b949ea9b0a69f92877e716c605b534d47423c3a38342e34343531363a3b41454c5159616a6f7c86929fa5aea99f93877c6f62554b4035291d100400000006111c2a36424d57626e7b87929fa8b0a69f92877c6f695f585046413b36312d2c282327272723282c2d31373b42465159606b717e8a929da8b1a79f92857a6d61554b4035291d10040000000000000009141f2a36424d57606b717e8792979fa2a8a19e999a9391909090919297989da0a7a8a19e938e82797a828e939da0a8a19e9996918f8e8e8f9092989a9fa3a7a09a938d82796d675d51483e31281d0c0300000000000b1824313e4a56626d7279797979797986929facada093877a7979797979797979797979797979797976685d5245392c20131926333f4c5966727f8c99a5b2a79b8e8174685b4e4135281b0e0000000000000000000000000005111d2935414c56636f7c8995a0aca89b8e8174675d5145392c37434e5865727f8b99a3aea2988b7f7265594f4332281e1308000000000000000000000000000e1b2734414e5a6774818d9aa7b3a79a8d8074675a4d4134271a080000000007131f2b36404a52585a6060606060606060606060606060606060606060606060605a58524a40362b1f13070000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000000030f1c28333f4a5465727f8b98a7b1ac9f92867a6d60544a3f32281e1209000000000000000000000000000000000006111c26303d4753606d7a85929facaea3998b7e7164584b3e3025190e02000000000000000000000e1a25303b4653606c7884919eabaca095897c6f6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6d7a86929facac9f92867a6d6054473d3221160c010000000000000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0e0200000000000000000000131f2c3946525f6c7985929faa9d9083839099a3aa9f948a7e71685d52473d30271d0f06000000000916232f3c4956626f7c8995a2ac9f9386796c605346392d20130000000004101c27333d47535f6a737f8c95938c7f726c615950444f575f616b70767b7e8183858586858583817e7a756f6a605d554d445059606b717e8b92958c7f736a5f53473d3222190f000000000000000004101c27333d47535f6a737f8c95938c7f726c61595966727f86868686868686868686868686858483807d79736d6760594f445059606b717e8b92958c7f736a5f53473d3222190f0000000000000000000000000000000714202d3a4753606d7a8699a3a4978b7e7164584b3e312328343e4653606c7985929fab998c7f7266594c3f3326190c000000000000000000000000000000000006111c2834404b55616c75828f97a2abafa39992877e726c655f57534d4946443f41414141424246484c52555d606b707c859298a2aeada2978f82756a5f5343392f24180c00000000000e1a26313b47535f6974808d96a0abaea39991857b6e6a615a524c46423c3a38342e3434342e34383a3c42474d535b626b707d86929fa4aeaaa0958b7f72685e5243392f24180d0100000000000000030e1a25303b454f59626c717d858d92989d9fa4aca49f9e9d9d9d9d9ea1a9aba49f9c96918a81786d6d78818991959c9fa3a8a09e9c9b9a9b9c9fa2aaa39f9b95908880786d675d554b40362c1f160c0000000000000915222e3a46515b62656c6c6c6c6c7985929facada093877a6d6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5d564c4135291d111c2934404b556774818e9aa7b3a6998c807366594d4033261a0d00000000000000000000000000010d1924303a4854606b7783909daaac9f92857a6d6054473c313b4754606a7783909dabac9f92867a6d6054473d3221160c01000000000000000000000000000d1a2733404d5a6673808d99a6b3a89b8e8175685b4e422f24190d01000000020e19242e3840474c4d5353535353535353535353535353535353535353535353534d4c4740382f24190e030000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000000000000000000000000000000006121f2b3844505b6675828f9ba8b5a89b8f8275685d5242382e20160c000000000000000000000000000000000000000a15202c3945515d6775828e9ba8b4ab9b8e817468564c41362a1e11050000000000000000000009141f2b3844505b66727f8c99a3aea79a8d8174675c606060606060606060606060605765717e8b98a2aea79b8e8174685d5245392c201304000000000000000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0e0200000000000000000000131f2c3946525f6c7985929fac9f928790959faba2988f82766c61564c41352b1e150b00000000000916232f3c4956626f7c8995a2ac9f9386796c605346392d201300000000000b16212b37434e58606d7883909793887e716b625a514a4d53596163696e71747678797979787674716d68626058514b4a505a616b707d8792979083786d60584e43352b2110070000000000000000000b16212b37434e58606d7883909793887e716b625a636d727979797979797979797979797978777673716d67605d554f4a505a616b707d8792979083786d60584e43352b2110070000000000000000000000000000000613202d394653606c7986929fa5988b7e7265584b3f3025212b3744505b657784909da79a8d8074675a4d4134271a0e0100000000000000000000000000000000000c18232e3943505a616e7b859299a3afaba39992877f776e69615f575553504a4e4e4d4e4f4d5354565d60676d747d859297a1aaaea49e92857b6e61584e4331271d1207000000000009141f2b37424d57606d79849199a4afaba19791847c706c615e56534d494644404141414141404546494d53575f616d727d869298a2aeaca2989083786c60564c4131281d120700000000000000000009141f29333d47505a626b6f7a80868c90939a999b9d9e9e9f9f9f9e9d9c9a9993908b847d746d66666d747d848a8f92999a9c9d9e9f9f9f9e9d9b9998928f89837d746d665d554c43392f241a0d0400000000000006121e29343f49515658606060606c7985929facada093877a6d6060606060606060606060606060605f524c443a2f2419131f2c3845515c677783909daab4aa988b7e7165584b3e3225180b000000000000000000000000000008131e2c38434f5965727f8b98a2aea2988b7e7165574d4237404b55626f7c8895a0aca79b8e8174685d5245392c20130400000000000000000000000000000c1825323f4b5865727e8b98a5b1a99c8f837669554c4135291d11040000000008121c262e363b3f40464646464646464646464646464646464646464646464646413f3c362f261d1208000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000000000000000000000613202d394653606c7885929fabb2a9988b7e7165564c4130261c0d040000000000000000000000000000000000000004101d2935404b5565717e8b98aab3ab9e918478685e5246392d20140700000000000000000000030f1c28333f4a54616e7a86929facab9f9285796d60535353535353535353535353535f697683909caaaca095897c6f63564c4135291d1104000000000000000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0e0200000000000000000000131f2c3946525f6c7985929faca39992999fa7a79f92867b6e615a50443a3023190c0300000000000916232f3c4956626f7c8995a2ac9f9386796c605346392d20130000000000050f1a26313c44505c666e7b85929992867d716c605c544e464f55575e6165676a6b6c6c6c6b6a6765615e56544e454e545c606c717d86929992857b6e665c50463c3123190f00000000000000000000050f1a26313c44505c666e7b85929992867d716c605c63666c6c6c6c6c6c6c6c6c6c6c6c6c6b6b696764605c55514b4e545c606c717d86929992857b6e665c50463c3123190f0000000000000000000000000000000005121f2b3744505b657885929ea6998c807366564c41362e2e2e3844505b667784909da79a8d8074675a4d4134271a0e01000000000000000000000000000000000007121d27303e46525e69707d87929fa4acaba399938c827b746e696562605c545b5a5a5b5c575e6164686d737a808a9297a1a9afa59d928a7e70695e52463c321f150b010000000000030e1a26313c45515d676f7d87939fa4aea9a19691867e756e68615e575653514a4e4e4d4e4e4b515356575f62696e767f879298a2aaafa49a92867c6f665b50443a301f160c01000000000000000000030d17212c353f48505960686d737a7f83878a8c8e90919192929292908f8d8a86837e79706c605c5c606b70787d82868a8d8f919292929292908f8c8986827d776f6b605c544c433a31271d120800000000000000010d18232d373f464a4c5353535f6c7985929facada093877a6d6054535353535353535353535353535345413a32281e1314202d3a4753606d7986929facaea298887c6f6255493c2f2216090000000000000000000000000000020f1b27323d4754606d7a86929facaa9c908376695f53473845515c6774808d9aa7aca095897c6f63564c4135291d110400000000000000000000000000000a1724313d4a5764707d8a97abb5ab9e918478675d5145392c20130600000000010a141c242b2f33343939393939393939393939393939393939393939393939393433302b241d140b01000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000000000000000000000815222f3b4855626e7b8897a2adada197877b6e6154483b2f21140a0000000000000000000000000000000000000000010d18242f3b4855616e7b8898a2aeada196877a6e6154473b2e21140800000000000000000000000b17222d3846525e6875828e9ba8ada2978a7e7164574d42464646464646463f4a54626e7b88949fabaa9d9084776b6054443a2f24190d01000000000000000000000000000000000000000c1926323f4c5965727f8c98a5a79b8e8174685b4e4135281b0e0200000000000000000000131f2c3946525f6c7985929facaba39fa3ababa0958c7f72695f53483e32281e11070000000000000916232f3c4956626f7c8995a2ac9f9386796c605346392d20130000000000000a152028343f4a545f696f7d87929892877e736d665f58524c484d5254585b5d5e5f5f5f5e5d5b5854524c474b51575f666d737e87929892877d6f695f544a3f342a20110700000000000000000000000a152028343f4a545f696f7d87929892877e736d665f586060606060606060606060605f5f5e5d5a5753514b4b51575f666d737e87929892877d6f695f544a3f342a20110700000000000000000000000000000000030f1b27333f49536a7784909da99c8f8276685e52463f3b3b3b404653606c7985929fac998c7f7266594c3f3326190c000000000000000000000000000000000000000b151e2a36424d56606b717f8b939aa3ababa49f948f86817b76726f6d6668686767686869696e71757a7f858d929ea2a9afa59e938d80746c61574d42342a200d030000000000000009151f2935404b55606b727f8b929da4ada9a198928a817a746e696562605c545b5a5a5a5b545c606266696e747b828b9299a2aaaea39f93887e706a5f544a3f32291e0d040000000000000000000000050f1a232d363f474f565d60686e72767b7d7f82838485858685858482807d7a76716d66615a51515960666c71767a7d80828485858685858382807d7a75706b636059514a423a31281f150b00000000000000000006111b252d343a3e3f4646525f6c7985929facada093877a6d6054474646464646464646464646464639352f282016101d2935404b5563707d8a99a3aeac9f9285796d6053463a2d2013070000000000000000000000000000000a16202c3945515d6774818e9aa7ab9f94887b6e62544a3f4653606d7985929fabaa9d9084776b6054443a3024190d0100000000000000000000000000000916222f3c4955626f7c8899a3aeaca196877a6d6054473a2d2114080000000000020a12191f2326272d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2726231f19120b0200000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000000000000000000000a1724313d4a5764707d8a97a9b3ab9e918578695e53463a2d2114020000000000000000000000000000000000000000000714212d3a46535f697885929fabb2a896897d7063564a3d3023170a000000000000000000000006111c2a36414c5663707d8996a0aca99c8f8276695e5246382d393939393844505c6673808d99a6aea2988b7f7265594f4332281e1308000000000000000000000000000000000003060809192633404c5966737f8c99a6a79b8e8174685b4e4135281b0e0200000000000000000000131f2c3946525f6c7985929facb5afacafafa4999083786d60574d42362c20160c000000000000000916232f3c4956626f7c8995a2ac9f9386796c605346392d2013000000000000030c17232e38424d57606b717e8a9299928b80786f6a605d56524c46474b4e505252535252504e4b47464b51555d606a6e787f889299928a7e716b60574d42382e22180e000000000000000000000000030c17232e38424d57606b717e8a9299928b80786f6a605d56524c5353535353535353535251504d4a474b51555d606a6e787f889299928a7e716b60574d42382e22180e0000000000000000000000000000000000000b17222d414e5a6774818d9aa99f92867a6d6159504a4847484b515b636f7c8998a2a49a8a7e7164574b3e3124180b00000000000000000000000000000000000000030c1925303b444f59626d727f889299a1a8afa69f99928e88837f7c797775747474747576787b7e82868c92979da4adaba39f938e81786d605a50453b3022180e0000000000000000030d18242f3a434f59626d74808d929ca3adaaa29f938e86807b76726f6d6669686767676869666d6f72777b81868f949fa3ababa39f918c7f726c61584e42382d20170d0000000000000000000000000008111b242d353d444c52565e6165696e71737577777879797978777573716e6864605c545044454f545b6064686d717376777879797978777573706d67636059544f44403930281f160d030000000000000000000009131b23292e31323946525f6c7985929facada093877a6d6054473a3939393939393939393939392c29241e160e19222c3945515d6774818e9aabb4a99c908376665c5044382c1f120600000000000000000000000000000004111d2935414c55626f7c88959faba6998d8073665c50444d5764717e8a97a2ada2988b7f7265594f4332281e13080000000000000000000000000000000713202d3a4653606d7986929facb2a896897c6f6356493c3025190e00000000000001080e1317191a20202020202020202020202020252728292622211f1a20201a1a17130e08010000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000000000000000000000c1926333f4c5966727f8c99a5b2a99c8f827669574d42362a1e120500000000000000000000000000000000000000000005121e2b37424d576a7683909da9b2a5988c7f7265594c3f3226190c0000000000000000000000000d1925303b4854606b7784919daaac9f93877b6e6153493f33272d2d2d3a4653606d7984919eabac9f92867a6d6054473d3221160c01000000000000000000000000000000040a0f1315161a2734404d5a6773808d9aa6a79b8e8174685b4e4135281b0e0200000000000000000000131f2c3946525f6c7985929facb8bbb9b2a89f93877c6f665c50453b31241a0e04000000000003050916232f3c4956626f7c8995a2ac9f9386796c605346392d20130000000000000006111c26303c454f59616c717e879298928d837c736d68605d5653514a4a484847464748484a4a5053555d60676d737b838c939892877e716c61594f453c30261c0f060000000000000000000000000006111c26303c454f59616c717e879298928d837c736d68605d5653514a4a484847464748484a4a5053555d60676d737b838c939892877e716c61594f453c30261c0f06000000000000000000000000000000000000061724313d4a5764707d8a97a2a3988d80736b605c54555455555c606d75828f9caa9f93877a6e6154473b2e211408000000000000000000000000000000000000000009141f29323d47505a626d727e8791969ea5acaba39f9a95908c8885848281818081828385878b8f92989fa2a9ada8a099928d81786d665c50483e33291f100600000000000000000007131d28313d47515b606c77808c919ea1a9aea59e98928d87837f7c79777674747474747677797c7f83888e92999fa6aea8a199928b7f736d635a50463c2f261c0e05000000000000000000000000000009121b232b323a41454c5254565e616466686a6b6b6c6c6c6b6a696764615e5653514a423e3d424a5053565e616467696a6b6c6c6c6b6a686663605d55554f48433d342e271e160d040000000000000000000000010911181e22242c3946525f6c7985929facada093877a6d6054473a2d2d2d2d2d2d2d2d2d2d2d2d201d19130e17202935404b55606d7985929fabb1a7988c7f7265544a3f34281c1003000000000000000000000000000000010d19242f3a47545f6a7783909da9ab9e9184796d605346525e6976828f9ca9ac9f92867a6d6054473d3221160c0200000000000000000000000000000006131f2c3845515c677783909daab2a6998c7f7366564d41362a1c11060000000000000002070b0d0d131313131313131313151e252c31343536322f2e2b26201f1c18120b0300000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000000000000000000000e1b2834414e5b6774818e9aa7b3a69a8d8073675a4d4031251a0e02000000000000000000000000000000000000000000020e1a2631414e5b6874818e9ba7b3a79a8d8074675a4d4134271a0e00000000000000000000000008141e2c38444f5965727f8c98a3aea4998c7f73655b5044372b1f2a36414c5663707d8a97a1ada79b8e8174685d5245392c201304000000000000000000000000000000070f151b1f2222262b38434e586875828f9ba8a79a8d8074675a4d4134271a0e0100000000000000000000131f2c3946525f6c7985929facacacacada1968d80746a60544a3f33291f120900010407070c10121316232f3c4956626f7c8995a2ac9f9386796c605346392d201300000000000000000a151e2a333d47505a626c717d869196959087807a736d6863605c54575554545354545557545c6063676d727a7f8690959691867d716c625a50473d332a1e150a0000000000000000000000000000000a151e2a333d47505a626c717d869196959087807a736d6863605c54575554545354545557545c6063676d727a7f8690959691867d716c625a50473d332a1e150a000000000000000000000000000000000000000714202d3a4753606d7a85929ea89f93887d726d666362616263676d737f8b949ea69d908376685e5246392d2014070000000000000000000000000000000000000000020d17202b353f48515b626c717d848e939da0a7abaca79f9d989892908f8e8d8d8e8f909298979c9fa3aaada9a29f96918780786c665c544a3f362c21170d00000000000000000000010c161f2b353f44505b656c747f8a92979ea6acaaa29f9a93908c898684828181808181828486898c90959a9fa3ababa49f9691877e736d635b51473e342a1d140a00000000000000000000000000000000091119202830353b4146474d525457595b5d5e5e5f5f5f5f5d5c5a5754524c46444039302f383f44464c5254575a5c5e5f5f5f5f5f5d5c595653514b48443d383228231c150c040000000000000000000000000000060d12151f2c3946525f6c7985929facada093877a6d6054473a2d212020202020202020201413110d0f182029323b45515d67727e8b97a2adab9f95887b6e6155483b2e23170c000000000000000000000000000000000008131e2b37434e5865717e8b97a2ada1968a7d7063564c54616e7b87939faca79b8e8174685d5245392c2013040000000000000000000000000000000004101c2834404b556774818e9aabb5a99c908376685e5246382e23170c0100000000000000000000010606060606060008111e272f373d4042433f3b3a37312d2c29231d150d04000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000000101c2936434f5c6976828f9ca9b2a5988c7f7265594c3f322619090000000000000000000000000000000000000000000000091a2733404d5a6673808d99a6b3a89b8e8175685b4f4235281c0f00000000000000000000000002101c27333d4754616d7a86929facab9e9184786c6053463a2f242d3946525e6875828f9ba9aca095897c6f63564c4135291d1104000000000000000000000000000007101920272b2e2f31363e4754606a7885919eabaa998c7f7266594c3f3326190c0000000000000000000000131f2c3946525f6c7985929f9f9f9f9fa59e9184796d60584e42382e21170d02080d111314181c1f201f232f3c4956626f7c89959f9f9f9386796c605346392d20130000000000000000030c18212b353e48505a626b707c848e9399928d85807a75706d666664626160606061626466666d70757a7f858c9298938e847c706b625a50483e352b21180c03000000000000000000000000000000030c18212b353e48505a626b707c848e9399928d85807a75706d666664626160606061626466666d70757a7f858c9298938e847c706b625a50483e352b21180c03000000000000000000000000000000000000000613202c3945515d67727f8c96a1a49a92877f7873706e6e6e7073798088939fa69f948a7e7164564d41362a1e1105000000000000000000000000000000000000000000050e19232d363f49515a626b6f7a818990959c9fa6a9aca9aaa29f9d9b9b9a9a9b9b9c9fa2aaa8acaaa9a19e97928c847c736c665b544a42382e241a0f050000000000000000000000040d192327333f49535b606d737d858f949da0a7acaca49f9c989892918f8e8d8d8d8e8f919298999d9fa7acaca69f99938d847d716c635b51493f352c22180b020000000000000000000000000000000000070e161e24293036393b4246474a4c4f50515252535252514f4d4a4746413b38342e27262d33383a4146474a4d4f515252535252504f4d4a4745403a38332c272118120b03000000000000000000000000000000000106131f2c3946525f6c7985929facada093877a6d6054473a2d21141313131313131313060b0f151a212a323b444e58606d7984919ea9b2a89d908376695f53463a2d1c11060000000000000000000000000000000000010f1b26323c4753606d7985929faba99b8e8275685d525966737f8c99a4aca095897c6f63564c4135291d110400000000000000000000000000000000000c18232e3e4a5764717e8a99a3afac9f93877b6e61544a3f34281d13070000000000000000000000000000000000040e1a232f3941484d4f504c4847433d3a38342f271f160e040000000000000000000001040606111e2a3744515d6a7784909daaa99c8f8376695c504336291d10060000000000000000000000000000000000101d2a3743505d6a7683909da9b1a4978a7e7164574b3e3124180b00000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5b2a99c908376695d5043362a1d10000000000000000000000000000b16202d3946525d6875818e9ba7aca096897c7063554b4135292e3a4754616d7a86929facaa9d9084776b6054443a2f24190d0100000000000000000000000000040f19222b32373b3c3f4246505a626f7c8997a1ada298897d7063564a3d3023170a0000000000000000000000131f2c3946525f6c798692939393939393938a7d70675d51463d30261c0f080d13191d202125292b2c2c292f3c4956626f7c89939393939386796c605346392d2013000000000000000000060f19232c363f485059616a6f7a818a919697928c86817d797673706f6e6d6c6d6e6f707376797d81858c929796918a817a6f6a615950483f362c23190f060000000000000000000000000000000000060f19232c363f485059616a6f7a818a919697928c86817d797673706f6e6d6c6d6e6f707376797d81858c929796918a817a6f6a615950483f362c23190f06000000000000000000000000000000000000000004111d2935404b55606d79849197a1a399928b84807d7b7a7b7d80858d939aa4a0968f82766c6155443b3025190e020000000000000000000000000000000000000000000008111b242d373f48505960686d757d83898f94989c9fa3aba7a8aaa8a7a7a7a7a8a9a9a7a5a8a09e9a97918c8580796f6b605b544a423830261c110800000000000000000000000000071017222d384149505b636b707b828990959c9fa4acaca9aaa39f9d9c9b9a9a9a9b9c9d9fa3aaaaababa39f9b948f878079706b625a514940372e231a100600000000000000000000000000000000000000040c13191e252a2d30363a3b3e4042444445464646454442403e3b3936302c28231c1c22282b3036393a3e40434445464646454442403d3a39352f2c27211b160c070000000000000000000000000000000000000006131f2c3946525f6c7985929facada093877a6d6054473a2d21140c0c0c0c0d090e1114171b1f262b333b444c56606a73808c96a1adada1968a7e7164574d42362a1e0a000000000000000000000000000000000000000a151f2c3945515d6774808d9aa6ac9f92867a6d6154606b7784919eabaa9d9084776b6054443a3024190d0100000000000000000000000000000000000714212d3a4754606d7a86929facafa4998c7f72665c50443a2f24181007000000000000000000000000000000030c16202c35414b53595b5c5955534e4a47454039312820160c020000000000000004090e111213131e2a3744515d6a7784909daaa99c8f8376695c504336291d13130807050200000000000000000000000000111e2a3744515d6a7783909daab0a3968a7d7063574a3d3024170a00000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1aa9d9083776a5d5044372a1d110000000000000000000000000005111d2935414c56636f7c8995a0aca89b8e8174675d5145392c37434e5865727f8b99a3aea2988b7f7265594f4332281e130800000000000000000000000000000a15202b343c4347494c4d5359616c75818e9ba9aa9f92867a6d6054473a2d2114070000000000000000000000131f2c3946525f6c7986868686868686868681756c61554b40342b1e150c13191e24292c2d323638393836323c4956626f7c86868686868686796c605346392d20130000000000000000000007111a242d363f474f5860686d747d848c929898928e8a8582807d7b7b7a797a7b7b7d8082858a8e929898928c847d746d675f584f473f362d241a11070000000000000000000000000000000000000007111a242d363f474f5860686d747d848c929898928e8a8582807d7b7b7a797a7b7b7d8082858a8e929898928c847d746d675f584f473f362d241a1107000000000000000000000000000000000000000000010d18242f3a45515d676e7c8592979fa39f96918c89888788898d91979fa49d9691847b6e615a504532291f140800000000000000000000000000000000000000000000000009121b252d363f474f565e616b70787d82878b909299989a9c9d9e9f9f9f9e9e9d9c9b999696918d89857f7a736d676059504a42382f261e140a00000000000000000000000000000006111b262f383f44515961696e757d83898f939a9c9fa2aaa7a8aaa9a7a7a7a7a7a9a9a8a6a9a29e9b99928e88827c746d676059504840372e251c110800000000000000000000000000000000000000000002080d14191e20252a2d2e31333537383839393938373634312e2d2a251f1c181211171c1f252a2d2e313436373839393938373533302d2c29241d1c160f0a04000000000000000000000000000000000000000006131f2c3946525f6c7985929facada093877a6d6054473a2d211919191919191a191e2022272b31373e454d565e686f7c87929fa8b1a79e9184786d6053463b31261a0e0000000000000000000000000000000000000004101d2935404b55626f7b88949faba3998b7e726557636f7c8996a0aca2988b7f7265594f4332281e13080000000000000000000000000000000000000713202c3945525d6876838f9ca9b3ab9e9184796d60554b4035292219100903000000000000000000000000040c151e28323d47535d65686965625f585653514b433a32281e1308000000000000080f151a1d1f2020202a3744515d6a7784909d9f9f9c8f8376695c504336292020201514120e09030000000000000000000000121e2b3845515e6b7884919eabafa396897c706356493d3023160a00000000000000000000000000000000000000000000000b1824313e4b5764717e8a97a4b1aa9d9184776a5e5144372b1e1100000000000000000000000000010d1924303a4854606b7783909daaac9f92857a6d6054473c313b4754606a7783909dabac9f92867a6d6054473d3221160c0100000000000000000000000000030f1b27323c464e545559575f616b707e8a939eaaa3988e8174675d5145392c2013060000000000000000000000121f2b3844515d6974797979797979797979756f65594f433a342e261e191e252a3035393a3f43454645433f3a4754606a6f79797979797979766c5f5346392d2013000000000000000000000009121b242d353e464e565d606b70797f858c91969a97928f8d8a888787868787888a8c8f92979a96918c857f79706b605d554e463d352d241b120900000000000000000000000000000000000000000009121b242d353e464e565d606b70797f858c91969a97928f8d8a888787868787888a8c8f92979a96918c857f79706b605d554e463d352d241b1209000000000000000000000000000000000000000000000007131d2935404b555f6a6f7d858f949c9fa09e999695949596999ea19f9b938e847b6e695e52483e3320170d020000000000000000000000000000000000000000000000000009131b242d353d444c525960656c70767b7f8386898b8d8f9091929292929190908e8c8a8784807c79726d67605d554f443f382f261d140c02000000000000000000000000000000000a141d262d3340474f575e616b70777d82878b8f9298989a9b9d9e9e9f9f9f9e9d9d9b999797928e8a86817c766f6a605d554f473e362e251c130a00000000000000000000000000000000000000000000000002080e1114191e20212426282a2b2b2c2c2c2c2a29272421201e1914100c07060b0f13191d20212427292b2c2c2c2c2c2a29262320201d1813100b050000000000000000000000000000000000000000000006131f2c3946525f6c7985929facada093877a6d6054473a2d2525252525262627252a2d2d33373c434750575f686e7a849199a3afaa9f958b7e71665c504438291f140900000000000000000000000000000000000000000c18242f3947535f6a7683909ca9ab9d908376695f6774818e9aa8ac9f92867a6d6054473d3221160c0200000000000000000000000000000000000004111d2935414c5664717e8a97a1adaca0968b7e71675d51453e342b221a140e09060400000101000205060c10161e27303a444f59656f7576726e6a6763605c554c443a3025190d010000000009121920262a2c2c2d2d2d3744515d6a778490939393938f8376695c5043362d2d2d2d22211e1a140e0600000000000000000000121f2c3845525f6b7885929eabafa296897c6f6356493c3023160900000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0aa9e9184776b5e5144382b1e11000000000000000000000000000008131e2c38434f5965727f8b98a2aea2988b7e7165574d4237404b55626f7c8895a0aca79b8e8174685d5245392c201304000000000000000000000000000006131f2b37434e5860626567696e747d86929fa5a49f92867b6e61554c4135291d11040000000000000000000000101c2935414d5862696c6c6c6c6c6c6c6c6c68655d535246443f383026252a30363a4145474b4f525352504c47454e5860626c6c6c6c6c6c6c6c645a4f43372b1e1200000000000000000000000009121b232c343c434c525961676d737a7f84898e91979899979594939393949597999897918e89847f7a736d676159514c433c342c231b1209000000000000000000000000000000000000000000000009121b232c343c434c525961676d737a7f84898e91979899979594939393949597999897918e89847f7a736d676159514c433c342c231b1209000000000000000000000000000000000000000000000000010c18242f39434e58606b6f7b828a8f94979a9d9e9e9f9f9e9d9a99928f89817a6e695e574d42362c220e0500000000000000000000000000000000000000000000000000000109121b232b323a41464f535b6063696e7276797c7f8182848585868685848483817f7d7b7773706d66605d55514b433d332d261d140b020000000000000000000000000000000000020b141b2227353e454d525960636b70757b7e8285888b8d8f9091929292929191908e8c8a8885817e7a746f6a626058514b433d352d241c130a0100000000000000000000000000000000000000000000000000000205090e11141417191c1d1e1f1f201f1f1e1c1a171414110d08040000000003080d111314171a1c1e1f1f201f1f1d1c1a171413110d070100000000000000000000000000000000000000000000000006131f2c3946525f6c7985929facada093877a6d6054473a32323232323232333430363a3b3f44464e535a61696e7a839096a1abaea3989083786c60544a3f34281c1003000000000000000000000000000000000000000007121d2b37434e5864717e8a97a1ab9f95887b6e616d7985929faba79b8e8174685d5245392c20130400000000000000000000000000000000000000010d19242f3a4653606d7985929ea9b2a89e9184796d605a50463d342a251f1a1313100c070e0e080e1114171c1f283039424c56606b7581837f7b7774706d675e564c4135291d110500000008121b242b313638393939393844515d6a77838686868686868276695c504337393939392e2d2b261f180f06000000000000000000121f2b3845525e6b7884919eabafa296897c6f6356493c3023160900000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4b0aa9d9184776a5e5144372b1e110000000000000000000000000000020f1b27323d4754606d7a86929facaa9c908376695f53473845515c6774808d9aa7aca095897c6f63564c4135291d110400000000000000000000000000000815222e3b4754606a6f7274777b81879298a2a39f928c7f72695f53433a2f24190d0100000000000000000000000d1925303b4650585d5f60606060606060605b5e60605f53504a42382e30363a41464c5254585c5e5f5f5c5853514b4e5456606060606060605f5a52493e33271b0f0000000000000000000000000009111a222b313a41454f555d60686d72787d8185888b8d8f919292939292918f8d8b8885817d78726d68605d554f45413a312a221a11090000000000000000000000000000000000000000000000000009111a222b313a41454f555d60686d72787d8185888b8d8f919292939292918f8d8b8885817d78726d68605d554f45413a312a221a1109000000000000000000000000000000000000000000000000000007121d27313c464f5960696e777d82888b8e909192929291908d8b86827d746d685e574d453b30241a100000000000000000000000000000000000000000000000000000000000091019202830363d41495053575e6165676d6f7274757778787979787877767472706e696763605c54514c45403a3128221c140b0200000000000000000000000000000000000000020a1117232c333b42464f54596063696e7276797c7e808283848585868585848382807d7b7975716d68625f58544e45403a312b231b120a01000000000000000000000000000000000000000000000000000000000000020507080b0d0f11111213131312110f0d0b080705010000000000000000010507070b0d10111213131312110f0d0a07060401000000000000000000000000000000000000000000000000000006131f2c3946525f6c7985929facada093877a6d6054473f3f3f3f3f3f3f3f404042424647495053585f626c717b839095a0a8afa59f92867c6f655b5042382e23170c000000000000000000000000000000000000000000010f1a26313c4653606d7985929eaca7998c7f7366717d8a98a2aca095897c6f63564c4135291d1104000000000000000000000000000000000000000008131f2c3845515c6773808c97a1adada1968d80746c61584e463e36302a26201f1c181b1a1b1b191e2023282c313a424a545d68707d898f8c8884807d796d685e5246392d2013070000040f19242d353d424546464646453d4f5b6771777979797979797670665a4e3b44464646463b3a37312a21180e030000000000000000111e2b3844515e6b7784919eaab0a396897d7063564a3d3023170a00000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a99d9083766a5d5043372a1d100000000000000000000000000000000a16202c3945515d6774818e9aa7ab9f94887b6e62544a3f4653606d7985929fabaa9d9084776b6054443a3024190d0100000000000000000000000000000916222f3c4955626f7c7f8084888e9299a29f99928c80746d63574d4231281e130800000000000000000000000008141f2a343e464d51525353535353535761686b6c6c6c605c544a3f353a41464c52565d6065696b6c6b6965605c554e474953535353535353534f4940372c21160a00000000000000000000000000000810191f282f353e434b51565d60666c7074787b7e80828485858685858482807e7b7874706c66605d56514b433e352f281f1910080000000000000000000000000000000000000000000000000000000810191f282f353e434b51565d60666c7074787b7e80828485858685858482807e7b7874706c66605d56514b433e352f281f191008000000000000000000000000000000000000000000000000000000010b151f2a343d474f575e656c70767b7e8183848586858483817e7b756f6b605d564d453b33291f1208000000000000000000000000000000000000000000000000000000000000070e161e252a2f383f44464d5354555c60636567696a6b6c6c6c6b6b6a69686663615e575653504a45413a352f281f17110a020000000000000000000000000000000000000000000006111a202930363d44484f54565e6165666d6f7174757778787979787877767573716f6d6664605d56534e47433d352f281f1911090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3946525f6c7985929facada093877a6d60544c4c4c4c4c4c4c4c4c4c4d4e4d5254535b60636a6e757e859195a0a7afa59d938b7f726a5f53493f30261c1106000000000000000000000000000000000000000000000a151f2c3845515c6773808d9aa4aa9d9184776a75828e9baaaa9d9084776b6054443a3024190d01000000000000000000000000000000000000000004101c2834404b55606d7a85929ea7b1a89d928a7e706a60585046423b36312d2c282327272728252a2d2e34383e434c545c666d7a84919c9896918d89857a6d6154473a2e21140700000915202b353f474e5253535353514948555f676a6c6c6c6c6c6c69665e54474851535353534846423c332a1f14090000000000000000111e2a3744515d6a7784909daab0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000c1825323f4b5865727e8b98a5b1a99c8f8276695c504336291d1000000000000000000000000000000004111d2935414c55626f7c88959faba6998d8073665c50444d5764717e8a97a2ada2988b7f7265594f4332281e13080000000000000000000000000000000e1a2734414d5a6774808c8d90959b9fa098928e877f746e645b51453c311f160c01000000000000000000000000020d18222c343b4144464646464646505c6873787979796d665c504441454c52565e61686d727678797876726d675f584e464646464646464646433e372e251b1005000000000000000000000000000000070d161e2429313a40454c52545b6063656c6e717476777879797978777674716e6c6563605b54524c4540393129241e160d070000000000000000000000000000000000000000000000000000000000070d161e2429313a40454c52545b6063656c6e717476777879797978777674716e6c6563605b54524c4540393129241e160d070000000000000000000000000000000000000000000000000000000000030d18222b353d454d535b6063696e71747677787978777674716e69636059524c433b332921170d0000000000000000000000000000000000000000000000000000000000000000050c13191d262d33373b4246484b515356585a5c5d5e5f5f5f5f5e5d5d5b595754534d4946443f38352f29241d160d0600000000000000000000000000000000000000000000000000080e171f252a33383d44484d5254545c60626567686a6b6b6c6c6c6b6a6a68666462605c5454524c47433c383229241d160d07000000000000000000000000000000000000000004080a0b1313131313131311110e0b060100000000000000000004090e11121313131313131313070705010000000000000000000000060b0e1011131313131313130a0a0804000000000000000000000000000000000000000006131f2c3946525f6c7985929facada093877a6d6058585858585858585859595a5b565e6164656c70757c828a9297a0a8afa59e938e81746d62584e41382d1e150a000000000000000000000000000000000000000000000004101c2834404b55616e7b87939faca095887b6f7985929faca3988b7f7265594f4332281e1308000000000000000000000000000000000000000000000c18232e3945525d68727f8c959faaaea49f92867c6f6a625a524d46423c3a38342e343434353036393b3f444650565d666d78828f96a0a8a09e988d8074685e5246392d20130700000e1a26313d4751595e5f6060605e56544f555b5d6060606060605c5a544d53555d6060606055534d453c31261a0e0200000000000000101d2a3643505d697683909ca9b1a5988b7e7265584b3f3225180700000000000000000000000000000000000000000000000d1a2733404d5a6673808d99a6b3a89b8f8275685c4f4235291c0f000000000000000000000000000000010d19242f3a47545f6a7783909da9ab9e9184796d605346525e6976828f9ca9ac9f92867a6d6054473d3221160c020000000000000000000000000000000e1a2734414d5a6774808d9a9da0a7a0969186817b726d645c53493f332a1f0d04000000000000000000000000000006101a222a303538393939393945525e6b7885868686786d60534a4c51565e61686d737a7f82858685837f796f6a5f584e42382e393939393937332c251c13090000000000000000000000000000000000040c13191f282f353a41454a5053535b60626567696a6b6c6c6c6b6a69676562605b5353504a45413a352f281f19130c0400000000000000000000000000000000000000000000000000000000000000040c13191f282f353a41454a5053535b60626567696a6b6c6c6c6b6a69676562605b5353504a45413a352f281f19130c0400000000000000000000000000000000000000000000000000000000000000060f19232b333b41495053575f6164676a6b6b6c6c6b6a6764615e57544f45413a312921170f0500000000000000000000000000000000000000000000000000000000000000000002080b141b22272b31363a3b404547494c4e4f5152525353525151504e4c4a4846423d3a38342e29241e18130c04000000000000000000000000000000000000000000000000000000050d141a21272c33383b4246474a505355585a5c5d5e5f5f5f5f5e5e5d5b59575553504a4745413a37312b272018130c0400000000000000000000000000000000000000050c11141717202020202020201e1d1b17120c0400000000000000080f151a1d1f20202020202020201413110d080200000000000000040b11171a1d1e20202020202020171614100b0500000000000000000000000000000000000006131f2c3946525f6c7985929facada093877a6d656565656565656565656566676869696e7074787d81878f939ea1a9aca49f938e81786d605b51463c2f261b0c030000000000000000000000000000000000000000000000000c18232e3946535f6976828f9ca9a7998c7f737d8a98a2ac9f92867a6d6054473d3221160c020000000000000000000000000000000000000000000007121d2935414c56606d78839098a2acaea29892857c716c615e57534d494645404141414141424146474a50535a61686d78818e949fa8b0a69f92857a6d61564c4135291d11050000111d2a36424e59636a6c6c6c6c6b636059514a51535353535353504e50575f626a6c6c6c6c6c5f574d42372b1e1205000000000000000f1b2835424e5b6875818e9ba8b3a6998c807366594d402f24180c00000000000000000000000000000000000000000000020e1b2835414e5b6874818e9ba7b4a79a8e8174675b4e4134281b0e0000000000000000000000000000000008131e2b37434e5865717e8b97a2ada1968a7d7063564c54616e7b87939faca79b8e8174685d5245392c201304000000000000000000000000000000000e1a2734414d5a6774808d9aa5a9aa9e91847d78716c605d554b43392f24180c050000000000000000000000000000000810181f25292b2c2d2d2d3643505d6976839098897c6f635a56555d60686d737a80858b8f9192928f8b847c6f6a5f544a3f34282d2d2d2d2b27211b130a0100000000000000000000000000000000000001080d161d24292f35383f444649505355585a5c5e5f5f605f5f5e5c5a585553504946443f38352f29241d160d080100000000000000000000000000000000000000000000000000000000000000000001080d161d24292f35383f444649505355585a5c5e5f5f605f5f5e5c5a585553504946443f38352f29241d160d080100000000000000000000000000000000000000000000000000000000000000000007111920292f383f44464d5355585b5d5e5f5f5f5e5d5a5854524d48443d352f281f170f05000000000000000000000000000000000000000000000000000000000000000000000000020a11171b1f252a2d2f34383a3c3f4142444545464645454443413f3d3b3a36312d2c28231c19130d0701000000000000000000000000000000000000000000000000000000000002090e161c21272c30363a3b3f4446494b4d4f5051525253525251504f4d4a4846443f3a39352f2b26201b160d0701000000000000000000000000000000000000000810171c2123242d2d2d2d2d2d2d2b2a27231d160e06000000000009121920262a2c2c2d2d2d2d2d2d2d21201d19130c050000000000050e161d22272a2a2d2d2d2d2d2d2d2423201c171008000000000000000000000000000000000006131f2c3946525f6c7985929facada093877a72727272727272727272727273737576787a7d8184898e93999ea6ada8a19a938c81786d665c50493f342a1d140a0000000000000000000000000000000000000000000000000007121d2b37424d5764717d8a97a1aa9d908377818e9baaa79b8e8174685d5245392c2013040000000000000000000000000000000000000000000000000d19242f3a44505c666e7b86929aa4afaaa29792867e756e69615f575653514b4e4e4d4e4e4f4c5254545c60646c717a828e939ea6b0a89f948c7f72685e52443a3025190d010000121f2c3845525e6a757979797978706b605c544d4546464646434b515a61696e777979797976695f53463a2d211407000000000000000d1a2734404d5a6773808d9aa6b3a89b8e817568554b4035291d100400000000000000000000000000000000000000000005121e2b37424d57697683909ca9b2a5988c7f7265594c3f3226190c00000000000000000000000000000000010f1b26323c4753606d7985929faba99b8e8275685d525966737f8c99a4aca095897c6f63564c4135291d1104000000000000000000000000000000000e1a2734414d5a6774808d95999c9fa096918a847e756d675d554b40352921160b00000000000000000000000000000000060d14191c1f1f20202834414e5b6774818e9a8e81756c656364676d737a80868d92989c9e9f9e9c9691857c6f665c5044382b1f2020201e1b16100901000000000000000000000000000000000000000000040c13181e24292d3338393f4446484b4d4f515252535252514f4d4b4846443f3938332d29241e18120c0400000000000000000000000000000000000000000000000000000000000000000000000000040c13181e24292d3338393f4446484b4d4f515252535252514f4d4b4846443f3938332d29241e18120c04000000000000000000000000000000000000000000000000000000000000000000000000070e171d262d33373b4246484b4e505152535251504e4b4746423b383229241e160d05000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f141a1e2123292c2d303234363738393939383837363533302e2d2a25201f1c17110d0801000000000000000000000000000000000000000000000000000000000000000000050b10161c1f252a2d2e34383a3c3e414244454546464545444342403e3c3a38342e2c29241e1b150f0a04000000000000000000000000000000000000000008121a22282d3031393939393939393837332e2820180e0400000008121b242b31363839393939393939392e2d2a251e160e05000000040e1720272e3336373939393939393931302d28221a11080000000000000000000000000000000006131f2c3946525f6c7985929facb2a5988c7f7f7f7f7f7f7f7f7f7f7f7f7f7f80818385878a8d91969b9fa4ababa39f9691887f776d665c544a3f372d22180b0200000000000000000000000000000000000000000000000000000e1a26313c4653606d7984919eaba095887b85929faba095897c6f63564c4135291d110400000000000000000000000000000000000000000000000008131e28343f4a545f69717e88939fa3afa9a298928b827b746e696662605c545b5a5a5a5b5c565e6164666d71767e848f949ea5afaaa1968f82786c60564c4132281e130800000013202c3946535f6c7987868686847d736d665f575146413e454d555c606c717b83868686867b6e6155483b2e221508000000000000000c1825323f4b5865727e8b98abb5aa9d908477675d5145392c1f13060000000000000000000000000000000000000000000714212d3a46535f697885929fabb4aa968a7d7063574a3d3024170a00000000000000000000000000000000000a151f2c3945515d6774808d9aa6ac9f92867a6d6154606b7784919eabaa9d9084776b6054443a3024190d01000000000000000000000000000000000e1a2734414d5a67748087898c90949da09e96918a81796d675d51453d33271c10030000000000000000000000000000000002080d101213131825323f4b5865727e8b98938b7f75717071747a80858d92989fa2aaa4a3a5a8a1979083786d6053463a2f24190d13120f0a0500000000000000000000000000000000000000000000000001070d13191c22282b2d3337393b3e41434445464646454443413e3b3937332d2b28221c19130d070100000000000000000000000000000000000000000000000000000000000000000000000000000001070d13191c22282b2d3337393b3e41434445464646454443413e3b3937332d2b28221c19130d07010000000000000000000000000000000000000000000000000000000000000000000000000000050b141b22272b31363a3b3e4143444546454443413e3b3a36302c272119130c0400000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e1214181c1f20232527292a2b2c2c2c2c2b2a2a28262421211e1a1312100c060000000000000000000000000000000000000000000000000000000000000000000000000000050b1014191e2023282c2d2f3234353738383939393837373533312f2d2b2823201d19130f0a0400000000000000000000000000000000000000000005101a242c33393c3e4646464646464644433f39322a20160c0100040f19242d353d42454646464646464646463936302820160c0200000b16202932393f4344464646464646463d3c39332c231a100500000000000000000000000000000006131f2c3946525f6c7985929facb8a79c918c8b8b8b8b8b8b8b8b8b8b8b8c8c8d8e909297979a9ea1a8acaba39f99928d847d736c655c544a42382e241b100600000000000000000000000000000000000000000000000000000009141f2c3844505c6673808c99a4a79c8f828f97a2aa9d9084776b6054443a3024190d01000000000000000000000000000000000000000000000000010b17232e38424d57616c727f8c919fa3abaaa39f938f86817b76726f6d66696867676768686a686e7174797d838a91969fa6afa9a19891847a6d665b50443a3020160c020000000b1825323e4b5865717e8b9296918780786e69625b524c4550575f676d747e869095948d8074695f53463a2d211407000000000000000916232f3c4956626f7c8999a3afac9f92867a6d6053473a2d22170b0000000000000000000000000000000000000000000815222e3b4855616e7b8898a2aeaea298887b6e6155483b2e221508000000000000000000000000000000000004101d2935404b55626f7b88949faba3998b7e726557636f7c8996a0aca2988b7f7265594f4332281e130800000000000000000000000000000000000713202d3a4653606d787b7c7f838990959fa09d938e82796d60594f44382c1f1409000000000000000000000000000000000000000305060815222f3b4855626e7b88959b918b827e7d7e81858c92989fa2a29f9a9796989c9f9f958a7d7164554c4135291d110405020000000000000000000000000000000000000000000000000000000001080d11171c1f22272b2d2f323436373839393938373634322f2d2b27221f1c17110d08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080d11171c1f22272b2d2f323436373839393938373634322f2d2b27221f1c17110d08010000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171b1f262a2d2e31343738383939383734312e2d2a251f1b160d08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205070c10131416191b1c1e1f1f20201f1e1e1d1b19171514120e09060300000000000000000000000000000000000000000000000000000000000000000000000000000000000002090e1114171c1f20222527292a2b2c2c2c2c2b2b2a28262422201f1c1713110d080100000000000000000000000000000000000000000000000c17222c363e45494a53535353535353514f4b443c32281d1206000915202b353f474e5253535353535353535346413a32281e13080006111d27323b444a4f51535353535353534a49443e362c22170b00000000000000000000000000000006131f2c3946525f6c7985929facb8ada39c98989898989898989898989898999a9b9c9ea1a9a7aba9a8a19e99928e87817a706b605b534a423930261c12090000000000000000000000000000000000000000000000000000000003101c28343f4a54616e7b87939fac9e948f949ea9a3988b7f7265594f4332281e1308000000000000000000000000000000000000000000000000000006111c26303c45505a636d737f8b9299a1a8aea59e98928d87837f7c79777674747474747577787a7d81848a90949ea1a9afa8a19792867c6f685e544a3f32281e0e04000000000b1724313d4a56626d73808c9399938d837b726d615e56515a61696e79818a9298958f82786d60574d42372b1e1205000000000000000714202d3a4753606d7a86929facafa399897d7063544a3f33281c0f030000000000000000000000000000000000000004111d2935414c5665727e8b98aab3ab9f9285786c605346392d2013060000000000000000000000000000000000000c18242f3947535f6a7683909ca9ab9d908376695f6774818e9aa8ac9f92867a6d6054473d3221160c02000000000000000000000000000000000006121f2b3844505c666d6e6f72767c838f949fa59e948e81746b6054483b31251a0e020000000000000000000000000000000000000000000814212e3a47535f6a7784919d9b948f8b898a8d92989fa2a29f98928d8a898b90949c9c8f8276675d5145392c201306000000000000000000000000000000000000000000000000000000000000000000060b0f12171b1f20222527292b2c2c2d2c2c2b29272522201f1b17120f0b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f12171b1f20222527292b2c2c2d2c2c2b29272522201f1b17120f0b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f141a1e212225282a2b2c2c2c2b2a272521201e1a140f0b04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607090c0e0f1112121313121211100e0c0a0807050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205060c10121316181a1c1d1e1f1f201f1f1e1d1c1a17151312100b06040100000000000000000000000000000000000000000000000004111c28333e48505557606060606060605e5c564e44392e23170b010e1a26313d4751595e5f606060606060605f524c443a3025190d010b17222e39444d555b5d60606060606060575550483e33281c1004000000000000000000000000000006131f2c3946525f6c7985929facacacada7a5a5a5a5a5a5a5a5a5a5a5a5a5a6a6a8a9a8a6aba39f9c9996918c87817b746d6761595049413930271e140a0000000000000000000000000000000000000000000000000000000000000c17232e3846535e6975828f9ca8a69e9c9ea6ac9f92867a6d6054473d3221160c020000000000000000000000000000000000000000000000000000000a141e2a333e48515b636d737f8791969fa4acaaa29f9a93908c898684828181808181828385878a8e91979c9fa6adaca59d9691857c6f6a60564c42382d20160c00000000000915212e3a45505a636e74818e939f9590867e756d68605c606c717b838e939f969083796d665c50453c31261a0e020000000000000006131f2c3945515d677783909daab5ab9a8d8073665b5044382b1f140a000000000000000000000000000000000000010c13202c3945525d6875828f9ba8b5a89b8f8275665b5044382b1f120600000000000000000000000000000000000007121d2b37434e5864717e8a97a1ab9f95887b6e616d7985929faba79b8e8174685d5245392c20130400000000000000000000000000000000000003101c28343f4a545c606162666b6f79828f97a1a69d93897d7063574d42362a1e120500000000000000000000000000000000000000000006121e2b37424e5765727e8b95a09e9c9896979a9fa2a39f98928c85817e7d7e838c929f92867a6d6054473a2d211407000000000000000000000000000000000000000000000000000000000000000000000003060b0f121315181a1c1e1f1f201f1f1e1c1a181513120f0b0603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003060b0f121315181a1c1e1f1f201f1f1e1c1a181513120f0b0603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e121415181b1d1e1f201f1e1d1b181414110e090200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030607090b0e0f1112121313121211100f0d0b09070603000000000000000000000000000000000000000000000000000000000814212d3945505a61646c6c6c6c6c6c6c6b6760564b3f33271b0e04111d2a36424e59636a6c6c6c6c6c6c6c6c6c5e564c41362a1d11050e1a27333f4a555f676a6c6c6c6c6c6c6c64615a5044392d201408000000000000000000000000000006131f2c3946525f6c7985929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa39f9f9e9d9c9b99979992908c89847f7b746e69605d554f443f382f271e150c0200000000000000000000000000000000000000000000000000000000000006111c2a36424d5763707d8a96a1acaaa8aab0a79b8e8174685d5245392c20130400000000000000000000000000000000000000000000000000000000020c18212c363f49515b636d727d848e939a9fa6acaca49f9d999992918f8e8d8d8d8e8f909298979a9ea1a9abaca7a09d938e847c6f6a60584e443a2f261c0e05000000000005111d29343f48525b606d78818f959f98928b827a706b676d747e8690959d9891847b6e675d544a3f332a1f1409000000000000000004101d2935404b556673808d99a9b3ab9e9184786c6053463d2f261c1106000000000000000000000000000000000008131e28343f4a54606d7a86929facb1a7988b7e7265544a3f33281c0f03000000000000000000000000000000000000010f1a26313c4653606d7985929eaca7998c7f7366717d8a98a2aca095897c6f63564c4135291d1104000000000000000000000000000000000000000b17232e38424a505354565960676d7a85919eaba59c8f8276695e53463a2d211407000000000000000000000000000000000000000000020e1a26313c4653606c78839097a1a8a4a3a4aaa29f98928d86807a74717072767f8c94998a7d7063574a3d3024170a0000000000000000000000000000000000000000000000000000000000000000000000000000030506080b0e1011121313131211100e0b080605030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030506080b0e1011121313131211100e0b0806050300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080b0e101112131211100e0b0807050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040613131313131313130d0c0a070200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303c4955616c71797979797979797772675c4f43372a1d1106121f2c3845525e6a75797979797979797976685e5246392d201307101d2a36434f5b67717779797979797979706c6155493c3023160a000000000000000000000000000006131f2c3946525f6c798592939393939393939393939393939393939398929291918f8e8d8b8886837f7c78736e69615f57514c433e332d261d150c0300000000000000000000000000000000000000000000000000000000000000000e1a25313b4653606c7884919e9f9f9f9f9fa095897c6f63564c4135291d11040000000000000000000000000000000000000000000000000000000000060f1a242d374049515b626b6f7a818790949b9fa3ababa9aba39f9d9c9b9a9a9a9b9b9d9fa2aaa7ababaca49f9c959189817a6e6a60584e463d32281d140a000000000000010c18222d364044505c666d79829095a09f938f857d746f79818a9298a09992867c6f695e554b42382e21180e030000000000000000000c18242f3c4956636f7c8997a1adada196897d7063584e42382d22170f06000000000000000000000000000000081119242f3844505c66727e8b98a3aeaca095877b6e6154483b2d22170b00000000000000000000000000000000000000000a151f2c3845515c6773808d9aa4aa9d9184776a75828e9baaaa9d9084776b6054443a3024190d010000000000000000000000000000000000000006111c2630383f444647494f555e68727f8c99a3ab9f94877b6e6154483b2e2115080000000000000000000000000000000000000000000009151f2b3844505b666f7c8591969c9f9f9e9c98928d86807a736d686463656d76828f998d8073665a4d4033271a0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d111320202020202020201a1917130e0700000000000000000000000000000000000000000000000000000000000000000000000000000000000002080c101212131313131313131306040000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717e8686868686868684776b5e5144382b1e110613202c3946535f6c7987868686868686867a6d6154473a2e211407111e2a3744515d6a7783868686868686867e7064574a3d3124170a000000000000000000000000000006131f2c3946525f6c798686868686868686868686868686868686868686858585848381807e7c7976736f6c65615e57534d45413a3127221b140b0300000000000000000000000000000000000000000000000000000000000000000009141f2b3844505b66737f8c999393939393939084776b6054443a3024190d0100000000000000000000000000000000000000000000000000000000000008121c252e374048515960686d757c83898e92999b9fa2a9a6a8a9a9a7a7a7a7a7a8aaa9a8a6aaa29f9c9a938f89847d746d685f584e463d342b20160b020000000000000006111b2428343f4a545d676d7a839196a19e979188807b838e929fa29f93877d706a5f574d433a30261c0f06000000000000000000000713202d3a4653606d7985919eabb2a89c8f82766a60544a3f3328211810080200000000000000000000000309111a232935414c56606d7884919eaab3a99d908377695e53463a2d1c1106000000000000000000000000000000000000000004101c2834404b55616e7b87939faca095887b6f7985929faca3988b7f7265594f4332281e13080000000000000000000000000000000000000000000a141e262e34383a3b3d434c56606d7a86929faca6978a7e7164574b3e3124180b00000000000000000000000000000000000000000000030f1c28333f4a545f6a6f7c848c909292918f8b86807b746e68605d56565b64707d8a998f8275685c4f4235291c0f0200000000000000000000000000050a0d0f10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100f0d0a05000000000000000000000000000000000000000000000105090b0b131313131309090703000000000000000003070b0d0e1313131311100e0a0600000306080913131313100f0d09040004090e111213131313130a090704000000000000000000000000000000000003080b0d0e13131313070604000000000000000005090d0f1013131312110f0c07010000000000000000000000000000000000000000000000000000000000000000040c13181d202d2d2d2d2d2d2d2d2626231f19120a01000000000000000000000000000000000000000000000000000000000000000000000000000000060d13181c1e1f202020202020202013100c07010000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a93939393939184776b5e5144382b1e110613202c3946535f6c7986929393939393877a6d6154473a2e211407111e2a3744515d6a77849093939393938a7d7064574a3d3124170a000000000000000000000000000005121f2b3844515d6974797979797979797979797979797979797979797979787877767573716f6d666662605b53534d47423c352f281f17110a0200000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a54616e7a8786868686868686867f7265594f4332281e130800000000000000000000000000000000000000000000000000000000000000000a131c252e363f474f565d606a6f767c81868b8e929797999b9c9e9e9f9f9f9e9e9d9d9b999798928f8b87827d78706b605d564e463c342b22190e05000000000000000000091217232e38424b555d686e7b849197a2a19a938d8890959da59d928b7f726b61584e453b31281e140a000000000000000000000006121f2b3844505c6673808d99a4afaa9f94897c6f665b50443d332a2219140e09060400000100000406090e151a232b353d45525d68717e8b96a0acada1978b7e7165574d42362a1e0a000000000000000000000000000000000000000000000c18232e3946535f6976828f9ca9a7998c7f737d8a98a2ac9f92867a6d6054473d3221160c02000000000000000000000000000000000000000000020c141c23282b2d2e313a45525d687783909daaa6998d8073665a4d4033271a0d00000000000000000000000000000000000000000000000b17222d38424e585f6a6f797f83858684827f7a736e69615e56524c4a54606d7987868683776a5e5144372b1e11040000000000000000000000030a1016191c1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1c1916100a0300000000000000000000000000000000000000060c1115171820202020201615130f0a040000000001080e13171a1a202020201e1d1a16110b0a0f131516202020201c1b1915100a0f151a1d1f2020202020171614100b050000000000000000000000000001080e14171a1b202020201413100c0701000000020a1015191c1c2020201f1e1b18130c05000000000000000000000000000000000000000000000000000000000000040d161d24292c393939393939393933322f2a241c130a00000000000000000000000000000000000000000000000000000000000000000000000000000710181f24282b2c2d2d2d2d2d2d2d2d1f1c18120b0300000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a979f9f9f9e9184776b5e5144382b1e110613202c3946535f6c7986929f9f9f9f94877a6d6154473a2e211407111e2a3744515d6a7784909d9f9f9f978a7d7064574a3d3124170a000000000000000000000000000003101c2935414d5862696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6a6968666462605c545653504946423b373129241e160d06000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3846525e686e797979797979797979726d6256473d3220160c020000000000000000000000000000000000000000000000000000000000000000010a131c242d353d444c525860626a6f757a7e8285888a8d8e909192929292929191908e8c8a8985827f7b75706c656059524c433c332b22191007000000000000000000000006111c263039434c565e696f7c859299a3a49f9a959da0a79e948d80746d62594f463c33291f160c02000000000000000000000003101c28343f4a54616e7b87939fabb0a69d9083786c60594f453c342a251f1a1312100c070e070c1013131a1f262b353d47505a606d7a84919ea8b2a99e9285796d6053473b31251a0e0000000000000000000000000000000000000000000007121d2b37424d5764717d8a97a1aa9d908377818e9baaa79b8e8174685d5245392c2013040000000000000000000000000000000000000000000000020a11171c1f20212935414c566774818e9aa7a79a8d8174675a4e4134271b0e010000000000000000000000000000000000000000000006111c262f3c464e585f676d727678797876726d68615e56524c454145515d67757979797771675b4f43362a1d100400000000000000000000040d151c21262929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292926211c150d0400000000000000000000000000000000000911181d2124252d2d2d2d2d23221f1b160f070000020b12191f2326272d2d2d2d2a2927221c15151b1f22232d2d2d2d292825211b141920262a2c2c2d2d2d2d2423201c1610080000000000000000000000020b131a1f2426272d2d2d2c201f1d18120b0300040c141b212528292d2d2d2b2a28231e170f0600000000000000000000000000000000000000000000000000000000010c161f282f35394646464646464646403f3b352e261c120700000000000000000000000000000000000000000000000000000000000000000000000006101922293035383939393939393939392c29231d150d03000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4acaa9e9184776b5e5144382b1e110613202c3946535f6c7986929facaca094877a6d6154473a2e211407111e2a3744515d6a7784909daaaca3978a7d7064574a3d3124170a0000000000000000000000000000000d1925303b4650585d5f606060606060606060606060606060606060605f5f5e5e5c5b5a585553514b4946443f3836312b261f19130c04000000000000000000000000000000000000000000000000000000000000000000000000000006111c2a36414d565e616c6c6c6c6c6c6c6c6c65625b5146342b210e0400000000000000000000000000000000000000000000000000000000000000000000010a121b232b323a41454e54586062686d7175797b7e80818384858586858584848381807e7c7975726e6963605b534f45413a312a21191007000000000000000000000000000a141e27313a444d575f6a707d879299a49f9f9f9fa9a0958f82786d605b51473e342a21170d04000000000000000000000000000b17232e3846535e6975818e99a3aeab9f958b7f726b60574e463e36302a25201f1c181b1a1b181c1f20262b31373f474f59626c74818e97a1adada1978d8073675c514538291f140900000000000000000000000000000000000000000000000e1a26313c4653606d7984919eaba095887b85929faba095897c6f63564c4135291d110400000000000000000000000000000000000000000000000000060b10121319242f404d5a6673808d99a6a79b8e8174685b4e4135281b0e0200000000000000000000000000000000000000000000000a141d2a343c464e555d6065696c6c6b6965615e56524d46413b35414b555d6b6c6c6c6a675f564b3f33271b0e02000000000000000000030d161f262d3235363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363635322d261f160d0300000000000000000000000000000009121b22292e31323939393939302f2c2721191007010b141d242b303334393939393736332e271f20272b2e2f393939393635312c261e242b3136383939393939302f2c28211a1108000000000000000000010b141d242b303334393939392d2c29241d150d030c161e262d3235363939393837342f2921180f0000000000000000000000000000000000000000000000000000000007131d28313a404553535353535353534d4b4740382e24190e0200000000000000000000000000000000000000000000000000000000000000000000020d18222b343b414445464646464646464638342f271f150b010000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4b0aa9e9184776b5e5144382b1e110613202c3946535f6c7986929facada094877a6d6154473a2e211407111e2a3744515d6a7784909daab0a3978a7d7064574a3d3124170a00000000000000000000000000000008141f2a343e464d51525353535353535353535353535353535353535352525251504e4d4b494645403c3937332d2a251f1a150d0801000000000000000000000000000000000000000000000000000000000000000000000000000000000e1925303b444d52545f6060606060606060585651493f3422190f00000000000000000000000000000000000000000000000000000000000000000000000000091119202830353d43474e54565e6164656c6e717375767778797979787877767573716f6d6665615f57535049413d352f281f180f070000000000000000000000000000020c151f28323b454e58606b717e8793939393939393969083796d665c50493f352c22190f05000000000000000000000000000006111c2a36424d57616e7b86929fa8b1a79f92877d6f6a5f585046413b36312d2c282327272723282c2d31373c42475159606b717e8b939da9b1a79e92857a6d61554b4034291c1004000000000000000000000000000000000000000000000009141f2c3844505c6673808c99a4a79c8f828f97a2aa9d9084776b6054443a3024190d010000000000000000000000000000000000000000000000000000000306081926323f4c5965727f8c98a5a79b8e8174685b4e4135281b0e020000000000000000000000000000000000000000000000020b18222a343c434b5154595d5f5f5e5c5854524c46423b36302f3a434b515e6060605e5b564d44392e22170b000000000000000000000a151f2831383e424343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343423e3831281f150a000000000000000000000000000006111b242d343a3d3e46464646463c3b38322b23190f08121d262f363c3f414646464644423f3931292b32373b3c4646464643413d3830282d353d424546464646463d3c38332c231a1005000000000000000008131d262f363c4041464646463a39352f271f150b141e2830383e41434646464544403a332a210f050000000000000000000000000000000000000000000000000000010d18242f3a434b515f606060606060605957524a40352a1f13070000000000000000000000000000000000000000000000000000000000000000000008131f29343d464c5152535353535353535345403931271d12070000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4acaa9e9184776b5e5144382b1e110613202c3946535f6c7986929facaca094877a6d6154473a2e211407111e2a3744515d6a7784909daaaca3978a7d7064574a3d3124170a000000000000000000000000000000020d18222c343b41444646464646464646464646464646464646464646464545444342403e3c3a38342e2d2b27221b1a140e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000008141f29323b4146475353535353535353534c4a463f372d2310070000000000000000000000000000000000000000000000000000000000000000000000000000070e161e242932373d43484c5254535b6062646668696b6b6c6c6c6b6b6a6a68666462605c5455534d46443f382f29241e160d0600000000000000000000000000000000030d162029333c464f59616c727f8686868686868686847b6e675d544a3f372d231a1007000000000000000000000000000000000e1a25313b46535f6973808d96a0abaea39991857c6f6a615a524d46423c3a38342e3434342e34383a3c42474d535b626b707d86929fa5afaa9f958b7e71685e5243392f23180c00000000000000000000000000000000000000000000000003101c28343f4a54616e7b87939fac9e948f949ea9a3988b7f7265594f4332281e13080000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0e02000000000000000000000000000000000000000000000000061018222a313a4145474c50525352504c4746413a36302a2528313a414547535353514f4b443b32281d110600000000000000000005101c26313a42494e50505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050504e49423a31261c1005000000000000000000000000010c18222d363f454a4b53535353534948433d352b21160e19242f3840474c4d53535353514f4a433b31343d434749535353534f4e49423a30353f474e5253535353534a48443e352c21160b00000000000000030e1a242f3841474c4e535353534745403931271d121b26303a42494e4f53535352504c453c3321170d030000000000000000000000000000000000000000000000000004111d2935404b555d6c6c6c6c6c6c6c6c66635c52473b2f23170a000000000000000000000000000000000000000000000000000000000000000000000c1824303b464f575d5f606060606060605f514b43392f23180c0000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a979f9f9f9e9184776b5e5144382b1e110613202c3946535f6c7986929f9f9f9f94877a6d6154473a2e211407111e2a3744515d6a7784909d9f9f9f978a7d7064574a3d3124170a0000000000000000000000000000000006101a222a303538393939393939393939393939393939393939393939393837363533312f2d2c2823201f1b17110e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d1720293036393b4646464646464646463f3e3a342d251b1100000000000000000000000000000000000000000000000000000000000000000000000000000000040c131920272b32383a41464749505355575a5b5d5e5f5f5f5f5f5e5e5d5b59575653514a4846423b37332d261d19130c04000000000000000000000000000000000000040e17212a343d47505a626d727979797979797979786e695e554b42382e251b1108000000000000000000000000000000000009141f2a36424d57606d79849199a3afaba19791857c716c615e56534d494644404141414141404546494e53575f616d727d869298a3aeaba2989083776c60564c4131271d1207000000000000000000000000000000000000000000000000000c17232e3846535e6975828f9ca8a69e9c9ea6ac9f92867a6d6054473d3221160c020000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0e02000000000000000000000000000000000000000000000000000610181f282f35393a3f43454645433f3a3936302a251f191f282f35393a46464644433f39322920160b000000000000000000000a16212d38424c545a5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5a544c42382d21160a00000000000000000000000005111d29343f48505658606060606056544f473d32271b131f2b36404a52585a606060605d5b554d43393d464e5456606060605c5a544c42333d4751595e5f6060606057554f473e33281c100400000000000008141f2b36414a52585a6060605f5e514b43392f2418212d38424c545a5c6060605e5c574f4533291f1409000000000000000000000000000000000000000000000000000613202c3945515d677679797979797979736e63574b3f3226190c00000000000000000000000000000000000000000000000000000000000000000003101c2835414c5761696c6c6c6c6c6c6c6c6c5c554b4034291c100400000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a93939393939184776b5e5144382b1e110613202c3946535f6c7986929393939393877a6d6154473a2e211407111e2a3744515d6a77849093939393938a7d7064574a3d3124170a00000000000000000000000000000000000810181f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2c2b2b2928272522201f1c1813120f0b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e171f252a2d2e39393939393939393932312e29231b1309000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d151b21272c3035393a3f4446484b4d4e505152525352525151504e4d4b494644403b3a36312b27221b140b08010000000000000000000000000000000000000000050f18222b353e48515b62656c6c6c6c6c6c6c6c6b615e574d433a30261c1309000000000000000000000000000000000000030e1a26313b45515d676f7c87929fa4aea9a19791867e756e68615e575653514a4e4e4d4e4e4b515356575f62696e767f879298a2aaafa39992857c6e655b50443a301f150b010000000000000000000000000000000000000000000000000006111c2a36424d5763707d8a96a1acaaa8aab0a79b8e8174685d5245392c201304000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0e020000000000000000000000000000000000000000000000000000060d161d24292c2d323639393836322e2d2a251e19140d161d24292c2d3939393736332e2820170e04000000000000000000000d1926323e49545e666969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969665e54493e3226190d0000000000000000000000000915212e3a45505a62656c6c6c6c6c6360594f43382c1f1723303c47525c64676c6c6c6c6a675f554a3f434e5860626c6c6c6c69655e54453b424e59636a6c6c6c6c6c6361594f44382c2014070000000000000b1724303c47525c64676c6c6c6c6a5d554b4035291d25323e49545e66696c6c6c6b686157453b31251a0e020000000000000000000000000000000000000000000000000714202d3a4753606d7986868686868686807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000005121e2b3844515d6973787979797979797976675c5145382c1f130600000000000000000000000000000000000000000000000000000000000b1724313e4a5764717e8686868686868684776b5e5144382b1e110613202c3946535f6c7987868686868686867a6d6154473a2e211407111e2a3744515d6a7783868686868686867e7064574a3d3124170a000000000000000000000000000000000000060d14191c1f1f202020202020202020202020202020202020201f1f1f1e1d1b1a18161313100c070503000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d14191e20212c2d2d2d2d2d2d2d2d2524221e1811090100000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f161b1e25292d2d3337393b3e40424344454646464545444342403e3c3a38342e2d2a261f1b17110a020000000000000000000000000000000000000000000000061019232c363f4951565860606060606060605e54524d453b31281e140a010000000000000000000000000000000000000009141f2935404b55606a717e8b929ca4afa9a198928a817b746e696562605c545b5a5a5a5b545c6063666a6e747b828b9299a2aaaca49f92877d706a5f53493f32281e0d030000000000000000000000000000000000000000000000000003090e1a25313b4653606c7884919e9f9f9f9f9fa095897c6f63564c4135291d1109030000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0e02000000000000000000000000000000000000000000000000000000040c13181d2021262a2c2c2b292521201d19130e09040c13181d20212d2d2d2b2a27221d160e0500000000000000000000000f1c2935424e5a6670767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767670665a4e4235291c0f0000000000000000000000000b1724313d4a56626c7179797979796f6b6054483b2f221a26333f4c58646e74797979797771675b4f424754606a6f79797979767065574d4245525e6a757979797979706b6155483c2f2316090000000000000d1a2633404c58646e747979797975675d5145392c1f2835414e5a667076797979787368574d42362a1e12050000000000000000000000000000000000000000000000000714202d3a4753606d7a8693939393938c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c788586868686868686796d6053473a2d20140700000000000000000000000000000000000000000000000000000000000a1723303c4955616c71797979797979797772675c4f43372a1d1106121f2c3845525e6a75797979797979797976685e5246392d201307101d2a36434f5b67717779797979797979706c6155493c3023160a0000000000000000000000000000000000000002080d1012131313131313131313131313131313131313131313121211100f0d0b09070604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080e111414202020202020202020191816120d060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f13191d2022272b2d2f313335363838393939383837373533312f2d2c2823211e1a140f0b06000000000000000000000000000000000000000000000000000007111a242d373f464a4c5353535353535353524846423b33291f160c020000000000000000000000000000000000000000030c18242f39434e58626d73808d929fa4acaaa29f938e86807b76726f6d6669686767676869666d6f72777b81868f949fa3ababa39a938c7f726b61584e41382d20160c00000000000000000000000000000000000000000000000000050d141a1e212b3844505b66737f8c999393939393939084776b6054443a30241e1a140d0500000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0e020000000000000000000000000000000000000000000000000000000001070d111314191d1f201f1d191413110d0802000001070d1113142020201e1d1b17110b04000000000000000000000000101d293643505c6976828383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838276695c504336291d100000000000000000000000000b1825323e4b5865717e86868686867d6f6356493c30231a2734414d5a6774808686868683776a5d51404b55626f7c868686868276695e534646535f6c7987868686867d7063574a3d3024170a0000000000010e1b2734414e5a67748086868687796d6053473a2d202936434f5c6976828686868578695e53463a2d2114070000000000000000000000000000000000000000000000000714202d3a4753606d7a86939f9f9f998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929393939393867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000814212d3945505a61646c6c6c6c6c6c6c6b6760564b3f33271b0e04111d2a36424e59636a6c6c6c6c6c6c6c6c6c5e564c41362a1d11050e1a27333f4a555f676a6c6c6c6c6c6c6c64615a5044392d201408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507081313131313131313130c0b090601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d1113171b1f20222427282a2b2c2c2c2c2c2b2b2a28262423201f1c1814120e0903000000000000000000000000000000000000000000000000000000000008121b252d343a3e3f4646464646464646453b3a36302921170d040000000000000000000000000000000000000000000007121d27313d46505a636e73808c939aa1a9aea59e98928d87837f7c79777674747474747677797c7f83888e92999fa6afa8a09992887f726d62594f463c2f261b0e04000000000000000000000000000000000000000000000000050f171f252a2d2e333f4a54616e7a8786868686868686867f7265594f43322e2d2a251f170f05000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0e02000000000000000000000000000000000000000000000000000000000000010406070c10121312100c070705010000000000000104060713131311100e0b06000000000000000000000000000013202d394653606c79868f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f86796c605346392d20130000000000000000000000000b1825323e4b5865717e8b939393897c6f6356493c30231a2734414d5a6774808d93939084776a5d5145515d6774818e939393877b6e61544a3f535f6c79869293938a7d7063574a3d3024170a0000000000000b1825313e4b5864717e8b9399897c6f6356493c30232633404d596673808c9397877b6e6154483b2e2115070000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0aca6998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929f9f9f9f93867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000004111c28333e48505557606060606060605e5c564e44392e23170b010e1a26313d4751595e5f606060606060605f524c443a3025190d010b17222e39444d555b5d60606060606060575550483e33281c1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105060b0f121315181a1b1d1e1f1f201f1f1e1e1d1b1a18161312100c070502000000000000000000000000000000000000000000000000000000000000000009131b23292e31323939393939393939382e2d2a251f170f050000000000000000000000000000000000000000000000010b151f2b343f48525c646e737f8892979ea5acaaa29f9a93908c898684828181808181828486898c90959b9fa3ababa39f9691877e726d635b51473e332a1d140a000000000000000000000000000000000000000000000000030d17212931363a3b464646525e686e797979797979797979726d62564746463b3a36312921170d030000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202d394653606c7986939c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9386796c605346392d20130000000000000000000000000b1825323e4b5865717e8b989f96897c6f6356493c30231a2734414d5a6774808d9a9d9084776a5d514753606d7a85929fa4998c8073665c5044535f6c7986929f968a7d7063574a3d3024170a0000000000000915222f3c4855626f7b8898988c7f7265594c3f302424303d4a5763707d8a96978a7e7164574a3e2e23180c0000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabaca093867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000c17222c363e45494a53535353535353514f4b443c32281d1206000915202b353f474e5253535353535353535346413a32281e13080006111d27323b444a4f51535353535353534a49443e362c22170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003060809131313131312070705010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105090b0b1313131313130d0d0b07070b0d0d1313131313130b0b09050100000000000000000000000000000000000000000000000000000000000000000000030506080b0d0f101112131313121211100f0d0b09070604000000000000000000000000000000000000000000000000000000000000000000000000010911181e2224252d2d2d2d2d2d2d2d2b21201e1a140d0500000000000000000000000000000000000000000000000000030d19222d36404a525c646d727d858f939da0a7acaca49f9c989892918f8e8d8d8d8e8f919299999da0a7acaca49f99928d847d716c635b51493f352c21180b0200000000000000000000000000000000000000000000000009141f29333b4246485353534d565e616c6c6c6c6c6c6c6c6c65625b515353534846423b33291f14090000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0e02000000000000000000000000000000000000000000000000000000000000000003070b0d0e13131313131312100d0a06050300000000000000000000000000000000000000000000000000000013202d394653606c7986939f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9386796c605346392d20130000000000000000000000000b1825323e4b5865717e8b98a296897c6f6356493c30231a2734414d5a6774808d9a9d9084776a5d514e5764717e8b98a2ab9e9184796d605346535f6c7986929f968a7d7063574a3d3024170a0000000000000613202d394653606c7985929b8e817568564c413529212e3a4754616d7a87969a8d807467544b4034281c100400000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000005101a242c33393c3e4646464646464644433f39322a20160c0100040f19242d353d42454646464646464646463936302820160c0200000b16202932393f4344464646464646463d3c39332c231a100500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f12151520202020201f1413110d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c111517182020202020201a1917131317191a202020202020181715110c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d1216181920202020202020201f1514120e090200000000000000000000000000000000000000000000000000000007101b242e38404a525b636b707a828990959c9fa4abaca9aaa39f9d9c9b9a9a9a9b9c9d9fa3abaaababa39f9a938f8780796f6b615a51493f372d231a0f06000000000000000000000000000000000000000000000000020e1a25313b454d535f6060606060605d5f60606060606060605c6060606060605f534d453b31251a0e0200000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0e0200000000000000000000000000000000000000000000000000000000000001080e13171a1a20202020201f1e1d1a1613120f0b060000000000000000000000000000000000000000000000000013202d394653606c798693939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939386796c605346392d20130000000000000000000000000b1825323e4b5865717e8b98a296897c6f6356493c30231a2734414d5a6774808d9a9d9084776a5d51535f6a7683909caaa9a1978a7d7064574d535f6c7986929f968a7d7063574a3d3024170a00000000000006121f2b3844505b6676838f9c918477685d5246392d202d3946525e687884919d908376665c5145382c1f130600000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000008121a22282d3031393939393939393837332e2820180e0400000008121b242b31363839393939393939392e2d2a251e160e05000000040e1720272e3336373939393939393931302d28221a110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e151b1f21222c2d2d2d2d2c21201d19130c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000911181d2124252d2d2d2d2d2d2726231f1f2326272d2d2d2d2d2d2524211d1811090000000000000000000000000000000000000000000000020608080b0e1011121313131312100f0d0a0706040100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090b0c1313131313131313120807050200000000000000000000000000000000000000000000000000000000000009121c262e384049515961686e757d83898f93999c9fa2aaa7a8aaa9a7a7a7a7a7a9a9a8a6a9a19e9b99928e87827c736d67605950483f372d251b11080000000000000000000000000000000000000000000000000005121e2a36424d575e6c6c6c6c6c6c6c6a665f55535353545e66696c6c6c6c6c6c6c5e574d42362a1e120500000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0e020000000000000000000000000000000000000000000000000000000000020b12191f2326272d2d2d2d2d2c2b2a2723201f1b17110a02000000000000000000000000000000000000000000000013202d394653606c798686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686796c605346392d20130000000000000000000000000b1825323e4b5865717e8b98a296897c6f6356493c30231a2734414d5a6774808d9a9d9084776a5d4a54626e7b88949f9f9c9f9c8f8276695e53535f6c7986929f968a7d7063574a3d3024170a000000000000030f1c28333f4a546773808d9a96877a6d6154473a2e212a36414c566875818e9b9286796d6053463a2d20130700000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000810171c2123242d2d2d2d2d2d2d2b2a27231d160e06000000000009121920262a2c2c2d2d2d2d2d2d2d21201d19130c050000000000050e161d22272a2a2d2d2d2d2d2d2d2423201c1710080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101820262b2e2f3939393939382e2d29251e160e04000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b22292e313239393939393934332f2b2b2f333439393939393932312e29221b1209000000000000000000000000000000000000000306090f121415181a1c1e1f1f20201f1e1d1c19171413100d0704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141c262e373f474f565e616b70777d82878b8f9298989a9b9d9e9e9f9f9f9e9d9d9b999797928e8a86817b756f6a605d554f473e362d251c130900000000000000000000000000000000000000000000000000000714212d3a46535e69767979797979797771665b4f464e5a66707679797979797976695e53463a2d21140700000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0e0200000000000000000000000000000000000000000000000000000000010b141d242b303334393939393939383734302d2b27221b140b080000000000000000000000000000000000000000000013202d3946535f6c767979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979766c5f5346392d20130000000000000000000000000b1825323e4b5865717e8b98a296897c6f6356493c30231a2734414d5a6774808d9a9d9084776a5d515c6673808d9a9f948f949f93877b6e61544a5f6c7986929f968a7d7063574a3d3024170a000000000000000b17222d3e4a5764717d8a9796897d7063564a3d302325303f4c5965727f8c9898897c6f6256493c2f23160800000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000050c11141717202020202020201e1d1b17120c0400000000000000080f151a1d1f20202020202020201413110d080200000000000000040b11171a1d1e20202020202020171614100b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e18222a31373a3c4646464646453a3935302820160c0200000000000000000000000000000000000000000000000000000000000000000000000000000006111b242d343a3d3e464646464646403f3b36363b3f404646464646463e3d3a342d241b110600000000000000000000000000000000040a0f13151a1f21222527292a2c2c2d2c2c2b2a28262320201d1813100c0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406070a0d0f11121313131212100e0c0906060300000000000000000000000000000000000000000000000000000000000000020a141c252e353d444c525960636b70757b7e8285888b8d8f9091929292929191908e8c8a8885817d7a746e6a626058514b433d352c241c130a0100000000000000000000000000000000000000000000000000000815212e3b4854616e7b86868686868683776a5d50444f5c6976828686868686867b6e6154483b2e21150800000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0e020000000000000000000000000000000000000000000000000000000008121d262f363c3f414646464646464543403d3937332d261d1a110a010000000000000000000000000000000000000000121e2b37434f5a646c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c645a4f43372b1e120000000000000000000000000b1825323e4b5865717e8b98a296897c6f6356493c30231a2734414d5a6774808d9a9d9084776a5d53606d7985929e978f828f99998c8073665c505f6c7986929f968a7d7063574a3d3024170a000000000000000615212e3b4854616e7b8797998c7f7366594c40302523303c4956636f7c8999988b7f7265584c3f3025190d01060606000000000000000000000000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000004080a0b1313131313131311110e0b060100000000000000000004090e11121313131313131313070705010000000000000000000000060b0e1011131313131313130a0a08040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202a343c4347485353535353524746413a32281e13080000000000000000000000000000000000000000000000000000000000000000000000000000010c18222d363f454a4b5353535353534d4c474040474c4d5353535353534b4a453f362d22180c0100000000000000000000000000040a0f151b1f21262b2e2f32343637383939393938373533302d2c29241f1c18120c0700000000000000000000000000000000000000000000000000000000000000000000000000000001070c10131416191c1d1f1f20201f1e1d1b191613120f0b06000000000000000000000000000000000000000000000000000000000000020a131c232c323b41464f54596063686e7276797c7e808283848585868585848382807d7b7974716d68625f58544e454039312b231a120a010000000000000000000000000000000000000000000000000000000815212e3b4854616e7b87939393939083776a5d50444f5c6976828f93939393877b6e6154483b2e21150800000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5a79b8e8174685b4e4135281b0709080603000000000000000000000000000000000000000000000000030e19242f3840474c4d53535353535251504d4946443f382f2b231c130a01000000000000000000000000000000000000000f1b27333e49525a5f60606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060605f5a52493e33271b0f0000000000000000000000000b1825323e4b5865717e8b98a296897c6f6356493c30231a2734414d5a6774808d9a9d9084776a5d5764707d8a979e92857a86929e9184796d60535f6c7986929f968a7d7063574a3d3024170a000000000000030714212d3a46535e697885929b8f827568574d42362a202d3a4753606d7a86929b8e817568564c41362a1d11131313130b0b09050100000000000000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26313c464e53555f606060605f54524c443a3025190c030000000000000000000000000000000000000000000000000000000000000000000000000005111d29343f485056586060606060605a58524a4a52585a606060606060585650483f34291d1105000000000000000000000001070d161b20262b2e31373a3b3e4143444546464646454342403d3a39352f2c28231d18120b030000000000000000000000000000000000000000000000000000000000000000000000040a0f12181c1f202326282a2b2c2c2c2c2b2a282523201f1c17110f0a0300000000000000000000000000000000000000000000000000000000010a111a202930363d44484f54565e6165666d6f7174757778787979787877767573716f6d6664605d56534e47433c352f271f19110800000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b87949f9f9d9083776a5d50444f5c6976828f9c9f9f94877b6e6154483b2e21150800000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5a89b8e8275685b4f422f2418191615130f0a040000000000000000000000000000000000000000000007131f2b36404a52585a60606060605f5e5d5a56535049413d352e251c130a000000000000000000000000000000000000000a16212c3740494f535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353534f4940372c21160a0000000000000000000000000b1825323e4b5865717e8b98a296897c6f6356493c30231a2734414d5a6774808d9a9d9084776a5d5e6975828f9c9a8d8075828f9b978a7d7064575f6c7986929f968a7d7063574a3d3024170a0000000001090f14181e2a36424d576975828f9c918578695e52463a2d202c3845515d677783909d918477685e5246392d202020202020181715110c06000000000000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0e1111131313131313131308070502000000000000000000000105090b0c13131313131313130f0e0c08040000000000000000000000000000000000000000000000000004090c0e0f131313131313130c0b09060100000000000000000000000000000004090c0e0f1313131313131310060503000000000000000006121f2b37434e585f626c6c6c6c6c6b615e564c4135291e150b000000000000000000000000000000000000000000000000000000000000000000000000000915212e3a45505a62656c6c6c6c6c6c67645c52525c64676c6c6c6c6c6c65625a50453a2e21150900000000000000000000040c131820272b32373b3c4347484b4d4f51525253535251504f4c4a4745403a38342e28231c150c070000000000000000000000000000000000000000000000000000000000000000040a0f161b1d23292c2d303335373839393939383635322f2d2b28221c1b150e090300000000000000000000000000000000000000000000000000000000080e171e252a32383d44484d5254545c60626567686a6b6b6c6c6c6b6a6a68666462605c5454524c47433c373229241d150d070000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794a1aa9d9083776a5d50444f5c6976828f9ca9a194877b6e6154483b2e21150800000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5a99c8f827669554b403529252522221f1b150e070000000000000000000000000000000000000000000b1723303c47525c64676c6c6c6c6c6c6b6a6763605b534f473f372e251c100700000000000000000000000000000000000005101b252e373e4346464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646433e372e251b10050000000000000000000000000b1825323e4b5865717e8b98a296897c6f6356493c30231a2734414d5a6774808d9a9d9084776a53616e7b87939f95887c707d8a979c8f8276695e5f6c7986929f968a7d7063574a3d3024170a000000030b131a2024272531404c5966737f8c9997877b6e6154483b2e2d2935404b556774818d9a96877a6d6154473a2e2d2d2d2d2d2d2524211d1811090000000000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000040b12171b1d1e20202020202020201514120e090300000000000000060c1115171820202020202020201b1b18140f090100000000000000000000000000000000000000000002091015191b1c20202020202020191816120d0700000000000000000000000002091015191b1c202020202020201c13120f0b060000000000000815212e3a47535f6a6f7979797979786d685e52463d30271c12070000000000000000000000000000000000000000000000000000000000000000000000000b1724313d4a56626c71797979797979736e645858646e73797979797979716c62564a3d3124170b000000000000000000060d161d242932383c4347494e5355585a5c5d5f5f605f5f5e5d5b595653514b46454039342e271e191009010000000000000000000000000000000000000000000000000000000000060b151b21272c2f34383a3d40424445464646454543413f3c3938332d2b26201a150b0600000000000000000000000000000000000000000000000000000000050d141921272c33383b4146474a505355585a5c5d5e5f5f5f5f5e5e5d5b59575553504a4745413a37312b272018120b03000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794a1a99d9083776a5d50444f5c6976828f9ca9a194877b6e6154483b2e21150800000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4aa9e918477675d5145392f32322f2e2b262019100700000000000000000000000000000000000000000d1a26333f4c58646e74797979797979787673706c656059514940372e22190f0400000000000000000000000000000000000009131c252c33373939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393937332c251c1309000000000000000000000000000b1825323e4b5865717e8b98a296897c6f6356493c30231a2734414d5a6774808d9a9d9084776a5b65737f8c999d9083766d7985919e93877b6e615f6c7986929f968a7d7063574a3d3024170a0000010b151d252b303435393d4a5763707d8a96978a7d7064574a3d2d39392f3e4b5864717e8b97968a7d7063574a3d2d39393939393932312e29221b120900000000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000060e161d23272a2b2d2d2d2d2d2d2d2d22211e1a140e0600000000000911181d2224252d2d2d2d2d2d2d2d282724201a130b0300000000000000000000000000000000000000030c141b212528292d2d2d2d2d2d2d2625221e18110901000000000000000000030c141b212528292d2d2d2d2d2d2d29201f1b17110a02000000000915222f3c4855626f7c8786868686857a6d61594f42392e23180c0300000000000000000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8686868686868073675a5a6773808686868686867e7165584b3e3225180b0000000000000000060f181f282f353d43474e5355585f626567696a6b6c6c6c6c6b6a686663605d5553514b444039302b221b130b020000000000000000000000000000000000000000000000000000020a111720262b323839404547494c4f50525253535251504e4c4946443f3837312b262017110a0200000000000000000000000000000000000000000000000000000002080e161c21272c3036393b3f4446494b4d4f5051525253525251504f4d4a4846443f3a39352f2b26201b150c070100000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b87949c9c9c9083776a5d50444f5c6976828f9c9c9c94877b6e6154483b2e21150800000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97acac9f93867a6d605347403f3f3f3c3b37322a22190e04000000000000000000000000000000000000000e1a2734414d5a6774808686868686858483807d78706b635b514940342b20160a000000000000000000000000000000000000010a131b21272b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b27211b130a01000000000000000000000000000b1825323e4b5865717e8b98a296897c6f6356493c30231a2734414d5a6774808d9a9d9084776a606c7884919e988b7e716673808d9a998c8073665c6c7986929f968a7d7063574a3d3024170a000009131d272f373c404146464754616d7a8796998d80736653493f46464646464855626e7b8898998c807366544a3f464646464646463e3d3a342d241b1106000000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000e1820282e33363839393939393939392e2d2b261f180f0600000009121b23292e313239393939393939393534312c251d150b000000000000000000000000000000000000020c151e252c3134353939393939393932312e29231b13090000000000000000000c151e262c31343539393939393939362d2b27221b140b020000000815212e3a47535f6a73808d9693978e81746b60544a4034281f140900000000000000000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b939393938d8073675a5a6773808d939393938b7e7165584b3e3225180b00000000000000061018212a313a40454e54585f62676a6e71747677787979797978767573706d6764605c54514a423d342d251d140b01000000000000000000000000000000000000000000000000040b141c222832373d43484b515356595b5d5e5f5f5f5f5e5d5b585653504a47433c373127221b140b0300000000000000000000000000000000000000000000000000000000050b10161c1f252a2d2e34383a3c3e414244454546464545444342403e3c3a38342e2c29241e1a150f0a04000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b878f8f8f8f8f83776a5d50444f5c6976828f8f8f8f8f877b6e6154483b2e21150800000000000000000000000000000000000000000000000000000a1623303d495663707c899aa4afa4998a7e71645b514b4c4c4c4947433c342a20150a000000000000000000000000000000000000000e1a2734414d5a6774808d939393989291908d89837d726d635b51463d32271b0f04000000000000000000000000000000000000010910161b1e202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201e1b1610090100000000000000000000000000000b1825323e4b5865717e8b98a296897c6f6356493c30231a2734414d5a6774808d9a9d9084776a63707d89969f92857a6d626f7b88959e9184796d606c7986929f968a7d7063574a3d3024170a00030f1a252f3941484d4e535353525e687884919c8f8276655b505353535353535353606c7985929c8f8276665b5053535353535353534b4a453f362d22180c010000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000060f202a32393f434446464646464646463b3a37312a21180e030006111b242d343a3d3f464646464646464642403d372f271d0b02000000000000000000000000000000000009141e2730373d4142464646464646463f3e3a352d251b0f060000000000000008121e2730373d414246464646464646433937332d261d140a00000006121f2b37434e58606d7984919e9f93887d6f665c51443b31261a0d04000000000000000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b989f9f9a8d8073675a5a6773808d9a9f9f988b7e7165584b3e3225180b000000000000050e18222a333c434b515860626a6f74787b7e80828485858686858483827f7d7a76716d66605c544e463f372e261d130a0000000000000000000000000000000000000000000000040d161d262d333c43474f54555c606366686a6b6c6c6c6c6b69686562605b54534e47423c332d261d150d030000000000000000000000000000000000000000000000000000000000050b1014191e2023282c2d2f3234353738383939393837373533312f2d2b2823201d19130f0a030000000000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a8283838383828074675a4e414d5a6673808283838383827a6e6154473b2e21140800000000000000000000000000000000000000000000000000000714212d3a4754606d7a86939facab9c9083766d605d5559585855544e463c32261b0f030000000000000000000000000000000000000e1a2734414d5a6774808d9a9f9fa29f9e9d9a9590887f726d63584e43372b20150a0000000000000000000000000000000000000000050a0f1213131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313120f0a05000000000000000000000000000000000b1825323e4b5865717e8b98a296897c6f6356493c30231a2734414d5a6774808d9a9d9084776a6875818e9b9a8e8174675f6a7683909d978a7d70646c7986929f968a7d7063574a3d3024170a000814202b37414b53595b60606060566875828e9b9285796c606060606060606060605b6576838f9c9285796c60606060606060606060585650483f34291d11050000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000030d1821323c444b4f5153535353535353534846423c332a1f1409010c18232d363f454a4b53535353535353534e4d4841392f1d140a0000000000000000000000000000000004101b25303942494d4f535353535353534c4a463f372d21180b020000000000050e1a24303942494d4f535353535353534f46443f382f261b11060000030f1b26313c45515d67707d8a939e9a9183786d60574d42362a1f160c010000000000000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b0000000000020b17202a343c454d555d606a6f767c8084888b8d8f90929293929291908e8c8986827e79726d666058514940382e251c1108000000000000000000000000000000000000000000030c161f282f383f444e54596063676d707375777879797978787674726f6c66625f58534d443f382f271f150d0300000000000000000000000000000000000000000000000000000000000002080e1114171c1f20222527292a2b2c2c2c2c2b2b2a28262422201f1c1713110d080100000000000000000000000000000000000000000000000000000000000000000000000000000714202d3946525e686e767676767676746e64584c404b58636e737676767676766e685e5246392d20140700000000000000000000000000000000000000000000000000000713202c3945525d687784919dabab9f948b7f736d6766656565625f584e43372b1f13060000000000000000000000000000000000000e1a2734414d5a6774808d98989a9c9fa3aba7a09a938c7f726a6054473d32271b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a296897c6f6356493c30231a2734414d5a6774808d9a9d9084776a6d7a86929f95897c6f635865727e8b989c8f8276696c7986929f968a7d7063574a3d3024170a000c1824303c48535d64686c6c6c6c6c6c727f8c9897887b6e6c6c6c6c6c6c6c6c6c6c6c6c73808d9998887b6f6c6c6c6c6c6c6c6c6c6c65625a50453a2e2115090000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000009141f2933444e565c5e606060606060606055534d453c31261a0e05111d29343f4851565860606060606060605b59534b412f261b11060000000000000000000000000000000915212c37424b53595c60606060606060595651493f332a1d140a00000000020d17202c36424b54595c606060606060605c53504941382d22170b0000000a15202935404b55616b75818e98a0958c7f72695f53463e31281e13080000000000000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b00000000000a141d29333c464e575f676d747c82888d9196989a9c9d9e9f9f9f9f9e9d9b9999928f8a847f786f6a625b524a40372e231a0e0500000000000000000000000000000000000000000b151e283139424a50585f626b6f75797d7f828385858686858483817f7c79746f6a625f575049413931271f150b01000000000000000000000000000000000000000000000000000000000000000205060c10121316181a1c1d1e1f1f201f1f1e1d1c1a17151312100b0604010000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36414c565e6169696969696967645c52473c47525c6366696969696969615e564c41362a1e1105000000000000000000000000000000000000000000000000000004111d2935414c566673808d99a3afa69f9388807a75737272726f6a5f54473b2e2215080000000000000000000000000000000000000e1a2734414d5a6774808b8b8c8d9092999ea5aca49f92877c6f62584e43372b1f130600000000000000000000000000000000000000000000000000000000000000000000000000000000060b0e101113131313131313110605030000000000000000000000000000000000000000000000000000000000000000000000000001040707131313131313131308070502000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a296897c6f6356493c30231a2734414d5a6774808d9a9d9084776a727f8b989d9184776b6054606d7a86929f93877b6e6c7986929f968a7d7063574a3d3024170a000e1a2734404d59646f74797979797979797d8996978a7e79797979797979797979797979797e8a97988b7e7979797979797979797979716c62564a3d3124170b0000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000020e1a26313b455660676b6c6c6c6c6c6c6c6c6c5f574d42372b1e120915222e3a45515b62656c6c6c6c6c6c6c6c68655d5341382d22170b0000000000000000000000000000000c1925313d49535d65686c6c6c6c6c6c6c65625b51453c2f261c110600000008141e29323e48545d65686c6c6c6c6c6c6c69605b53493f33271b0f030000040c18242f39434f59616e7b85929f9f92867b6e615a50433a2f24190c0200000000000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b0000000006111b262f3b454e585f696e7981878f949a9ea1a8a7a9aaaaaaa9a9aaaba9a8aba39f9c97918c847c726d645c524940362c20170c0200000000000000000000000000000000000007121d273039434b545b606a6f767c8185898c8e90919292929291908e8b8985817c756e69605b534b433931271d12070000000000000000000000000000000000000000000000000000000000000000000000030607090b0e0f1112121313121211100f0d0b090706030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1925303b444c52545c5c5c5c5c5c5a58524a4136404a52585a5c5c5c5c5c5c54524c443b3025190d010000000000000000000000000000000000000000000000000000010d1924303b4854616e7b87929fa7afa49a938d8582807f7f7f7c6f6255493c2f221609000000000000000000000000000000000000091623303c4956636f7d7f7f7f8083868f939ea5afa3999083766a6054473b2e2215070000000000000000000000000000000000000000000000000000000000000000000000000000040b11171b1d1e202020202020201e13120f0b0600000000000000000000000000000000000000000000000000000000000000000002080d11131420202020202020201514120e090300000000000000000000000000000000000000000b1825323e4b5865717e8b98a296897c6f6356493c30231a2734414d5a6774808d9a9d9084776a7783909d998c7f726559515d6774818e9a998c8073667986929f968a7d7063574a3d3024170a000e1b2835414e5b68748186868686868686898f999a908a86868686868686868686868686868a909a9b908b86868686868686868686867e7165584b3e3225180b0000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d57677277797979797979797976695f53463a2d21140b1724313d4a56626d727979797979797979756f6553493f33271b0f0300000000000000000000000000020e1b2834414d59656f7579797979797979726d62574d42382d22170b0200050e1925303b44505a656f7579797979797979766c655b5044372b1f120500000007121d27313e46525e69727f8b959f988f82756c61554c4135291e140a00000000000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000000000b17222d38414d575f6a6f7b848e939a9fa6abacaaaaa39f9e9d9c9c9d9ea1a9a7acaca9a19e9691877f746e645b52483e32291e13080000000000000000000000000000000000040d18232e39434b555d666c737c83898e9298999b9d9e9f9f9f9f9e9c9b9897918d88827b736c655d554b43392f24180e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141e29323b4146475050505050504e4c4741382f3840474b4d5050505050504746413b32291e1408000000000000000000000000000000000000000000000000000000000814212d3a46535e6974808d959fa7aca49f98928f8d8c8b8b7f7266594c3f3326190c0000000000000000000000000000000000000915222f3b4854606b6f72727273767b818e939ea9ab9f95897c6f6256493c2e23180c00000000000000000000000000000000000000000000000000000000000000000000000000050e161d22272a2b2d2d2d2d2d2d2d2b201f1b17110a02000000000000000000000000000000000000000000000000000000000000040c13191d20212d2d2d2d2d2d2d2d22211e1a140e06000000000000000000000000000000000000020b1825323e4b5865717e8b98a296897c6f6356493c30231a2734414d5a6774808d9a9d9084776f7c88959f92867a6d61544b55626f7c89959e9184796d7986929f968a7d7063574a3d3024170a000e1b2835414e5b6874818e9393939393939699a1a29a979393939393939393939393939393979aa2a29b98939393939393939393938b7e7165584b3e3225180b0000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000714212d3a46535f69778486868686868686867b6e6155483b2e2215091825323f4b5865727f86868686868686868175655b5044372b1f120500000000000000000000000000020f1c2935424f5c687582868686868686867f72695f544a3f33281d140a020c17202a36414c56616c75818686868686868682796c605346392d201306000000010b151f2a36424d56606c788390999e948a7e71675d51453c30261c1106000000000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000000030f1b27333f49535e696f7c8591969fa4acaca7a09d98989291908f90909197979b9fa2aaada8a099928c80746e635a50443a3025190d03000000000000000000000000000000010c161f2834404b555d676d78808790949b9fa2a9a29e9c9b9a9a9b9d9fa3a9a19e9a948f877f776d675d554b40352920170d02000000000000000000000000000000000000000000000000000000000000000000030607090b0d0f1111121313121211100f0d0a08070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d1720293036393b43434343434341403c362f262e353b3f404343434343433b3936302920170d020000000000000000000000000000000000000000000000000000000005121e2a36424d57606d798390959fa2aaaaa29f9b9998988c7f7266594c3f3326190c00000000000000000000000000000000000007131f2c38434f59606365656567696e78818e97a1ada79a8d807467554b4034281c10040000000000000000000000000000000000000000000000000000000000000000000000000e1720282e33363739393939393939382d2b27221b140b0200000000000000000000000000000000000000000000000000000000040e161e24292c3939393939393939392e2d2b261f180f0600000000000000000000000000010507070f0f1825323e4b5865717e8b98a296897c6f6356493c30231a2734414d5a6774808d9a9d90847774808d9a9b8e8275685e524754606a7783909d978a7d707986929f968a7d7063574a3d3024170a000e1b2835414e5b6874818e9b9f9f9f9f9f9fa0acafa6a49f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa0a3a8a6a49f9f9f9f9f9f9f9f9f988b7e7165584b3e3225180b0000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000000121f2c3945525f6c7885929fabada093867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b88969393939393938b7e7165584b3e31261a121e2a36424d576875818e9393939393939285786c605346392d20130800000000000000000000000000000714212e3a4754616d7a85919393939392867b6e665b50443c2f261c1108131e29323a46525e68717e8a939393939392857a6e655b5044372b1f120500000000030d1925303b44505b666f7c87929f9e91847a6d60584e42382e23170b020000000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b00000005121f2b3744505b656e7b849197a0a8afa7a09d95908b8885848383838485878a8e92989fa3ababa39f928c80736c61564c41362a1f140900000000000000000000000000000008131e28313a45515c676d79828d92999fa6a39f9a97928f8e8d8e8e9092989b9fa3a69e99928c82796d675d51453f32291e140800000000000000000000000000000000000000000000000000000000000104060b10121315171a1c1d1e1f1f201f1f1e1d1b19171514120e09060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e171e252a2d2e3636363636363433302b241d242a2f32333636363636362e2d2a251e170e050000000000000000000000000000000000000000000000000000000000020e1a25313b45515c676d7a838c92989b9d9e9fa39f9f998c7f7266594c3f3326190c000000000000000000000000000000000000030f1b27323d474f5456585859575e666d7a85929eabaa9d908377675c5145382c1f130600000000000000000000000000000000000000000000000000000000000000000000000711202932393f434446464646464646443937332d261d140a000000000000000000000000000000000000000000000000000000020c1620283035394646464646464646463b3a37312a21180e030000000000000000000002080d1113141c1c1c25323e4b5865717e8b98a296897c6f6356493c30231c2734414d5a6774808d9a9d9084777985929e96897d7063564c434e5865727e8b989c8f82767986929f968a7d7063574a3d3024170a000e1b2835414e5b6874818e93939393939393939fa3a59d9b939393939393939393939393939394979ea49d9a9393939393939393938b7e7165584b3e3225180b0000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d000000000000000000000000000000000000000000000000000000000000000000030d152c3945525f6c7885929fabada093867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a5465727e8b98a89f9f9f9f9b8e817568574d42372b1e14212d3a46535f697884919e9f9f9f9fa197887c6f6255493c2f24190d01000000000000000000000000000713202d3946525e68707d8a929da8a2989083786c60574d42382d22170e1925303a44505a616e7a85929ea5a89d938a7d70685e53493f33271b0f03000000000009141f28333f4a545f6a74808d96a1978d80746a60544a3f34281f14090000000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000004101c2834404a54606c77828f96a1a9aea49d959189837f7c797777767677787a7d81868c9299a0a8afa49c928a7e70685e52463b31251a0e0000000000000000000000000000010d19242f3a43505a606d79828f949fa3a7a099928e898583818181828386898e92999fa7a39f948f82796d605b51443b3025190e02000000000000000000000000000000000000000000000000000001070d1113171c1f20222426292a2b2b2c2c2c2b2b2a28262422211e1a1312100c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d14191e20212929292929292726241f1a13191f23262729292929292921201e19140d050000000000000000000000000000000000000000000000000000000000000009141f2934404b555e686d7980858b8e909192999393938c7f7266594c3f3326190c000000000000000000000000000000000000000a16212b353d4348494c4c4c4d545d6873808c99abac9f9286796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000000050f1923323b444b4f51535353535353535146443f382f261b1106000000000000000000000000000000000000000000000000000008131e28323a41455353535353535353534846423c332a1f1409000000000000000000040c13191d202128282828323e4b5865717e8b98a296897c6f6356493c3028282834414d5a6774808d9a9d9084777d8a979e9184786c6053463d4754606d7a86929f93877b7986929f968a7d7063574a3d3024170a000e1b2835414e5b68748186868686868686868692999d938e8686868686868686868686868686878c979d928d868686868686868686867e7165584b3e3225180b0000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000000000010b151f2935414c566c7885929fabada093867a6d6053473a2d20160c0200000000000000000000000000000000000000000000000000000000000000000006121f2c3844505c6675828f9ba8acabacab9e918578695f53473a2e2115222e3b4855616e7b8896a1adacaaaca9998c7f7366564c4135291d11040000000000000000000000000005111d2a36414c56616b74808d96a0aa9f948b7f72695f544a3f33281d16202a36414c56616c75818f97a1aba0968e81746c61564d41382d22170b000000000000020b17222d38424e58606d7984919e9f93877c6f665c50443b30251a0d0300000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000006121f2c3844515c66717e8b949fa9afa59d928d837d77726f6d666a69696a696e70747a80879196a0a8aea49e92857a6d61574d42362a1c11060000000000000000000000000004111d2935414c56616c74818e949ea6a69f959087817c79767474747577797d818790959ea5a69e948e81756d62564c41362a1e140800000000000000000000000000000000000000000000000003090e13181d2023282b2d2f3133353737383939393837373533312e2d2a26201f1c17110d08020000000000000000000000000000000000000000000000000000000000000000000000000000000002080d1114141d1d1d1d1d1d1b1a17140e080e1317191a1d1d1d1d1d1d1414110d08020000000000000000000000000000000000000000000000000000000000000000030c18232f39434c565e676d737a7e8184858686868686867f7266594c3f3326190c00000000000000000000000000000000000000040f19232b32383b3c3f3f3f424c56626f7c8899a3aea399877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000000000b16212b35444d565b5e606060606060605e53504941382d22170b00000000000000000000000000000000000000000000000000010d1924303a444c525f606060606060606055534d453c31261a0e0200000000000000040e161e24292d2e35353535353e4b5865717e8b98a296897c6f6356493c3535353535414d5a6774808d9a9d908477828e9b9a8c8073665b50443945515d6774818e9a998d807986929f968a7d7063574a3d3024170a000e1a2734404d59646f7479797979797979797987929b8e8179797979797979797979797979797a87969a8d8079797979797979797979716c62564a3d3124170b0000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d000000000000000000000000000000000000000000000000000000000000000007121d27313945525d687885929fabada093867a6d6053473e32281e13080000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7985929fa8a19ea1a8a197887b6e6255483b2f221825313e4b5864717e8b97a8a8a09ea0a89c908376685d5245392c20130700000000000000000000000000010d1925303a444f59606d79849199a3a69f92867b6e665b50443c2f261e28323a46525e68717e8a939ea9a3999184796d605a50443b2f261b11060000000000000006111c262f3c45515d67707d8a949e999083786d60574d42362a1f150b01000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b00000713202d3a4653606d7984919ea6b0a79d938d8079706b6562605c545c5d565e6164686d737c849196a0aaada2978e8174695e5346382e23170b000000000000000000000000000613202c3945525d68717e8a939da6a89f948f837c746f6c6668676768666d70757c838f939ea7a69e938b7f72685e52463b3025190d01000000000000000000000000000000000000000000040a0f151a1d24292c2e34383a3c3e404244444546464545444342403d3b3a36312d2c28231c19130d080200000000000000000000000000000000000000000000000000000000000000000000000000000000010507081010101010100e0d0b08030002070a0c0d10101010101008070501000000000000000000000000000000000000000000000000000000000000000000000007121d27313a444c555d60686d71747778797979797979726d63574b3e3225180c000000000000000000000000000000000000000007101921272c2f3032322f3a4653606d7986929facab95887b6f6255483c2f22150900000000000000000000000000000000000000000000000000000000000000000004101c27323d47565f676a6c6c6c6c6c6c6c6b605b53493f33271b0f0300000000000000000000000000000000000000000000000004111d2935414c565d6c6c6c6c6c6c6c6c6c6c5f574d42372b1e1205000000000000020c1620283035393a4242424242424b5865717e8b98a296897c6f635649424242424242414d5a6774808d9a9d90837a86929f93877b6e61544a3f35414c55626f7c89959e91847886929f968a7d7063574a3d3024170a000c1824303c48535d64686c6c6c6c6c6c6c677783909d918477686c6c6c6c6c6c6c6c6c6c6c687784919d908377676c6c6c6c6c6c6c6c65625a50453a2e2115090000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000030c18242f39434f59606d7a86929facaea194877b6e615a50443a3024190d030000000000000000000000000000000000000000000000000000000000000000091623303c4956636f7c8998a2a1969196a1a9988b7e7265584b3f31261e2a36424d576874818e9ba9a0969196a09f92867a6d6054473a2d21140a000000000000000000000000000008131e28323e45515d676f7c87929fa6a2989083786c60574d42382d25303a44505a616d7a85929ea5a69f92877c6f675d51483e32291d140a0000000000000000000a141d2935414b55616c75828f98a0958b7f72695e52463e31271d1207000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b00030f1c28333f4a5464717d8a96a1acaca0958e81746d6760595553514a50504d5254565d606a6f7b849198a2aea99f92867b6e61544a3f34281c1003000000000000000000000004111d2935414c55606d7a85929ea5aca0968f82796e6a62605b545a5b545c60636a6e78818f959faba59f92857a6e61564c41362a1e11050000000000000000000000000000000000000000070c151b20262b2f35393a3f4446484a4d4f5051525253525251504e4c4a4846423d3a38342e29251e19140d05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151f29323a434b51565d6064686a6b6c6c6c6c6c6c66635b51463a2f22160a000000000000000000000000000000000000000000070f161b1f222325252c3844515c667784919daaa296897c6f6356493c302316090000000000000000000000000000000000000000000000000000000000000000000713202c38444f5967717779797979797979776c655b5044372b1f14090000000000000000000000000000000000000000000000000713202c3945525d6876797979797979797976695f53463a2d21140700000000000008131e28323a4146474f4f4f4f4f4f4f5865717e8b98a296897c6f63564f4f4f4f4f4f4f484d5a6774808d9a9d90837e8b989c8f8276695e5342382f3a4754606a7783909d978a7d86929f968a7d7063574a3d3024170a000814202b37414b53595b606060606060556774818d9a96877a6d61606060606060606060566875818e9b9286796d6060606060606060585650483f34291d11050000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d000000000000000000000000000000000000000000000000000000000000000a151e2935404b55606b74818e98a3aeb5a89c8f82756c61564c4135291f150b0100000000000000000000000000000000000000000000000000000000000005111d2935414c566673808c99aa9e9184919eaa9b8e817568584e43372b202d3a46525e697784919ea1979184919ea3998a7d7164574a3e31261b0f0300000000000000000000000000020c16202935404b55606a737f8c949faa9f948b7f72695f544a3f332935414c56616c75818e97a1aa9f948c7f736a60554b40362c20170b02000000000000000000020b18242f3a43505a616e7b86929f9f92867b6e61594f43392f24180b020000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b0006121f2b3844505b6675828f9ba8b1a89d9083786d605c554f4946444043434246474c52585f696e7b86929fa8afa3998d8073665c5044382b1f120600000000000000000000000613202c3945515d6773808d97a1ada69e91847a6d675f5853504a4e4e4b5153585f666d79839099a3ada2978d8174685e5246392d201409000000000000000000000000000000000000030b121820262b31373a4145474a50535557595c5d5e5e5f5f5f5e5e5d5b595755534d4946443f3835302a251e170e080200000000000000000000000000000000000000000000000000000000000000000000000000000000000002080c1012121313131313131313060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d172029313940454c5254585b5d5e5f6060606060595751493f352a1e120600000000000000000000000000000000000000000000040a0f131516191c2834404a546a7683909da9a296897c6f6356493c302316090000000000000000000000000000000000000000000000000000000000000000000916222f3b4854606b77838686868686868684776c6053463b30251a0e0000000000000000000000000000000000000000000000000714212d3a4754606d7a86868686868686867b6e6155483b2e2215080000000000010d1924303a444c52545b5b5b5b5b5b5b5b65717e8b98a296897c6f635b5b5b5b5b5b5b5b54535a6774808d9a9d918483909c978a7e7164574d422f2b37434e5865727f8b989b8e8187929f968a7d7063574a3d3024170a00030f1a252f3941484d4e5353535353535864717e8b97968a7d70635753535353535353535865727f8b9899897c6f63565353535353534b4a453f362d22180c010000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000006111c26303845515d67707d89939daab4b9aa9e948a7e71685d52463d31271d12070000000000000000000000000000000000000000000000000000000000000713202d3946525d687683909da8988c7f8c98a29e9185786a5f53473a2e212e3b4754616e7b8796a09e9285808c99ab9a8e817467584e43372b1f12060000000000000000000000000000050e18242f39434e58606d78839098a2a69f92867b6e665b50443c323a46525e68707e8a939ea9a2989083786d60584e43392f231a0e05000000000000000000000007131d28313e46535e69727f8c95a0988e81756b61554b4035291d140a0000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000613202d394653606c7985929fabaca095897d70665c514b433d3a38342e30363a3b41454e565e69727f8b96a0acab9e9185796d6053463a2d20130700000000000000000000000714212d3a4754606d7a85929fa9aa9e94897d70685d554e46443f41414045464e545c676f7c87929faca99f92867a6e6154473c31261a0e0200000000000000000000000000000000070c151d232831373c42474b5154545c60626466686a6a6b6c6c6c6b6a6a686664615f575653504a46413a3630292019130d0500000000000000000000000000000000000000000000000000000000000000000000000000000000060d13181c1e1f202020202020202013100c07010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e171f272f353a4145474b4e51525353535353534c4b463f372e23180d02000000000000000000000000000000000000000000000000030709090c18232e43505c6976838f9ca9a296897c6f6356493c30231609000000000000000000000000000000000000000000000000000000000000000005111e2a36414c5663707d8995939393939396897d7063574d42362a1c110600000000000000000000000000000000000000000000000714202d3a4753606d7a86939393939393877b6e6154483b2e211508000000000005111d2935414c565d61686868686868686868717e8b98a296897c6f686868686868686868615e576774808d9a9f928690949e9285796d6053463b3127323d4754606d7a86929f928588939f968a7d7063574a3d3024170a000009131d272f373c404146464646464855626e7b8897998d807366544a3f46464646464956626f7c8998988c7f7265594c46464646463e3d3a342d241b1106000000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000020b17232e38424e58606d7984919ea5afafacafa69e92857a6d61594f43392f24180c0300000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a86939fa096877a85929fa197887b6e6255483b2d22313e4b5764717e8a97a89b8f827d8a96a89e9184786a5f53473a2e21150700000000000000000000000000000007121d27313c44505c666e7b86929fa5a2989083786c60574d423a44505a616d7a85919ea5a59f92867b6e665c50463d31281d1108000000000000000000000000010c161f2a36424d57606d788390999e938a7d70675d51453c2f261b110600000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000815222f3b4855626e7b8897a2adaa9d9184776b60544a4039312d2c2823252a2d30353c444d57606c7884919eaaada197897c6f6356493c302316090000000000000000000005111e2a36424d5765727f8b98a2aea99c8f82756b60564c433c38332d2e34383c424b555f6a74818e9ba8aea3988c7f7266574d42372b1e12050000000000000000000000000000000810191e272e343c43474d53555d6064666d6f7173757777787979787877767573706e696763605c54524c46413b322a251e170e0600000000000000000000000000000000000000000000000000000000000000000000000000000710181f24282b2c2d2d2d2d2d2d2d2d1f1c18120b030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d151d24293035393a3e4144454646464646463f3e3a352e251c12070000000000000000000000000000000000000000000000000000000000071d293643505c6976838f9ca9a296897c6f6356493c3023160900000000000000000000000000000000000000000000000000000000000000000713202d3946525e6875818e9ba89f9f9fa89b8f8275695e5246382e23170b00000000000000000000000000000000000000000000000713202d3a4653606d79869aa49f9f9f94877a6e6154473b2e21140800000000000713202d3946525d686d757575757575757575757e8b98a296897c757575757575757575756e695e6774808d9aa29892989f9a8d8074665c51453829202c3945525d6874818e9b9892939aa4968a7d7063574a3d3024170a0000010b151d252b30343539393939394653606c7985929c8f8376665c5044383939393a4653606d7986929b8e827568574d423639393932312e29221b120900000000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000a141d28343f4a54606a73808d96a0acaca49fa4aca1978e81746b60554b4035291e150a00000000000000000000000000000000000000000000000000000000000b1724313e4a5764717e8a99a49e918477828f9ca9988b7e726553493f332a36414c566774818d9aaa988b7f7a8796a0a196887c6f6255483c2f24180d010000000000000000000000000000010b151f28343f4a545f69717e8b939ea99f948b7f72695f544a414c56616c75818e97a1a89e938b7e71695f544a3f342b1f160c0000000000000000000000000000040d1a25313b44505c666f7c87939f9e9184796d60584e41382d22170b02000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000a1724303d4a5763707d8a96a9b3a69a8d807367594f42382f27201f1c18191e202429323b44505b65737f8c99a9a6a9998c807366594d4033261a0d000000000000000000000714202d3a46525e697683909daaada196897d7063594f433a312b282223282c3039434e58626f7c8895a0acaa9d908477695f53463a2d211407000000000000000000000000000009111a222a303940454e53575f62676d7175797b7d8082838485858685858483817f7d7b7874706d66615e56524c443e36302920180f0700000000000000000000000000000000000000000000000000000000000000000000000006101922293035383939393939393939392c29231d150d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181e24292c2d3135373839393939393933322f2a231c130a000000000000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9a296897c6f6356493c3023160900000000000000000000000000000000000000000000000000000000000000030f1c28333f4a54616d7a86929facacacacac9f92877b6e61544a3f34281c10030000000000000000000000000000000000000000000006121f2c3844515c667986939facaca094877a6d6154473a2e21140700000000000714212e3a4754616d7a8182828282828282828183909da99c8f82828282828282828282817b6e616774808d9aaaa29fa29f95887b6f62544b4034281d2935414c56626f7c8995a09f9fa4ac968a7d7063574a3d3024170a000000030b131a202427282d2d2d2b3744505b6576828f9c9285796d6053463a2d2d2c3844515c667683909c918478695e52463a2d2d2d2524211d1811090000000000000000000000000714202d3a4753606d7a8693a0ada6998c807366594d4033261a0d0707040100000000000000000000000000000000000000000000000006111b262f3844505c666f7c87929fa8a69f9a939aa4a99d93897d70675d51453c30261c110600000000000000000000000000000000000000000000000000000006121f2b37434e586774818e9aab9b8e81757f8c99a99b8e8275655b5044372d3946525e687784919da298887c7784919ea9998c7f7266554b4035291d1104000000000000000000000000000000030d17232e38424d57626c75828f97a1a69f92867b6e665b5045525d68707d8a939ea9a1968e81756c62574d42382e22190d0400000000000000000000000000000009141f28343f4a54606a74808d97a1968d80736a5f53493f33271e1308000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000b1825323e4b5865717e8b98a4b1a4978a7e7164574b3e30261d1512100c0e1114192027333f4953616e7b88979a9998978f8276695c4f4336291c10030000000000000000000814212e3b4754616e7b87959fabab9e9184786c6053463d31281f1c17181c1f27313c47535f6a7784919daaaca095887b6e6155483b2e2215060000000000000000000000000009121b232c343c424b51585f62696e747a7d8185888a8c8f9091919292929191908e8c8a8884807d79736d68615e565046413a322a2119100700000000000000000000000000000000000000000000000000000000000000000000020d18222b343b414445464646464646464638342f271f150b01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c13191d202125282a2b2c2d2d2d2d2d2625221e18120a01000000000000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9a296897c6f6356493c302316090000000000000000000000000000000000000000000000000000000000000006121f2b3844505b66727f8c99a3aeaaa8aaafa3998c7f73665c5044382b1f14090000000000000000000000000000000000000000000004101c2834404a5f6c7986929facada093867a6d6053473a2d20140700000000000815212e3b4854616e7b878e8e8e8e8e8e8e8e8e90959fab9f948f8e8e8e8e8e8e8e8e8e887c6f626774808d9aa7aeacaa9d9083766a5f5342392e2319242f3a4754606a7783909daaacafa3968a7d7063574a3d3024170a0000000001090f14181a1b20201b27333f495366737f8c9998887c6f6255493c2f222834404a546773808d9a96877b6e6154473b2e212020201b1a17140e08010000000000000000060c1114202d3a4753606d7a8693a0ada6998c807366594d4033261a1a1413110d0801000000000000000000000000000000000000000000000b17222d38414d57606d78839099a3ab9f948f87939fa8a59e9184796d60584e42382e23170c0300000000000000000000000000000000000000000000000000000814212e3a47535f6a7884919eab988c7f727c8897a29e9285796c605346392e3a4754616d7a8795a09f92857974818e9ba79c8f8376675d5145392c2013060000000000000000000000000000000006111c26303b45505a616d7a85919ea4a2989083786c60574f59606d7a84919ea5a49a91847a6d615a50453b30261c100700000000000000000000000000000000030c17232e38424e58606d7a85919e9f92877c6f655b50443a3025190c030000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000c1925323f4c5865727f8b98a5afa396897c706356493d3023140b0604000205080e17222d3846535f6978858e8d8c8c8b8a85786b5e5245382b1f12050000000000000000000b1824313e4b5764717e8a97a7b1a79a8e8174665b5044382b1f160f0b0c10151f2b37434e586773808d9aa6b1a7988b7e7165584b3e2d22170b00000000000000000000000009121b242d353e464e545c606a6f757b81868a8e929797999b9d9d9e9f9f9f9e9d9d9b999796918d8985807a746e68615a524c443c332b2219100700000000000000000000000000000000000000000000000000000000000000000008131f29343d464c5152535353535353535345403931271d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d111314181b1e1f202020202020191816120d070000000000000000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9a296897c6f6356493c30231609000000000000000000000000000000000000000000000000000000000000000613202d394653606c7884919eaba69e9c9ea6ab9e9184786d6053463b31261a0e00000000000000000000000000000000000000000000000c18232e46525f6c7985929facaca09386796d6053463a2d20130700000000000815212e3b4854616e7b87949b9b9b9b9b9b9b9b9d9fa79fa69f9c9b9b9b9b9b9b9b9b95887c6f626774808d9a9f9f9fa2988b7e7165584e4330271d131e2b38434e5865727f8b98a29f9f9f968a7d7063574a3d3024170a0000000000010911181e2225252d222d3d4a5663707d899a988b7f7265584c3f3025232e3e4a5764717d8a97978a7d7164574a3e2e232d2d2d2726241f1a130b020000000000000910171d21202d3a4753606d7a8693a0ada6998c807366594d403326262621201d19130c040000000000000000000000000000000000000000040f1b27333f49535f69727f8c95a0aba3998f82808c96a0aca0968d80736a5f544a3f34281f140900000000000000000000000000000000000000000000000000000815222f3b4855626e7b8896a1a399897c6f7985929fa197887b6f6255483c2d3e4a5764717d8a97a89c8f8276717e8b98a89f92867a6d6053473a2d20140900000000000000000000000000000000000a141e29333f46525e68707d8a929da89f948b7f72695f56616b74818e97a1a79f93887d70685d52483e33291e140a00000000000000000000000000000000000006111c26303d45525d68717e8a949f999083776c60564c41362a1e150b0000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000c1825323f4b5865727e8b98a5afa295897c6f6256493c2f23160600000000000006111b2a36424d576673808180807f7e7d7d706356493d3023160a000000000000000000010e1b2834414e5b6774818e9aa7b4aa978a7e7164544a3f3328190d040000040d1b26323d4a5764707d8a97aab4a79b8e81746853493f33271b0f030000000000000000000007101b242d363e474f585f666d737c82878e92989b9ea2a9a6a8aaa8a7a6a6a6a7a8a9a8a6a8a19e9a97928c86807a716c615e564d453c342b22190e0500000000000000000000000000000000000000000000000000000000000000000c1824303b464f575d5f606060606060605f514b43392f23180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010407070b0e11121313131313130c0c0a0602000000000000000000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9a296897c6f6356493c3023160900000000000000000000000000000000000000000000000000000000000005121e2a36424d5763707d8a96a0ab9e948f949eaaa1968a7d7064574d42362a1c120700000000000000000000000000000000000000000000071f2c3845525f6b7885929eabaea3998679665c5145382c1f130600000000000815212e3b4854616e7b8793939393939393939393939393939393939393939393939393887c6f626774808d939393939392857a6d6054473c3121150f1b27323d4754606d7a869293939393938a7d7063574a3d3024170a000000000009131b23292e31323939393a4754606d7a86939b8e817568564d42363939393b4854616e7b87969a8d807367544a3f34393939393433302b241d140b010000000009121b22282d30313a4753606d7a8693a0ada6998c807366594d40333333332d2c29241e160d04000000000000000000000000000000000000040e1a242b3744505b656e7b86929fa7a89f92867c7984919ea5a89f92877c6f665c50443c31261a0e0500000000000000000000000000000000000000000000000004101c2934404b5565727f8c98a89f9286796d75828f9ba9988b7f726553493f35414c566774808d9aaa998c7f726e7b8896a1a3998a7d7064574a3d31261a0e0200000000000000000000000000000000020c18212a36414c56616b74818d96a0a69f92867b6e665d68707d8a939ea9a0958d80736b60564c41362d21180c02000000000000000000000000000000000000000a151e2935414c56616c76828f989f948b7e71685e52463d30271d120700000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000b1724313e4a5764717d8a97a4b0a396897d7063564a3d2d22170b010000000000000e1a26313b4b58636e73757473727170706b6054483b2f22160900000000000000000005111e2a36414c566a7683909da9aea298887b6e6155483b2d221708000000000a15212e3b4854616e7b8798a2aeaa9d908377655b5044372b1f1205000000000000000000050e19222d363e485059616a6f7980878f93999fa3aaabaaaaa29f9d9b9a9a999a9a9b9d9fa2aaa9aba9a19e98928d857e756d685f574e463c342a20170c0300000000000000000000000000000000000000000000000000000000000003101c2835414c5761696c6c6c6c6c6c6c6c6c5c554b4034291c1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9a296897c6f6356493c302316090000000000000000000000000000000000000000000000000000000000000714202d3a46525e6975828f9ba8a3998f828f98a2a89c8f8276695f5346392e23180c00000000000000000000000000000000000000000005121f2b3845525e6b7885919eabac9f9286796c5f4b4034281c100400000000000815212e3b4854616e7b8686868686868686868686868686868686868686868686868686867c6f62677480868686868686868174675d5145392c20130a16202c3945525d687481868686868686867d7063574a3d3024170a0000000007111b252d343a3e3f4646464645525d687784919d918478695e5246464646464646525e697884919c908376665c50444646464646413f3c362f261d130800000006101b242c34393d3e404753606d7a8693a0ada6998c807366594d40404040403a39352f2820160c0100000000000000000000000000000000020c16202a36424d56606c77828f98a3aca0968c8073707d8a939eaaa3999083786d60574d42372b20170d02000000000000000000000000000000000000000000000006131f2c3845515c6776828f9ca99c90837667727f8b98a99b8f8275655b50443945525d687783909da298897c6f697884919eab9a8d817467574e42372b1e12060000000000000000000000000000000000060f1925303a444f59606d79849199a3a2989083786c606d7a84919ea5a3989083796d60594f443a30241b0f060000000000000000000000000000000000000000030c19242f3a43505a616e7b86929f9e92857a6d61594f42392e23180c03000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000a1623303d495663707c8996a8b1a4978b7e7164544a3f33281d120700000000000009141f2f3b47525c63666867666564646360594f44382c2013070000000000000000000713202d3946525e687885929fabac9f9285796c605346392d201306000000000714212d3a46535e697985929facac9f9285796c605346392d2013060000000000000000020d17202b343e48505a616b707c838c92999fa4abaca7a09d999892908f8d8d8d8d8d8f909298989c9fa4abaaa29f97928a827a6e6960584e463c32291e150b00000000000000000000000000000000000000000000000000000000000005121e2b3844515d6973787979797979797976675c5145382c1f1306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003060809131313131313060400000000000000000000000000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9a296897c6f6356493c30231609000000000000000000000000000000000000000000000000000000000003101c28343f4a54616e7b87929fac9f92877a85929fab9f93877b6e61544a4034281c1004000000000000000000000000000000000000000005121e2b3845515e6b7884919eabac9f9285796c5f52462e23180c0000000000000714202d3a46525e6976797979797979797979797979797979797979797979797979797979766a5f646e7479797979797979746f64554b4135291d1104111d2935414c56646f7479797979797979706b6155483c2f231609000000010d18232d373f464a4c53535353534c566774818e9a96877b6e6154535353535353534d576875828f9b9285796d60535353535353534e4c4741382f241a0e0300000c17222c363e45494b4d4d53606d7a8693a0ada6998c807366594d4d4d4d4d4d4745413a32281e13080000000000000000000000000000000008131e28323a46525e69717e8b949faaa59e9184796d6b75818e98a2aba0958c7f72695f53463f32291e140800000000000000000000000000000000000000000000000714202d3a4753606d7986929fab998d8073666f7b8897a19e9285796c6053463a4754606d7a86939f9f9286796d6875818e9ba89e9184786a5f53473a2e21140700000000000000000000000000000000000008131e28323e45515d676f7c87929fa79f948b7f726b74818e96a1a69f92867c6f675c51473d32281e12090000000000000000000000000000000000000000000008131e28313e46535f69727f8c95a0978e81746b60544b4034281f1409000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000814212e3b4754616e7a8795a0aca79a8e8174665b5044392f2318110a020000000003131f2a35404a52585a5b5a5959585756544f473d32271b10040000000000000000000714212e3a4754616d7a8798a2aeaa9d918477665b5044382b1f12060000000005121e2a36424d576a7784919daaaea298877a6e6154473b2e211408000000000000000009141f29323d46505a626c717d8690959fa3ababa49f9b95908c898584828180808081828385888b8f93999fa2aaa9a19e938f847b6f6a60584e443b30271d1207000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c788586868686868686796d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0f12151520202020202013100c070100000000000000000000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9a296897c6f6356493c30231609000000000000000000000000000000000000000000000000000000000006121f2c3844505c6673808c99a3ab9c8f8276818e9ba9a4998d8073665c5144382c1f1509000000000000000000000000000000000000000005111e2b3844515e6b7784919eaaab9f9285786c5f5245392c1f0700000000000005121e2a36424d575e6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c625f585c64676c6c6c6c6c6c6c67645d53433a2f24180d010d19242f3a43535d64686c6c6c6c6c6c6c6361594f44382c20140700000006121e29343f495156586060606060606065717e8b98978a7d71646060606060606060606065727f8c9898887c6f62606060606060605a58524a41362b1f14080005111d28343e48505557595959606d7a8693a0ada6998c8073665959595959595954524c443a2f24190d010000000000000000000000000000030d1924303a44505a616e7b85929fa6a99e93897d7067616e7b86929fa7a79f92867b6e615a50443b3025190d04000000000000000000000000000000000000000000000a1723303d4a5663707d8998a2a3998a7d70636a7885919ea297887c6f6255483d4a5763707d8a99a49c8f82766665717e8b98a8a196887b6e6255483b2f24180c000000000000000000000000000000000000020c16202935404b55606a737f8c959fa69f92867b707d89939da89f948b7f726a5f554b40352b20160c0000000000000000000000000000000000000000000000010c161f2a36424d57606d7883919a9e93897d70665c51453c31261a0d040000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000714202d3a46525e697784919dacab9e9184786c60554b403429221c140b05000000020e19242e3840474b4d4e4d4d4c4b4a4948443d352b21160b000000000000000000000915222f3c4855626f7b8895aab4a99c8f837669544a3f33281c0f0300000000020e1a2531434f5c6976828f9ca9b4aa95887b6f6255483c2f22150900000000000000030d1925303b444e58626c717e879298a0a7afa79f99938e88837f7c79777574737373747577797c7f83878d92989ea5ada59e9691857c6f6a5f564c42392e23180c030000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929393939393867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e151b1f21222d2d2d2d2d2d1f1c18120b03000000000000000000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9a296897c6f6356493c3023160900000000000000000000000000000000000000000000000000000000000713202d3a4653606d7984919eaba3998b7e717d8a97a2ab9e9285796d6053463c31261a0e010000000000000000000000000000000000000004111e2b3744515e6a7784919daaab9e9185786b5e5245382b1f12050000000000020e1a25303b454d525f60606060606060606060606060606060606060606060606060606055534e52585a606060606060605b59534b4131281d13070008131e2831414b53595b6060606060606057554f473e33281c10040000000916222e3a46515b62656c6c6c6c6c6c6c6c6f7b88989a8d80736c6c6c6c6c6c6c6c6c6c6c6c6f7c8999988b7e726c6c6c6c6c6c6c6c67645c52473c3024170b000815212d3945505a6164666666666d7a8693a0ada6998c80736666666666666666605d564c4135291d110400000000000000000000000000010b151f2935414c56616c75828f97a2ada2978e81756b605e69727f8c95a0aca2988f82766c62564c41362a1f160c01000000000000000000000000000000000000000005111e2a36414d566773808d9aaa9f92867a6d606875818e9ba9988b7f7265544a404b556773808d9aaa998c7f7366616e7b8896a1a8988b7f7265554b4035291d1004000000000000000000000000000000000000050e18242f39434e58606d78839098a2a29890827a84919ea5a2978f82776c60584e43392e23190e04000000000000000000000000000000000000000000000000040d1a26313b44515c666f7d88939f9d9184796d60574d42372b20160c0100000000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b0005111e2a36424d566774808d9aa4ada1968a7e71675c51453f332d261d170e0600000008121c262e353b3f404241403f3e3d3d3b38322b23190f04000000000000000000000a1723303d4a5663707d8996a3b0a89b8e8275685b4f422d22170b000000000000091c2835424f5b6875828e9ba8b0a396897d7063564a3d3023170a000000000000010b151f2a36424d56606a717e889299a2aaafa49c959087817c77726f6d6668676766676768666c6f72767b80868e939fa3aaa8a09792867c6f685e544b4034282015090000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929f9f9f9f93867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101820262b2e2f3939393939392c29231d150d030000000000000000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9a296897c6f6356493c302316090000000000000000000000000000000000000000000000000000000005121e2a36424d5764707d8a96a1ac9f92867a6d7985929faba1978a7e7164574d42372b1d12070000000000000000000000000000000000000004111d2a3744505d6a7783909daaab9e9184786b5e5145382b1e120500000000000009141f29333b424648535353535353535353535353535353535353535353535353535353494743474c4d535353535353534e4c4841382f1f160c0100010c161f2f3941484d4e535353535353534a48443e352c21160b000000000b1825313e4a56626d727979797979797979797885929d908379797979797979797979797979797986929b8e81797979797979797979746e64584c3f33261a0d000a1724303d4955616c7173737373737a8693a0ada6998c807373737373737373736d685d5245392c2013070000000000000000000000000007121d27313945525d68717e8a939ea9a69f92857a6d615957606d7883909aa4aa9f948b7e71685e52463e31281e130800000000000000000000000000000000000000000714202d3946525e687784909daa9d908377675d65717e8b98a89b8f8275665b5045515d677683909da298897c6f635f697884919ea99c8f8276675d5145382c1f13060000000000000000000000000000000000000007121d27313d44505c666e7b86929fa69f9490849196a1a59e92857b6e655b50463c30271d1108000000000000000000000000000000000000000000000000000009141f2834404a54606b74818e97a0968c7f73695f53463e32281e130800000000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b00020e1925303b4855626e7b87939faaa99e9184796d605a50443f382f292017110a0300000a141c242a2f3233353433323131302f2c272119110700000000000000000000000a1724313d4a5764707d8a97a3b0a79a8e8174675b4e4134281b060000000000010e1b2834414e5b6774818e9aa7b0a3978a7d7064574a3d3124170a00000000000007121d27313946525e696f7c86929aa3ababa39f928d837c756f6a6662605c545a5a5a5a5a545b606265696e747b818a9298a2a9a9a19891847a6e665c51453c31261a0e0500000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabaca093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e18222a31373a3c46464646464638342f271f150b0100000000000000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9a296897c6f6356493c30231609000000000000000000000000000000000000000000000000000000000714212d3a46535f6976828f9ca8ab9c8f82766874818e9ba9a99c8f8276695f5347392f23180c0000000000000000000000000000000000000004101d2a3743505d6a7683909da9aa9e9184776b5e5144382b1e1105000000000000020d17212930363a3b4646464646464646464646464646464646464646464646464646463c3b373c3f414646464646464641403c362f261d0d04000000040d1d272f373c4041464646464646463d3c38332c231a1005000000000c1925323f4c5865727f868686868686868686868a989f95908686868686868686868686868686868b999e938e8686868686868686868074675a4e4134271b0e000b1824313e4b5764717e8080808080808d99a6b3a99c90828080808080808080807a6d6054473a2d211407000000000000000000000000030c18242f39434f59606d7a85919ea5ab9f948b7e71685e52505c666f7c87939fa9a69f92857a6e61594f433a2f24190c03000000000000000000000000000000000000000814212e3b4754616e7a8795a0ac9a8d80736755616e7b8796a19f9285796c60534753606d7a86929f9f9285796d60576874818e9ba79f9286796d6053473a2d20140900000000000000000000000000000000000000010b151f28343f4a545f69717e8b939ea69f969196a0a89d938a7e71695e53493f342a1e150b000000000000000000000000000000000000000000000000000000030c18232e39424f59616d7a85929e9f92867b6e615a50443a2f24190c02000000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b00000914212e3a47535f6a75828f98a3aca0968d80746c625a504a423b3228231c150c0500020a12191f2326272827262625242322201b160f070000000000000000000000000b1824313e4b5764717e8a97a4b1a79a8d8174675a4e4134271b0e0100000000010e1b2734414e5a6774818d9aa7b0a4978a7d7164574a3e3124170b0000000000000c18232f3943505a616e7b859198a3acaca399928b80786f6a625f585653504a4e4d4d4d4e4a505355575e61696e757e869297a2aaaaa1969082786d60574e42372b21170b00000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202a343c43474853535353535345403931271d120700000000000000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9a296897c6f6356493c3023160900000000000000000000000000000000000000000000000000000004101c2834404b54616e7b87939faca3998b7e7165707d8a97a2ab9f94887b6e62554b4034291c100400000000000000000000000000000000000003101d2a3643505d697683909ca9aa9d9184776a5e5144372b1e110400000000000000050f171f252a2d2e3939393939393939393939393939393939393939393939393939392f2e2b303334393939393939393433302b251d140b00000000000b151d252b30343539393939393939302f2c28211a110800000000000c1925323f4c5865727f8b93939393939393939394a2a79f9d9393939393939393939393939393939fa3a59e9b93939393939393938d8174675a4e4134271b0e00101c2936434f5c6976828c8c8c8c8c8d929ca8b4ab9f94908c8c8c8c8c8c8c8c877b6e6154483b2e2115080000000000000000000000000a151e2935404b55606b74818e97a1ada3999083776c60564c4a54606b74818e97a1ada2978e81756c61554c4135291e150b000000000000000000000000000000000000030f1b27333f495364717e8b97a7a49a8a7d7064575e697884919ea297887c6f62554a5663707d8999a39c8f8276665c5864717e8b97a8a3988a7d7063574a3d31261a0e0200000000000000000000000000000000000000030d17232e38424d57626c75828f97a1a8a09ea0a8a0968e81746c61564d41382d22180c030000000000000000000000000000000000000000000000000000000007121c27303d46525d68717e8b949f988f82766c61564c4135291e140a000000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000006121f2b37434e58626f7c86929fa6a89d928b7e716c605b544d443d342e261e170e070000080e1317191a1b1a1a191817161613100b04000000000000000000000000000b1825313e4b5864717e8b97a4b1a79a8d8074675a4d4134271a0e0100000000010e1a2734414d5a6774808d9aa7b1a4978b7e7164584b3e3125180b000000000004101c2934404b55616c76828f97a1aaafa49a92877e736d665f58534e4946443f41404040413f4446484d53565e616c717c859298a2aca89f948d80736a5f53473e33281c1004000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26313c464e535560606060605f514b43392f23180c00000000000000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9a296897c6f6356493c3023160900000000000000000000000000000000000000000000000000000006131f2c3845515c6673808d9aa4ac9f92867a6d606d7985929faba69a8d8073675c5145382c1f150a00000000000000000000000000000000000003101d293643505c6976838f9ca9aa9d9084776a5d5144372a1e11040000000000000000050d141a1e20212d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d22211f2326272d2d2d2d2d2d2d282724201a130b020000000000030b131a202427282d2d2d2d2d2d2d2423201c1610080000000000000c1925323f4c5865727f8b989f9f9f9f9f9f9f9f9faaacaba99f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9faaacaaa89f9f9f9f9f9f9f9a8d8174675a4e4134271b0e00101c2936434f5c6976828f99999999999ca4aeb9b0a69f9c9999999999999994877b6e6154483b2e211508000000000000000000000006111c26303845515d67707d89939da9a89f92877c6f655b5044424f59616d7a85929ea6a99e938a7d70675d51453d30271d1207000000000000000000000000000000000005121f2b3744505b6575818e9ba89f93867a6d6154576774818e9aa9988b7f7265544b556673808c99aa998c7f72665454616e7b8796a1aa9a8d807467574d42362a1e1205000000000000000000000000000000000000000006111c26303c45505a616d7a85929eabacaaaca3999184796d605a50443b2f261b10060000000000000000000000000000000000000000000000000000000000000b151e2935414c56626c76828f989f948a7e71685d52453d30261c11060000000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b0000020f1a26313c47535f6a727f8c949fa7a49f93877e736c665e564f443f38302920191109000002070a0c0d0f0e0d0c0b0a0a0907040000000000000000000000000000000b1824313e4b5764717e8a97a4b1a79a8d8174675a4e4134271b0e0100000000010e1b2734414e5a6774818d9aa7b1a4978a7e7164574b3e3124180b000000000006131f2c3845515c67707d8a949fa9b0a69f93887e716c605c544e47433c3a38342e3433342d3338393c42464d525a616a6f7c86929aa4afa69f92877b6e62594f44392d20150a000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e585f626c6c6c6c6c6c5c554b4034291c1004000000000000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9a396897d7063564a3d302317080806020000000000000000000000000000000000000000000000000713202d3a4653606d7985929eacaa9c8f8275685d6674818e9ba9ab9e9285796d6053473c31261b0f01000000000000000000000000000000000003101c2936434f5c6976828f9ca9a99d9083766a5d5043372a1d100400000000000000000002090e121415202020202020202020202020202020202020202020202020202020161513171a1a202020202020201b1a18140f08010000000000000001090f14181a1b20202020202020171614100b05000000000000000c1925323f4c5865727f8b939393939393939393939da0a7a09393939393939393939393939393939393a0a79f9d939393939393938d8174675a4e4134271b0e00101c2936434f5c6976828f9c9f9f9fa0a2a7afb9b6aea8a69f9f9f9f9f9f9f94877b6e6154483b2e21150800000000000000000000020b17232e38424e58606d7984919ea5aca1968d80736a5f53493f3d46525e68717e8b949faba59e91847a6d60594f43392e23180b02000000000000000000000000000000000613202d394653606c7885929eaa9d908477685d525764717e8a97a79b8f8275665b515c677683909ca298897c6f6356535e697884919eaa9d918477695f53463a2d2114070000000000000000000000000000000000000000000a141e2a333f46525e68707d8a99a3aeb7ac9f92877c6f675d51483e32291d140a00000000000000000000000000000000000000000000000000000000000000030c1924303a44505a626e7b86929f9e91857a6d60584e42382e23170b0300000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b0000000a15202b37434e58606c78828f959fa6a499938b80786e686159504a423b322b231b1209000000000000020100000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0a79a8e8174675b4e4134281b0e0100000000010e1b2834414e5b6774818e9aa7b0a3978a7d7064574a3d3124170a0000000003101c28343f4a54606d7984919ea6b0aa9e948c7f736c625a504a423c37322d2c282327272722282b2d31363b42465058606a707e88939fa8aea3998f82766c6155493c31261b0f000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000000003060b0f15212e3a47535f6a76797979797976675c5145382c1f130e090603000000000000000000000000000000000000000000000000000003101c2936434f5c6976828f9ca9a4978a7d7164574a3e2f24191514120e090300000000000000000000000000000000000000000006121f2b37434e5864717e8a97a1ada3988b7e71645663707d8a97a1ada2978b7e7164584e43372b1d13070000000000000000000000000000000000020f1c2935424f5c6875828f9ba8a99c908376695d5043362a1d10030000000000000000000000020507081313131313131313131313131313131313131313131313131313130908060b0d0e131313131313130e0e0b0803000000000000000000000003080c0e0e131313131313130a0907040000000000000000000c1925323f4c5865727f86868686868686868686868995a0958986868686868686868686868686868689959f958986868686868686868074675a4e4134271b0e00101c2936434f5c6976828f9393939393969da7b2aea49c999393939393939393877b6e6154483b2e211508000000000000000000000a141d28343f4a54606a73808d96a0aca59e9184796d60584e413835414c56606c77829099a3ada1968d80746b60554b4034281d140a000000000000000000000000000000000916222f3c4955626f7c8897a1a79a8d817467564c54616e7a8795a09f9285796c6053606d7986929f9f9285796d60534d576874818e9ba7a096887b6e6155483b2e23180c00000000000000000000000000000000000000000008131e28323a45515c666e7b86929facb7ab9e91847a6d605a50443b2f261b1106000000000000000000000000000000000000000000000000000000000000000008131e28323e47535f6973808c96a0978d80746a60544a3f34281f140900000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000000030f1a26313c44505b666d79838f949da5a49f928d827a706b605c544d443d352d241b12090000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d8996a3b0a89b8e8175685b4e4235281b090000000000020f1b2835424e5b6875818e9ba8b0a3968a7d7063574a3d3024170a0000000006121f2b3844505c66727f8c96a0acaea2988f82776c605a50443f38302b26201f1c171a1a1a171c1f20252a30363e464e58616c73808d96a1acab9f948a7d7064584e43372b1d12070000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000060b1012171b1f222f3c4855626f7c8686868686796d6053473a2d201e1a15130f0a04000000000000000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8a6998c7f7366554b4135292422211e1a150e0600000000000000000000000000000000000000000814212e3a47535f6a7683909ca9ac9f92867a6d6054606d7985929eaba99d9083766a5f53473a2f24180d0100000000000000000000000000000000020f1c2835424f5b6875828e9ba8a99c8f8376695c504336291d10030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4a56626d72797979797979797979797983909d918479797979797979797979797979797983909d90837979797979797979746e64584c3f33261a0d00101c2936434f5c6976828686868686868b96a2aea89c928c8686868686868686867b6e6154483b2e21150800000000000000000006111b262f3844505c666f7c87929fa8aa9e938a7d70675d51463c2f303a44505b656f7c87929fa8a89f93887d6f675c51453c2f261c1106000000000000000000000000000004111d2935404b5566727f8c99a9a8978a7d7164574a525e687784919da297887c6f625663707c8998a39c8f8276665c514b5864717e8b97a8a8988b7e7265544b4034281c100400000000000000000000000000000000000000050f19242f3a444f59606d79839099a3acaaaca1968e81746c61564d41382d22170c0300000000000000000000000000000000000000000000000000000000000000020c16202b37424d57606d7984919e9f93877c6f665c50443b30251a0d04000000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000000000a152028333f4a545d676d79828e939fa3a49c948f857d736d665e564f473e362d241b110800000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8895aab4a99c8f8276695c4f4330251a0e0200000000030f1c2936424f5c6975828f9ca8b5ab95897c6f6256493c2f231609000000000713202d3a4653606d7884919ea8b2a99f92867b6e655b50483e342e261e1b1312100c060d060b0f12131a1f252a343d46505a606d7984919ea8b0a69c8f83766a5f5347392e23180c0000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000001080d11171c1f22272b2d2f3c4855626f7b88939393867a6d6053473a2e2d2a25211f1b15100b0500000000000000000000000000000000000000000000010e1b2734414e5a6774818d9aa7a89b8f8275675d51453c352f2f2e2b2620180f0600000000000000000000000000000000000004101d2935404b55626e7b88949faba89b8e8175685d525c6674808d9aa7ab9f95887c6f62554b4035291d110400000000000000000000000000000000020f1b2835424e5b6875818e9ba8a99c8f8276695c4f4336291c100300000000000000060b0e10111313131313130f0e0c0904000000000000000000000003070b0d0e13131313131312110f0c0701000000000000000000000004080a0b1313131313131308070502000000000000000000000000000000000000000916222e3a46515b62656c6c6c6c6c6c6c6c6c6c74818d9a93867a6d6c6c6c6c6c6c6c6c6c6c6c6c74818e9a9286796d6c6c6c6c6c6c67645c52473c3024170b000f1c2835414e5a6670767979797979798693a0ada6998c8079797979797979797976695e53463a2d2114070000000000000000000b17222d38414d57606d78839099a3aea2988e81756b61554b40342a27333f49535f6a73808d96a1ada49a9184796d60584e42382d22170b03000000000000000000000000000613202c3945515d6776838f9ca9a096877a6e6154474c566774808d9aa9988b7f72655466737f8c99aa998c7f7266544a4854616e7b8796a0a89c8f8275665c5145382c1f1306000000000000000000000000000000000000020b17212935414c56606b73808d95a0a7a09da0a79d938a7e70685e53493f33271e150b0000000000000000000000000000000000000000000000000000000000000000040e1a26313c45515c67707d89939e999083786d60574d42362a1f160c010000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b00000000030b17222d38424b555d676d78818b9298a0a69f97928880786e69605950483f362d231a0e04000000000000000000000000000000000000000000000000000000000814212e3b4754616e7b8798a3aeaa9d9084776a574d42362a1e12050000000005111d2935414c566a7783909daaafa399877b6e6154483b2e21150800000005111e2a36414c5664707d8a96a1adada1978c7f72695e53493f3628231c140c0a060300000000000306090e1419222b343e45515d67717e8a96a0acab9f94887c6f62544b4034281c100400000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000060b13191c23282b2d3337393b3e4855626f7b88959f93867a6d6053473e3b3a36312e2b26201c170e09030000000000000000000000000000000000000000000c1825323f4b5865727e8b98a6ac9f92857a6d60574d45413f3b3a37312a21180e03000000000000000000000000000000000006131f2c3945515d6774808d9aa6aca096897d7063564c54626f7b88959faba79a8d8174675d5145392c20150a00000000000000000000000000000000020e1b2835414e5b6874818e9ba7a89c8f8275695c4f4236291c0f030000000000040b12171b1d1e2020202020201c1b19150f09020000000000000001080e13171a1a2020202020201f1e1b18130c050000000000000000050c11141717202020202020201514120e0903000000000000000000000000000000000006121e29343f4951565860606060606060606064717e8b979a897d70636060606060606060606065717e8b9899897c6f6360606060605a58524a41362b1f1408000d1925323d49545e66696c6c6c6c6d7a8693a0ada6998c80736c6c6c6c6c6c6c6c6c5e574d42362a1e12050000000000000000040f1b27333f49535f69727f8c95a0aba79f92857b6e61594f43392f22222d38414e58606d7984919ea6aca0958c80736a5f544a3f33281f1409000000000000000000000000000714202d3a4753606d7a86929faa9d918477685e52464a5764707d8a99a49b8f8275655c6676828f9ca298897c6f62564946525e697784919eaa9f9285796d6053463a2d2013090000000000000000000000000000000000000a141d29333b45525d68707d87939fa69f959095a0a59e92857a6e655b50443c30271d120700000000000000000000000000000000000000000000000000000000000000000915202834404b55606b75818e97a0958c7f72695e52463e31281d12070000000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000000000006111c262f3a434b555d666d747f8691969ea5a19a938d827b706b615a50483f352b20160c020000000000000000000000000000000000000000000000000000000713202d3a4653606d7986929facab9f928578695e52463a2d201407000000000713202d3946525d687885929eabac9f9286796d6053463a2d2013070000000714202d3946525e6876828f9ca8b2ab9e9185796d60574d41382d2417110a02000000000000000000000002091019222935404b55606c7884919dabb0a69a8e8174665c5145382c1f130600000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000020a11171e24292e34383a3f4446484b4d55626f7b8895a093867a6d60534d4a4846423c3b37322d28221a150e0600000000000000000000000000000000000000000815222f3b4855626e7b88949faba2988b7f72695f57514c4c4847423c332a20150900000000000000000000000000000000000714202d3a4753606d7985929fabab9e9184786c605346535f6a7683909daaab9f92857a6d6053473d32271b0f01000000000000000000000000000000010e1b2834414e5b6774818e9aa7a89b8e8275685b4f4235281c0f0200000000050e161d23272a2b2d2d2d2d2d2d282825201b140c030000000000020b12191f2326272d2d2d2d2d2d2b2b28241e170f060000000000000810171c2123242d2d2d2d2d2d2d22211e1a140e0600000000000000000000000000000000010d18232d373f464a4c535353535353535355626e7b8897998c7f736659535353535353535355626f7b8898988c7f726559535353534e4c4741382f241a0e03000915212c38424c545a5c606060606d7a8693a0ada6998c807366606060606060605f534d453b31251a0e0200000000000000040e1a242b3744505b656e7b86929fa7ab9f958b7f72695e52473e31271d1b262f3c45515d67707d8a949eaaa89f92877c6f665b50443b31251a0e040000000000000000000000000a1724303d4a5763707d8a99a3a79a8e817467564c414754606d7a86939f9e9285796c606d7985929f9f9285796d605346424d576774818e9aa7a298897d706356493d30251a0e020000000000000000000000000000000006111c262f3b45505a606d7a849199a49f9490849096a1a1978f82776c60584e43392e23180e0400000000000000000000000000000000000000000000000000000000000000030c18232e39434f59616d7a85929f9f92867b6e61594f43392f24180b0200000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b0000000000000a141d28313a434b545c606d727c848e939fa2a49f9490857d716c625a50473d32281e130800000000000000000000000000000000000000000000000000000006121f2b3844505c667784909daaaea298877b6e6154483b2e21150a000000000714212e3a4754616d7a8797a1adaa9e918477665c5145382c1f13060000000814212e3b4754616e7a87939facafa3998c7f72675d51453b2f261b1206000000000000000000000000000000071018242f3944505b66727e8b99a3aeac9f9285796d6053463a2d20130800000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000040b141b22272f35383f444649505355585a5c626f7b8895a093867a6d605b5a5754534d4947433c39332b261f180f09000000000000000000000000000000000000000814212e3a47535f697683909ca5aa9f92857b6e69605d555855534d453c31261a0e0200000000000000000000000000000006131f2b37434e5865717e8b97a2ada3998c7f72655b50444e5865717e8b98a2aea2988b7e7165584e43372b1e1308000000000000000000000000000000010e1a2734414d5a6774808d9aa7a89b8e8175685b4e4235281b0f02000000040e1720282e3336373939393939393534312c251e150c02000000010b141d242b3033343939393939393837342f2921180f050000000008121a22282d3031393939393939392e2d2b261f180f060000000000000000000000000000000007111b252d343a3e3f4646464646464647535f697885929c8f827569574d4246464646464653606c7985929b8e827568564d424646413f3c362f261d1308000005101b26303a42494e4f535353606d7a8693a0ada6998c807366595353535353534846423b33291f140900000000000000020c16202a36424d57606c77829098a3aea3999083786c60564d42352c1f15141d2935404b55616c75828f98a2aea3999083786c60574d42362a20160c020000000000000000000005121e2a36424d576774808d9aaba8978a7e7164574b3e45525d687783909da297887c6f626f7c8998a29c8f8276665c50443e4b5764717e8a97a8aa9a8d807367574d42362a1e1205000000000000000000000000000000030d17222d38424d57616c75818e96a1a39890827a84919ea59f948b7f726a5f554b40342820160c020000000000000000000000000000000000000000000000000000000000000007121d27303d46525e68717e8b949f988f82756c61554b4035291d140a00000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000000000000020b161f28313a424a515b626a6f7a818b9298a0a69f9792877e716c62594f443a3025190d03000000000000000000000000000000000000000000000000000003101c28343f4a546875818e9ba8b3aa978a7d7064574a3d32271b0d04000001081623303d495663707c8996a9b3a89c8f827569544b4034281c10040000030f1b27333f495364717e8b9aa4afac9f92867a6e61554b4033291d140a000000000000000000000000000000000007121d28333f4a54616d7a86929facaea298897d706356493d2f24190d01000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000050d161d262d333a41454a5053535b60626467686a6f7b8895a093867a6d6a686664615e5755534e49443e37312a211a120a01000000000000000000000000000000000006121e2b37424d5763707d89939ea6a29891847b736d676665625f574d42372b1e12060000000000000000000000000000000815212e3b47535f6a7683909da9ac9f92867b6e6153493f4753606d7a85929facaa9d9083776a6054473a2f24190d010000000000000000000000000000010d1a2734404d5a6773808d9aa6a79b8e8174685b4e4135281b0e020000000b16202932393f434446464646464642413d3730271e140900000008121d262f363c3f414646464646464544403a332b21170c01000005101a242c33393c3e464646464646463b3a37312a21180e030000000000000000000000000000000009131b23292e313239393939393937424d576975828f9c928578695f53473a3939393844505b6676838f9c918478695e52463a393433302b241d140b010000000a141e2830383d4143464753606d7a8693aab4a6998d8073665a4d46464646463b3a36312921170d030000000000000008131e28323a46525e69727e8b949faaa89f92877c6f665b50443b30231a0d0b18242f3943505a616e7b86929fa8ab9f958b7f72695e53463e32281e1308000000000000000000000714212d3a46535e697784919eaaa196877b6e6154483b414c566673808d99a9988b7f7266727f8c99aa998c7f7266544a3f3b4754616e7b8796a0aa9d908477695e52463a2d2014060000000000000000000000000000010b151f28333f4a545e69717e8a939ea79f92867b707d89939ea69f92867c6f675c51453d32281e130800000000000000000000000000000000000000000000000000000000000000000b151e2a36414c56606c778390999e938a7d70675d51453c2f261b1106000000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b00000000000000040d161f2830394044515860676d757e8691969fa7a19992887e716b60564c4135291f15090000000000000000000000000000000000000000000000000000000b17232e3f4b5865727e8b98a8b2a69a8d807367584e43372b1f15100c090e131e2a36414c5666727f8c99a5b3aa998c7f7366594c402e23180c00000005121f2b3744505b6575818e9bacb6a99c8f8276685e5243392f21170b020000000000000000000000000000000000010b17222d3846525d6875828f9ca8b4aa9a8d807367564c4135291d1104000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000050e171f282f383f444c51545c6063656c6e71747576787c8895a093867978777573716e6967625f58555047423c332c241c130a0000000000000000000000000000000000020e1a26313c4854606b74818e949da5a09691857f7a7673726e695f53473a2e211408000000000000000000000000000004111d2935414c55626f7c88959faba99b8f8275685e52413845515d6774818e9ba7aca095897c6f62564c4135291d11040000000000000000000000000000000d1a2733404d5a6673808d99a6a79a8e8174675b4e4134281b0e01000006121d28323b444b4f515353535353534f4d48423930251b0f0400030e19242f3840474c4d53535353535352504c453d33291e130700000c17222c363e45494a535353535353534846423c332a1f140900000000000000000000000000000000010911181e2225252d2d2d2d2d2631404c5966737f8c9997887b6e6255483b2f2d28333f4a546673808d9996877a6e6154473b2e2726241f1a130b0200000000020c161e262c3235363a4653606d798698a3aea79a8d81746753493f36393a3c3a38342f271f150b01000000000000030d1924303a44505a616e7b85929fa6ada1968d80746a5f544a3f32291f110807121d28313e46535f69737f8c95a0aca79f92867b6e615a50443a3025190d040000000000000000000815212e3b4854616e7b8796a0ab9e918478695e53463a3d4a5663707d8999a39b8e82756675828f9ca298897c6f6256493c3a46525e697784919daaa095877b6e6154483b2e23170c000000000000000000000000000007121d27313944505b666e7b85929fa5a0958c7f726b75818e97a1a3989083796d60594f443a3025190f0600000000000000000000000000000000000000000000000000000000000000030c1925303a44505b656f7c87929f9e9184796d60584e41382d22170b020000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b0000000000000000040d161e272e343f464e555d606c717c8490959fa7a39a92877d70685e52463c31261a0e0000000000000000000000000000000000000000000000000000000615222f3c4855626f7b8896a0acaa9d9184776a6054473c31271f1c181b1a1e242d3946525e6876838f9ca9aea298897c706356493d302316070000000613202d394653606c7885929eabb3a9988b7f7265564c4131271d0f050000000000000000000000000000000000000006111c2935414c5665727f8b98aab4aa9d918477685d5245392c201306000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000040e172029313a414950555d60666d7075797b7e8082838486929fac9f9286858382807d7b77736f6a64615a534d453e362d251c120900000000000000000000000000000000000915202c38444f59606d79828e939c9fa097928c8683807f7b6e6255483b2f22150800000000000000000000000000000613202c3945515d6774818e9aa7ada1968a7d7063564d4135404b55636f7c8995a0aca79b8e8174685d5245392c20160a0000000000000000000000000000000d1a2633404d596673808c99a6a79a8d8074675a4d4134271a0e0100000b17232e39444d565b5e6060606060605b59534b42372c2015090007131f2b36404a52585a6060606060605e5c574f453a2f24180c0004111c28333e485055576060606060606055534d453c31261a0e020000000000000000000000000000000000070d12161819202020202023303d4a5663707d8999978b7e7164584b3e2f24222d3d4a5764707d8a97978a7d7064574a3d2e231717140e0801000000000000040c141b2125282c3845515c667986929faca89b8f8275655b5046424547484745403931271d12070000000000010b151f2935414c56616c75828f98a2aea69e9184796d60584e42382d20170d00010c161f2a36424d57606d7984919da5aea2988f82756c61564c4135291f160c010000000000000003101c28343f4a5465727e8b98a8a79b8e817468574d42363a4753606d7a86929f9e9285786c7985929f9f9285796d6053463a36424d566774818e9aa7a7988b7e7165544a3f34281c1003000000000000000000000000050e18242f39434e58606c78829097a2a3999083786d616d7a85929ea6a0958d80736b60564c41352921180c030000000000000000000000000000000000000000000000000000000000000008131e27333f49535f6a73808d96a0968d80736a5f53493f33271e14080000000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000000000000000000040c151c2328343c434c515a626a6f7a839095a0a9a39992857a6d61574d42372b1b110600000000000000000000000000000000000000000000000000000815212e3a47535f6a7784919eabaca095887c6f62584e4339312c282327262b2f35414c56616d7a86929facab9f9285796d6053463a2d2013070000000815222e3b4855616e7b8897a1adada197887b6e6255483b3022150b0000000000000000000000000000000000000000000d1924303c4855626f7b8898a2aeaca095877a6d6054473a2d211407000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000020b162029323b434b535b60676d73797d8285888b8d8f90919298a3aea3989291908e8d8a8784807c76706c625f5750483f372d241b10060000000000000000000000000000000003101c27333d45515c676d7981898f939aa29f9992908d8b7f7265584c3f3225190c00000000000000000000000000000714212d3a4754606d7a85929facac9e9184796d6053463b303a4854606b7784919dabac9f92867a6d6054473d32271b0f0200000000000000000000000000000c1926333f4c5966727f8c99a5a69a8d8073675a4d4034271a0d0100020e1b27333f4b565f676a6c6c6c6c6c6c68655d53483d3125190c000b1723303c47525c64676c6c6c6c6c6c6b6861574c4034281b0f030814212d3945505a61646c6c6c6c6c6c6c6c5f574d42372b1e12050000000000000000000000000000000000000106090b0c1313131314212d3a4754606d7a86939a8d817467554b403529212e3a4754616d7a8796998d807366544a3f34281c100303000000000000000000020a1015191c2834404b546b7885929eabab9e9184786c6056534d51545553514b43392f23180c000000000007121d27313945525d68717e8a939eaaaa9e948a7d70675d51463c2f261c0e050000040d1a26313b45515c66707d89939ea9aa9e948a7e71685e52463d31281d12070000000000000006121f2c3844505c6675828f9ba8a9988b7e7165584b3e313945515d677683909ca197887b6f7b8897a29c8f8276665c504438303e4b5764717e8a97a8a89b8e8275665c5044382c1f12060000000000000000000000020c17202935404b555f6a727f8c949fa89f92877c6f665e68717e8a949ea79f93887d70685e52463f332a1e150a00000000000000000000000000000000000000000000000000000000000000020b17222d38414e58606d7984919e9f92877c6f655b50443b3025190c0300000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b00000000000000000000030b1218222b313a414550585f686d79839097a1aba1978e8174695f5347382d22170b000000000000000000000000000000000000000000000000000006121f2b37434e586673808d99a3afa89b8e81756a5f554b433c38342e3431373a4145525d68737f8c99a3afa79b8e8175675c5145382c1f13060000000a1724303d4a5763707d8a96a9b3ab9e928578695f53473a2e2114030000000000000000000000000000000000000000000813202d394653606c7985929facb1a795897c6f6256493c2f231609000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000a141d28323b444d555d656c717a80858a8e9297979a9b9d9e9fa3aab4aaa39f9e9d9b999796918d88837d766e69615a51493f362d22180b02000000000000000000000000000000000b16212834404b555d676d747d82889297a2a39f9c988b7f7265584c3f3225190c0000000000000000000000000007131f2c38434f5965727e8b98a2aea49a8d8073665c5044382c38434f5965727f8c99a3aea2988b7f7265594f44382c1e130800000000000000000000000000000c1926323f4c5965727f8c98a5a6998d8073665a4d4033271a0d000004101d2a36434f5b677177797979797979756f65594d4134281b0e020d1a26333f4c58646e747979797979797873685c5044372b1e11050a1723303c4955616c717979797979797976695f53463a2d21140700000000000000000000000000000000000000000000000606060613202c3945515d677784909d908377675d5145382c202d3946525e687884919c908376665c5044382c1f120600000000000000000000000005090c18232e43505d6a7683909da9ada196897d7068615f575d6062605c554b4034291c1004000000030c18242f39434f59606d7a85919ea6aea2988f82756c61554b40342a1d140a0000000009141f2834404b54606b75818e97a2ada69e92857a6d61594f43392f24180c030000000000000713202d3a4653606d7985929faba197887b6e6155483b2e35404b556673808c99a9978b7e717e8b97a9998c7f7266544a3f342e3b4754616e7a8795a0ab9f9285796d6053463a2d201308000000000000000000000008131e29323a45515d676f7c87929fa6a0968d80736a5f56616c75828f98a2a49a91857a6d615a50453c30261c11060000000000000000000000000000000000000000000000000000000000000006111b262f3c45515d67707d8a939e999083776c60564c41362a1e150b00000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b0000000000000000000000000710191f282f353f464e565d676e7a85929ea6a99f93877b6e6253493f33271b0f0300000000000000000000000000000000000000000000000000030f1a26313c4854616e7b87929faaac9f92877c6f675d554e46454041414142474c515b606d7a85929eabaca095897d7063554b4034281c10040000000c1926323f4c5965727f8c98a5b2a99c8f837669574d42372b1e120600000000000000000000000000000000000000000006121f2b3844505b667783909daab1a4978b7e7164584b3e3125180b000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000006111b262f3a444d565e676d777e858d91979b9ea2a9a7a8a5a4a4a6acb3aba5a3a4a5a7a6a8a09d9a95908a827b716c635b51483f342a1d140a0000000000000000000000000000000006111c262f3b444d575e666d72797e85929faba8a5988b7f7265584c3f3225190c000000000000000000000000000a15222f3b4854606b7783909daaac9f93877b6e61544a3f3428323d4754616d7a86929facaa9d9184776b6054483a3025190d00000000000000000000000000000c1925323f4c5865727f8b98a5a6998c807366594d4033261a0d000004111e2b3744515e6a77848686868686868175685b4f4235281c0f020e1a2734414d5a67748086868686868685786b5e5245382b1f12050b1724313e4a5764717e868686868686867b6e6155483b2e221508000000000000000000000000000000000000000000000000000004111d2935414c556774818e9a92867a6d6053473a2d202a36414c566875818e9b9285796d6053463a2d2013070000000000000000000000000000071a2734414d5a6774808d9aa9b2a89d91837a726e696c676d6f6d675c5145382c1f13060000000b151e2935404b55606b74818e97a1ada79f92867b6e615a50433a2f22190b0200000000030c18232e39424f59616e7a85929fa7ada1978e81746b60554b4035291e150a000000000000091623303c4956636f7c8997a2ab9e918578695f53463a2d2f3c4956636f7c8998a29a8e8174818d9aa298897c6f6256493c2e2d3946525e687784919daaa297897c6f6356493c3025190d01000000000000000000060f1925303a444f59606d79839199a3a49a9184796d6058505a616e7b86929fa7a1978f81756c62574d42382e23170d04000000000000000000000000000000000000000000000000000000000000000a141d2935404b55616b75818e989f958b7e72685e52463d30271d1207000000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b00000000000000000000000000070d161e2429343c444c555e68707d8a949faba49a8d8174655b5044372b1f120500000000000000000000000000000000000000000000000000000a15212d3a46535e6975818e98a3aea3999083796d675f5853514b4e4e4e4d53555d606d74818e97a1ada69d9083776b605443392e23180c000000000e1b2834414e5b6774818e9aa7b3a79a8d8074675a4d4131261a0e02000000000000000000000000000000000000000000030f1c28333f4a546875818e9ba8b3a6998d8073665a4d4033271a0d000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabada093867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000b17222d38414c565e696e79828b91979ea1a9aba8a19e9b9997989ba2aba1999697989b9ea0a8aaa79f9d948f867e726d635a50463c2f261b11060000000000000000000000000000000b17222d38424d565e696e787f858b9297a29f9c98958b7f7265584c3f3225190c00000000000000000000000006111b2935414c56636f7c8995a0aca99c8f8276695f5342382e232d3946525e6875828e9ba8aca095897c6f63564c41362a1b1106000000000000000000000000000c1825323f4b5865727e8b98a5a6998c7f7366594c403326190d000004111e2b3744515e6a778491939393938e8275685b4f4235281c0f020e1a2734414d5a6774808d939393939185786b5e5245382b1f12050b1724313e4a5764717d8a9393939393887b6e6155483b2e2215080000000000000000000000000000000000000000000000000000010d19242f3e4b5865717e8b9899897c6f6356493c302325303f4c5865727f8b9898887c6f6255493c2f22160800000000000000000000000000000b1724313e4a5764717d8a97a1adaca09591847f7b7978797a7c796d6053473a2d201407000007121c27303945515d67707d89939da9aba0958c7f72695e53483e31281d100700000000000007121d27303d46525e68727f8b959faba99e93897d70675d51453d30261c11060000000005111d2935414c566673808c99a9a89b8e817568574d42372b2d3a4653606d7985929f9d90847783909d9f9285796d6053463a2d2a36414c566774818d9aa7a9998d807366564c41362a1e11050000000000000000030c18212a36414c56616b74808d95a0a89f93887d6f675c5146535e69727f8b959fa99e938b7e71695f544a3f34281f160c01000000000000000000000000000000000000000000000000000000000000020b18242f39434f59616e7b85929f9f92857a6e61594f43392e23180c030000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b0000000000000000000000000000040c1319222a323a434d56616c7683909cabac9e9285786c605346392d201306000000000000000000000000000000000000000000000000000005121e2a36424d57616e7b86929fa6aba0958f82796f6a63605c555b5a5b575f62676d747f8c939ea9a99f948a7d7064594f4430271d120700000000101c2936434f5c6976828f9ca9b2a5998c7f7266594c3f3326190900000000000000000000000000000000000000000000000b17222d404d5a6773808d9aa6b3a89b8e8175685b4f4235281c0f000000000000000000000000000000000000000000000000121f2c3945525f6c7885929fabada093867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000030f1b27333f49535d686e7b838f949ea1a9a9a19e9996918e8c8b8b909ba5998f898a8c8e9196999ea1a9a69f98928a7f726c62584e41382d22170b0000000000000000000000000000030f1c28333f4a545e696e7b838c92979f9f99938f8b88877f7265584c3f3225190c0000000000000000000000000b17222d3946525d6875818e9ba7ada1978a7e7164574d4230261c2a36414c5663707d8996a1ada79b8e8175685e5246382d22170b000000000000000000000000000b1825323e4b5865717e8b98a4a5988c7f7265594c3f3226190c000004111e2b3744515e6a7784919d9f9f9b8e8275685b4f4235281c0f020e1a2734414d5a6774808d9a9f9f9e9185786b5e5245382b1f12050b1724313e4a5764717d8a979f9f9f94887b6e6155483b2e2215080000000000000000000000000000000000000000000000000000000815222f3b4855626e7b8897988c7f7265594c3f3025232f3c4956626f7c8998988b7e7265584b3f3024190d01000000000000000000000000000713202d3a4653606d7985929ea6b0a7a096918b8886858687877b6e6154483b2e21150800000c18232e39424e58606d7984919ea5afa4999083786d60574d42362c1f160c00000000000000000b151e2a36414c56606c78839099a4afa59e9184796d60584e42382e23170c000000000713202d3946525d687683909da9a9988b7e7265584b3f31262c3844515c6676828f9c9f93867a86929f9c8f8275665c5044382b25303e4a5764717d8a97a7aa9d908377685e5246392d20140600000000000000000b151e2a333c46525e68707d8a929da8a1968d80746b60554b424d57606c78839099a3a59f92867b6e665c50443d31281e13080000000000000000000000000000000000000000000000000000000000000007121d27313e46525e68727f8b959f978e81756b60554b4034281f15090000000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000000000000000000000000000000010810182028313b44505a64717e8a99a3ada197887c6f6255493c2f2216090000000000000000000000000000000000000000000000000000020e1a25313b46535f69737f8c949fa7a79f948f837c75706d676867676869696e737a818c919ca5aaa1978f82766c6155473d331e150b0000000000101d2a3643505d697683909ca9b1a4978a7e7164574b3e3124180b0000000000000000000000000000000000000000000000061926323f4c5965727f8c98a5b2a89c8f8275695c4f4236291c0f0000000000000000000000000000000000000000000000030d152c3945525f6c7885929fabada093867a6d6053473a2d20140700000000000000000000000000000000000000000000000000010c161f2b3744505b656d7a8490959fa6aaa29f96918c8884817f7e7e8b98a396897d7d7f8184888c91979fa3aaa29f918b7e716a5f53493f33271b0f030000000000000000000000000006121f2b3844505b666e7b8490959ea19d948f87827e7c7a786c605346392d2013060000000000000000000000030f1b27333f4953616d7a86929facab9e9285796d6053463b31201925303a4653606c7884919eabac9f92867a6d6153493f33271b0f030000000000000000000000000b1824313e4b5764717e8a97a4a5988b7f7265584c3f3225190c000004111e2b3744515e6a7784919daaa89b8e8275685b4f4235281c0f020e1a2734414d5a6774808d9aa7ab9e9185786b5e5245382b1f12050b1724313e4a5764717d8a97a4aca194887b6e6155483b2e2215080000000000000000000000000000000000000000000000000000000613202d394653606c7985929b8e827568574d42362a202d3a4653606d7986929b8e817468564c4135291d11040000000000000000000000000006131f2c3845515c67737f8c949fa6ada8a19e989992929299877b6e6154483b2e2115080004101c2834404a54606a73808d96a09fa99f93877c6f665c50453b31241a0d040000000000000000030c1925303b44505b666f7c87939fa99fa1968d80736a60544a3f34281c10030000000714212e3a4754616d7a86939faca197887b6f6255483c2f222834404a5466727f8c99a4998c7f8c99a3998c7f7266544a3f3428212e3a4754616d7a8795a0ac9f93877a6e6154473b2d22170b0000000000000007121c27303c45515b616d7a85919ea4a59e9184796d60594f433b44505b666f7c86929fa7a2989083786d60594f433a2f24190f05000000000000000000000000000000000000000000000000000000000000010b151f2a36414d56606c788390999e93897d70675c51453c31261a0e0400000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b0000000000000000000000000000000000060e161f29323e4753606d7a86929f9fa9988b7e7265584b3f3225180c00000000000000000000000000000000000000000000000000000009141f2a36424d57606d78828f959fa7a69f959087817d79777574747476787b80858e939ca3aaa29892857b6e615a5044352b210c030000000000111e2a3744515d6a7783909daab0a3968a7d7063574a3d3024170a00000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4b1a99c908376695d5043362a1d1000000000000000000000000000000000000000000000010b151f2935414c566c7885929fabada093867a6d6053473a2d20160c0200000000000000000000000000000000000000000000000008131e2935414c56606c77828f96a0a7a8a198928c84807b787572717b8895a0938679717274777b80848d9299a2aaa39f92867c6f655b5044372b1f130800000000000000000000000003101c28343f4a54606c788390969fa79d938e827b75726f6e6c665b5044382b1f1206000000000000000000000005121f2b3744505b65727f8c98a3aea79a8d8074675c5145382c1f131f2b3844505b6673808c99a4aea3988c7f72655b5044372b1f14080000000000000000000000000b1724313e4a5764717d8a97a4a5988b7e7265584b3f3225180c000004111e2b3744515e6a7784919daaa89b8e8275685b4f4235281c0f020e1a2734414d5a6774808d9aa7ab9e9185786b5e5245382b1f12050b1724313e4a5764717d8a97a4aea194887b6e6155483b2e22150800000000000000000000000000000000000000000000000000000005121f2b3744505b6576828f9c918478695e52463a2d202c3845515c667683909d918477685d5245392c2013070000000000000000000000000004101c2834404b55606d78828f949ea1a8a9aaaba39f9f9f94877b6e6154483b2e2115080006121f2c3844515c666f7c879293939393978d80746a60544a3f33291f11080000000000000000000008141e28333f4a54606a74808d979393939392877c6f665c5044382c1f12060000000b1724313e4a5764717d8a99a4ab9e9285796c605346392d20232e3c4955626f7c8897a29e9184919ea298897c6f6256493c2e23202d3946525e687784909daaa49a8b7e7164544a3f33281c0f030000000000040d18232e39424d57626d75828f97a1a99e938a7d70675d51473d333f4a545f6a73808c95a0aa9f958c80736b60554c41352921170b02000000000000000000000000000000000000000000000000000000000000030d1925303b44505b666f7c87929f9e9184796d60574d42372b20160c02000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000000000000000000000000000000000000040d17202c3945515d67778490939393938c807366594d4033261a0d000000000000000000000000000000000000000000000000000000030e1a26313b44505c666d7a8390959da5a7a099938e898683828181818385888c92979da5a7a09892867d70695e52483e3323190f000000000000111e2b3844515e6b7784919eaaafa396897c706356493d3023160a00000000000000000000000000000000000000000000000b1824313e4b5764717e8a97a4b1aa9d9083776a5d5044372a1d110000000000000000000000000000000000000000000007121d27313945525d687885929fabada093867a6d6053473e32281e13080000000000000000000000000000000000000000000000010d19242f3946525e68727f8c949ea8a8a19691867f79736e6968666f7b8895a093867a6d6568696e737980879298a2aea3999083786c6053463a2f24190d01000000000000000000000006121f2b3844505c66727f8b959fa89f958e81786e69656261605b544a3f33281c0f0300000000000000000000000613202d394653606c7884919daaab9f95887c6f62554b4034281c101c28333f4a54616e7b87939facaa9e9184786c6053463b3025190e0000000000000000000000000a1724313d4a5764707d8a97a3a4988b7e7165584b3e3225180b000004111e2b3744515e6a7784919daaa89b8e8275685b4f4235281c0f020e1a2734414d5a6774808d9aa7ab9e9185786b5e5245382b1f12050b1724313e4a5764717d8a97a4aea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000030f1b27333f49536673808c9396877b6e6154483b2e212834404b546774808d9393867a6d6054473a2d21140700000000000000000000000000000c18232e3944505c666d7a828c91969a9c9e9f9f9f9f9e94877b6e6154483b2e211508000713202d3a4653606d798386868686868686857a6d60584e42382e21170d0000000000000000000000020b17222d38424e58606d7a858686868686868683796d6053463a2d201307000006121f2b37434e586774818e9aaba89b8f8275655b5044372b1f202d394653606c7985929fa1969196a19f9285796d6053463a2d201e2a36414c566774818d9aacac9b8e8175665b5044382b1f120600000000010c161f2834404a545f69727e8b949ea9a1978e81756b61554b41352d38424e58606d79839199a4a79f92877d6f675d51453e33291d140a0000000000000000000000000000000000000000000000000000000000000008141f28333f4a545f6a73808d96a0968c8073695f53473e32281e1308000000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b0000000000000000000000000000000000000005111d2935404b556976828686868686868174675b4e4134281b0e0100000000000000000000000000000000000000000000000000000009141f28343f4a545e686d7a838e929d9fa7a49f9b9892908e8e8d8e8f9197999ea1a9a29e9590867d706b60574d42362c221108000000000000121f2b3845525e6b7885919eabafa296897c6f6356493c3023160900000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0aa9e9184776b5e5144382b1e11000000000000000000000000000000000000000000030c18242f39434f59606d7a86929facaea194877b6e615a50443a3024190d030000000000000000000000000000000000000000000004111d2935414c55616d7a86929fa6aba19691847c726d66615f57626f7b8895a093867a6d60575f61676d737d86929fa5ab9f958a7d7064554c4135291d110400000000000000000000000713202d3a4653606d7884919ea7a89d9083786d665f57555453504a42382d22170b000000000000000000000005111e2a36414c5663707d8996a0acaa9d9083766a5f5343392e23180c17222d3846535e6976828f9ca9aca096897d7063564d41362a1c110600000000000000000000000a1724303d4a5763707d8a96a3a4978b7e7164584b3e3125180b000004111e2b3744515e6a7784919daaa89b8e8275685b4f4235281c0f020e1a2734414d5a6774808d9aa7ab9e9185786b5e5245382b1f12050b1724313e4a5764717d8a97a4aea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000b17222d3d4a5763707d868686867d7164574a3e3124232e3e4b5764717e868686867d7063564a3d3023170a000000000000000000000000000007121d28343f4a545e686d787f848a8d9091929292929190877b6e6154483b2e2115080006121f2c3844515c666d7779797979797979786d685d52463d30261c0f0500000000000000000000000006111c262f3c45525d686d7879797979797979776d665c5044382c1f120600000814212e3a47535f6a7884919eaba9988b7f726553493f33271b1f2b3844505b6675828f9ba8a19ea1a89c8f8275665c5044382b1f1925303e4a5764717d8a9aa4ab9e9285796c605346392d2013080000000008131e28313a44515c666e7b86929fa6a69e92857a6d61594f433a2f262f3c45515c666f7c87939fa8a39991847a6d605a50453b2f261c1106000000000000000000000000000000000000000000000000000000000000020b17222d38424e58606d7984919e9f92867b6e625a50443a3024190c030000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b00000000000000000000000000000000000000010d18242f3a4e5a667076797979797979746f64584c4033271a0d01000000000000000000000000000000000000000000000000000000030b17232e38424c565e686d79818990959b9fa2aaa39f9d9b9a9a9b9c9ea1a9a49f9c97928c837b706b60594f453b30241a1000000000000000121f2b3845525e6b7884919eabafa296897c6f6356493c3023160900000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4b0aa9d9184776a5e5144372b1e110000000000000000000000000000000000000000000a151e2935404b55606b74818e98a3aeb5a89c8f82756c61564c4135291f150b010000000000000000000000000000000000000000000613202c3945515d6773808d98a2aea49991847b6e6a605c545355626f7b8895a093867a6d605353555d606b707d8a939ea9a79c8f8276675d5145392c20130600000000000000000000000a1623303d495663707c8996a1aca096897d70665c544d494746443f382f261c110600000000000000000000000714202d3946525e6875828e9ba8aea2988b7e7165584e4330271d1207111c2a36424d5764717e8a97a1ada89b8f8275685e5246382e23170b00000000000000000000000a1723303d4a5663707d8996a3a4978a7d7164574a3e3124170b000004111e2b3744515e6a7784919daaa89b8e8275685b4f4235281c0f020e1a2734414d5a6774808d9aa7ab9e9185786b5e5245382b1f12050b1724313e4a5764717d8a97a4aea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000616232f3c4855616b7079797979716c6155493c302323303d4955616c7179797979706b6055483c2f2316090000000000000000000000000000000c17232e38424c565e666c72797d808384858686858483817a6d6054473a2d2114070004101c2834404a545c606a6c6c6c6c6c6c6c6b605d564c41342b1e150a00000000000000000000000000000a141d2935414c565d606b6c6c6c6c6c6c6c6a605c544a3f34281c100300000815222f3b4855626e7b8896a1ada297887c6f6255493c2d22171c28333f4a5465727f8b98a9acabaca9988c7f7265544a3f34281c14212e3a4754616d7a86939faca197897c6f6256493c3024190d010000010d19242f3a434f59606d78839098a2a99e948a7e71685e52473e31281d2834404b54606b74808d96a1aba0968e81746c61574d42382d22170b0000000000000000000000000000000000000000000000000000000000000006111c262f3c45515d67707d8a939e988f82766c61564c4135291e150a0000000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000000000000000000000000000000000000000007131d323e49545e66696c6c6c6c6c6c67645c53483c3024180b000000000000000000000000000000000000000000000000000000000006111c26303a444c565e676d747c83898e9298999b9d9e9f9f9f9f9e9d9b999993908b857f786e6960594f473d33291f120800000000000000111e2b3844515e6b7784919eaab0a396897d7063564a3d3023170a00000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a99d9083766a5d5043372a1d10000000000000000000000000000000000000000006111c26303845515d67707d89939daab4b9aa9e948a7e71685d52463d31271d12070000000000000000000000000000000000000000000714212d3a4754606d7a85929faaab9f93877d6f695f58514b4855626f7b8895a093867a6d6053474b5159616b74818e9ba8ac9f92867a6d6054473a2d21140700000000000000000000000d192633404c5966737f8c99a8aa9d9184776b60544a423c3b3938332d261d140a0000000000000000000000030f1c28333f4a54616e7a86929facac9f92857a6d6053473c3120150b000e1a25313b4653606d7985929eabac9f92867b6e61544a3f34281c100300000000000000000000091623303c4956636f7c8996a2a3978a7d7064574a3d3124170a000004111e2b3744515e6a7784919daaa89b8e8275685b4f4235281c0f020e1a2734414d5a6774808d9aa7ab9e9185786b5e5245382b1f12050b1724313e4a5764717d8a97a4aea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000714202c38444f5961636c6c6c6c64615a5044392d21212d3945505a61646c6c6c6c6360594f44382c20140700000000000000000000000000000006111c26303a444c545b60666d70737677787979787876746d685d5245392c20130700000c18232e39424a51535d606060606060605e54524c433a2f22190c030000000000000000000000000000020b19242f3a434c52545e606060606060605d53504a42382e23170c000004101c2834404b5565727f8b98a89f9f9285796c605346392d201317222d3b4855626e7b8897a19f9f9fa297887c6f6255493c2e231713202d3946525e687784909d9fa9998c7f7366564c4135291d1105000004111d2935414c55606b73808d959f9fa2978f82756c61564c41352c1f18232e39424f59606d7984919ea5a89e938a7e71695e544a3f33281c0f03000000000000000000000000000000000000000000000000000000000000000a141d2935404b55616c75828f989f948a7e71685d52453d30261c110600000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b00000000000000000000000000000000000000000115212d38424c545a5c6060606060605b58534a41362b2014080000000000000000000000000000000000000000000000000000000000000a141e28323a444c555c606b6f777d8185898c8e90919292929291908f8d8a86837e79726d665f574f473d352b20170d0000000000000000111e2a3744515d6a7784909daab0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000c1825323f4b5865727e8b98a5b1a99c8f8276695c504336291d1000000000000000000000000000000000000000020b17232e38424e58606d7984919ea5afafacafa69e92857a6d61594f43392f24180c0300000000000000000000000000000000000000030f1b27333f495364717e8a98a2aca3998d80746b60574e45404855626f7b8895a093867a6d60534740454f59626f7c8896a0aca3998a7d7063574a3d3024170a00000000000000000000020f1b2835424e5b6875818e9ba8a79a8e817467594f4239302e2d2b28221c140b02000000000000000000000006121f2b3844505b66737f8c99a3aea79a8e8174675d5145392c2013030009141f2c3845515c6674808d9aa7afa3998c7f73665c5044382b1f1409000000000000000000000916232f3c4956626f7c8995a2a3968a7d7063574a3d3024170a000004111e2b3744515e6a7784919daaa89b8e8275685b4f4235281c0f020e1a2734414d5a6774808d9aa7ab9e9185786b5e5245382b1f12050b1724313e4a5764717d8a97a4aea194887b6e6155483b2e2215080000000000000000000000000000000000000000000000000000000004101c28333e474f555760606060575550483e33281c1d28333e485055576060606056554f473d33271c1004000000000000000000000000000000000a151e29323a424a50545c606467696b6c6c6c6c6b6967605d564c4135291d1104000007121c2730394044465153535353535353524745413a31281e10070000000000000000000000000000000008131e28313a41454752535353535353535146443f3830261c1106000006131f2c3845515c6775828f939393938f8275665b5044382b1f1214212e3a47535f6a78859193939393939285796d6053463a2d2013111d2935414c566774808d93939393908376685d5246392d20130700000613202c3945515d676f7d87939393939392857b6e615a50443a30231a121d27303d45515d67707d8a939393939392857b6e665b5044382b1f120600000000000000000000000000000000000000000000000000000000000000020b18242f3a43505a616e7b86929f9e92857a6d60594f42382e23170c03000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b00000000000000000000000000000000000000000a15202a343c4347495353535353535353534f4940372c21160a000000000000000000000000000000000000000000000000000000000000020c162029323a434b515960636b7075797c7f82838485868685858382807d7a76726d67605c544d453d352b23190e050000000000000000101d2a3643505d697683909ca9b1a5988b7e7265584b3f3225180700000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3a89b8f8275685c4f4235291c0f000000000000000000000000000000000000000a141d28343f4a54606a73808d96a0acaca49fa4aca1978e81746b60554b4035291e150a0000000000000000000000000000000000000005121f2b3744505b6574818e9b9ea09f92867b6e61594f453c3c4855626f7b8895a093867a6d6053473a3e47535f6a7784919eaaab988c7f7265594c3f3226190c00000000000000000000030f1c2936424f5c6975828f9ca8a4988b7e7165584b3e302721201f1c17110a020000000000000000000000000613202d394653606c7884919eabaca095897c6f62554b4035291d11040004101c2834404b54626f7c88959fabab9e9184786d6053463b31251a0e000000000000000000000916222f3c4955626f7c8895a2a396897d7063564a3d3023170a000004111e2b3744515e6a7784919daaa89b8e8275685b4f4235281c0f020e1a2734414d5a6774808d9aa7ab9e9185786b5e5245382b1f12050b1724313e4a5764717d8a97a4aea194887b6e6155483b2e22150800000000000000000000000000000000000000000000000000000000000b16212c353e44484a535353534a49443e362c221717222c363e45494b535353534a48443d352c21160b0000000000000000000000000000000000030c1720292f383f444a5053575a5d5e5f5f5f5f5e5d5b54524c443a2f24190d010000000b151e272e34383a4446464646464646453a39352f281f160c0000000000000000000000000000000000010c161f282f35393a4546464646464646443a38342e261e150a0000000713202d3a4653606d79868686868686867f7266544a3f33281c0f121f2b37434e58687581868686868686868275665c5044382b1f120d1925303d4a5764707e868686868686877a6d6154473a2e21140700000714212d3a4754606d7a84868686868686867f71695e52483e32281e110b151e2935414b55616b75818686868686868682796c605346392d201306000000000000000000000000000000000000000000000000000000000000000007131d28313e46525e69727f8c95a0978e81746b60544a3f34281f1409000000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b00000000000000000000000000000000000000030f1b26323c464e535560606060606060605f5a52493e33271b0f02000000000000000000000000000000000000000000000000000000000000050e172029313940454f54596063676d70727576787879797878777573706d6865605d55504a423c332b231911070000000000000000000f1c2835424f5b6875818e9ba8b3a6998c807366594d402f23180c00000000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7b4a79a8e8174675b4e4134281b0e00000000000000000000000000000000000006111b262f3844505c666f7c87929fa8a69f9a939aa4a99d93897d70675d51453c30261c11060000000000000000000000000000000000000613202d394653606c78858b8e9196968f8275695e53473d333c4855626f7b8895a093867a6d6053473a37434e586976828f9ca9a69a8d8073675a4d4034271a0d0000000000000000000003101d293643505c6976838f9ca9a3978a7d7064574a3d31241513120f0b060000000000000000000000000005121e2a36424d5763707d8a96a1acaa9d9083776a6054433a2f24180d0100000c18232e3947535f6a7683909daaada1968a7d7063574d42362a1c12070000000000000000000915222f3c4855626f7b8895a2a396897c706356493d3023160a000004111e2b3744515e6a7784919daaa89b8e8275685b4f4235281c0f020e1a2734414d5a6774808d9aa7ab9e9185786b5e5245382b1f12050b1724313e4a5764717d8a97a4aea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000005101a232c33383c3d464646463e3c39332c241a10101a242c33393d3e464646463d3c38332c231a0f05000000000000000000000000000000000000050e171d262d33383f44464a4d50515253535251504e4745413a32281e130800000000030c151c23282c2d3739393939393939382d2c29241e160d04000000000000000000000000000000000000040d161e24292c2d3839393939393939372d2c28231c150c0300000006131f2c3845515c676d79797979797979726d635742382d22170b0f1a26313c4d59656f7579797979797979757065544a3f34281c10081623303c4955616c707979797979797975685d5246392d20130700000613202c3945515d676d7879797979797979716d62574d42362c20160c030c18242f3a434f59656f7579797979797979766c665b5044382b1f12060000000000000000000000000000000000000000000000000000000000000000010c161f2a36424d57606d788390999f93887c6f665c50443b31251a0d040000000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b0000000000000000000000000000000000000006131f2b37434e585f626c6c6c6c6c6c6c6c6c645a4f43372b1e120500000000000000000000000000000000000000000000000000000000000000050e171f272f343d43484f54555c606366686a6b6c6c6c6c6b6a686664615e5653514b4c4841382f21191108000000000000000000000d1a2734404d5a6773808d9aa6b3a89b8e817568554b4034291c100400000000000000000000000000000000000000000005121e2a36424d576976838f9ca9b2a5988c7f7265594c3f3226190c0000000000000000000000000000000000000b17222d38414d57606d78839099a3ab9f948f87939fa8a59e9184796d60584e42382e23170c0300000000000000000000000000000000000613202d394653606c777c7e8184878a8b7e7165574d42352f3c4855626f7b8895a093867a6d6053473a32414e5b6874818e9ba7a79a8d8174675a4e4134271b0e0000000000000000000003101d293643505c6976838f9ca9a396897c706356493d3023160a06030000000000000000000000000000000714202d3a46525e6975828f9ca8aea3988b7f7265584e4331281d130700000007121d2b37434e5865717e8b98a2aea89c8f8275695e5346392e23180c0000000000000000000815222f3b4855626e7b8895a1a295897c6f6256493c2f231609000004111e2b3744515e6a7784919daaa89b8e8275685b4f4235281c0f020e1a2734414d5a6774808d9aa7ab9e9185786b5e5245382b1f12050b1724313e4a5764717d8a97a4aea194887b6e6155483b2e22150800000000000000000000000000000000000000000000000000000000000008111a21282c2f303939393931302d28221a120808121a22282d303139393939302f2c27211a11080000000000000000000000000000000000000000050b141c22282e34383a3d404344454646454543413a39352f2820160c010000000000030b12181c1f202a2d2d2d2d2d2d2d2b21201d19130c040000000000000000000000000000000000000000040c13191d20212b2d2d2d2d2d2d2d2a201f1c17110a030000000004101c2834404b555c606c6c6c6c6c6c6c66635b51462f261c11060a1520313d48535d65686c6c6c6c6c6c6c69655d5442382e23170b0814202d3944505a61646c6c6c6c6c6c6c6b5d564c4135291d1105000004111d2935414c555d606b6c6c6c6c6c6c6c65625a50453b30241a0e040007131d28313e47535d65686c6c6c6c6c6c6c69605b544a3f33281c0f03000000000000000000000000000000000000000000000000000000000000000000040d1a25303b44505c666f7c87939f9a9083786d60574d42362a1f160c0100000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000000000000000000000000000000000000000815212e3b47535f6a767979797979797979766c5f5346392d2013060000000000000000000000000000000000000000000000000000000000000000050d1925303b444c525f6060606060605d5d5e5f5f5f5f5e5d5c5a6060606060605a58534a41362b201408000000000000000000000c1925323f4c5865727f8b98abb5aa9d908477675c5145382c1f13060000000000000000000000000000000000000000000714212d3a46535f697885929fabb4aa968a7d7063574a3d3024170a0000000000000000000000000000000000040f1b27333f49535f69727f8c95a0aba3998f82808c96a0aca0968d80736a5f544a3f34281f1409000000000000000000000000000000000005121f2b3744505b656c6f7274777a7d807a6e6154473b312f3c4855626f7b8895a093867a6d6053473a35414b556875828e9ba8a69a8d8073675a4d4034271a0d0000000000000000000003101d293643505c6976838f9ca9a296897c6f6356493c302316090000000000000000000000000000000003101c28343f4a54616e7b87929facac9f92867a6d6154473d3221160c01000000000f1b26313c4754606d7a85929facac9f93877b6e61544a4034281c100400000000000000000815212e3b4854616e7b87949f9f95887c6f6255493c2f221609000004111e2b3744515e6a7784919daaa89b8e8275685b4f4235281c0f020e1a2734414d5a6774808d9aa7ab9e9185786b5e5245382b1f12050b1724313e4a5764717d8a97a4aea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000810161c2023242d2d2d2d2423211c17100800000810171d2123242d2d2d2d2323201c160f0800000000000000000000000000000000000000000000020a11171c23282c2d31343638393939393836342d2c29241e160d040000000000000000070c1012131e202020202020201f1413110d08010000000000000000000000000000000000000000000001080d1113141f202020202020201e1312100c06000000000000000c18232e39434b51535f606060606060595751493f351d140a000314202c37414b53595b606060606060605c5a544b4230261c110604101c28333e485055576060606060606054524c443a3024190d010000010d19242f3a434c51545e60606060606060585650483f33291f12080000010c161f2c35414b53595b606060606060605c53504a42382d22170b000000000000000000000000000000000000000000000000000000000000000000000009141f28343f4a54606a74808d97a0958c7f72695e53463e31281d130700000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000000000000000000000000000000000000000916222f3c4955626f7c8686868686868686796c605346392d201306000000000000000000000000000000000000000000000000000000000000000005111e2a36414c565e6c6c6c6c6c6c6c6a675f555353524f5960636c6c6c6c6c6c67645c53483c3024180b00000000000000000000091623303c4956636f7c8999a4afac9f9286796d6053473a2d22170b0000000000000000000000000000000000000000000815222e3b4855616e7b8897a2adaea298887b6e6155483b2e22150800000000000000000000000000000000040e1a242b3744505b656e7b86929fa7a89f92867c7984919ea5a89f92877c6f665c50443c31261a0e0500000000000000000000000000000000030f1b27333f49535b60626568686d70736e685e524639292f3c4855626f7b8895a093867a6d6053473a3a45515d677683909da9a5998c7f7266594c3f3326190c0000000000000000000003101d293643505c6976838f9ca9a296897c6f6356493c302316090000000000000000000000000000000006121f2c3844505c6673808c99a3afa89b8e8175685e5246392d20130400000000000a15202c3945515d6774818e9ba7afa4998d8073665c5144382c1f150900000000000000000814212e3b4754616e7a8793939393887b6f6255483c2f221509000004111e2b3744515e6a7784919daaa89b8e8275685b4f4235281c0f020e1a2734414d5a6774808d9aa7ab9e9185786b5e5245382b1f12050b1724313e4a5764717d8a97a4aea194887b6e6155483b2e2215080000000000000000000000000000000000000000000000000000000000000000050b1014161720202020171614100b0500000000060c1114171820202020171614100b0500000000000000000000000000000000000000000000000000060b11171c1f2024272a2b2c2c2c2c2b2a2821201d19130c0400000000000000000000000406071113131313131313120706040100000000000000000000000000000000000000000000000000000104060712131313131313131107060300000000000000000007121d273039404546525353535353534c4a463f372d230b0200040f1a252f3941484d4e535353535353534f4d494239301e140a00000b17222c363e44494a535353535353534746413a32281e13080000000008131e28313a41454751535353535353534b4a453f362d20170d00000000040d1a232f3941484d4e535353535353535046443f382f261c11060000000000000000000000000000000000000000000000000000000000000000000000030b17232e38424e58606d7a84919e9f92867b6e615a50433a2f24180d01000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000000000000000000000000000000000000000916222f3c4955626f7c8893939393939386796c605346392d20130600000000000000000000000000000000000000000000000000000000000000000714202d3946525e68767979797979797771675b4f464854606b70797979797979746e64584c4033271a0d010000000000000000000714202d3a4753606d7a86939facaea399897d706353493f33271b0f030000000000000000000000000000000000000004111d2935414c5565717e8b98a9b3ac9f9285786d6053463a2d201307000000000000000000000000000000020c16202a36424d56606c77828f98a3aca0968c8073707d8a939eaaa3999083786d60574d42372b20170d02000000000000000000000000000000000b17222d38414950535558565d616366615e564c41362a2f3c4855626f7b8895a093867a6d6053473e444d57606d7a86929faca9988b7e7165584b3e3225180b0000000000000000000003101d293643505c6976838f9ca9a296897c6f6356493c30231609000000000000000000000000000000000713202d3a4653606d7984919eabaca096897d7063564c4135291d1105000000000004111d2935414b55636f7c8995a0acab9e9185796d6053463c31261a0e00000000000000000714212e3a4754616d7a8686868686867b6e6255483b2f221508000004111e2b3744515e6a7784919daaa89b8e8275685b4f4235281c0f020e1a2734414d5a6774808d9aa7ab9e9185786b5e5245382b1f12050b1724313e4a5764717d8a97a4aea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000407090a131313130b0a0804000000000000000005080a0b131313130a0907040000000000000000000000000000000000000000000000000000000000060c101213171a1d1e1f20201f1e1d1b1413110d080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e272e34383a464646464646463f3e3a352d251c1100000009131d272f373d40424646464646464642413d3730271e0c02000005101a242c33393c3d464646464646463a3935302820160c0200000000010c161f282f35393a45464646464646463e3d3a342d241b0e05000000000008111d272f373d404246464646464646433938332d261d140a0000000000000000000000000000000000000000000000000000000000000000000000000006111c26303d45515d67717e8a949e988f82756c61554b4035291d1104000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000000000000000000000000000000000000000916222f3c4955626f7c88959f9f9f9f9386796c605346392d20130600000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a86868686868683776a5d5144495663707d8686868686868074675a4e4134271b0e010000000000000000000613202c3945515d677784909daab4ab9a8d8073655b5044372b1f140a000000000000000000000000000000000000010c13202c3945515d6775828e9ba8b5a89c8f8275665c5044382b1f120600000000000000000000000000000008131e28323a46525e69717e8b949faaa59e9184796d6b75818e98a2aba0958c7f72695f53463f32291e14080000000000000000000000000000000006111b262f383f4446494b4c5254575954524c443b30252f3c4855626f7b8895a093867a6d605347464f565f69727f8b98a3ada197887c6f6255493c2f2216090000000000000000000003101d293643505c6976838f9ca9a296897c6f6356493c3023160900000000000000000000000000000005121e2b37424d5764717d8a97a1adab9e9184786c6053463a3025190d010000000000010d18242f3a4854606b7784919dabada1978a7d7164574d42372b1d1207000000000000000713202d3946525e687679797979797976695f53473a2e211408000004111e2b3744515e6a7784919daaa89b8e8275685b4f4235281c0f020e1a2734414d5a6774808d9aa7ab9e9185786b5e5245382b1f12050b1724313e4a5764717d8a97a4aea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306070a0d10111213131212100e0707040100000000000000000000000000000000000000000000000001040707131313131313130d0c0a0702000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151d23282c2d3939393939393933312e2a231c130a000000020b151d252c313435393939393939393634312c261e150c0000000008111a22282d3031393939393939392e2d29241e160e04000000000000040d161e24292c2d383939393939393932312e29221b1209000000000000000b151d252c31343539393939393939362d2b28221c140b0200000000000000000000000000000000000000000000000000000000000000000000000000000a141e2935414c55616c75828f9893948a7d70675d5145392c201306000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000000000000000000000000000000000000000916222f3c4955626f7c8895a2acac9f9386796c605346392d20130600000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a87939393939084776a5d5144495663707c89939393938d8174675a4e4134271b0e0100000000000000000004101d2935404b556773808d9aa9b3ab9e9184786c6053463c2f261b1106000000000000000000000000000000000007131d28333f4a54606d7a86929facb1a7988b7f7265544a3f34281c10030000000000000000000000000000030d1924303a44505a616e7b85929fa6a99e93897d7067616e7b86929fa7a79f92867b6e615a50443b3025190d04000000000000000000000000000000000a141d262d3337393c3f4146474a4d4746413b3229222f3c4855626f7b8895a093867a6d605350535961686e7b85929eaaac9e9285786c605346392d2013060000000000000000000003101d293643505c6976838f9ca9a296897c6f6356493c302316090000000000000000000000000000000714212d3a46535f6976828f9ca9afa3998c7f73655b504437281e13080000000000000007131d2c38434f5965727f8c99a3aea99c8f8276695f5347392e23180c0000000000000005111d2a36414c565e6c6c6c6c6c6c6c6c5f574d42372b1e1206000004111e2b3744515e6a7784919daaa89b8e8275685b4f4235281c0f020e1a2734414d5a6774808d9aa7ab9e9185786b5e5245382b1f12050b1724313e4a5764717d8a97a4aea194887b6e6155483b2e221508000000000002080d10121313131313131313070704010000000000000000000000000000000000000000000000000002070b0d0d13131313131313130f0e0c090400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080d111314202020202020201a1916130d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181c1f202c2d2d2d2d2d2d2625221e18110a0100000000030b131a202527282d2d2d2d2d2d2d292825211b140c0300000000000810171c2023242d2d2d2d2d2d2d21201d19130c040000000000000000040c13191d20212b2d2d2d2d2d2d2d2524211d1811090000000000000000030b131a202527282d2d2d2d2d2d2d29201f1c17110a02000000000000000000000000000000000000000000000000000000000000000000000000000000020c19242f3a43505a616e7b8686868686847a6d6053473a2d201407000b1825323e4b5865717e8b98a4a69a8d8073675a5a6773808d9aa6a4988b7e7165584b3e3225180b000000000000000000000000000000000000000916222f3c4955626f7c8895a2acac9f9386796c605346392d20130600000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a87949f9f9d9084776a5d5144495663707c89969f9f9a8d8174675a4e4134271b0e01000000000000000000010d18242f3d495663707c8997a1adaca196897d7063584e41382d22170f06000000000000000000000000000000071118242f3844505b66717e8b98a2aeaca095887b6e6155483b2e23170b0000000000000000000000000000010b151f2935414c56616c75828f97a2ada2978e81756b605e69727f8c95a0aca2988f82766c62564c41362a1f160c01000000000000000000000000000000020b141b22272b2d2f3035393a3d403b3936302920232f3c4855626f7b8895a093867a6d60545c60636b707a839197a1ada49a8e8175655b5044372b1f12050000000000000000000003101d293643505c6976838f9ca9a296897c6f6356493c30231609000000000000000000000000000004101c2834404b55616e7b87939facac9f92867b6e6153493f3327160c0200000000000000010f1b27323d4754616d7a86929facac9f93877b6e61554b4034281c1004000000000000010d1925303a444c525f60606060606055534d453c31261a0e02000004111e2b3744515e6a7784919daaa89b8e8275685b4f4235281c0f020e1a2734414d5a6774808d9aa7ab9e9185786b5e5245382b1f12050b1724313e4a5764717d8a97a4aea194887b6e6155483b2e22150800000000060d14191c1f1f202020202020201413110d080100000000000000000000000000000000000000000001080e1317191a20202020202020201c1b191510090200000000000000000000000000000000000000000000000000010507070b0e101212131312110f0d0a07060400000000000000000000000000000000000000000000000000040c13191d202d2d2d2d2d2d2d2d2625231e19120a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c1013131f202020202020191816120d070000000000000002090f14181b1b202020202020201c1b191510090200000000000000050b10141617202020202020201413110d08020000000000000000000001080d1113141e20202020202020181715110c060000000000000000000002090f14181b1b202020202020201d13120f0b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28313e46535f696e7979797979786d675d5145392c201306000b1825323e4b5865717e8b989f9f9a8d8073675a5a6773808d9a9f9f988b7e7165584b3e3225180b000000000000000000000000000000000000000916222f3c4955626f7c88959f9f9f9f9386796c605346392d20130600000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a8794a1aa9d9084776a5d5144495663707c8996a3a79a8d8174675a4e4134271b0e01000000000000000000000713202d3a4653606d7985929eacb2a89c8f82756a5f53493f332721180f0802000000000000000000000003091119232935404b55606c7884919daab3a99d908477695f53463a2d1c1106000000000000000000000000000007121d27313945525d68717e8a939ea9a69f92857a6d615957606d7883909aa4aa9f948b7e71685e52463e31281e130800000000000000000000000000000000020a11171b1f202224292d2e30332e2d2a25292c2e343c4855626f7b8895a093867a6d6063666d70767d859195a0a9a89f93877c6f6253493f33271b0f030000000000000000000003101d293643505c6976838f9ca9a296897c6f6356493c30231609000000000000000000000000000006131f2c3845515c6773808d9aa4afa99c8f8275695e5241382d2217040000000000000000000a16202d3946525e6875828e9ba8afa49a8d8073675c5145382c1f150a0000000000000008131e28323a4146535353535353534847423c332b23190f04000004111e2b3744515e6a7784919daaa89b8e8275685b4f4235281c0f020e1a2734414d5a6774808d9aa7ab9e9185786b5e5245382b1f12050b1724313e4a5764717d8a97a4aea194887b6e6155483b2e2215080000000810181f25292b2c2d2d2d2d2d2d2d2d201d19130c0400000000000000000000000000000000000000020a12191f2326272d2d2d2d2d2d2d2d292825211b140c030000000000000000000000000000000000000000000003080d111314181b1d1e1f20201f1e1c1a171413100c0701000000000000000000000000000000000000000000040d161e24292c393939393939393933322f2a241c130a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607131313131313130c0c0906010000000000000000000004080c0e0f131313131313130f0f0c0904000000000000000000000004080a0a131313131313130707050100000000000000000000000000000104060712131313131313130b0b0905010000000000000000000000000004080c0e0f13131313131313100606030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2a36424d575f616c6c6c6c6c6b605d554b4035291d1104000b1825323e4b5865717e8b939393938d8073675a5a6773808d939393938b7e7165584b3e3225180b000000000000000000000000000000000000000916222f3c4955626f7c8893939393939386796c605346392d20130600000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a8794a1a99d9084776a5d5144495663707c8996a3a79a8d8174675a4e4134271b0e010000000000000000000006121f2c3844505c6673808d9aa4afaa9e94887c6f655b50443d332a2219140e09060400000100000406090e141a232b353d45515d67717e8a95a0acada2978b7e7265574d42362a1e0a0000000000000000000000000000030c18242f39434f59606d7a85919ea5ab9f948b7e71685e52505c666f7c87939fa9a69f92857a6e61594f433a2f24190c030000000000000000000000000000000000060b0f121316191d2021242621272c2f35393a3f444855626f7b8895a093867a6d6d7074797d828a9297a0a7aaa1968e81756a5f5341382d22170b000000000000000000000003101d293643505c6976838f9ca9a296897c6f6356493c3023160900000000000000000000000000000713202d3a4653606d7985929eacada1978a7d7064564d422f261b110600000000000000000005111d2a36414c5663707d8a96a1adac9e9285796d6053463c31261b0f01000000000007131e29333d454c5052535353535353534948443d352b21160b000004111e2b3744515e6a7784919daaa89b8e8275685b4f4235281c0f020e1a2734414d5a6774808d9aa7ab9e9185786b5e5245382b1f12050b1724313e4a5764717d8a97a4aea194887b6e6155483b2e221508000006101a222a3035383939393939393939392c29241e160d040000000000000000000000000000000000000a141c242b2f333439393939393939393534312c261e150c0200000000000000000000000000000000000000060b0f13191d20212427292b2c2c2c2c2b292724201f1d18120f0a04000000000000000000000000000000000000010c1620282f35394646464646464646403f3b352e251c1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d1a26313b454d53555f606060605e53514b433a2f24180d01000b1825323e4b5865717e8686868686868073675a5a6773808686868686867e7165584b3e3225180b000000000000000000000000000000000000000916222f3c4955626f7c8686868686868686796c605346392d20130600000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a87949c9c9c9084776a5d5144495663707c89969c9c9a8d8174675a4e4134271b0e010000000000000000000003101c28343f4a54616e7b87939fabb0a69c9083776c60584e453c342a251e1a1312100c070e070c1013131a1f262a353d47505a606d7984919ea7b1a99f9285796d6053473b31261a0e00000000000000000000000000000a151e2935404b55606b74818e97a1ada3999083776c60564c4a54606b74818e97a1ada2978e81756c61554c4135291e150b00000000000000000000000000000000000000030506080d11131821272c33383a4145474a505356626f7b8895a093867976797d81858a8f949ea1a9a9a29891847a6e61584e432f261b1106000000000000000000000003101d293643505c6976838f9ca9a296897c6f6356493c302316090000000000000000000000000006121f2b37434e5864717e8a97a1adac9e9184796d6053463b3020140a00000000000000000000010d1925303a4653606c7884919eacada1978a7e7164584e43372b1d120700000000000c18242f3a454f575c5e6060606060606056544f473d32271b10040004111e2b3744515e6a7784919daaa89b8e8275685b4f4235281c0f020e1a2734414d5a6774808d9aa7ab9e9185786b5e5245382b1f12050b1724313e4a5764717d8a97a4aea194887b6e6155483b2e22150800020d18222c343b414446464646464646464639352f2820160c010000000000000000000000000000000006101c262e363b3f40464646464646464642413d3730271e14090000000000000000000000000000000000020a11171b1f252a2d2e3134363839393938383633302d2c29241d1b150e09030000000000000000000000000000000008131e28323a414553535353535353534d4b4740372e24190d0200000000000000000000000000000000000000000000000000000000000000000000000000000002080d10121313131313131313131313131313131313131313131313121211100e0b090706040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306131313131313131308070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f29333b4246485253535353514745403a31281d130700000b1724313d4a56626c71797979797979736e645858646e73797979797979716c62564a3d3124170b000000000000000000000000000000000000000815212e3b47535f6a767979797979797979766c5f5346392d20130600000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a878f8f8f8f8f84776a5d5144495663707c898f8f8f8f8d8174675a4e4134271b0e0100000000000000000000000c17232e3846535f6975828e99a3afab9f948b7f726a60574e463e36302a25201f1c181b1a1b181c1f20262b31363f474f59616c74808d96a1adada2978d8073675d5145392a1f14090000000000000000000000000006111c26303845515d67707d89939da9a89f92877c6f655b5044424f59616d7a85929ea6a99e938a7d70675d51453d30271d1207000000000000000000000000000000000000000000050d161d242932383d44484c5154545c6063666f7b8895a2998c7f8285898d91979c9fa6aca69f9792867c6f685e52463c311d140a00000000000000000000000003101d293643505c6976838f9ca9a296897c6f6356493c30231609000000000000000000000000000815212e3a47535f6a7683909ca9afa49a8d8073665c5044382c1f1202000000000000000000000008131f2b3844505b6673808c9aa4afa99c9083766a5f5347392f24180d01000000030f1b2834404c5761686b6c6c6c6c6c6c6c6360594f44382c2013070004111e2b3744515e6a7784919daaa89b8e8275685b4f4235281c0f020e1a2734414d5a6774808d9aa7ab9e9185786b5e5245382b1f12050b1724313e4a5764717d8a97a4aea194887b6e6155483b2e2215080008141f2a343e464d5152535353535353535345413a32281e1308000000000000000000000000000000020b18222e3840474c4d53535353535353534f4d49423930261b1004000000000000000000000000000000060b141b22272b3036393a3e414345454646454442403d3a38352f2b27201a140d050000000000000000000000000000010d19242f3a444c525f606060606060605957524940352a1e13070000000000000000000000000000000000000000000000000000000000000000000000000000060d14191c1f1f202020202020202020202020202020202020202020201f1e1e1c1a18161413100c070501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c101220202020202020201514120e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d17212931363a3b4646464646453a39352f281f160c0100000915212e3a45505a62656c6c6c6c6c6c67645c52525c64676c6c6c6c6c6c65625a50453a2e2115090000000000000000000000000000000000000006131f2b37434e585f626c6c6c6c6c6c6c6c6c645a4f43372b1e120500000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8283838383838174675b4e414855626f7c8283838383827f7265584c3f3225190c00000000000000000000000006111c2a36424d57626e7b87929fa8b0a69f92877c6f695f585046413b36312d2c282327272723282c2d31373b42465159606b717e8a929da8b1a79f92857a6d61554b4035291d1004000000000000000000000000020b17232e38424e58606d7984919ea5aca1968d80736a5f53493f3d46525e68717e8b949faba59e91847a6d60594f43392e23180b0200000000000000000000000000000000000000050f171f282f353d43484f54555d6064666d6f73767c8895a29c918c8f92989a9ea1a9aca8a09d948f857d6f6a60564c41342a200b0200000000000000000000000003101d293643505c6976838f9ca9a296897c6f6356493c3023160900000000000000000000000004101d2935404b55626f7c88949fabac9f93877b6e61544a3f34281c10030000000000000000000000030f1c28333f4a54616e7b87939facab9f94887c6f62554b4035291d100400000005111e2b3744505c68737879797979797979706b6054483b2f2216090004111e2b3744515e6a7784919daaa89b8e8275685b4f4235281c0f020e1a2734414d5a6774808d9aa7ab9e9185786b5e5245382b1f12050b1724313e4a5764717d8a97a4aea194887b6e6155483b2e221508000d1925303b4650585d5f606060606060605f524c443a2f24190d0100000000000000000000000000000a141d2a34404a52585a60606060606060605c59544b42372c21150900000000000000000000000000020a11171d262d33373a4146474b4e505152535352514f4d4a4745403937322a251f170f080000000000000000000000000004111d2935414c565d6c6c6c6c6c6c6c6c66635b52473b2f23160a000000000000000000000000000000000000000000000000000000000000000000000000000810181f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2c2b2a29272523201f1c1813110d08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a11171c1f2d2d2d2d2d2d2d2d21211e1a140d05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f171f262a2d2e3939393939382d2c29241d160d0400000005111d29343f485056586060606060605a58524a4a52585a606060606060585650483f34291d110500000000000000000000000000000000000000030f1b26323c464e535560606060606060605f5a52493e33271b0f0200000000000000000000000000000000000000000000000000000000000000000713202c3945525d686d767676767676746f64584c4047535f6a6f767676767676726d62564a3e3125180b000000000000000000000000000e1a26313b47535f6974808d96a0abaea39991857b6e6a615a524c46423c3a38342e3434342e34383a3c42474d535b626b707d86929fa4aeaaa0958b7f72685e5243392f24180d010000000000000000000000000a141d28343f4a54606a73808d96a0aca59e9184796d60584e413835414c56606c77829099a3ada1968d80746b60554b4034281d140a000000000000000000000000000000000000050e172129313940454f54596063676d7175797c808387929faca39c999c9fa2aaabaca49f9c96918a827b6f6b60584e443b3022180e0000000000000000000000000003101d293643505c6976838f9ca9a296897c6f6356493c302316090000000000000000000000000613202c3945515d6774808d9aa6b0a99c8f8276695f5342382e23170c000000000000000000000000000b17222d3846535e6976828f9ca9b0a69a8d8074675d5145392c20150a00000005121f2b3845525e6b7885868686868686867d706356493d3023160a0004111e2b3744515e6a7784919daaa89b8e8275685b4f4235281c0f020e1a2734414d5a6774808d9aa7ab9e9185786b5e5245382b1f07000b1724313e4a5764717d8a97a4aea194887b6e6155483b2e22150800101c2935414d5862696c6c6c6c6c6c6c6c6c5d564c4135291d11040000000000000000000000000006111c262f3c46525c64676c6c6c6c6c6c6c6c68655d54493d3125190c000000000000000000000000030b141b22272f383f44464c5254575a5c5e5f5f5f5f5e5c5a5753514b47433d363129211a120a0100000000000000000000000713202c3945525d687679797979797979736d63574b3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000006101a222a30353839393939393939393939393939393939393939393939393838373634322f2d2c2923201d19130f0a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151c23282c39393939393939392e2d2a251f170f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d141a1e21222c2d2d2d2d2b20201d18130c0400000000010c18222d363f454a4b5353535353534d4c474040474c4d5353535353534b4a453f362d22180c0100000000000000000000000000000000000000000a15202a343c4347495353535353535353534f4940372c21160a00000000000000000000000000000000000000000000000000000000000000000004111d2935414c565d6069696969696967645c53483c434e585f6269696969696965625b51463a2e2216090000000000000000000000000009141f2b37424d57606d79849199a4afaba19791847c706c615e56534d494644404141414141404546494d53575f616d727d869298a2aeaca2989083786c60564c4131281d120700000000000000000000000006111b262f3844505c666f7c87929fa8aa9e938a7d70675d51463c2f303a44505b656f7c87929fa8a89f93887d6f675c51453c2f261c110600000000000000000000000000000000030c172029333b434b515960636b70757a7e8285898c909299a3afada7a5a9aaaba39f9c9a93908a847e766e6960594f463c32291e10060000000000000000000003070909101d293643505c6976838f9ca9a296897c6f6356493c302316090000000000000000000000000714202d3a4753606d7985929fabada2978a7e7164574d4230261c11060000000000000000000000000006111c2a36424d5764717e8a97a1adab9f9285796d6053473c32271b0f01000005121f2b3845525e6b7885919393939393897c706356493d3023160a0004111e2b3744515e6a7784919daaa89b8e8275685b4f4235281c0f020e1a2734414d5a6774808d9aa7ab9e9185786b5e52452f24180c000b1724313e4a5764717d8a97a4aea194887b6e6155483b2e22150800121f2b3844515d6974797979797979797976685d5245392c201307000000000000000000000000000b17222d38424e58646e737979797979797979756f65594d4134281b0e0200000000000000000000030c151d262d333d41495053565e616467696b6c6c6c6b6b696663605d55544e46423b332c241c130a01000000000000000000000714212d3a4754606d7a86868686868686807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000000000000000020d18222c343b4144464646464646464646464646464646464646464646464645454443413e3c3a38342f2d29241e1a150f0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151e262e343846464646464646463b3a36312921170d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e1214151f202020201e1413110d070100000000000006111b242d343a3d3e464646464646403f3b36363b3f404646464646463e3d3a342d241b1106000000000000000000000000000000000000000000040e18222a32373b3c464646464646464646433e372e251b1005000000000000000000000000000000000000000000000000000000000000000000010d1924303a444c52545c5c5c5c5c5c5b58534a41363c464e53555c5c5c5c5c5c585651493f34291e120600000000000000000000000000030e1a26313c45515d676f7d87939fa4aea9a19691867e756e68615e575653514a4e4e4d4e4e4b515356575f62696e767f879298a2aaafa49a92867c6f665b50443a301f160c010000000000000000000000000b17222d38414d57606d78839099a3aea2988e81756b61554b40342a27333f49535f6a73808d96a1ada49a9184796d60584e42382d22170b030000000000000000000000000000000b151e29333b454d555d606b6f767d81868a8e9298999d9fa3abb5aca6a8a09e9a9992908c87837e78716c615e574f473d342b20170d000000000000000000040a0f131516191c28333f4a546a7683909da9a296897c6f6356493c30231609000000000000000000000006131f2b37434e5865717e8b97a2adab9f9285796d6053473b3120150a0000000000000000000000000000000e1a25313b4653606d7985929eabaea2988b7e7165584e43372b1e1308000005121f2b3845525e6b7885919e9f9f9f96897c706356493d3023160a0004111e2b3744515e6a7784919daaa89b8f8275685c4f4235291c08000e1a2734414d5a6774808d9aa7ab9e9285786b554b4035291d10040b1724313e4a5764717d8a97a4aea194887b6e6155483b2e22150800131f2c3946525f6c7986868686868686867a6d6054473a2d211407000000000000000000000000030f1c28333f4a545f6a738086868686868686868275685c4f4235291c0f02000000000000000000020c151e272f383f444e535b6063686d7174767878797978777573706d67626058534d453e362e251c130a000000000000000000000714212d3a4754606d7a8793939393938c807366594d4033261a0d000000000000000000000000000000000000000000000000000000000000000000000008141f2a343e464d5152535353535353535353535353535353535353535353535251514f4d4b494745403a3935302b26201b150c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2630383f4453535353535353534846423b33291f14090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507081313131313120706040100000000000000000009121b22292e313239393939393934332f2b2b2f333439393939393932312e29221b1209000000000000000000000000000000000000000000000006101820262b2e2f39393939393939393937332c251c1309000000000000000000000000000000000000000000000000000000000000000000000008131e28323a4145475050505050504e4c4841382f343c4347485050505050504c4a463f372d23180d01000000000000000000000000000009151f2935404b55606b727f8b929da4ada9a198928a817a746e696562605c545b5a5a5a5b545c606266696e747b828b9299a2aaaea39f93887e706a5f544a3f32291e0d04000000000000000000000000040f1b27333f49535f69727f8c95a0aba79f92857b6e61594f43392f22222d38414e58606d7984919ea6aca0958c80736a5f544a3f33281f1409000000000000000000000000000007121c27303b454d575e676d747c83898e92989b9fa2aaa9a8aab0aca29a9796918e8a86837f7b76716d66615a524d453d352b22190e050000000000000000070f161b1f222325252b3844505b667784909daaa296897c6f6356493c3023160900000000000000000000000815222e3b4754606a7783909da9b1a79a8d8074675c5145382c1f130300000000000000000000000000000009141f2c3845515c6774808d9aa7b1aa9d9083776a6054473a2f24190d010005121f2b3845525e6b7885919eabaca396897c706356493d3023160a0004111e2b3744515e6a7784919daaa99c8f8376695c50433025190e020e1a2734414d5a6774808d9aa7ac9f928679675d5145392c1f13060b1724313e4a5764717d8a97a4aea194887b6e6155483b2e22150800131f2c3946525f6c7985929393939393877a6d6054473a2d2114070000000000000000000000030d1a232b3844505b666f7c8792939393939392857b6e6154473b2e211408000000000000000000000a141e2730394149505860656c70767a7e818384858686858482807d79746f6a615e57504840372e251c12090000000000000000000714212d3a4754606d7a87939f9f9f998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000000000d1925303b4650585d5f6060606060606060606060606060606060606060605f5f5e5d5c5a585653514b4746413a37312b262018120b0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17232e38424a505f606060606060605f534d453b31251a0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000911181d2124252d2d2d2d2d2d2726231f1f2326272d2d2d2d2d2d2524211d18110900000000000000000000000000000000000000000000000000060e151b1f21222d2d2d2d2d2d2d2d2d2b27211b130a010000000000000000000000000000000000000000000000000000000000000000000000020c1620283035393a43434343434341403c362f262a32373b3c4343434343433f3e3a342d251b1107000000000000000000000000000000030d18242f3a434f59626d74808d929ca3adaaa29f938e86807b76726f6d6669686767676869666d6f72777b81868f949fa3ababa39f918c7f726c61584e42382d20170d000000000000000000000000040e1a242b3744505b656e7b86929fa7ab9f958b7f72695e52473e31271d1b262f3c45515d67707d8a949eaaa89f92877c6f665b50443b31251a0e04000000000000000000000000000c18232e39424d575e696e79818990959b9fa3aaaaa8a19e9c9ea6a69a908a8784817d7a76726e6964605c545046423b332b23191007000000000000000007101921272c2f30323230394653606c7985929faca295887c6f6255493c2f2216090000000000000000000004111d2935414c56626f7c88959fabab9f95887c6f62554b4034291c100400000000000000000000000000000004101c2834404b55626f7c88959fabab9f95887c6f62564c4135291d11040005121f2b3845525e6b7885919eabaca396897c706356493d3023160a0004111e2b3744515e6a7784919daaaa9d9083776a564c41362a1e11050e1a2734414d5a6774808d9aa7afa399867a6d6053473a2d2014070b1724313e4a5764717d8a97a4aea194887b6e6155483b2e22150800131f2c3946525f6c7985929f9f9f9f93877a6d6054473a2d21140700000000000000000000010b151f2a36414c56606c78839099a39faa9e948b7e71685e5246392d20140700000000000000000006111c263039424a535b606a6f787d82868a8d8f9192929292918f8d8a86817c756e69615a524a40372e241b0f0600000000000000000714212d3a4754606d7a8793a0aca6998c807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000000000000000101c2935414d5862696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6b6a69676562605c5554524c47433c373228231d150c0700000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a545c6c6c6c6c6c6c6c6c6c5e574d42362a1e12050000000000000000000000000001070b0f111213131313131313080705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c111517182020202020201a1917131317191a202020202020181715110c06000000000000000000000000000000000000000000000000000000040a0f1315162020202020202020201e1b1610090100000000000000000000000000000000000000000000000000000000000000000000000000040e161e24292c2d3636363636363433302b251d20262b2e2f36363636363632312e29231b1309000000000000000000000000000000000007131d28313d47515b606c77808c919ea1a9aea59e98928d87837f7c79777674747474747677797c7f83888e92999fa6aea8a199928b7f736d635a50463c2f261c0e050000000000000000000000020c16202a36424d57606c77829098a3aea3999083786c60564d42352c1f15141d2935404b55616c75828f98a2aea3999083786c60574d42362a20160c02000000000000000000000004101c2834404a545e696e7b838e939d9fa7aca7a09d9996918f949ea4978a7e7b7774716d6865615e5753504a423e363029211911070000000000000000040f19232b32383b3c3f3f3f424b55626e7b8898a2aea894877b6e6154483b2e211508000000000000000000000613202c3945525d6874818e9aa79faa9d9083766a5f5343392f23180c00000000000000000000000000000000000c18232e3947535f6a7683909daa9fa79a8e8174685d5245392c2013060005121f2b3845525e6b7885919e9f9f9f96897c706356493d3023160a0004111e2b3744515e6a7784919daaab9e918578685e5246392d2014070e1b2834414e5b6774818e9aa7b5ab94887b6e6155483b2e2215090b1825313e4b5864717e8b97a4aea194887b6e6155483b2e22150800131f2c3946525f6c7985929facaca093877a6d6054473a2d2114070000000000000000000007121d27313946525e68727f8b959fabaea2988f82766c62564d41362a1e11050000000000000000030d17232e38424a545c656c737c838a8f93999a9c9e9f9f9f9e9e9c9998928e89827b716c635c524940362d22180b02000000000000000714212d3a4754606d7a8793a0ada6998c807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000000000000000121f2b3844515d697479797979797979797979797979797979797979797979797878777674716f6d6764615d56534e47433c342e271e191008000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844505c66767979797979797976695e53463a2d211407000000000000000000000000050c12171b1d1e202020202020201514120e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105090b0b1313131313130d0d0b07070b0d0d1313131313130b0b09050100000000000000000000000000000000000000000000000000000000000003060809131313131313131313120f0a0500000000000000000000000000000000000000000000000000000000000000000000000000000000040c13191d2021292929292929282724201a13151b1f21222929292929292525221e181109010000000000000000000000000000000000010c161f2b353f44505b656c747f8a92979ea6acaaa29f9a93908c898684828181808181828486898c90959a9fa3ababa49f9691877e736d635b51473e342a1d140a00000000000000000000000008131e28323a46525e69727e8b949faaa89f92877c6f665b50443b30231a0d0b18242f3943505a616e7b86929fa8ab9f958b7f72695e53463e32281e1308000000000000000000000006121f2c3844515c666e7b8490959da5aba49f9b95908c8884828f9ca09386796e696764605d5654534d46443f38302a251f170f070000000000000000000a16212b353d4348494c4c4c4d525d67727f8c99aaaca096867a6d6053473a2d201407000000000000000000000714212d3a4754606d7a869293939393988b7e7165584e4331271d1207000000000000000000000000000000000007121d2b37434e5865717e8b989393939392867a6d6054473a2d2114070005121f2b3845525e6b7885919393939393897c706356493d3023160a0004111e2b3744515e6a7784919daaada197877a6e6154473b2e23180b0f1b2835424e5b6875818e9ba8b0a3978a7d7064574a3d31261a0d0c1825323f4b5865727e8b98a5aea194887b6e6155483b2e22150800131f2c3946525f6c7985929facada093877a6d6054473a2d211407000000000000000000020b18242f39434f59616e7a85929fa7b0a69f92867b6e615a50443b3025190e0200000000000000010b151f28343f4a545c666d77808890959c9fa4aba8a5a3a2a2a3a5a8aaa39f9b938f867e736e635b52483e342a1d140a000000000000000714212d3a4754606d7a8793a0ada6998c807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c79868686868686868686868686868686868686868686868685848482807e7c7975716d68625f58534e454039302a221a1109000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d78868686868686867b6e6154483b2e2115080000000000000000000000060f161d23272a2b2d2d2d2d2d2d2d22211e1a140e060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d1113141d1d1d1d1d1d1b1a18140f080a0f1215151d1d1d1d1d1d191816120d070000000000000000000000000000000000000000040d192327333f49535b606d737d858f949da0a7acaca49f9c989892918f8e8d8d8d8e8f919298999d9fa7acaca69f99938d847d716c635b51493f352c22180b020000000000000000000000030d1924303a44505a616e7b85929fa6ada1968d80746a5f544a3f32291f110807121d28313e46535f69737f8c95a0aca79f92867b6e615a50443a3025190d0400000000000000000005111e2a36414c56606d78829096a0a7a8a099938e88837f7b787c8895a093867a6d60565754524c4846423b38342e261e1a140d05020000000000000000030f1b27323d474f5456585859575e616d7984919eabaa9e918477675d5145392c201306000000000000000000000c1925323f4c5865727f8686868686868686796d6054473c3121150b010000000000000000000000000000000000000f1b26313c4754606d7986868686868686867f7265584b3f3225180c0005121f2b3845525e6b7885868686868686867d706356493d3023160a0004111e2b3744515e6a7784919daab3a9968a7d7063554b4034281d14111c2935424f5c6875828f9ba8b3a6998c807366584e43372b1f16111926323f4c5965727f8c98a5b5ab94877a6e6154473b2e21140800131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000a141d2935404b55606b75818e97a2adaa9f948b7e72695e52483e32291f1408000000000000000007121d27313944505c666d78818c939a9fa7a9a29f9b9896959596989b9fa2aaa59e98928a80736e635a50463c2f261b11060000000000000714212d3a4754606d7a8793a0ada6998c807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929393939393939393939393939393939393939399929291908f8d8b8985827e7a756f6a625f58514b433c342c231b12090000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d79869393939393877b6e6154483b2e21150800000000000000000000050f1820282f333738393939393939392e2d2b261f180f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020608080b0e1011121313121211100d0b0807050200000000000000000000000000000000000000000000000000000000000000000000000000000000010406070a0e10111213131212100e0b080806020000000000000000000000000000000000000000000000000000000000000000000000010407071010101010100e0d0b08030000030608091010101010100c0b09060100000000000000000000000000000000000000000000071017222d384149505b636b707b828990959c9fa4acaca9aaa39f9d9c9b9a9a9a9b9c9d9fa3aaaaababa39f9b948f878079706b625a514940372e231a10060000000000000000000000010b151f2935414c56616c75828f98a2aea69e9184796d60584e42382d20170d00010c161f2a36424d57606d7984919da5aea2988f82756c61564c4135291f160c0100000000000000000713202d3946525e6873808d949fa8a7a0969187817c77726e6f7b8895a093867a6d60534a4745413b3a36312b2823201f1b1714110e090200000000000007131f2c38434f59606365656667696e75808d96a1aca89b8e817568554b4035291d1104000000000000000000000b1824313e4a56626d7279797979797979796d675d5145392c201303000000000000000000000000000000000000000a15202c3945515d676d7979797979797979726d62564a3d3124180b0005111e2b3744505c68737879797979797979706b6054483b2f2216090004111e2b3744515e6a7784919daab4a79a8d8074675c51453a2f26201d1e2b37424d576a7783909daab6a99d9083766a5f53473c3128201e1d27333f49536774808d9aa7aea399877a6d6054473a2d21140700131f2c3946525f6c7985929facada093877a6d6054473a2d211407000000000000000006111b262f3845515d67707d89939ea9aea2988f82776c60574d42362d20170d0200000000000000000c18232f39434f59606d78818e939fa4aaa29f97928e8b898888898b8e92989fa3aaa29f928c80736c61584e41382d22170b0000000000000714212d3a4754606d7a8793a0ada6998c807366594d4033261a0d0604020000000000000000000000000000020506060503000000000000000000000000131f2c3946525f6c7985929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa39f9e9e9d9c9a9898928f8b86817c756f6a605c554e463e352d241b120900000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7986939f9f9f94877b6e6154483b2e211508000000000000000000010c16202a323a3f4345464646464646463b3a37312a21180e0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205090e121415181b1d1e1f20201f1f1e1c1a181514120e090502000000000000000000000000000000000000000000000000000000000000000000000001080d111314171a1c1e1f20201f1e1d1b181514120e09040100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b262f383f44515961696e757d83898f939a9c9fa2aaa7a8aaa9a7a7a7a7a7a9a9a8a6a9a29e9b99928e88827c746d676059504840372e251c110800000000000000000000000007121d27313945525d68717e8a939eaaaa9e948a7d70675d51463c2f261c0e050000040d1a26313b45515c66707d89939ea9aa9e948a7e71685e52463d31281d120700000000000000000714212e3a4754616d7a86929fa6aaa09590847c756f6a66626f7b8895a093867a6d6053473a3935302d2e3633312e2d2b2722201e19140d0500000000000915222f3b4854606b6f72727273767b818d929da8aca1968a7d7064574a3d2f24180d01000000000000000000000915222e3a46515b62656c6c6c6c6c6c6c6c605d554b4135291d11040000000000000000000000000000000000000004111d2935414b555d606c6c6c6c6c6c6c6c65625b51463a2e22150900030f1b2834404c5761686b6c6c6c6c6c6c6c6360594f44382c2013070004111e2b3744515e6a7784919daab7ab9f9285796d60564c42382f2c292a2d3a47535f697885929fabb8ab9f95887b6e62584e4339312d2a2a2d3744505b6576828f9ca9ac9f928679685d5245392c20130600131f2c3946525f6c7985929facada093877a6d6054473a2d21140700000000000000000b17222d38414e58606d7984919ea5afa79f92867b6e655b50453b30241b0e05000000000000000004101c2934404b55606b73808d939ea5a7a098928c85817e7c7c7c7d7f82868d9299a1a8a49c928b7e716a5f53493f33271c110600000000000714212d3a4754606d7a8793a0ada6998c807366594d4033261a1312110f0b0706040100000000000306070b0f11131312100d0a09070400000000000000131f2c3946525f6c7985929facacacada7a5a5a5a5a5a5a5a5a5a5a5a5a5a5a6a6a7aaa9a7aaa29f9b99928e87827c736d675f584f473f362d241b1007000000000000000000000000000000000000000606060606060606060606060606060606060713202d3a4653606d798693a0aca194877b6e6154483b2e21150800000000000000000007121d28323c444b5051535353535353534846423c332a1f140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080e11151a1e21222528292b2c2c2c2c2b2b29272522211e1a14120e090200000000000000000000000000000000000000000000000000000000000000050b1013191d20212427292b2c2c2c2c2b2a282522211e1a15110d070100000000000000000000000000000000000000000000000000000000000000000000000406070a0d0f11121313131212100e0c09060603000000000000000000000000000000000000000000000000000000000000000a141d262d3340474f575e616b70777d82878b8f9298989a9b9d9e9e9f9f9f9e9d9d9b999797928e8a86817c766f6a605d554f473e362e251c130a000000000000000000000000030c18242f39434f59606d7a85919ea6aea2988f82756c61554b40342a1d140a0000000009141f2834404b54606b75818e97a2ada69e92857a6d61594f43392f24180c0300000000000004111d2935414c566673808c98a2aea29890837a6f6a625f58626f7b8895a093867a6d6053473a2d30363a3b43403e3b3937332d2d2a251f170e0500000000091623303c4956636f7d7f7f7f8083868e939da4aea59e9184786d6053463a2d201307000000000000000000000006121e29343f49515658606060606060605f54514b433a2f24180d0100000000000000000000000000000000000000010d18242f3a434b51545f60606060606060585651493f34291d120600000c18242f3a454f575c5e6060606060606056544f473d32271b10040004111e2b3744515e6a7784919daab7ada2978b7e71685e544a423c3935363a3f4a54616e7b8898a2aeb5afa79a8d80746a5f554b433d393636393d4653606c7985919eabaa9e9184776b564c4135291d110400131f2c3946525f6c7985929facada093877a6d6054473a2d21140700000000000000030f1b27333f49535f6a73808d96a0acaa9f958c7f72695f53493f33291f120900000000000000000006131f2c3845515c67707d88939fa5a7a09590857f797572706f6f7072757a80869196a1a9a49f92867c6e655b5044382e23170c00000000000714212d3a4754606d7a8793a0ada6998c807366594d4033261f201f1e1b181413110d080100060b101213171c1e1f201e1d1a171613100b050000000000131f2c3946525f6c7985929facb8ada39c9898989898989898989898989898999a9b9d9fa3aaaaacaba39f9a938f8780796f6a615950483f362d22190f050000000000000000000000000000000306071313131313131313131313131313131313131313202d3a4653606d798693a0aca194877b6e6154483b2e2115080906010000000000000b17232f3a444e565c5e6060606060606055534d453c31261a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d14191e20262b2e2f323436383939393938373634322e2d2b26201e1a140e0902000000000000000000000000000000000000000000000000000000040a0f161c1e24292c2d3134363839393939383634322e2d2b26201d18130c060000000000000000000000000000000000000000000000000000000000000001070c10131416191c1d1f1f20201f1e1d1b191613120f0b060000000000000000000000000000000000000000000000000000000000020b141b2227353e454d525960636b70757b7e8285888b8d8f9091929292929191908e8c8a8885817e7a746f6a626058514b433d352d241c130a010000000000000000000000000b151e2935404b55606b74818e97a1ada79f92867b6e615a50433a2f22190b0200000000030c18232e39424f59616e7a85929fa7ada1978e81746b60554b4035291e150a0000000000000713202c3945525d687783909daaab9f92857b6e6860585355626f7b8895a093867a6d6053473a333b4246474f4d4a4846443f3b3a36302920170d020000000e1a2734414d5a6774808b8b8c8d8f92999ea5aca59e938a7e71665c5044382b1f12060000000000000000000000010d18232d373f464a4c53535353535353524745413a31281d130700000000000000000000000000000000000000000007131d28313a41454752535353535353534b4a463f372d23180d01000007131e29333d454c5052535353535353534948443d352b21160b000004111e2b3744515e6a7784919daab1a7a09d92857a6d665b544e474541424648505b66727f8c98aab4aba49f9d92877c6f675d554f4746414146474e58626f7c8997a1ada99c8f8276695c4f432f24190d0100131f2c3946525f6c7985929facada093877a6d6054473a2d211407000000000000030c19232b3744505b656e7c87929fa8aea3989083786c60574d41382d21170d00000000000000000004111d2935414c55606d7984919aa4a9a09590837b726d67656362626365686d737c849197a1aba2989083786c60544a3f34281c1003000000000714212d3a4754606d7a8793a0ada6998c807366594d40332b2c2c2c2b282521201d19130d0a11171c1f2024282b2c2c2b2a272322201c160f0800000000131f2c3946525f6c7985929facb8a79c918c8b8b8b8b8b8b8b8b8b8b8b8b8b8c8d8e909298999da0a7aaaca49f99928d837c706b625a50483e342b21170d03000000000000000000000000060b1012132020202020202020202020202020202020202020202d3a4653606d798693a0aca194877b6e6154483b2e21191815120d0600000000000f1b27333f4b5660686b6c6c6c6c6c6c6c6c5f574d42372b1e12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13191f252a2d31373a3b3e41434445464645454443403e3b3a37312d2a251f1a140d0500000000000000000000000000000000000000000000000000060b151b21272c2f35393a3d414344454646454543413e3b3a37312c29241d17110a03000000000000000000000000000000000000000000000000000000040a0f12181c1f202326282a2b2c2c2c2c2b2a282523201f1c17110f0a03000000000000000000000000000000000000000000000000000000020a1117232c333b42464f54596063696e7276797c7e808283848585868585848382807d7b7975716d68625f58544e45403a312b231b120a0100000000000000000000000007121c27303945515d67707d89939da9aba0958c7f72695e53483e31281d100700060000000007121d27303d46525e68727f8b959faba99e93897d70675d51453d30261c110600000000000714212d3a4754606d7a86939facaa998c8073695e564e4855626f7b8895a093867a6d6053473a3b454d52545c5a57555350494746423b32291f14090000000e1a2734414d5a6774808d98999a9c9fa3aba8a19e938e81756c61544a3f34281c100300000000000000000000000006111b252d343a3e3f46464646464646463a39352f281f160c01000000000000000000000000000000000000000000010c161f282f35393a46464646464646463f3d3a342d251b1106000000010c17212b333a404445464646464646463d3b38322b23190f04000004111e2b3744515e6a7784919daaaca09590958e81786c665f5854524c4d53555a606c7883909daaafa4999390959083796d67605954524c4c525458606a74818e9aa9b3aa998d8073665a4d4033271a080000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000b151e2a36414c56606c77829099a3aea79f92867b6e665b50453b2f261b0f050000000000000000000613202c3945515d67737f8c96a1aca29790837a6e69605d5556555556565d606a6f7b859199a3aa9f948b7e71665c5044382c1f1509000000000714212d3a4754606d7a8793a0ada6998c807366594d4036383939393735322d2c29241e19141c23282b2d3135383939383633302f2c2721191108000000131f2c3946525f6c7985929facb2a5988c7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f80818386888c91959c9ea6acaba39f9591867d716c625a50463d33291f140900000000000000000000020a11171c1f202c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2d3a4653606d798693a0aca194877b6e6154483b2e2c2524221e18110901000000111d2a3743505c6872787979797979797976695f53463a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e161e25293036393c4247484b4e50515253535252514f4d4b4846423c3a36302a251f170f0800000000000000000000000000000000000000000000020a111720262b33383a4145474a4d4f515253535251504e4b4847423c39352f28231c150c05000000000000000000000000000000000000000000000000040a0f161b1d23292c2d303335373839393939383635322f2d2b28221c1b150e090300000000000000000000000000000000000000000000000000000006111a202930363d44484f54565e6165666d6f7174757778787979787877767573716f6d6664605d56534e47433d352f281f19110900000000000000000000000000000c18232e39424e58606d7984919ea5afa4999083786d60574d42362c1f160c1313130c060603000b151e2a36414c56606c78839099a4afa59e9184796d60584e42382e23170c00000000000916232f3c4956626f7c8999a4aea298887b6e62574d444855626f7b8895a093867a6d6053473a424d575e6169666461605b5354524d443b3025190e0200000e1a2734414d5a6774808d9a9f9fa29f9e9d9a96918b81786d605a5042382e23170b000000000000000000000000000009131b23292e313239393939393939392d2c29241d160d040000000000000000000000000000000000000000000000040d161d24292c2d393939393939393932312e29231b13090000000000050f1821292f34373839393939393939302f2c272119110700000004111e2b3744515e6a7784919daaaa9d908490938e81786e6a64605d56575f61646c727f8b95a0acac9f93878390958f82796f6b64615e56565e61646a6f7c87929facaea298897d7063564a3d3023170a0000131f2c3946525f6c7985929facada093877a6d6054473a2d211407000000000007121d27303946525e68717e8b949fababa0958c7f726a5f544a3f332a1d140a000000000000000000000714212d3a4754606d7a85929fa8a89f92857b6e685e57514b4949494a4c52585f696f7d87929faaa69e9184786d6053463c31261a0e020000000714212d3a4754606d7a8793a0ada6998c807366594d40434445464544423e3a39352f2a251e262e34383a3e424446464543403d3c38332b23190f050000131f2c3946525f6c7985929facada093877a7272727272727272727272727273737477797c8084898f949da0a7afa7a09892877e716c61584e453b30251a0d040000000000000000020c141c23282b2d393939393939393939393939393939393939393939393a4653606d798693a0aca194877b6e6154483b393932312e29231b1309000000121e2b3845515e6b7884868686868686867b6e6155483b2e2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a121a202830353b4146474e5355585b5c5e5f5f5f5f5e5e5c5a5855534d4846423b363029211a120a0200000000000000000000000000000000000000030b141b222732373d44484c5254575a5c5e5f5f5f5f5e5d5b5855534d4745413a342e261e170f0700000000000000000000000000000000000000000000060b151b21272c2f34383a3d40424445464646454543413f3c3938332d2b26201a150b06000000000000000000000000000000000000000000000000000000080e171f252a33384851595e6060605c60626567686a6b6b6c6c6c6b6a6a68666462605c6060605f5c574f453a29241d160d07000000000000000000000000000004101c2834404a54606a73808d96a09fa99f93877c6f665c50453b31241a20202020201913120f0b060c1925303b44505b666f7c87939fa99fa1968d80736a60544a3f34281c1003000000000a1724303d4a5763707d8a96abab9f9285796c6053463c4855626f7b8895a093867a6d6053473a46525e696e7673716e6c6567615e564d42362a1e110500000e1a2734414d5a6774808d939393989291908d8a847e746d665c51483e30261c11060000000000000000000000000000010911181e2224252d2d2d2d2d2d2d2c21201d18130c0400000000000000000000000000000000000000000000000000040c13181d20212c2d2d2d2d2d2d2d2524221d18110901000000000000060f171e24282b2b2d2d2d2d2d2d2d2322201b160f070000000005111e2b3844515e6b7784919eaaa4978b7e8491938e827c75716d686b6b696e71767e87929fa7b1a79c8f827b8692948f837c75716e686b6b686d70757c859299a3afaa9f9285796d6053463a2d2013070000131f2c3946525f6c7985929facada093877a6d6054473a2d21140700000000000c18232e39424f59616d7a85929ea6aea3999083786d60574e42382d21180b0200000000000000000007131f2c38434f5965727f8c98a2aca0968b7f72695f564d45403d3c3c3d41454e57606b74808d98a2aca1968a7e7164574d42372b1e12060000000714212d3a4754606d7a8793a0ada6998c807366594d4c5051525352514e4b4745413a36302a30383f44464a4f51525351504d4a48443d352b21160b0000131f2c3946525f6c7985929facada093877a6d656565656565656565656565666768666d6f73777c828990959fa4acaaa299928b7e716a60574d42362a1f160c01000000000000000a141e262e34383a46464646464646464646464646464646464646464646464653606d798693a0aca194877b6e6154484646463f3e3a342d251b11060000121e2b3845515e6b7884919393939393887b6e6155483b2e22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141c242c323a41464d5254575f626567696b6c6c6c6c6b6a696765615f5754524d46423b332c241c140a020000000000000000000000000000000000030c151d262d333c43474f54565d606467696b6c6c6c6c6b696765615f5754514b443f3830292119100700000000000000000000000000000000000000020a111720262b323839404547494c4f50525253535251504e4c4946443f3837312b262017110a020000000000000000000000000000000000000000000000000000050d141a2136424e59636b6c6c6c6c6b64615a5c5d5e5f5f5f5f5e5e5d5b535b60656c6c6c6c6b6861574c403428130c0400000000000000000000000000000006121f2c3844515c666f7c879293939393978d80746a60544a3f33291f202c2d2d2d2c26201f1c17110a141e28333f4a54606a74808d979393939392877c6f665c5044382c1f1206000000000b1824313e4b5764717e8a97a4aa9e918477655b50443c4855626f7b8895a093867a6d6053473b4754616e7b82807d7b7976746e695e52463a2d20140700000e1a2734414d5a6774808686868686858483807d79716c605c544a40362c1e140a0000000000000000000000000000000000060d12151819202020202020201f1413110d070100000000000000000000000000000000000000000000000000000001070d1113141f20202020202020181815120d06000000000000000000050c13181b1e1f20202020202020161613100b04000000000005111e2b3844515e6b7784919eaaa3978a7d7d8992948f86817d7a797778797b7e838b9299a3afaba0958a7e737f8c94959087827e7a797878797a7d82889297a1abaea3988d8074665c5145382c1f13060000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000004101c2834404b54606b74818e97a1ada79f92877c6f665c50453c2f261c0f06000000000000000000000915222f3b4854606b7784919eaaab9e9184786d60574d443b352f2f2f30353c454f59616d7a86929faca89d908376695f53473a2d2114080000000714212d3a4754606d7a8793a0ada6998c8073665956595c5e5f5f5f5e5b5854524c46413a333c424a5053575b5e5f5f5e5d5a56544f473d33271c100400131f2c3946525f6c7985929facada093877a6d605858585858585858585858595a545c6062666b6f767c838d939aa3ababa39f92867c6f695e52463e31281d130700000000000006111c2630383f444653535353535353535353535353535353535353535353535353606d798693a0aca194877b6e6154535353534c4a463f372d23180d0100121e2b3845515e6b7884919e9f9f9f94887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b141d262e363e444c52565e61666a6e717476777879797878777673716e6966615e57524d453e362e261c140a00000000000000000000000000000000030c151e272f383f444e54596063686d7074767778797978787674716e6965605d55504a423b332b221910070000000000000000000000000000000000040b141c222832373d43484b515356595b5d5e5f5f5f5f5e5d5b585653504a47433c373127221b140b03000000000000000000000000000000000000000000000000000002091f2c3945525e6b757979797978706c615f57514b525352524b51575f656c71787979797873685c5044372b1e11000000000000000000000000000000000713202d3a4653606d798386868686868686857a6d60584e42382e282b383939393939332d2b28221c140b17222d38424e58606d7a858686868686868683796d6053463a2d201307000000000b1824313e4b5764717e8a97a4ab9e918578665c50443c4855626f7b8895a093867a6d605347424e5865717e8b8d8a888583807b6e6154473b2e21140800000d1a26333f4c58646e74797979797979787774706d66625a514a42392e241a0c020000000000000000000000000000000000000106090b0c131313131313131307060401000000000000000000000000000000000000000000000000000000000000000104060713131313131313130c0b090601000000000000000000000001070c0f1112131313131313130a0907040000000000000005121e2b3845515e6b7884919eaba3968a7d73808d9499928e8a8785848585888b90959fa3abaea3999183786d78828f959a938f8b8786848485878a8e939aa1a9afa59f92867b6e61544b4034281c10040000131f2c3946525f6c7985929facada093877a6d6054473a2d211407000000040e1a242c3845515c66707d89939ea9aba0958c80736a5f544a3f332a1d140a0000000000000000000000091623303c4956636f7c8996a0aca3998b7f72665c50453b32292422222429333d46525d6874808d9aa8ab9f95887b6e6155483b3025190d0100000714212d3a4754606d7a8793a0ada6998c807366606366696b6c6c6c6a6865605d56524c443e454d545c6064686b6c6c6b69666360594f44382c20130700131f2c3946525f6c7985929facada093877a6d60544c4c4c4c4c4c4c4c4c4c4c4d4a5053555960636a6f7980889299a3abaea39891857b6e615a50433a2f24180d0000000000000b17232e38424a50535f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f606d798693a0aca194877b6e615f5f5f5f5f585651493f34291e120600121e2b3845515e6b7884919eabaca194887b6e6155483b2e22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000009131d262f38404850565e61686e73777b7e81838485868685858482807e7b77736e69615e57504840382e261c13090000000000000000000000000000000a151e273039414950585f626b70757a7d808284858686858483817e7b77726d67605c544d453d342b22190f05000000000000000000000000000000040d161d262d333c43474f54555c606366686a6b6c6c6c6c6b69686562605b54534e47423c332d261d150d03000000000000000000000000000000000000000000000000000613202d394653606c7987868686847d756e69605c554f46454f545c60696e777e8586868685786b5f5245382c1f120500000000000000000000000000000006121f2c3844515c666d7779797979797979786d685d52463d302e34384546464646463f3938332d261d18111c262f3c45525d686d7879797979797979776d665c5044382c1f1206000000000a1723303d4a5663707d8996a9ac9f9286796d6053463e4855626f7b8895a093867a6d6053474b54606a76838f9997989290857a6d6053473a2d20140700000b1723303c47525c64676c6c6c6c6c6c6b6a6764605c545044403930271c1208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121f2b3845525e6b7885919eaba396897c7078828f949f9b97989291919298979d9fa7aeaaa29f92877d70666d7a8390959f9c97999291919298979b9fa4acaca49f938c7f72695e5342392e23180c000000131f2c3946525f6c7985929facada093877a6d6054473a2d21140b0b0b0b0c16202b37424d57606d7984919da5afa3999083796d60584e42382e21180b020000000000000000000005121e2a36424d576774808d9aa8ac9f92867a6d61544a3f33292018161619212935414c56626f7c8895a0aca7998c807366564c4135291d110500000714212d3a4754606d7a8793a0ada6998c8073656c6f7376777879787775716d68615e5650484d575f666d7175777979787673706b6054483c2f22160900131f2c3946525f6c7985929facada093877a6d6054473f3f3f3f3f3f3f3f3f40403f4446494f545860676d737e879299a3aeaaa1978f82766c61554b4135291d12070000000003101c28343f4a545c6a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6d798693a0aca194877b6e6c6c6c6c6c6c65625b51463a2e22150900121e2b3845515e6b7884919eabaea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000007101b252f38404a525a61686d747b8084888b8e8f919292929291918f8d8b8884807b746e69615a524a40382e251b0f060000000000000000000000000006111c263039424a535b606a6f767d82868a8d8f919292929291908e8b88847f7a726d665e574e463d342b21170b0200000000000000000000000000030c161f282f383f444e54596063676d707375777879797978787674726f6c66625f58534d443f382f271f150d03000000000000000000000000000000000000000000000000000b1825313e4b5864717e889396918a827b736d67615953525960666d737b828b929792877e7064574a3d3124170a0000000000000000000000000000000004101c2834404a545c606a6c6c6c6c6c6c6c6b605d564c413430383f445253535353534c46443f382f2a2119141d2935414c565d606b6c6c6c6c6c6c6c6a605c544a3f34281c1003000000000815222e3b4855616e7b8897a1ada399897d70635a50474855626f7b8895a093867a6d60534c535c666f7c89949faaa29b8e8175675d5145382c1f1306000007131f2b36404a52585a60606060605f5e5d5a5753514b423f342e271e150b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080a0d0e10111212131313131211100f0d0b090706040000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b556c7885929f9f9f95887c6f6d79828d939a9fa29f9e9e9fa3aaa9a9aba39f98928a7f726b60686d7a838d939a9fa39f9e9e9fa2aaa8a9aba49f9a938c81776c60574d4230271d1207000000131f2c3946525f6c7985929facada093877a6d6054473a2d211818181818181e28323a47535f69737f8c96a0aca89f92877c6f665c51463c30261c0f0600000000000000000000000714212d3a46535e697784919eaaa99c8f8276685e5242382e21170d07080f1924303a47535f6a7784919daaaa9d908377685e5246392d20130700000714212d3a4754606d7a8793a0ada6998c807370787c7f838485868584817e7a746d68615a51575f696e787e828485868483807d7063564a3d3023170a00131f2c3946525f6c7985929facada093877a6d6054473a3232323232323232332e34383a3d43484e555c606c717e87929fa5afa99f948a7e71675d5145392e23180c0000000006121f2b3844505c6674797979797979797979797979797979797979797979797979797979788693a0aca194877b79797979797979726d62564a3e3124180b00121e2b3845515e6b7884919eabaea194887b6e6155483b2e22150800000000000000000000000000000000000000000000000000000000000000000000000000000000030c19222d37404a525c636c717a81868c9196989a9c9e9f9f9f9f9e9d9c9a9895918d86817b716c645c524a40372d21180e030000000000000000000000040e17232e38424a545c656c727c82898f92999a9c9e9f9f9f9f9e9c9a9895908b857f786e6960584e463d33291d140a000000000000000000000000000b151e283139424a50585f626b6f75797d7f828385858686858483817f7c79746f6a625f575049413931271f150b010000000000000000000000000000000000000000000000000a1724303d4956626c717f8b919e948f868079706b615f5d606b6f797f868f949f93887e716c6155493c3023160a00000000000000000000000000000000000c18232e39424a51535d606060606060605e54524c433a2f38424a505e5f6060605f5953504a423b332a251f19242f3a434c52545e606060606060605d53504a42382e23170c00000000000613202d394653606c7985929eabab9b8f82756c615a544e55626f7b8895a093867a6d6053565d656d7983909da6aca0958a7d7064554b4035291d10040000030e19242f3840474c4d53535353535251504d4a464540393028231c150c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406090e12141517191b1d1e1f1f2020201f1f1e1d1c1a18161312100c0705020000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d6779869293939393887b6e676d7880878f93999b9d9e9f9f9f9e9c9a99928e867e726d62595e686d7980878e92999a9c9e9f9f9f9e9d9a99938e877f746c655b50453b311e150b00000000131f2c3946525f6c7985929facada093877a6d6054473a2d2424242424242424303a44505a616e7b86929fa8aca0968d80736a60544b40342a1e150a0000000000000000000000000815212e3b4854616e7b8796a0acab988c7f7265564c4130261c0f06000008131e2b37434e586774808d9aa7ac9f93867a6d6154473a2e21140700000714212d3a4754606d7a8793a0ada6998c80747d83898c8f91929292918e8b86807a706c635b5e696e7b838a8e91929291908d86796c5f5346392c201300131f2c3946525f6c7985929facada093877a6d6054473a2d252525252525252623282c2d32383d434b515a616c727f8b939ea9b0a69e91847a6d60544b4034281c10040000000713202d3a4653606d78868686868686868686868686868686868686868686868686868686868a95a1b9ac9f9286868686868686867f7265584c3f3225190c00121e2b3845515e6b7884919eabaea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000a151e2b343f49525c646e737e858d92999da0a8a9a29f9d9c9b9c9d9fa2aaa7a09d99928e857e736e645c52493f332a1f140900000000000000000000020c162028343f4a545c666d777f8790949b9fa3aba7a3a2a1a1a2a4a8a7a7a09d97928b837b6f6a60584e453b2f261b1106000000000000000000000007121d273039434b545b606a6f767c8185898c8e90919292929291908e8b8985817c756e69605b534b433931271d12070000000000000000000000000000000000000000000000000815212d3945505a626d727f8b919c98928c847d756e69686d747c838c92989c918b7f726c625a5044392d201408000000000000000000000000000000000007121c2730394044465153535353535353524745413a31343f4a545c6a6c6c6c6c6c66605b544d453f363029201e28313a41454752535353535353535146443f3830261c1106000000000005121f2b3744505b6574818e9ba6aa9e938a7e716c62605857626f7b8895a093867a6d605c60686d77818e95a0aca79d9184786c605346392f24180c0000000008121d262f363c3f414646464646464544413d3a38342e271e18120b03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c1013141a1e2121242628292a2b2c2c2d2c2c2c2b2a29272522201f1c1814120e0903000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d79868686868686867a6d61666d737c82878b8e909192929291908d8a86817b716c625b51565e676d737c81868a8d909192929291908e8a87817c736d605b53493f33291f0c0300000000131f2c3946525f6c7985929facada093877a6d6054473a31313131313131313135414c56616c76828f98a3aea49a9184796d60584e42392e22180c030000000000000000000000000b1825313e4b5864717e8b97a8aea399887c6f6255493c3022140a000000020f1b26323d4a5763707d8a96a8afa4998a7d7064574a3d3124170700000714212d3a4754606d7a8793a0ada6998c80808a9095999c9e9f9f9f9d9b98928d857e736d63616e7b8590959b9e9f9f9e9c9286796c5f5346392c201300131f2c3946525f6c7985929facada093877a6d6054473a2d2119191919191919171c1f20272c30394045505a626d74818e97a1adada1968c7f73665c5145382c1f14090000000713202d3a4653606d798692929292929292929292929292929292929292929292929292929298a3aebaaea399929292929292928b7f7265584c3f3225190c00121e2b3845515e6b7884919eabaea194887b6e6155483b2e22150800000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303d46515b646e74808a92979fa3a9a19e999792908f8f8f909298989d9fa7a39f97928a80736e635b51453b31261a0e0400000000000000000008131e28323a44505c666d78818c92999fa6a9a19e9a9795949596979b9fa2a9a9a29f9590857c6f6a60574d41382d22170b01000000000000000000040d18232e39434b555d666c737c83898e9298999b9d9e9f9f9f9f9e9c9b9897918d88827b736c655d554b43392f24180e05000000000000000000000000000000000000000000000005111d29343e48505a626d727f8c929c9f96918a827b73717a818891959f9d928c7f736d625a50483e33281c10040000000000000000000000000000000000000b151e272e34383a4446464646464646453a39352f2b3844505c66757979797979726c665f575146423b3229251f282f35393a4546464646464646443a38342e261e150a000000000000030f1b27333f4953626f7c89949ea9a59f92877e756f6a6764626f7b8895a093867a6d65676d717a818e939da7a99f958a7e71665b5044382b1d120700000000010b141d242b303334393939393939383734312d2c28231d150c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e12181d1f20252a2d2e31333536373839393939393838373534322f2d2c2823211e1a140f0b0600000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d67767979797979797976685e5c606a6f757a7e8183858586858483817e7a746e69615a51494c555c606a6f757a7e8183848586858483817e7b756f6a635b504941382d21170d0000000000131f2c3946525f6c7985929facada093877a6d6054473e3e3e3e3e3e3e3e3e3e3e45525d68717e8a949faaa89f93887d6f675d51463d30271d1006000000000000000000000000010e1a2734414d5a6774808d9aa7ac9f9286796d6053463a2d201307000000000a14212e3b4754616e7a8796a1adab998d8073665a4d402f24180c00000714212d3a4754606d7a8793a0adab9f92858d929da0a7aaa39f9e9e9fa2a39f97928a7f736d6975828e97a0a7aaacaaa29f9286796c5f5346392c201300131f2c3946525f6c7985929facada093877a6d6054473a2d21140c0c0c0c0c060c1012131b1e272e343e47515b606d7985919ea7b1a99e9185796d6053463b31251a0e0200000713202d3a4653606d7986939f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa3aab4bfb4aba39f9f9f9f9f9f988b7f7265584c3f3225190c00121e2b3845515e6b7884919eabaea194887b6e6155483b2e2215080000000000000000000000000000000000000000000000000000000000000000000000000000000c17232e38424f59626d74808d929ea1a9a39f97918c8885838282838385888b90959ea1a8a29f928d80736d62574d42362a20160a0000000000000000010d1924303a44505a606d78818e939fa3a9a29f97918d8a888788898b8e92979fa2aaa79f9792867c6f695e53493f33271d12070000000000000000010c161f2834404b555d676d78808790949b9fa2a9a29e9c9b9a9a9b9d9fa3a9a19e9a948f877f776d675d554b40352920170d0200000000000000000000000000000000000000000000000c17222d363f48515b636d737f8c929ca09e948f867f7d848d939aa09d938d80736d635b51483e362c22170b00000000000000000000000000000000000000030c151c23282c2d3739393939393939382d2c29242d3a4653606d7987868686867f786e69625b524d443e3530282024292c2d3839393939393939372d2c28231c150c03000000000000000b17222d384854606a75828f97a2aaa399928b827c7773716e6f7b8895a093867a6f7175797e848e939da5aba2979083786c60544a3f33281c0b010000000000020b12191f2326272d2d2d2d2d2c2b2a2724201f1c18120b030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080e151a1d24292c2d31363a3b3d4041434445454646464645444342403e3c3a38342e2d2a261f1b17110a0200000000000000000000000000000000000000000000000000000000000000000004101d2935404b555d6c6c6c6c6c6c6c6c6c5e5651586062686d71747678797978787674716d67615e5750483f434b51585f62686d71747678787978777674716e69625f5851443f382f261b0f050000000000131f2c3946525f6c7985929facada093877a6d60544b4b4b4b4b4b4b4b4b4b4b4b4f59606d7a85929ea6aca1968d80746b60554b40342b1e150b0000000000000000000000000004111d2935414c55697683909ca9aa9d908377665c5144382c1f1206000000000714202d3946525e687884919eaba99c8f827669554b4035291d1004000714212d3a4754606d7a8793a0adada29792979da49f9c97989291919298969a9f9f918c7f726e7b87939fa9b1a7a09d98929286796c5f5346392c201300131f2c3946525f6c7985929facada093877a6d6054473a2d21140700000000000003060a0c151d2328353f45515d67717e8b95a0acada1978b7e7164574d42362a1e120500000713202d3a4653606d798693a0acacacaca49f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa0a1a6aeb8b1a9a3a19f9f9f9f9f988b7f7265584c3f3225190c00121e2b3845515e6b7884919eabaea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54606b727f8c929ca4aaa299928c84807b787675757677797b7f838a91969fa6a49c928b7f72695f53463d32271b0f030000000000000005111d2935414c56616c74808d939ea5a7a097928b85807d7b7b7b7c7e81858c9298a0a7a9a29891857b6e655b5044392f24180c000000000000000008131e28313a45515c676d79828d92999fa6a39f9a97928f8e8d8e8e9092989b9fa3a69e99928c82796d675d51453f32291e1408000000000000000000000000000000000000000000000006101b242d363f49515b636d73808d929da49e98928c8a91969fa49e938e81746e645b51493f362d241a10050000000000000000000000000000000000000000030b12181c1f202a2d2d2d2d2d2d2d2b21201d1f2b3844505c66717e879399928c827b726d615e565046413a3229241d20212b2d2d2d2d2d2d2d2a201f1c17110a03000000000000000006111b2c38434e58616e7b859298a2a9a39f948f8984807e7b7a7c8895a194877a7c7e82858b91969ea5aaa29992857b6e665b5042382d22170b0000000000000001080e13171a1a20202020201f1e1d1a171313100c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d14191f262b2f35383a3e4246484a4c4e50515252535353525251504f4d4b494644403b3a36312b27221b140b070100000000000000000000000000000000000000000000000000000000000000010d18242f39434b515f606060606060605f524c454e54565e6165686a6b6c6c6c6b696764605d55534d453e363940454e53565d606467696b6c6c6c6b6a6764615e57534e4640332d261d140a000000000000131f2c3946525f6c7985929facada093877a6d605757575757575757575757575754606b74818e97a1ada59e9184796d60594f43392f22190c04000000000000000000000000000613202c3945515d677885929eaba89b8e827568544a4034281c10040000000005111e2a36414c566976838f9ca9ab9e918578675d5145382c1f1306000714212d3a4754606d7a8793a0adb3a9a29fa2a19e948f8b8786858485878a8d92979f93887e727e8b99a4afaba0959088858686796c5f5346392c201300131f2c3946525f6c7985929facada093877a6d6054473a2d211407000000000000000000030b1218232935414b55606c7883909da9b3a99d908377695e53463a2d21140600000713202d3a4653606d798693a5afaca29a979393939393939393939393939393939393939393959ca6b1a99f97949393939393938b7f7265584c3f3225190c00121e2b3845515e6b7884919eabaea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844505c666f7c87929fa4aba29892878079736f6a6a696869656c6e72777d848f949fa6a49f92867b6e61584e43382b1f1306000000000000000713202d3946525d68717e8a929da5a79f9590857f7974706f6e6e6f7175797f869195a0a7aaa1978f82776c60554b4035291d1004000000000000010d19242f3a43505a606d79828f949fa3a7a099928e898583818181828386898e92999fa7a39f948f82796d605b51443b3025190e02000000000000000000000000000000000000000000000009121b242d373f49525b636e74808d929da5a39f99979ea1a69e948e81786c605c524940372d241b11080000000000000000000000000000000000000000000000070c1012131e202020202020201f1413111c28343f4a54616c717e87939a9490867f766e69615a524c443e352f281f191f202020202020201e1312100c0600000000000000000000000f1b27323d46525e69707d8692979ea5a69e9c95918d8a888786929fac978d87898b8e92979ea1a8a8a09892877e70695f544a3f2f261c110600000000000000000003070b0d0e13131313131312110e0a070604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e171e252a3137394045474a4d535457595b5c5d5e5f5f605f5f5f5e5d5c5a585553514a4846423b37332d261d18120c040000000000000000000000000000000000000000000000000000000000000007121d283139404553535353535353535346413c43474c5254585b5d5e5f5f5f5e5d5a5754514c46423b332c2e343c43474c5254575a5d5e5f5f5f5e5d5b5754524d47433c3427221b140b02000000000000131f2c3946525f6c7985929facada093877a6d646464646464646464646464646464666f7c88939fa9a89d93897d70675d51473d3129241e160e060000000000000000000000000714212d3a4754606d7a8797a2ada6998c807366594d402e23180c0000000000010d192530414e5a6774818d9aa7ada197867a6d6053473a2d201407000714212d3a4754606d7a8793a0adbcb3ada9a1979289827e7b797878797a7d81858d929992857b818e9babafa49990837c79797b6e6255483b2f22150800131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000071118242f3a44505b65717e8b97a2adab9f95877b6e6154483b2e23170c00000713202d3a4653606d7986939ea8a69a908a86868686868686868686868686868686868686868a95a1ada3978d87868686868686867f7265584c3f3225190c00121e2b3845515e6b7884919eabaea194887b6e6155483b2e2215080000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54606d78839099a3afa39992867d736d67625f585c5c535b6061656c707a828f949fa9a2988f82766a6054473b2e22150800000000000005121e2a36424d57616d7a85929ea4a99f9590837b726d66646261626364676d727b839095a0aaa99f948b7e71675d5145382c1f140900000000000004111d2935414c56616c74818e949ea6a69f959087817c79767474747577797d818790959ea5a69e948e81756d62564c41362a1e140800000000000000000000000000000000000000000000000009121b252d374049525c646e74808d939da59f9f9f9fa79f948f82786d665b504a40372e251b1209000000000000000000000000000000000000000000000000000004060711131313131313131207060b17232e3842505a616c717e88939a98928b827b716c615e564f45413a312b22190f13131313131311070603000000000000000000000000000a16212a36424d57606b707d858e939d9fa7a7a09d9a9795989298a3ae9f979495989b9fa2a9aaa29f9691867d706c61574d42382d1d140a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a1117202930363c42474b515357575e61646668696a6b6c6c6c6c6c6b6b6a68676562605c5455534d46443f382f29241d160d05000000000000000000000000000000000000000000000000000000000000010c161f282f3539464646464646464646393632373a4146474b4e505252535251504e4b4745413a36312921232831373a4145474b4e505152535251504e4b4746423b37312a2217110a0200000000000000131f2c3946525f6c7985929facada093877a71717171717171717171717171717171717883909aa4ada1968e81746b60554e48443d35302820180f0600000000000000000000000915222f3c4855626f7c8895a9b3a4988b7e7165584b3e32251807000000000000081926333f4c5966727f8c99a5b2a995887b6e6255483b2f221508000714212d3a4754606d7a8793a0adbab9ada19792857d76716e696b6b676d70747a808792978e81828f9ca9ac9f93877b6f6a6c6e695f53473a2e21140800131f2c3946525f6c7985929facada093877a6d6054473a2d21140700000000000000000000000007131d27333f4953606d7985929fabb1a7988b7e7265544a3f34281c10030006121f2b3844505c6675818e96a1a4978a7e79797979797979797979797979797979797979788693a0aca194877b79797979797979726d62564a3e3125180b00121e2b3845515e6b7884919eabaea194887b6e6155483b2e2215080000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844505c66727f8b95a0aba89f92877d706b605d55534e4f4f495053555a61686d79829097a1a49f94897c6f6256493c2f2316090000000000000714212d3a46535e6974818d97a1ada19790837a6e69605c5455545556555c60696e7a839098a2aea69e9184796d6053473b31261a0e0200000000000613202c3945525d68717e8a939da6a89f948f837c746f6c6668676768666d70757c838f939ea7a69e938b7f72685e52463b3025190d0100000000000000000000000000000000000000000000000009131c252e37404a525c606c77818e93939393939393959082796d665c544a3f382e251c1309000000000000000000000000000000000000000000000000000000000000040606060606060605000006111c26303e48505a626c717f88939f9f948f857e756d686159514b433d342b21160a00060606060400000000000000000000000000000000040e1a25303b454f59606b707b818a90959a9ea1a8a6a4aaa39fa3aab4a8a3a1a2a4a8aba49f9c98928c847c706b615a50453b2f261c0b0200000000000000000000000306080909090909090909090909090909090909090909090909090909090909090909090909090909090909090806030000000000000000000000000000020b141c2228323b41464d53555d606468696e70737476777878797979797877767573716f6d6665615f57535049413d352f281f170f06000000000000000000000000000000000000000000000000000000000000040d161d24292c39393939393939392e2d2a272b3036393a3e4143454646454543413e3a39352f2a251f171820262b2f35393a3e4143454546454443413e3b3a36302b2620181006000000000000000000131f2c3946525f6c7985929facb1a4988b7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e808d95a0acab9e91847a6d67625f58544f45413a322a21181006000000000000000000000a1724303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a0000000000000b1825313e4b5864717e8b97a4b0a3968a7d7063574a3d3024170a000714212d3a4754606d7a8793a0adbcb1a79e92857c706b64615e57555d6063686d747e8692938e86929faca99d908376695f60625f574d42372b1e120600131f2c3946525f6c7985929facada093877a6d6054473a2d211407000000000000000000000000010b17222d3845515d6774818e9aabb5a89c8f8275665c5044382c1f12060003101c28343f4a54606d7a84919ea59f92867b6e666c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6d798693a0aca194877b6e6c6c6c6c6c6c65625b51463a2e22160900121e2b3845515e6b7884919eabaea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7984919ea7ada1968d80736b6059514b474342423f44464850565d676d7a85929b9993908c8275685c4f4235291c0f020000000004101d2935404b55616e7b86929fa9a69e92857a6e685e57514b484848494b51575e686e7b86929fa9ada1968b7e7165574d42362a1e12050000000004111d2935414c55606d7a85929ea5aca0968f82796e6a62605b545a5b545c60636a6e78818f959faba59f92857a6e61564c41362a1e1105000000000000000000000000000000000000000000000000010a131c252e384044505b656c7881868686868686868683796d675d544a42382d261c130a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141e2c363e48505a626d727f8b919b9e97928a817a706b605d554e463d32271b0f030000000000000000000000000000000000000000000009141f29333d474f5960696e757d83888d9196979a9b9d9e9fa3aab4aaa29f9e9c9b9999938f8b857f796f6a615950483e33291d140a00000000000000000000040a0f121515161616161616161616161616161616161616161616161616161616161616161616161616161616161515120f0a030000000000000000000000020b141d262d333e444c52575f62676d7174787b7d7f81838485858686868585848382807e7c7976726e6964605b534f454039312921170f06000000000000000000000000000000000000000000000000000000000000040c12181d202d2d2d2d2d2d2d2d21201d1b1e252a2d2e32353738393939383634312d2c29241e1a140d0c151a1e24292c2d31343638393939383734312e2d2a251f1b150e0600000000000000000000131f2c3946525f6c7985929facb8a69b908b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8d929da7b1a79a8e817b77746f6a636059524c443c332a22180f050000000000000000000b1825313e4b5864717e8b97a4afa295897c6f6256493c2f2316090000000000000a1723303d4a5663707d8996a3b0a4978b7e7164584b3e3125180b000714212d3a4754606d7a8793a0adb8ab9f958a7e716a605954524d4b5154565d616c707d8793989298a3aea79a8d817467575355534d453c31261a0e0200131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000006111b2935404b5564717d8a99a3afac9f9285796d6053463a2d20130700000b17232e3845525d68707d89939da2989083796d6059606060606060606060606060606d798693a0aca194877b6e616060606060585651493f34291e120600121e2b3845515e6b7884919eabaea194887b6e6155483b2e22150802020202020202020202020202020202020202020202020000000000000000000000000004101d2935404b5564717d8a96a1acaa9e9184796d60594f45403937312d3337393e444c555e68717e8b8e8a86837f7c6f6255483c2f221509000000000006131f2c3945515d6774818d99a3ab9f948a7e71685e564d45403c3b3b3c40454d565f69727f8b97a1ada99d908377695f53463a2d211407000000000613202c3945515d6773808d97a1ada69e91847a6d675f5853504a4e4e4b5153585f666d79839099a3ada2978d8174685e5246392d20140900000000000000000000000000000000000000000000000000010a131c2627333f49535b666c757979797979797979776d675d554b42392f261c140a0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c1a242d363f48505a626d727f8b919ba29f938e857d746d6760584e43382c1f130700000000000000000000000000000000000000000000030d17212b353d474f575e616b70767c8084878a8d8f90919298a3aea2989291908e8c8986837e79726d6660584f473e362c21170b02000000000000000000060e151b1f21222323232323232323232323232323232323232323232323232323232323232323232323232323232322211f1a150e06000000000000000000000a141d262f383f4450565e61696e74797d8184878a8c8e8f909192929392929291908f8d8b8886837f7b76706c656059514b433b332921170d0400000000000000000000000000000000000000000000000000000000000001070d101320202020202020201413110f13191e202125282a2b2c2c2c2b2a272421201d19130e0903030a0f13191d202124272a2b2c2c2c2b2a282421201e1a140f0a030000000000000000000000131f2c3946525f6c7985929facb8aca29b9897979797979797979797979797979797979a9da4aeb5a99d938e8784817c76706b605d564e463c342a21170b0200000000000000000c1926323f4c5965727f8c98a5aea195887b6e6255483b2f2215080000000000000916232f3c4956626f7c8995a2afa5988b7f7265584c3f3225190c000714212d3a4754606d7a8793a0adb6aa9d9083776c61584f4846424145474c525a616b73808d969fa3aab4a5998c7f7266594c4847423c332a2015090000131f2c3946525f6c7985929facada093877a6d6054473a2d21140700000000000000000000000000000c18242f3a4754606d7a86929facaea298887b6e6255483b2f221508000006111c2935414c56606b74818e96a1a0958d80746b60564c53535353535353535353606d798693a0aca194877b6e6154535353534c4a463f372d23180d0100121e2b3845515e6b7884919eabaea194887b6e6155483b2e22150f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0b0a08040000000000000000000613202c3945515d6775828f9ba8aea3988b7e71675d51473d352f2b2622272b2d323a434c56606d7883817e7a76736f6a5f53473b2e21150800000000000714202d3a4753606d7985929faba89c8f82766c61564c433b342e2e2f2f343b444d57606d7985919eababa095887b6e6155483b2e221508000000000714212d3a4754606d7a85929fa9aa9e94897d70685d554e46443f41414045464e545c676f7c87929faca99f92867a6e6154473c31261a0e0200000000000000000000000000000000000000000000000000010a1417222d38414a545b60686c6c6c6c6c6c6c6c6a605d554c433930271d140a0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121b242d363f48515b626d727f8c919ca39e97918a81796f6a6054483b2e2215090000000000000000000000000000000000000000000000050f19232b353d454d525961636a6f74787b7d8082838486929fac9f92868483827f7c7a76716d67605c544e463e352c231a0f0600000000000000000006101820262b2e2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2e2b2620181006000000000000000006111b262f38424a505a61686e747b81858a8e919697999b9c9d9e9f9f9f9f9f9e9e9d9b9a9898928f8c87827d78706b605d554d453b33291f160c0100000000000000000000000000000000000000000000000000000000000000010406131313131313131307070502080d111314181b1d1f1f201f1e1d1b181413110d08010000000001080d111314181b1d1e1f201f1e1d1b181414110e090200000000000000000000000000131f2c3946525f6c7985929facb8b4aca6a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a7a9aeaeafafa59d9a96918d88837d746d685f584e463c33291d140a00000000000000000d1a2733404d5a6673808d99a6ada194877a6e6154473b2e2114080000000000000815222f3b4855626e7b8895a1aea6998c807366594d4033261a0d000714212d3a4754606d7a8793a0adb3a9988b7f72655a50463d3a3635393a41465059606d7984919eabb4b2a5988b7f7265584c3f3a37312a21180e030000131f2c3946525f6c7985929facada093877a6d6054473a2d21140700000000000000000000000000000713202c3945525d687783909daab4aa978a7d7064574a3d3124170a0000000d19242f3a444f59606d7984919aa49f93887d70685d5245464646464646464653606d798693a0aca194877b6e6154484646463f3e3a342d251b11070000121e2b3845515e6b7884919eabaea194887b6e6155483b2e221b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b171714110c05000000000000000714202d3a4753606d7a86929facac9f92867a6d60554b403529241d1a171b1f2028313a44515c666d7775716d6866625f584e43372b1f12060000000004101c2834404b5564717e8b98a2aca096897d70635a50443b31282321222329323c44515c6673808c99aab1a7988b7e7265584b3f3225180800000005111e2a36424d5765727f8b98a2aea99c8f82756b60564c433c38332d2e34383c424b555f6a74818e9ba8aea3988c7f7266574d42372b1e120500000000000000000000000000000000000000000000000000000006111b262f38424a50535b60606060606060605d54514c433a31271e150b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b242d363f49515b626d727f8c9193939393938e847c6f6256493c2f231609000000000000000000000000000000000000000000000000071119232b333b42464f55585f6267696e71737576787c8895a093867977767572706d6764605d55514b423d342c231a1108000000000000000000040e18222a31373a3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3a37312a22180e03000000000000040d17222d38414a545b606c717a81878d92989b9ea1a8a6a7a8a7a5a4a3a3a3a3a4a5a6a8a6aaa39f9c9a938f8a837d746d675e574d453b31281d13070000000000000000000000000000000000000000000000000000000000000000000006060606060606060000000000010507070b0e101213131212100e0b070604010000000000000000010406070b0e101212131211100e0b08070502000000000000000000000000000000131f2c3946525f6c7985929facb8b0a8a2a09f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa0a1a2a5a7aba8a09e9a949089817a6e6a5f584e453b2f261c1106000000000000000e1a2734414d5a6774808d9aa7ada093877a6d6054473a2d2114070000000000000815212e3b4854616e7b8794a1aea69a8d8073675a4d4034271a0d000714212d3a4754606d7a8793a0adada197877a6e6154473e342d2a292c30353e45515c67727f8c99a3aeb2a5988b7f7265584c3f322b2620180f06000000131f2c3946525f6c7985929facada093877a6d6054473a2d211407000000000000000000000000000004111d2935414c566875818e9ba8b2a5998c7f7266594c3f3326190c00000008131e28323d45515d67707d88939fa49a91847a6d60594f443a303939393a4653606d798693a0aca194877b6e6154483b393932312e29231b1309000000121e2b3845515e6b7884919eabaea194887b6e6155483b2e28282828282828282828282828282828282828282828282828282423211c1710080000000000000a1723303d4a5663707d8998a3aea89b8e8275675d51433a2f23181d1d1d1d1d161f2834404a545c606a6864615e5655534e463c32261b0f030000000006131f2c3845515c6775828f9caaaa9d9184776b6054483e32291f18151518202834404a54626f7b8898a2aea89b8e8175685b4e423025190d0100000714202d3a46525e697683909daaada196897d7063594f433a312b282223282c3039434e58626f7c8895a0acaa9d908477695f53463a2d211407000000000000000000000000000000000000000000000000000000000a141d262f383f44464e5353535353535353504745413a31281f150c030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b242d373f49515b636d737f86868686868686868174675a4e4134271b0e01000000000000000000000000000000000000000000000000071119202930363e44484e5355575e616467686a6f7b8895a093867a6d69686663605d5553514b454039302b221a1108000000000000000000000a15202a343c434748494949494949494949494949494949494949494949494949494949494949494949494949494949494847433c342a20150a0000000000010c161f27333f49535b666c747e858e92999fa2aaaba9a8a19e9c9a9897979696979798999c9e9fa4acaca49f9c95908981796e695f574d433a2f24180d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facb8a89e969393939393939393939393939393939393939393939495989b9ea1a9aaa69f9c938e847c6f6a5f574d42382d22170b000000000000000e1b2734414e5a6774818d9aa7ada093867a6d6053473a2d2014070000000000000814212e3b4754616e7a8794a1ada79a8d8174675a4e4134271b0e000714212d3a4754606d7a8793a0adab9e918578685e5246392c221e1d20242934404b55616e7a86929facb2a5988b7f7265584c3f32251a150e0600000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000000010d19242f404d596673808c99a6b3a79b8e8174685b4e4135281b0e000000010c16202935404b55606b74808d96a0a1968e81746b61564c4135292d2d3a4653606d798693a0aca194877b6e6154483b2e2d2525221e18110901000000121e2b3845515e6b7884919eabaea194887b6e6155483b35353535353535353535353535353535353535353535353535353531302d28221a120800000000000d1a2733404d5a6673808d99aab4aa978b7e7164554c4131282a2a2a2a2a2a2a2a2a232e39424a51535d5b5754524c4847433c342a20150a00000000000713202d3a4653606d7985929facab998c7f7366594f44362c20170d07070e18232e394653606c7985929fabaa9d9184776a564c41362a1d110500000814212e3b4754616e7b87959fabab9e9184786c6053463d31281f1c17181c1f27313c47535f6a7784919daaaca095887b6e6155483b2e22150600000000000000000000000000000000000000000000000000000000020b141d262d333839424646464646464646443a39352f281f160d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b252d373f49515b636d737979797979797979746e64584c4033271a0d0100000000000000000000000000000000000000000000000000070e171f252a33383c4347484d5254575a5c626f7b8895a093867a6d605b595653514b47454039342e271e19100800000000000000000000030f1b26313c464e53555656565656565656565656565656565656565656565656565656565656565656565656565656565655534e463c31261a0f030000000007131d28313a44505b656c78808a92979fa3abaaa69f9c9896918f8d8b8a8a89898a8a8b8d8f91939a9c9fa4aca7a09d938e837b6e695f554b41352921160a000000000000000000050a0d0f101313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313100f0d0a050000000000000000000000000104060712131313130908060300000000000000000000000000131f2c3946525f6c7985929facb8a2968c87868686868686868686868686868686868686868787898b8e92979da0a7aba59d9691857c6f695e544a3f33281d12070000000000000e1b2834414e5b6774818e9aa7aca09386796d6053463a2d2013070000000000000714212e3a4754616d7a8794a0ada79a8e8174675b4e4134281b0e000714212d3a4754606d7a8793a0ada99c8f827669564d41362a1a12111319232f3946525e687683909da9b2a5988b7f7265584c3f32251909030000000000131f2c3946525f6c7985929facada093877a6d6054473a2d211407000000000000000000000000000000081824313e4b5764717e8a97a4b1a89c8f8275695c4f4236291c0f00000000040d18242f3a434f59606d79849199a39d938a7d70685e52463e32292d3a4653606d798693a0aca194877b6e6154483b2e21191816120d070000000000121e2b3845515e6b7884919eabaea194887b6e615548424242424242424242424242424242424242424242424242424242423e3c39332c241a100500000004101c2834404b546976828f9ca9aea398887b6f6255483c2f3737373737373737373737373039404446514e4b4746413c3b37322a261f180f06000000000a1723303d4a5663707d8998a2aea399897c706356493d32231a0e05000007121f2b3844505b6676838f9ca9ac9f928579685e5246392d20130700000b1824313e4b5764717e8a97a7b1a79a8e8174665b5044382b1f160f0b0c10151f2b37434e586773808d9aa6b1a7988b7e7165584b3e2d22170b0000000000000000000000000000000000000000000000000000000000020b141c22282b2d353939393939393939372d2c29241e160d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131b252d373f49515b63666c6c6c6c6c6c6c6c67645c53483c3024180b000000000000000000000000000000000000000000000000000000050d141a21282c31373a3c4246484a4d55626f7b88959f93867a6d60534c494745403a39352f28231d150c07000000000000000000000006121f2b37434e585f6262626262626262626262626262626262626262626262626262626262626262626262626262626262625f584e43372b1f1206000000010d18242f3a434f59606c77818d929fa2a9ada59e9b948f8b888482807f7e7d7d7d7d7e7e808284878b8f939a9ea6aca59d9590847b6e675d51453d32271b0f03000000000000030a1016191c1d20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201d1c1916100a03000000000000000001070d1113141f202020201515120f0a040000000000000000000000131f2c3946525f6c7985929facada093877a797979797979797979797979797979797979797a7b7c7e81858a90959fa3aba8a19792857b6e665b5044392e23180c0000000000000e1b2835414e5b6874818e9ba7aca09386796d6053463a2d2013070000000000000714212d3a4754606d7a8793a0ada79b8e8174685b4e4135281b0e000714212d3a4754606d7a8793a0ada89b8e8175685b4e423025190f0408121d2a36414c566774818d9aa7b2a5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000000000a1724303d4a5763707d8a96a3b0a99c908276695d5043362a1d10000000000007131d28313d45515d676f7c87929fa59e91857a6d615a50443b302d3a4653606d798693a0aca194877b6e6154483b2e211508090601000000000000121e2b3845515e6b7884919eabaea194887b6e61554e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4a49453e362c22170c00000006131f2c3845515c667884919eabac9f9286796d6053464444444444444444444444444444444444444444444444444444443b3a36312a21180e030000000d192633404c5966737f8c99aaac9f92867a6d6053473a2d201407000000030f1c28333f4a546874818e9ba7aea298877a6d6154473a2e21140700010e1b2834414e5b6774818e9aa7b4aa978a7e7164544a3f3328190d040000040d1b26323d4a5764707d8a97aab4a79b8e81746853493f33271b0f030000000000000000000000000000000000000000000000000000000000020a11171c1f20282d2d2d2d2d2d2d2d2a21201d19130c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000109131b252e37404951575960606060606060605a58534a41362b2014080000000000000000000000000000000000000000000000000000000002090e161c20262b2e30363a3b3e4855626f7b88939393867a6d6053473d3a39352f2c29241d18120b030000000000000000000000000815212e3a47535f6a6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6a5f53473a2e21150800000004111d2935414b55616b73808d939da4ada9a29f938e88827e7b78757472717070707071727375777b7e82878f939fa2aaa7a0969183796d60594f43382c1f14090000000000040d151c212629292d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d292926211c150d04000000000000040c13181d20202b2d2d2d2d22211f1b150e0600000000000000000000131f2c3946525f6c7985929facada093877a6d6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c666c6d6e6f7274797e838c9299a3aba9a1978f82786c60554b4034281c100400000000000e1b2834414e5b6774818e9aa7aca09386796d6053463a2d2013070000000000000714212e3a4754616d7a8794a0ada79a8e8174675b4e4134281b0e000714212d3a4754606d7a8793a0ada79a8d8174675a4e4134271b0801010d1925303e4b5864717e8b97a4b1a5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000000000a1623303d495663707c8996a3afaa9d9083776a5d5044372a1d110000000000010c161f2935404b55606a73808d95a0a1978e81756c61564c41362d3a4653606d798693a0aca194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabaea194887b6e615b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b575550483e33281c110400000713202d3a4653606d7986939facaa9d908477665c50505050505050505050505050505050505050505050505050505050504846423b332a1f1409000004101d2935404b556975828f9ca8aa9d918477675d5145392c201306000000000b17222d414d5a6774808d9aa7b4aa94887b6e6155483b2e2215080005111e2a36414c566a7683909da9aea298887b6e6155483b2d221708000000000a15212e3b4854616e7b8798a2aeaa9d908377655b5044372b1f120500000000000000000000000000000000000000000000000000000000000000060b0f12131b20202020202020201d1413110d08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131c252e3740464b4c53535353535353534e4c4841382f251a0f03000000000000000000000000000000000000000000000000000000000000050b10151b1f21252a2d2f3c4855626f7c8686868686796d6053473a2d2c2924201d18120c0700000000000000000000000000000915222f3c4855626f7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c6f6255483c2f2215090000000613202c3945515d67707d8a929ca5aea9a197928a817c76726e69696765646463636464656669696e72767c828a9298a2aaa8a0958e81746b6054483c31261a0e02000000030d161f262d32353639393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393635322d261f160d0300000000040d161d24292c2d38393939392f2e2b2620181006000000000000000000131f2c3946525f6c7985929facada093877a6d606060606060606060606060606060605b6060616265666d71787f879299a3afa99f948b7f72675c5145382c1f130700000000000e1b2734414e5a6774818d9aa7ada093867a6d6053473a2d2014070000000000000814212e3b4754616e7a8794a1ada79a8d8174675a4e4134271b0e000714212d3a4754606d7a8793a0ada69a8d8073675a4d4034271a0d0100081724303d4a5763707d8a96a3b0a5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000000000916222f3c4955626f7c8895a2afaa9e9184776b5e5144382b1e11000000000000040d18242f39434e58606d79839099a39e938a7e71685e52463e333a4653606d798693a0aca194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabaea194887b6e6868686868686868686868686868686868686868686868686868686868686864615a5045392d21140800000815212e3b4854616e7b879aa4afa99c90837669545d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d55534d453b31261a0e020006131f2c3845515d677884919eaba99d9083766a554b4035291d110400000000061a2633404d596673808c99a6aea295887b6f6255483c2f221509000713202d3946525e687885929fabac9f9285796c605346392d201306000000000714212d3a46535e697985929facac9f9285796c605346392d2013060000000000000000000000000000000000000000000000000000000000000000000306060f131313131313131311070604010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131c252e353b3e40464646464646464641403c362f261d1308000000000000000000000000000000000000000000000000000000000000000000040a0f12151a1e212e3a47535f6a76797979797976675c5145382c201d1813100d0701000000000000000000000000000000111e2a3744515d6a77848989898989898989898989898989898989898989898989898989898989898989898989898989898983766a5d5043372a1d10000004101d2935404b55606d7984919ea4aeaaa19791857e756f6a65615f575a58575756565757585a565e61656a6f757e869298a2aea89e93897c6f63574d42372b1e12050000000a151f2831383e4243464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464643423e3831281f150a000000010c161f282f35393a45464646463c3b37322a22180e040000000000000000131f2c3946525f6c7985929facada093877a6d6054535353535353535353535353534a5053545456545c60666d737e87929fa7b0a69e9185796d6053463a2f24180d01000000000e1a2734414d5a6774808d9aa7ada093877a6d6054473a2d2114070000000000000815212e3b4854616e7b8794a1aea79a8d8074675a4d4134271a0e000714212d3a4754606d7a8793a0ada69a8d8073675a4d4034271a0d0100091623303c4956636f7c8996a2afa5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000000000916222f3c4955626f7c8895a2afab9e9184786b5e5145382b1e120000000000000007121d27313d45515c666f7c87929fa59e92857a6e615a50453b3a4653606d798693a0aca194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabaea194887b7575757575757575757575757575757575757575757575757575757575757575716c6155493c3023170a00000916232f3c4956626f7c8995acb6a89c8f82756a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a615f574d42362a1e1205000714202d3a4753606d7a86939faca89c8f8275695c4f422f24180d01000000000d1a2733404d5a6673808d99a6afa295887c6f6255493c2f221609000714212e3a4754616d7a8798a2aeaa9d918477665b5044382b1f12060000000005121e2a36424d576a7784919daaaea298877a6e6154473b2e2114080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131c232a2f323339393939393939393433302b251d140b0100000000000000000000000000000000000000000000000000000000000000000000000306090e121f2b37434e585f626c6c6c6c6c6c5c554b4034291c110d0704010000000000000000000000000000000000111e2a3744515d6a77849095959595959595959595959595959595959595959595959595959595959595959595959595959083766a5d5043372a1d10000006131f2c3945515d67737f8c96a1adaea29891857b716c625f5855534d4d4c4b4a4a4a4a4b4b4d4d5254585f626c707c86929fa7afa59c8f8276695f53463a2d211407000005101c26313a42494e505353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353504e49423a31261c1005000007131d28313a40454752535353534847433c342a20150a0000000000000000131f2c3946525f6c7985929facada093877a6d6054474646464646464646464646463f44464748494b51545c606c727e8b959fabada1978b7e7165554b4135291d1104000000000d1a2733404d5a6673808d99a6ada194877a6e6154473b2e2114080000000000000815222f3b4855626e7b8895a1aea6998d8073665a4d4033271a0d000714212d3a4754606d7a8793a0ada69a8d8073675a4d4034271a0d01000815222f3b4855626e7b8895a1aea5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000000000916232f3c4956626f7c8995a2afaa9d9183776a5e5144372b1e1100000000000000010b151f2834404b545f6a737f8c959fa1978f82756c62574d423a4653606d798693a0aca194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabb5a89b8f8281818181818181818181818181818181818181818181818181818181818181817e7164574a3e3124170b00000a1623303d495663707c8996a3afa89b8e8177777777777777777777777777777777777777777777777777777777777777776e695f53463a2d211407000915222f3c4855626f7b889aa4afa89b8e8275685b4f422d22170b00000000000e1b2834414e5b6774818e9aa7b4ab95887b6e6255483b2f221508000915222f3c4855626f7b8895aab4a99c8f837669544a3f33281c0f0300000000020e1a2531434f5c6976828f9ca9b4aa95887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000000000030607090b0d0f1111121313121211100f0d0a080705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a12191e2325262d2d2d2d2d2d2d2d272724201a130b02000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26313c464e535560606060605f514b43392f23180c010000000000000000000000000000000000000000111e2a3744515d6a7784909da2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a29d9083766a5d5043372a1d1000000714202d3a4753606d7985929ea8b1a79f92867c6f69615a534e484642413f3e3d3d3d3d3e3f404246474e535a616a717e8b959fabac9f93877b6e6155483b2e22150800000a16212d38424c545a5c60606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060605c5a544c42382d21160a00010d18242f3a434b51535e6060606055534e463c32261b0f0400000000000000131f2c3946525f6c7985929facada093877a6d6054473a393939393939393939392d3338393a3b3c40454a505a606c7883909da9b3a99d908376675d5145392c201306000000000c1926333f4c5966727f8c99a5aea195887b6e6255483b2f2215080000000000000916222f3c4955626f7c8895a2afa5988c7f7265594c3f3226190c000714212d3a4754606d7a8793a0ada69a8d8073675a4d4034271a0d01000815222e3b4855616e7b8894a1aea5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000000000a1623303d495663707c8996a3afaa9d9083776a5d5044372a1d110000000000000000030d18232e39424e58606d78839098a39e948b7e71695e52463f4653606d798693a0aca194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabb7aa9e938f8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8c807366594d4033261a0d00000a1724303d4a5763707d8a96a3b0ab9e928583838383838383838383838383838383838383838383838383838383838383837b6e6155483b2e221508000a1724303d4a5763707d8a96acb6a89c8f827569544a3f33281c0f0300000004111d2935414c566875828e9ba8aea399877a6e6154473b2e211408000a1723303d4a5663707d8996a3b0a89b8e8275685b4f422d22170b000000000000091c2835424f5b6875828e9ba8b0a396897d7063564a3d3023170a000000000000000000000000000000000000000000000000000104060b10121315171a1c1d1e1f1f201f1f1e1d1b19171514120e09060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d1216191920202020202020201b1a18140f080100000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202a343c43474853535353535345403931271d1207000000000000000000000000000000000000000000111e2a3744515d6a7784909d9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9d9083766a5d5043372a1d100004101c2834404b5464717e8a97a2acaca0958b7e726a5f575047433c3a3631323131303031313230363a3c43475058616c7683909da9afa49a8c7f7265594c3f3226190700000d1926323e49545e66696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c69665e54493e3226190d0004111d2935404b555d606b6c6c6c6c625f584e43372b20150a00000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2d2d2d2d2d2d2d2d2d22282b2d2d2e2e34383f44505b65707d8997a2adac9f92867a6d6054473a2d211407000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f2316090000000000000a1623303d495663707c8996a3afa4988b7e7165584b3e3225180b000714212d3a4754606d7a8793a0ada69a8d8073675a4d4034271a0d01000815222e3b4855616e7b8894a1aea5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000000000b1824313e4b5764717e8a97a4b1a99c8f8276695c504336291d1000000000000000000007121d27303c44505c666f7c86929fa69f92857b6e615b51454653606d798693a0aca194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabb7afa59e9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b998c807366594d4033261a0d00000a1724313d4a5764707d8a97a3b0ada1979290909090909090909090909090909090909090909090909090909090909090887b6e6255483b2f221508000b1825313e4b5864717e8b97a4b1a99d908376665b5044382b1f130a0603060a13202c3945525d687784919daaac9f9286796c605346392d201306000a1724313d4a5764707d8a97a3b0a79a8e8174675b4e4134281b060000000000010e1b2834414e5b6774818e9aa7b0a3978a7d7064574a3d3124170a000000000000000000000000000000000000000000000001070d1113171c1f20222426292a2b2b2c2c2c2b2b2a28262422211e1a1312100c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002060a0c0d13131313131313130e0d0b080300000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e18222a31373a3c46464646464638342f271f150b01000000000000000000000000000000000000000000111e2a3744515d6a77839093939393939393939393939393939393939393939393939393939393939393939393939393939083766a5d5043372a1d100006131f2c3845515c6675828f9a9c9fa29d9083786d60584e453e37322d2a262524242323242425252a2d32373e46505a64717e8b97aab3ac9c8f8275695c4f422f24180c00000f1c2935424e5a66707679797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797670665a4e4235291c0f000613202c3945515d676d78797979796f6a5f53473d32271b0f00000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d212020202020202020171c1f20212123282e343f4953606d7985929eabafa3998a7d7063574a3d3024170a000000000b1724313e4a5764717d8a97a4b0a3968a7d7063574a3d3024170a0000000000000b1724313e4a5764717d8a97a4b0a3978a7d7064574a3d3124170a000714212d3a4754606d7a8793a0ada69a8d8073675a4d4034271a0d01000815222e3b4855616e7b8894a1aea5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000000000c1926333f4c5966727f8c99a5b2a79b8e8174685b4e4135281b0e000000000000000000000b151e28343f4a545f6a727f8c949fa2978f82766d62574d4653606d798693a0aca194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabb7b8afaaa8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a6998c807366594d4033261a0d00000a1724313d4a5764707d8a97a3b0b3a9a19e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d94887b6e6155483b2e221508000c1926323f4c5965727f8c98a5b2ab9e9285796c6053463a30241b14121012141c26303a4754606d7a86939facaa9d918477655b5044372b1f1205000b1824313e4b5764717e8a97a4b1a79a8d8174675a4e4134271b0e0100000000010e1b2734414e5a6774818d9aa7b0a4978a7d7164574a3e3124170b00000000000000000000000000000000000000000003090e13181d2023282b2d2f3133353737383939393837373533312e2d2a26201f1c17110d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101820262b2e2f3939393939392c29231d150d0300000000000000000000000000000000000000000000111e2a3744515d6a77838686868686868686868686868686868686868686868686868686868686868686868686868686868683766a5d5043372a1d10000713202d3a4653606d79868b8d909298988a7e71665c50463c332b26211e1a1918171717171818191e20262b343e4754616e7b8798a2aeaa9e9184776b554b4035291d100400101d293643505c69768386868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868276695c504336291d10000714202d3a4753606d7a85868686877c6f62584e43372b1d1207000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114131313131313130b0f12131415181c232d3844505c6675828e9ba8b5ab998c7f7266594c3f3326190c000000000916232f3c4956626f7c8995aab4a4978b7e7164584b3e3125180b0000000000000c1925323f4c5865727f8b98a5b4aa95887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada69a8d8073675a4d4034271a0d01000815222e3b4855616e7b8894a1aea5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d211407000000000000000000000000000004101c2934404b556774818e9aa7b3a6998c807366594d4033261a0d00000000000000000000030c17232e38424e58606c78839098a29f948b7f72695f544a53606d798693a0aca194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabb7b1a9a3a19f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f998c807366594d4033261a0d00000a1723303d4a5663707d8996a3b0b8b0aba99f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa9aaaaaaaaaa94877a6e6154473b2e211408000d1a2733404d5a6673808d99a6b3ada297887c6f62564c41352d26201f1c1f20262e38424e5864707d8a9aa4afa89b8e81756853493f33271b0f03000b1825313e4b5864717e8b97a4b1a79a8d8074675a4d4134271a0e0100000000010e1a2734414d5a6774808d9aa7b1a4978b7e7164584b3e3125180b00000000000000000000000000000000000000040a0f151a1d24292c2e34383a3c3e404244444546464545444342403d3b3a36312d2c28231c19130d08020000000000000000000000000000000000000000000000000000000000000000000000000000000000040607090c0e1011121313131211100f0d0b0807050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e151b1f21222d2d2d2d2d2d1f1c18120b030000000000000000000000000000000000000000000000101d2936424f5b677177797979797979797979797979797979797979797979797979797979797979797979797979797979797671665b4e4236291c10000613202d394653606c777c7e808385888b867a6d60544a3f342a211b15120e090b0a0a0a0a0b090e11151b222d3a46525e697885929fabac9f928679675d5145392c1f130600101d293643505c6976838f9393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393938f8276695c504336291d10000613202c3945515d67717e8b959a8f82756a605447392e23180c000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070606060606000003060607070c111b28343f4a546673808d99a6b3a69a8d8073675a4d4034271a0d010000000814212e3b4754616e7a8798a3aea6998c7f7366594c40332619090000000000000d1a2733404d5a6673808d99a6aea298877a6d6154473a2e211407000714212d3a4754606d7a8793a0ada69a8d8073675a4d4034271a0d01000815222e3b4855616e7b8894a1aea5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d211407000000000000000000000000000006131f2c3845515c677783909daab4aa988b7e7165584b3e3225180b000000000000000000000006111c26303c44505b666e7b86929fa69f92867b6e665b5053606d798693a0aca194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabb7a99f9894939393939393939393939393939393939393939393939393939393939393938c807366594d4033261a0d0000091623303c4956636f7c8996a2afb0a69f9c9393939393939393939393939393939393939393939393939c9ea6b0aea398877a6d6054473a2d211407000e1a2734414d5a6774808d9aa7b3b3a9998c8073685d52463f382f2d2b282b2d30383f4a545f6a76828f9cacb0a6988b7e7265584b3f2d22170b00000b1824313e4b5764717e8a97a4b1a79a8d8174675a4e4134271b0e0100000000010e1b2734414e5a6774818d9aa7b1a4978a7e7164574b3e3124180b000000000000000000000000000000000000070c151b20262b2f35393a3f4446484a4d4f5051525253525251504e4c4a4846423d3a38342e29251e19140d050000000000000000000000000000000000000000000000000000000000000000000000000004070c10121316191b1d1e1f1f201f1f1e1d1b19171414110e0806030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0f12151520202020202013100c07010000000000000000000000000000000000000000000000000e1a27333f4a555f676a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a665f554a3e32261a0d0005121f2b3744505b656c6f717476797b7e7e71675d5142382e22180f0a0502000000000000000002050b111e2a36424d566b7884919eabafa399867a6d6053473a2d20140700101d293643505c6976838f918b86868686868686868686868686868686868686868686868686868686868686868686868686868686868686868b918f8376695c504336291d100004111d2935404b55606d7883909d94897c6f62544b4034281c10040000000000131f2c3946525f6c7985929facada093877a6d6054473a2d211407000000000000000000000000000b17232e3f4c5965727f8c98a5b2a79a8e8174675b4e4134281b0e010000000613202d394653606c7985929faca79b8e8174685b4e4131261a0e020000000003101c28343f4a546875828e9ba8ac9f928579685e5246392d201307000714212d3a4754606d7a8793a0ada69a8d8073675a4d4034271a0d01000815222e3b4855616e7b8894a1aea5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d21140700000000000000000000000000000714202d3a4753606d7986929facaea298887c6f6255493c2f2216090000000000000000000000000a151e28333f4a545f69727f8b949fa2989082786c605753606d798693a0aca194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabb7a3988d888686868686868686868686868686868686868686868686868686868686868686807366594d4033261a0d00000815222f3b4855626e7b8895a9b3ab9f948f8686868686868686868686868686868686868686868686868f949eaaac9f928579675d5145392c201306000e1b2734414e5a6774818d9aa7b4b8ab9f92857a6d615b5049413c393834383a3d424a505c666e7c87939facab9f94877b6e6154483b2e21150600000a1724313d4a5764707d8a97a3b0a79a8e8174675b4e4134281b0e0100000000010e1b2834414e5b6774818e9aa7b0a3978a7d7064574a3d3124170a00000000000000000000000000000000030b121820262b31373a4145474a50535557595c5d5e5e5f5f5f5e5e5d5b595755534d4946443f3835302a251e170e0802000000000000000000000000000000000000000000000000000000000000000001070c1013181c1f20232527292b2b2c2d2c2c2b2a28262421201e1915120f0a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306080913131313131306040000000000000000000000000000000000000000000000000000000a16222e39434d555b5d606060606060606060606060606060606060606060606060606060606060606060606060606060605d5b554d43382d22160a00030f1b27333f49535b60626467666c6e71716c62554b4030261c100600000000000000010507090e12161c222c3845515c677885919eabaea399877a6d6054473a2d21140700101d293643505c6976838f8b7f79797979797979797979797979797979797979797979797979797979797979797979797979797979797979797f8b8f8376695c504336291d1000010d18242f3a44505c66717e8a979a8e8174665c5145382c1f13060000000000131f2c3946525f6c7985929facada093877a6d6054473a2d21140700000000000000000000000104091925323f4c5865727f8b98a5b2a89b8e8175685b4e4235281b0f0200000005121f2b3744505b657783909daaa99c90837669574d42362a1e12050000000006121f2c3844505c667783909daaa99d9083766a564c4135291d1105000714212d3a4754606d7a8793a0ada69a8d8073675a4d4034271a0d01000815222e3b4855616e7b8894a1aea5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000007101d2935404b5563707d8a99a3aeac9f9285796d6053463a2d201307000000000000000000000000030c17222d38424d57606c77828f98a29f948c7f726a5f54606d798693a0aca194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabaea194887b7979797979797979797979797979797979797979797979797979797979797979736e63574b3f3226190c00000714212d3a4754606d7a8797a2ada99c8f82797979797979797979797979797979797979797979797979828f9ca9ab9e9184786b554b4135291d1104000e1b2834414e5b6774818e9aa7b4b3ada2988d81746d605b534e4846443f4446484e545c606d7883909aa4afa79c8f8376695e52463a2d20140700000a1723303d4a5663707d8996a3b0a89b8e8175685b4e4235281b090000000000020f1b2835424e5b6875818e9ba8b0a3968a7d7063574a3d3024170a000000000000000000000000000000070c151d232831373c42474b5154545c60626466686a6a6b6c6c6c6b6a6a686664615f575653504a46413a3630292019130d05000000000000000000000000000000000000000000000000000000000003090e12181d1f23282c2d3032343638383939393838373533312e2d2a25211f1b150f0b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c27313b434a4f5153535353535353535353535353535353535353535353535353535353535353535353535353535353504e4a433a31271c110500000b17222d38414950535558545b60626465625a50433a2f1e140a00000000020507080d1113141a1e21272c343c4653606d7986929facac9f928679675d5145392c20130600101d293643505c6976838f8b7f726c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c727f8b8f8376695c504336291d10000007131d28343f4a54606d7985929e9285796d6053463a2d2013070000000000131f2c3946525f6c7985929facada093877a6d6054473a2d21140c0c0c0c0c0c0c0c0c0c0c070d10151c28333f4a546673808c99a6b3a79a8e8174675b4e4134281b0e01000000030f1b27333f49536874818e9ba7ab9f928578695f53463a2d211407000000000713202d3a4653606d7986929faca79a8e8174675b4e413025190d01000714212d3a4754606d7a8793a0ada69a8d8073675a4d4034271a0d01000815222e3b4855616e7b8894a1aea5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d211407000000000000000000000000050e19222c3945515d6774818e9aabb4a99c908376665c5044382c1f12060000000000000000000000000006111c262f3c44505b656e7b86929fa69f92867b6e665c606d798693a0aca194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabaea194887b6e6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c66635c52473b2f23170a00000613202c3945515d677885929eabaa9d9184776c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c667784919eaaa99c8f8376695c50432f24180d01000e1b2834414e5b6774818e9aa7b3a9a19e9e928b7f726c655f585553504a5053555860666d74808d959facaba0958a7d7164574d42362a1e120500000916222f3c4955626f7c8895aab4a99c8f8276695c4f4330251a0e0200000000030f1c2936424f5c6975828f9ca8b5ab95897c6f6256493c2f23160900000000000000000000000000000810191e272e343c43474d53555d6064666d6f7173757777787979787877767573706e696763605c54524c46413b322a251e170e06000000000000000000000000000000000000000000000000000001070c141a1d24292c2e34383a3c3f4143444546464645444342403e3b3936302e2b261f1c17110a020000000000000000000000000000000000000000000000000000000000000000000000000000040607090c0e1011121313131211100f0d0b0807050200000000000000000000000000000000000000000000000000000b151f2931393f42444646464646464646464646464646464646464646464646464646464646464646464646464646464643423e3831281f150a00000006111b262f383f4446484b4a50535558585650483f31281d0c02030506090e121415191d2021262b2d33383e464e58636f7c8999a3afab9e9185786b554b4135291d110400101d293643505c6976838f8b7f72656060606060606060606060606060606060606060606060606060606060606060606060606060606065727f8b8f8376695c504336291d100000010b17232e3845515c6673808d99978a7d7063574a3d302417070000000000131f2c3946525f6c7985929facada093877a6d6054473a2d211919191919191919191919191a181d20262b3844505b6674818e9ba7b3a6998d8073665a4d4033271a0d00000000000b17222d3f4c5965727f8c98aaada297887b6e6155483b2e23180c000000000915222f3c4855626f7b8898a3aea9988b7e7265584b3f3225180800000714212d3a4754606d7a8793a0ada69a8d8073675a4d4034271a0d01000815222e3b4855616e7b8894a1aea5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000060e17202935404b55606d7985929fabb1a7988c7f7265544a3f34281c100300000000000000000000000000000a141d27333f49535e69717e8b949ea3989083786d60606d798693a0aca194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabaea194887b6e616060606060606060606060606060606060606060606060606060606060605957524a40352a1f1307000004111d2935414c55697683909ca9ab9f928578695f606060606060606060606060606060606060606d7986929faca79a8d8174675a4e4134271b0700000e1b2734414e5a6774818d9aa7ada19792919692877f776f6a6562605b545c6062656a6f78808d929ca7afa4999083786c6053463b30251a0e0200000814212e3b4754616e7b8798a3aeaa9d9084776a574d42362a1e12050000000005111d2935414c566a7783909daaafa399877b6e6154483b2e2115080000000000000000000000000009111a222a303940454e53575f62676d7175797b7d8082838485858685858483817f7d7b7874706d66615e56524c443e36302920180f07000000000000000000000000000000000000000000000000030b12181f252a2f35393a404446494c4e5051525253525251504e4c4a4746413c3a37312b28221c140b070000000000000000000000000000000000000000000000000000000000000000000004070c10121316191b1d1e1f1f201f1f1e1d1b19171414110e0806030000000000000000000000000000000000000000000000040d171f272e333637393939393939393939393939393939393939393939393939393939393939393939393939393939393736322d271f160d03000000000a141d262d3337393c3e3f4446484b4b4a453f362d1f160c0b0f1213151a1e2121252a2d2e31373a3d44485058606a74818e9babb5a99d9083766a5d50432f24180d0100101d293643505c6976838f8b7f72655853535353535353535353535353535353535353535353535353535353535353535353535353535865727f8b8f8376695c504336291d1000000006111c2834404b54626f7c88979a8d8073675a4d402e23180c0000000000131f2c3946525f6c7985929facada093877a6d6054473a2d252525252525252525252525262624292c31373f4a54606c7985919eabb3a9988b7e7165584b3e3225180b00000000000616232f3c4956626f7c8998a2aea9978b7e7164544b4034281c1004000004101d2935404b5565727e8b98aaada197887c6f6255483c2f22150900000714212d3a4754606d7a8793a0ada69a8d8073675a4d4034271a0d01000815222e3b4855616e7b8894a1aea5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d211407000000000000000000030a0f182029323b45515d67727e8b97a2adab9f95887b6e6155483b2e23170c000000000000000000000000000000020b17222d38414d57626c75828f97a29f958c7f736a606d798693a0aca194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabaea194887b6e615553535353535353535353535353535353535353535353535353535353534d4b4740382e24190e020000010d19242f414d5a6774808d9aabaea298887b6e61555353535353535353535353535353535355626f7c8899a3afa9988b7e7265584b3f3225180c00000e1a2734414d5a6774808d9aa7ab9e9285849199928c827c76726e6c666b666d6e72767c828d929ca4aea69f93877c6f655b504437291f14090000000713202d3a4653606d7986929facab9f928578695e52463a2d201407000000000713202d3946525d687885929eabac9f9286796d6053463a2d20130700000000000000000000000009121b232c343c424b51585f62696e747a7d8185888a8c8f9091919292929191908e8c8a8884807d79736d68615e565046413a322a2119100700000000000000000000000000000000000000000000060d151d24293136394045474a515356585a5c5e5e5f605f5f5e5d5b595754524c4847433c38332d261d18120b03000000000000000000000000000000000000000000000000000000000001070c1013181c1f20232527292b2b2c2d2c2c2b2a28262421201e1915120f0a0300000000000000000000000000000000000000000000050d151c2227292a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2a2926221c150d040000000000020b141b22272b2d2f2d3338393b3e3e3d3a342d241b1114171b1f2022252a2d2e3036393a3d4246484f545a616a6f7c87939facb2a8998d8073665a4d4033271a070000101d293643505c6976838f8b7f7265584c4646464646464646464646464646464646464646464646464646464646464646464646464c5865727f8b8f8376695c504336291d10000000000c18232e394653606c7985929c90837669544b4034281c100400000000131f2c3946525f6c7985929facada093877a6d6054473a3232323232323232323232323232332f35393c4347505b66707d8997a1adada297887c6f6255493c2f22160900000000000713202d3a4653606d7985929faba79b8e8174665c5145382c1f160c06060c141f2c3845515d6775828e9ba8ab9e9285786c605346392d20130600000714212d3a4754606d7a8793a0ada69a8d8073675a4d4034271a0d01000815222e3b4855616e7b8894a1aea5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d21140700000000000205060b0f151a212a323b444e58606d7984919ea9b2a89d908376695f53463a2d1c11060000000000000000000000000000000006111b262f3b45505a616e7b85929fa59f92877c6f666d798693a0aca194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabaea194887b6e61554846464646464646464646464646464646464646464646464646464646403f3b352e261c120700000000081724313e4a5764717d8a99a3afaa988b7e7165574d42464646464646464646464646424d5765727f8c98abada297887b6f6255483c2f22150900000d1a2734404d5a6773808d9aa6ab9e92857d89929f948f88827e7b79787778797b7f828990949da4aea69e938d80736b6053493f3327170d0300000006121f2b3844505c667784909daaaea298877b6e6154483b2e21150a000000000714212e3a4754616d7a8797a1adaa9e918477665c5145382c1f1306000000000000000000000009121b242d353e464e545c606a6f757b81868a8e929797999b9d9d9e9f9f9f9e9d9d9b999796918d8985807a746e68615a524c443c332b2219100700000000000000000000000000000000000000000910181f272f353b42464b5153545c60636567696b6b6c6c6c6b6b6a686664615e5655534e46443f382f28231d150c05000000000000000000000000000000000000000000000000000003090e12181d1f23282c2d3032343638383939393838373533312e2d2a25211f1b150f0b06000000000000000000000000000000000000000000040b11161a1d1e202020202020202020202020202020202020202020202020202020202020202020202020202020201d1c1a16110a0300000000000000020a11171b1f202222282b2d2f3132312e29221b191e2022272b2d2f31363a3b3e4146474a4d53555960636c717c859199a4afaca096897d706356493d3023160a0000101d293643505c6976838f8b7f7265584c3f393939393939393939393939393939393939393939393939393939393939393939393f4c5865727f8b8f8376695c504336291d1000000915202b353f4744505b6575828f9b918578665c5145382c1f130600000000131f2c3946525f6c7985929facada093877a6d6054473f3f3f3f3f3f3f3f3f3f3f3f3f3f3f40414045474e535b606c7883909da9b3ac9e9285796c605346392d201306000000000006121f2b3844505c6675828f9caaab9e9285796d6053463d31281e171515171e28313a4753606d7985929facaa9b8e8175655b5044372b1f120500000714212d3a4754606d7a8793a0ada69a8d8073675a4d4034271a0d01000815222e3b4855616e7b8894a1aea5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d21140c0c0c0c0d090e1114171b1f262b333b444c56606a73808c96a1adada1968a7e7164574d42362a1e0a0000000000000000000000000000000000000a141d29333f46525e69717e8a939ea3999083796d6d798693a0aca194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabaea194887b6e6155483b39393939393939393939393939393939393939393939393939393933322f2a241c130a00000000000714212e3a4754616d7a86929faca89b8e8275695e53463d313939393939393939303946525e6976828f9ca9ab9e9285786c605346392d20130600000d192633404c5966737f8c99a6ab9f928578808d939f9c948f8b888685848586888b8f949c9fa6aca49d948f81786c60594f41382d2217050000000003101c28343f4a546875818e9ba8b3aa978a7d7064574a3d32271b0d04000001081623303d495663707c8996a9b3a89c8f827569544b4034281c10040000000000000000000007101b242d363e474f585f666d737c82878e92989b9ea2a9a6a8aaa8a7a6a6a6a7a8a9a8a6a8a19e9a97928c86807a716c615e564d453c342b22190e0500000000000000000000000000000000000009121b222a313940454d53555d6065666d6f72747677787979797877767573716e6867625f5853504a423d342e271e170e05000000000000000000000000000000000000000000000001070c141a1d24292c2e34383a3c3f4143444546464645444342403e3b3936302e2b261f1c17110a0200000000000000000000000000000000000000060e151b1f21222323232323232323232323232323232323232323232323232323232323232323232323232323232322211f1a150e06000000000000000000060b0f121315171c1f2022252524211d1d20252a2d2d3337393c3f4246484b4c525457575f61656b70767e859197a1abb1a79d9184786c605346392d2013060000101d293643505c6976838f8b7f7265584c3f322d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d323f4c5865727f8b8f8376695c504336291d1000010e1a26313d4751595e5f6673808c999786796d6053463a2d20130700000000131f2c3946525f6c7985929facada093877a6d60544c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4d4d4b5153585f626d737f8c959fabafa49a8d8174665b5044382b1f1206000000000003101c28343f4a5464717e8b98a3ada2978a7d7064594f433a30282322222227303a434f5964717e8a98a2aea2988a7d706453493f33271b0f0300000714212d3a4754606d7a8793a0ada69a8d8073675a4d4034271a0d01000815222e3b4855616e7b8894a1aea5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d211919191919191a191e2022272b31373e454d565e686f7c87929fa8b1a79e9184786d6053463b31261a0e000000000000000000000000000000000000020b17212a36424d56616c75818f97a1a0958c80736d798693a0aca194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabaea194887b6e6155483b2e2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2626231f19120a0100000000000713202d3946525d6876828f9ca9ac9f92867b6e61584e433b322c292424292c3139424d57616e7b86929faca89b8e8174655b5044372b1f120500000c1825323f4b5865727e8b98a5ac9f92867977818c939a9f9c989993929192939a989c9fa6aba8a09d928d82796d665b50463d2f261b110600000000000b17232e3f4b5865727e8b98a8b2a69a8d807367584e43372b1f15100c090e131e2a36414c5666727f8c99a5b3aa998c7f7366594c402e23180c00000000000000000000050e19222d363e485059616a6f7980878f93999fa3aaabaaaaa29f9d9b9a9a999a9a9b9d9fa2aaa9aba9a19e98928d857e756d685f574e463c342a20170c030000000000000000000000000000000009121b242c343c434b51575e61676d7175797c7f81838485858685858483817f7d7a77736f6a64605b544f454039302920170f05000000000000000000000000000000000000000000030b12181f252a2f35393a404446494c4e5051525253525251504e4c4a4746413c3a37312b28221c140b07000000000000000000000000000000000006101820262b2e2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2e2b262018100600000000000000000000030506060b0f12131518181b1e25292d3036393b3f4446484b4d535457565e616467696e72777d828a9297a1a9b3aa9f958b7e71665b5044382b1f12060000101d293643505c6976838f8b7f7265584c3f322520202020202020202020202020202020202020202020202020202020202025323f4c5865727f8b8f8376695c504336291d100004111d2a36424e59636a6c6c727f8b9894877a6e6154473b2e21140800000000131f2c3946525f6c7985929facada093877a6d605858585858585858585858585858585859595a555d60646a6e767f8c919ca7b1a99f93877c6f62544a3f33281c0f030000000000000b17232e3a4754606d7a86929faca99c9083766b60554b423a342e2f2e2d333a424b55616b7683909daaab9f9285796d6053473a2d22170b0000000714212d3a4754606d7a8793a0ada69a8d8073675a4d4034271a0d01000815222e3b4855616e7b8894a1aea5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2525252525262627252a2d2d33373c434750575f686e7a849199a3afaa9f958b7e71665c504438291f140900000000000000000000000000000000000000050f1925303b44505a616d7a85929ea59f92877c6f798693a0aca194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabaea194887b6e6155483b2e22202020202020202020202020202020202020202020202020201a1917130e070000000000000005111d2935414c5664717e8b96a1ada3998d80746a60564d443e39352f2f35383c434b545e6973808d99a3aca096897d706353493f33271b0f0300000b1824313e4b5764717e8a97a4aea399867a6d74808891969d9fa49f9e9e9e9fa4aca9a7a79f9d95918980786d675c544a3f342b1d140a0000000000000615222f3c4855626f7b8896a0acaa9d9184776a6054473c31271f1c181b1a1e242d3946525e6876838f9ca9aea298897c706356493d30231607000000000000000000020d17202b343e48505a616b707c838c92999fa4abaca7a09d999892908f8d8d8d8d8d8f909298989c9fa4abaaa29f97928a827a6e6960584e463c32291e150b00000000000000000000000000000008121b242d363e464e555d60696e74797e8285898b8d8f91919293929291908e8c8a8784807c76716c666059514b433b332921170e0500000000000000000000000000000000000000060d151d24293136394045474a515356585a5c5e5e5f605f5f5e5d5b595754524c4847433c38332d261d18120b030000000000000000000000000000040e18222a31373a3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3a37312a22180e03000000000000000000000000000003060b141a20262b3035393b4146474950535558575e616467686d7074777b7f84898f949fa2a9b2aaa2989083786d60544a3f33281c0f030000101d293643505c6976838f8b7f7265584c3f322519131313131313131313131313131313131313131313131313131313131925323f4c5865727f8b8f8376695c504336291d100006121f2c3845525e6a757979797e8a9795887b6e6255483b2f22150800000000131f2c3946525f6c7985929facada093877a6d656565656565656565656565656565656565666768676d71757b828c919ca4adaba2978e81756a5f5342382d22170b000000000000000613202c3945515d6775818e9ba6ab9f94897d70675d544c443f3c3b3b3c3f444b545d67707d89959faba4998d8174675c5145382c1b11060000000714212d3a4754606d7a8793a0ada69a8d8073675a4d4034271a0d01000815222e3b4855616e7b8894a1aea5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facada093877a6d6054473a32323232323232333430363a3b3f44464e535a61696e7a839096a1abaea3989083786c60544a3f34281c1003000000000000000000000000000000000000000009141f29323e46525e68707e8a939ea399908378798693a0aca194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabaea194887b6e6155483b2e22151313131313131313131313131313131313131313131313130d0c0a07020000000000000000010d1924303a4653606d7984919ea7ab9f92877c6f685e564f47454141414045474e555c666e7b86929faba89e9184786c605346392d22170b0000000a1623303d495663707c8996abb5ab94877b6e6e737d848a9095989b9d9e9f9f9f9e9c9a9895908a847d736d665c554b42382d22190b020000000000000815212e3a47535f6a7784919eabaca095887c6f62584e4339312c282327262b2f35414c56616d7a86929facab9f9285796d6053463a2d20130700000000000000000009141f29323d46505a626c717d8690959fa3ababa49f9b95908c898584828180808081828385888b8f93999fa2aaa9a19e938f847b6f6a60584e443b30271d12070000000000000000000000000006101a242d363f4850585f676d737b80858b8f9298989a9c9e9e9f9f9f9e9e9d9b999795908d88837e786f6b605c554d453b332920170c0300000000000000000000000000000000000910181f272f353b42464b5153545c60636567696b6b6c6c6c6b6b6a686664615e5655534e46443f382f28231d150c05000000000000000000000000000a15202a343c434748494949494949494949494949494949494949494949494949494949494949494949494949494949494847433c342a20150a00000000000000000000000000020a11171f262a32373a4146474c5254535b60626568696e7174777a7d8084888c91959c9fa6adafa9a19892867b6e665c5142382d22170b000000101d293643505c6976838f8b7f7265584c3f3225190c06060606060606060606060606060606060606060606060606060c1925323f4c5865727f8b8f8376695c504336291d10000613202c3946535f6c798786868a909a95887b6f6255483c2f22150900000000131f2c3946525f6c7985929facada093877a72727272727272727272727272727272727272737475777a7d82878f949ca3adaba39992857b6e61584e432f261c11060000000000000004111d2935414c55626f7c88949faba69e9184796d665d56504a494848494950555d666d7984919ea7aa9f93877b6e61554b4034291c0a000000000714212d3a4754606d7a8793a0ada69a8d8073675a4d4034271a0d01000815222e3b4855616e7b8894a1aea5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facada093877a6d6054473f3f3f3f3f3f3f3f404042424647495053585f626c717b839095a0a8afa59f92867c6f655b5042382e23170c000000000000000000000000000000000000000000020d17202a36414c56616c75818e96a1a0958b7e788693a0aca194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabaea194887b6e6155483b2e2215080606060606060606060606060606060606060606060606000000000000000000000000000008131f2c3845515c67727f8b95a0aba39991847a6e68615954514c4e4e4b5153575f676d78839098a2aca0968b7f72665b5044382b1b11060000000815222e3b4855616e7b8899a3afa295897c6f626b6f797e83888b8e909192929291908e8b87837e78706b605c544b43392f261c10070000000000000006121f2b37434e586673808d99a3afa89b8e81756a5f554b433c38342e3431373a4145525d68737f8c99a3afa79b8e8175675c5145382c1f13060000000000000000030d1925303b444e58626c717e879298a0a7afa79f99938e88837f7c79777574737373747577797c7f83878d92989ea5ada59e9691857c6f6a5f564c42392e23180c030000000000000000000000030c18222c363f48505a616a6f7980868d92979c9fa2aaa7a9a8a7a6a6a6a7a8a9a8a6a7a09d9a94908a837c746d675e574d453b32291e150a0000000000000000000000000000000009121b222a313940454d53555d6065666d6f72747677787979797877767573716e6867625f5853504a423d342e271e170e050000000000000000000000030f1b26313c464e53555656565656565656565656565656565656565656565656565656565656565656565656565656565655534e463c31261a0f030000000000000000000000040b141c222831363c43474c5254565e6164656c6f7275787b7e8184868a8d9196989da0a8abb0aba59e9791867d6f695f544a402f261c1106000000101d293643505c6976838f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8f8376695c504336291d10000613202c3946535f6c79869293979aa295887c6f6255493c2f22160900000000131f2c3946525f6c7985929facb2a5988c7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f80808284868a8f92999fa6adaaa29992877d70695e52463c321d140a0000000000000000010d19242f3a47535f6a76828f99a3aca0968f82786d68605c5456555555535b60676d78818f96a0aca2988e8175695f5343392f23180c000000000714212d3a4754606d7a8793a0ada69a8d8073675a4d4034271a0d01000815222e3b4855616e7b8894a1aea5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facada093877a6d60544c4c4c4c4c4c4c4c4c4c4d4e4d5254535b60636a6e757e859195a0a7afa59d938b7f726a5f53493f30261c110600000000000000000000000000000000000000000000050e1925303a44505a606d7a84919ea59e91847a8793a0ada194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabaea194887b6e6155483b2e2215080000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b55606d78839099a3aba09690837a706b64605d555b5b555d60636a6e79818e959faaa49a9184796d60544a3f33281c0a000000000713202d3a4653606d7986929faca4978a7d716460666d71777b7f8183858586858483817e7b76716d666059504a423930271d140a0000000000000000030f1a26313c4854616e7b87929faaac9f92877c6f675d554e46454041414142474c515b606d7a85929eabaca095897d7063554b4034281c100400000000000000010b151f2a36424d56606a717e889299a2aaafa49c959087817c77726f6d6668676766676768666c6f72767b80868e939fa3aaa8a09792867c6f685e544b40342820150900000000000000000000000b151e2a343e48505a626c717c848c92989fa2a9aca8a8a09e9c9a9a999a9a9b9d9fa3ababaaa69f9c95908781796e695e574d443b30261c1106000000000000000000000000000009121b242c343c434b51575e61676d7175797c7f81838485858685858483817f7d7a77736f6a64605b544f454039302920170f050000000000000000000006121f2b37434e585f6262626262626262626262626262626262626262626262626262626262626262626262626262626262625f584e43372b1f120600000000000000000000040d161d262d333b42464e53565e6165686e7175787c7e8184878a8e91939a9a9da0a8aaacaeaca69f9c938e857c6f6b60574d42392e1d140a00000000101d293643505c6976838f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8f8376695c504336291d10000613202c3946535f6c7986929fa4a6a295887c6f6255493c2f22160900000000131f2c3946525f6c7985929facb8a79c918c8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8c8c8d8e9193999c9fa3abaca69f9892877e716b61564d42342a200b0200000000000000000008131e2b37434e58626e7c87929fa7a89e948f827a716d66646262616264656c7079818f939ea8a69f92867b6e61574d4231271d1207000000000714212d3a4754606d7a8793a0ada69a8d8073675a4d4034271a0d01000815222e3b4855616e7b8894a1aea5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facada093877a6d6058585858585858585859595a5b565e6164656c70757c828a9297a0a8afa59e938e81746d62584e41382d1e150a00000000000000000000000000000000000000000000000008131e29323e45525d68707d8a939da1978c808c99a6aea194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabaea194887b6e6155483b2e22150801010101010101010101010101010101010101010101010100000000000000000000000000000c18232e3944515c666f7c87929fa4a8a09590847d76716d6769676869676d70757b838e939ea7a59f93887d70665c5142382d22170b0000000006121f2c3844505c667784919eaaa5998c7f7266545c6064696e72747778797979787674716e6964605c544f443f3830271e150b020000000000000000000a15212d3a46535e6975818e98a3aea3999083796d675f5853514b4e4e4e4d53555d606d74818e97a1ada69d9083776b605443392e23180c000000000000000007121d27313946525e696f7c86929aa3ababa39f928d837c756f6a6662605c545a5a5a5a5a545b606265696e747b818a9298a2a9a9a19891847a6e665c51453c31261a0e0500000000000000000007121d27303c46505a626c717e8691969fa2aaaba39f9b9796918f8e8d8d8d8d8f9092999a9ea1a9aba79f9a938d837b6e695e564c42382e23170c0400000000000000000000000008121b242d363e464e555d60696e74797e8285898b8d8f91919293929291908e8c8a8784807c76716c666059514b433b332921170e050000000000000000000815212e3a47535f6a6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6a5f53473a2e211508000000000000000000030c161f282f383f444d53585f62686d72767a7e8185888b8e9196979a9d9fa4acaaacafacaba39f9b948f89817a6f6a60594f453b30271c0b0200000000101d293643505c6976838f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8f8376695c504336291d10000613202c3946535f6c7986929facafa295887c6f6255493c2f22160900000000131f2c3946525f6c7985929facb8ada39c9898989898989898989898989898989898989898999a9b9d9fa4abacaba7a09d9490867e716c62594f443b3022180e00000000000000000000010f1b26323c47535f6a73808d959fa8a69e948f847e7974716f6e6e6f7173787d848f939ea5a79f948c7f72695e53453c311f150b01000000000714212d3a4754606d7a8793a0ada69a8d8073675a4d4034271a0d01000815222e3b4855616e7b8894a1aea5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facada093877a6d656565656565656565656566676869696e7074787d81878f939ea1a9aca49f938e81786d605b51463c2f261b0c03000000000000000000000000000000000000000000000000020c17202935414c56616b74818e96a19f9285929fabaea194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabaea194887b6e6155483b2e22150d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0a0907040000000000000000000007121d2834404a54606a727f8c929ca4a7a096918a827d7a7775747475767a7d818790959ea5a59e938d80736b60544b402f261c11060000000003101c28343f4a546875828f9ba8a89b8e817568565153575f6165686a6b6c6c6c6b696765615e5753504a423d342e261e150c070100000000000000000005121e2a36424d57616e7b86929fa6aba0958f82796f6a63605c555b5a5b575f62676d747f8c939ea9a99f948a7d7064594f4430271d120700000000000000000c18232f3943505a616e7b859198a3acaca399928b80786f6a625f585653504a4e4d4d4d4e4a505355575e61696e757e869297a2aaaaa1969082786d60574e42372b21170b0000000000000000000c18232e39424e58616c717f8a9298a0a8aba49f99928e8a8784828180808081828486898d92979ea1a8aca49f9590847b6e685e544a3f342820150a000000000000000000000006101a242d363f4850585f676d737b80858b8f9298989a9c9e9e9f9f9f9e9e9d9b999795908d88837e786f6b605c554d453b332920170c0300000000000000000915222f3c4855626f7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c6f6255483c2f2215090000000000000000000a151e283139424a50575f616a6f757a7f83868b8e9297989b9ea1a8a7aaacafacaaaba39f9c99928e89827c756d6860584f473d33291e150b0000000000101d293643505c6976838f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8f8376695c504336291d10000613202c3946535f6c7986929facaca295887c6f6255493c2f22160900000000131f2c3946525f6c7985929facacacada7a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a6a7a8aaa9a7a9a19e9a95908a837b706c625a50473e32291f100600000000000000000000000a15202b37434e58606d78839096a0a8a69e96918b85817e7c7b7b7c7e80848a91969ea5a7a0958f82776c60574d42332a1f0d0300000000000714212d3a4754606d7a8793a0ada69a8d8073675a4d4034271a0d01000815222e3b4855616e7b8894a1aea5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facada093877a72727272727272727272727273737576787a7d8184898e93999ea6ada8a19a938c81786d665c50493f342a1d140a0000000000000000000000000000000000000000000000000000050e1924303a444f59606d7984919aa2989298a2aeaea194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabaea194887b6e6155483b2e221a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a171614100b050000000000000000000c18232e39424e58626d73808c929ea1a8a19e948f8a8683828181828386898e93999fa7a39f938f81786d60594f42392e1d140a0000000000000c17232e404c5966737f8c99abaa9d908477685d52464d5355585b5d5e5f5f5f5e5d5b5854534d46443f3830282321201d18130c040000000000000000020e1a25313b46535f69737f8c949fa7a79f948f837c75706d676867676869696e737a818c919ca5aaa1978f82766c6155473d331e150b000000000000000004101c2934404b55616c76828f97a1aaafa49a92877e736d665f58534e4946443f41404040413f4446484d53565e616c717c859298a2aca89f948d80736a5f53473e33281c10040000000000000004101c2834404b545f6a717e87939fa2aaa9a199938e86827e7a777574737373747577797c80858b91969da5afa79f9691847a6e665c50443c32261b0f04000000000000000000030c18222c363f48505a616a6f7980868d92979c9fa2aaa7a9a8a7a6a6a6a7a8a9a8a6a7a09d9a94908a837c746d675e574d453b32291e150a0000000000000000111e2a3744515d6a77848989898989898989898989898989898989898989898989898989898989898989898989898989898983766a5d5043372a1d10000000000000000006111c263039434b545b60696e757c81868b9093999b9ea1a9a8abadafaca9a6a8a09d9a99928f8b86817c766f6b605d564e463d352b21180c030000000000101d293643505c6976838f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8f8376695c504336291d10000613202c3946535f6c7986929f9f9f9f95887c6f6255493c2f22160900000000131f2c3946525f6c7985929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa39f9f9e9d9c9a9897928e89837e766e69615a50483f352c20170d000000000000000000000000040f1a26313c44505c666e7b8491969ea6a9a19e97918e8b898888888a8d91969ea0a8a59e9590837a6d655b50453b3121180e0000000000000714212d3a4754606d7a8793a0ada69a8d8073675a4d4034271a0d01000815222e3b4855616e7b8894a1aea5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facb2a5988c7f7f7f7f7f7f7f7f7f7f7f7f7f7f80818385878a8d91969b9fa4ababa39f9691887f776d665c544a3f372d22180b0200000000000000000000000000000000000000000000000000000008131e28323e45515d67707d88939fa29fa2aab4aea194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabaea194887b6e6155483b2e2727272727272727272727272727272727272727272727272727272423201c161008000000000000000007121c27303d46515b646e73808a92979fa3a69f9c9992908f8e8e8f9092989b9fa4a69f99928c81786d665c50473d30271d0b02000000000000061724303d4a5763707d8a99a3ac9f93867a6d6054474246484c4e505252535251504e4b4846423c3b3937332d302d2c29241d160d04000000000000000009141f2a36424d57606d78828f959fa7a69f959087817d79777574747476787b80858e939ca3aaa29892857b6e615a5044352b210c03000000000000000006131f2c3845515c67707d8a949fa9b0a69f93887e716c605c544e47433c3a38342e3433342d3338393c42464d525a616a6f7c86929aa4afa69f92877b6e62594f44392d20150a0000000000000006131f2c3845515c666f7c869299a4aea8a0979187817b75716d6869676766676768676d7073797e848e939fa4aca8a0969083786d60584e43372b20150a0000000000000000000b151e2a343e48505a626c717c848c92989fa2a9aca8a8a09e9c9a9a999a9a9b9d9fa3ababaaa69f9c95908781796e695e574d443b30261c110600000000000000111e2a3744515d6a77849095959595959595959595959595959595959595959595959595959595959595959595959595959083766a5d5043372a1d1000000000000000020c17232e38424b555d666c727b82888e92999c9fa4ababadaeaca9aba39f9d9a9795918d8a86837e7a756f6b636059524c443c342b23190f06000000000000101d293643505c6976838f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8f8376695c504336291d10000613202c3946535f6c7986929393939393887c6f6255493c2f22160900000000131f2c3946525f6c7985929393939393939393939393939393939393939393939393939399929291908f8d8b8885817d77716c615f5750483f362d231a0e05000000000000000000000000000a152028343f4a545e696e7b848f939ea1a8a9a19e9a9795959495979a9ea0a8a8a19e938e837a6e685e53493f33291f0f060000000000000714212d3a4754606d7a8793a0ada69a8d8073675a4d4034271a0d01000815222e3b4855616e7b8894a1aea5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facb8a79c918c8b8b8b8b8b8b8b8b8b8b8b8c8c8d8e909297979a9ea1a8acaba39f99928d847d736c655c544a42382e241b100600000000000000000000000000000000000000000000000000000000020c16202935414b55606b74808d96a0abaeb4bcaea194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabaea194887b6e6155483b34343434343434343434343434343434343434343434343434343434302f2c28211a110800000000000000000b151e2b343f49525c646e737e858e92999ea1a8a39f9d9c9a9b9c9d9fa3a9a29f9b948f877f776d665c544a3f352c1e150b000000000000000714212d3a4754606d7a86929faca4998a7d7063544b403a3b3f4144454646464543413e3d4347494846443f3f3c3a39352f281f160c0100000000000000030e1a26313b44505c666d7a8390959da5a7a099938e898683828181818385888c92979da5a7a09892867d70695e52483e3323190f000000000000000003101c28343f4a54606d7984919ea6b0aa9e948c7f736c625a504a423c37322d2c282327272722282b2d31363b42465058606a707e88939fa8aea3998f82766c6155493c31261b0f00000000000004111d2935414b55606d79839098a3aba9a09691857d746e6964615d565b5a5a5a5a555c6063666d7179818b939aa4afa89f958c80736a5f54473d32271b0f010000000000000007121d27303c46505a626c717e8691969fa2aaaba39f9b9796918f8e8d8d8d8d8f9092999a9ea1a9aba79f9a938d837b6e695e564c42382e23170c04000000000000111e2a3744515d6a7784909da2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a29d9083766a5d5043372a1d10000000000000000a141e28343f4a545d676d787f868f939b9fa3abacafaca9aaa29f9c999992908d8a8784817d7a76726d68636059544f45413a322b2219110700000000000000101d293643505c6976838f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8f8376695c504336291d10000613202c3946535f6c7987868686868686867c6f6255493c2f22160900000000131f2c3946525f6c79868686868686868686868686868686868686868686868686868686868685858482807e7b7874706b64615a534d453e362d241b11080000000000000000000000000000030c17232e38424d565e696e7a828a91969d9fa7a7a7a4a2a1a1a2a4a6a7a7a09d96918a81796e685e564c41382d21170d000000000000000714212d3a4754606d7a8793a0aca69a8d8073675a4d4034271a0d01000815222e3b4855616e7b8894a1aca5988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facb8ada39c98989898989898989898989898999a9b9c9ea1a9a7aba9a8a19e99928e87817a706b605b534a423930261c1209000000000000000000000000000000000000000000000000000000000000040e18242f3a434f59606d79849199a4afbbb9aea194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabaea194887b6e61554840404040404040404040404040404040404040404040404040404040403d3c38332c231a100500000000000000030c19222d37404a525c636c717a81868d9196989b9c9e9f9f9f9f9e9d9b9997928e89827c736c655c544b42382e231a0c03000000000000000613202c3945515d677683909ca9ab9a8e8174665c5145382e323537383939393836313d464e5456555350494b494745413a31281d1307000000000000000009141f28343f4a545e686d7a838e929d9fa7a49f9b9892908e8e8d8e8f9197999ea1a9a29e9590867d706b60574d42362c221108000000000000000006121f2b3844505c66727f8c96a0acaea2988f82776c605a50443f38302b26201f1c171a1a1a171c1f20252a30363e464e58616c73808d96a1acab9f948a7d7064584e43372b1d120700000000000613202c3945515d67737f8c95a0aaada19791847b706b615e5754524c4e4d4d4d4e4b5153545c60676d747f88939fa5afa79f92877c6f62584e43372b1d1207000000000000000c18232e39424e58616c717f8a9298a0a8aba49f99928e8a8784828180808081828486898d92979ea1a8aca49f9590847b6e685e544a3f342820150a000000000000111e2a3744515d6a7784909d9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9d9083766a5d5043372a1d1000000000000006111c26303844505c666d79828c92989ea5acaeabaca49f9d9998928f8c898683807d7a7774716d6865615e56544f48443d353028201910070000000000000000101d293643505c6976838f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8f8376695c504336291d100006121f2c3845525e6a757979797979797979766a6054473b2e22150800000000121f2b3844515d697479797979797979797979797979797979797979797979797979797979797978777674716f6c65636059555046423c332c241b12090000000000000000000000000000000006111c26303b444d575e686d757e848b9095979a9c9e9e9f9f9f9e9c9a9895908b847e756d675e564c443a2f261b0f05000000000000000714212d3a4754606d7a87939f9f9f9a8d8073675a4d4034271a0d01000815222e3b4855616e7b88949f9f9f988b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929facacacada7a5a5a5a5a5a5a5a5a5a5a5a5a5a6a6a8a9a8a6aba39f9c9996918c87817b746d6761595049413930271e140a000000000000000000000000000000000000000000000000000000000000000007131d28313d45515d676f7c87939fa7b1acaca194877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabaea194887b6e61554d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4a48443e352c21160b000000000000000007101b252e38404a525a61686d747b8084888b8e90919292929291908e8c8985817c766f6a605b534b423930261c1108000000000000000004111d2935414b5566737f8c99a7ab9e9285796d6053463e3128282a2b2c2c2c242f39434e58606261605b53585654514b433a2f24180d0100000000000000030b17232e38424c565e686d79818990959b9fa2aaa39f9d9b9a9a9b9c9ea1a9a49f9c97928c837b706b60594f453b30241a100000000000000000000713202d3a4653606d7884919ea8b2a99f92867b6e655b50483e342e261e1b1312100c060d060b0f12131a1f252a343d46505a606d7984919ea8b0a69c8f83766a5f5347392e23180c00000000000714212d3a4754606d7a85929fa7b0a69e92857b6e696059524d47464141404040414045464b51555d606d727f8b939ea9afa3998f82766a605447392f24180c00000000000004101c2834404b545f6a717e87939fa2aaa9a199938e86827e7a777574737373747577797c80858b91969da5afa79f9691847a6e665c50443c32261b0f040000000000111e2a3744515d6a77839093939393939393939393939393939393939393939393939393939393939393939393939393939083766a5d5043372a1d100000000000000b17232e38424f59606d78828f949fa3aaafaca7a09d9a93908c8985827f7c7a7673706d686764605d5654524c48433d383229241e160e07000000000000000000101d293643505c6976838f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8f8376695c504336291d100004111d2a36424e59636a6c6c6c6c6c6c6c6c6260584e43372b1f130600000000101c2935414d5862696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6a69676562605b53544f49453e37312a211a12090000000000000000000000000000000000000a151e29323b454d565d606c71797e83878a8d8f9192929292918f8d8b87837e79716c605d554c443b32281d140a00000000000000000714212d3a4754606d7a8793939393938d8073675a4d4034271a0d01000815222e3b4855616e7b8893939393938b7f7265584c3f3225190c000000000000131f2c3946525f6c7985929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa39f9f9e9d9c9b99979992908c89847f7b746e69605d554f443f382f271e150c020000000000000000000000000000000000000000000000000000000000000000010c161f2935404b55606b73808d95a09f9f9f9f94877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabaea194887b6e615a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a57554f473e33281c1004000000000000000009131c262e38404850565e61696e73787c7e818384858686858583817f7c79746f6a625f585049413930271e150a000000000000000000010d18242f3b4855616e7b88959faba1978a7e71645a50433a2f241d151f141c2935404b55606a6f6e6c65676563605d554b4135291d1104000000000000000006111c26303a444c565e676d747c83898e9298999b9d9e9f9f9f9f9e9d9b999993908b857f786e6960594f473d33291f1208000000000000000005111e2a36414c5664707d8a96a1adada1978c7f72695e53493f3628231c140c0a060300000000000306090e1419222b343e45515d67717e8a96a0acab9f94887c6f62544b4034281c100400000006131f2b37434e5866727f8c97a2adaa9e948a7d70695f574f46423b3935303433342e34383a40454b515b626d74818e97a1adab9e94897c6f62554b4035291d1004000000000006131f2c3845515c666f7c869299a4aea8a0979187817b75716d6869676766676768676d7073797e848e939fa4aca8a0969083786d60584e43372b20150a0000000000111e2a3744515d6a77838686868686868686868686868686868686868686868686868686868686868686868686868686868683766a5d5043372a1d10000000000003101c28343f4a54616b74818e949ea6aeafa7a09d95908b8783807c797673706d676764615e565754524c4746413a38322c272119130c0400000000000000000000101d293643505c6976838f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8f8376695c504336291d1000010e1a26313d4751595e5f6060606060606055544e463c32271b0f03000000000d1925303b4650585d5f6060606060606060606060606060606060606060606060606060605f5f5e5d5c5a585553504948443d39342b261f180f0800000000000000000000000000000000000000030c172029333b444c525a61676d71767a7e818284858686858483817e7b77716d67615a514b433b322920160b0200000000000000000714212d3a4754606d7a868686868686868073675a4d4034271a0d01000815222e3b4855616e7b868686868686867f7265584c3f3225190c000000000000131f2c3946525f6c798592939393939393939393939393939393939398929291918f8e8d8b8886837f7c78736e69615f57514c433e332d261d150c0300000000000000000000000000000000000000000000000000000000000000000000040d18242f39434f59606d798390999393939393877b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabaea194887b6e67676767676767676767676767676767676767676767676767676767676767676361594f44382c2014070000000000000000010a141c262e363e444c52575e61666a6f7274767878797978787675726f6d66626058534e443f382f271e150c03000000000000000000000714212d3a46535f697683909da8a99d9083766c61554b40352e27222222262d3845515d676f7c7b797674726f6d675d5145392c2013060000000000000000000a141e28323a444c555c606b6f777d8185898c8e90919292929291908f8d8a86837e79726d665f574f473d352b20170d0000000000000000000714202d3946525e6876828f9ca8b2ab9e9185796d60574d41382d2417110a02000000000000000000000002091019222935404b55606c7884919dabb0a69a8e8174665c5145382c1f13060000000815222e3b4754606a7884919ea9b1a79c8f82756c61574d453d36302d292427272723282c2e343a4145515b606d7a85929eaab0a69b8e8275675d5145392c1f13060000000004111d2935414b55606d79839098a3aba9a09691857d746e6964615d565b5a5a5a5a555c6063666d7179818b939aa4afa89f958c80736a5f54473d32271b0f0100000000101d2936424f5b677177797979797979797979797979797979797979797979797979797979797979797979797979797979797671665b4e4236291c10000000000006121f2b3844505c66707d89939da6b0aca49f959089837f7b76736f6d666663605d555754524c4a4745413a3936302c27211b160d08020000000000000000000000101d293643505c6976838f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8f8376695c504336291d1000000915202b353f474e5253535353535353534947433c342b20150a000000000008141f2a343e464d5152535353535353535353535353535353535353535353535353535353535252514f4d4b4846443f3838332d28221a140e06000000000000000000000000000000000000000000050e172129323a414550555c6064686e7174767778797978787674716e6965605d555045403a312920170e040000000000000000000713202c3945525d687679797979797979736e64584c3f3326190d00000714212d3a46535f697679797979797979726d62564a3e3124180b000000000000131f2c3946525f6c798686868686868686868686868686868686868686858585848381807e7c7976736f6c65615e57534d45413a3127221b140b0300000000000000000000000000000000000000000000000000000000000000000000000007121d27313d45515c676f7c86868686868686867b6e6154483b2e211508000000000000000000121e2b3845515e6b7884919eabaea194887b737373737373737373737373737373737373737373737373737373737373737373706b6155483c2f231609000000000000000000020a131c242c323b41464d5254585f626568696b6c6c6c6c6b6a686663605c54544e4e4c4841382f1d150c03000000000000000000000005121e2a36424d5764717e8b96a1ab9f958a7d70675d51454039302f2e2f2f38404b55606d7986888583817e7c796d6054473a2d211407000000000000000000020c162029323a434b515960636b7075797c7f82838485868685858382807d7a76726d67605c544d453d352b23190e050000000000000000000814212e3b4754616e7a87939facafa3998c7f72675d51453b2f261b1206000000000000000000000000000000071018242f3944505b66727e8b99a3aeac9f9285796d6053463a2d2013080000000916222f3c4955626f7c8896a1acaca095897c6f625a50453b332a25201d191a1a1a181c1f23282f353f45515d67727f8b98a2aeac9f9286796d6053473a2d201406000000000613202c3945515d67737f8c95a0aaada19791847b706b615e5754524c4e4d4d4d4e4b5153545c60676d747f88939fa5afa79f92877c6f62584e43372b1d1207000000000e1a27333f4a555f676a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a665f554a3e32261a0d00000000000713202d3a4653606d7883909da5afafa49a938c837d77726e686663605c545653514b4a4746413e3a3935302d2a251e1b17151312100b0600010000000000000000101d293643505c6976838f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8f8376695c504336291d100000040f19242d353d424546464646464646463c3b37322b22190f040000000000020d18222c343b4144464646464646464646464646464646464646464646464646464646464646454443413e3c3937332d2c27211d170e09030000000000000000000000000000000000000000000000050f1720282f353e434b5153565e616467696b6b6c6c6c6b696765615e5753514b433e352f281f170e050000000000000000000004111d2935414c565d6c6c6c6c6c6c6c6c67645c52473b2f23170b000005121e2b37424d575f6c6c6c6c6c6c6c6c65625b51463a2e221509000000000000121f2b3844515d6974797979797979797979797979797979797979797979787877767573716f6d666662605b53534d47423c352f281f17110a0200000000000000000000000000000000000000000000000000000000000000000000000000010b151f2834404b55606a6f797979797979797976695e53463a2d211407000000000000000000121e2b3845515e6b7884919eabb4a79a8e818080808080808080808080808080808080808080808080808080808080808080807d7063574a3d3024170a00000000000000000000020e1925303b444c525f6060606060605d5d5e5f5f5f5f5e5d5b596060606060605a58534a41362b2014080000000000000000000000020e1a26313b4653606d7984919ea7a79e9184796d605b514b423d3c3b3c3d424a515d67717e8b9892908e8b897e7164574b3e3124180b00000000000000000000050e172029313940454f54596063676d70727576787879797878777573706d6865605d55504a423c332b23191107000000000000000000030f1b27333f495364717e8b9aa4afac9f92867a6e61554b4033291d140a000000000000000000000000000000000007121d28333f4a54616d7a86929facaea298897d706356493d2f24190d0100000d1a2633404d596673808c99a8b2aa9d9083776a6054483e332a211a14110d080d070c1013181d242935414c55606d7985929fabaea2988a7d7164574a3e2e23170b000000000714212d3a4754606d7a85929fa7b0a69e92857b6e696059524d47464141404040414045464b51555d606d727f8b939ea9afa3998f82766a605447392f24180c000000000a16222e39434d555b5d606060606060606060606060606060606060606060606060606060606060606060606060606060605d5b554d43382d22160a0000000003101c28343f4a5464717e8a95a0acaea49f93888078706b65615e565653514a494745403d3a3936302d2c292424242b29262422201f1c1711110c0600000000000000101d293643505c6976838f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8f8376695c504336291d1000000008121b242b31363839393939393939392f2e2b27201910070000000000000006101a222a30353839393939393939393939393939393939393939393939393939393939393938373634322f2d2b27221b1c16110c060000000000000000000000000000000000000000000000000000050d161e242931394045474c5254575a5c5e5f5f5f5f5e5c5a5854524d474540393129241d160d050000000000000000000000010d19242f3a444c525f606060606060605a58524a40362b1f13070000020e1a26313c454d535560606060606060585651493f34291e1206000000000000101c2935414d5862696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6a6968666462605c545653504946423b373129241e160d0600000000000000000000000000000000000000000000000000000000000000000000000000000000030d18232e39434e5860626c6c6c6c6c6c6c6c6c5e574d42362a1e1205000000000000000000121e2b3845515e6b7884919eabb7a99d938e8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8073665a4d4033271a0d0000000000000000000005111e2a36414c565e6c6c6c6c6c6c6c6a675f555353524f5960636c6c6c6c6c6c67645c53483c3024180b00000000000000000000000009141f2c3844515c66727f8b95a0aca1968e81756e605c544f4a4948494a4e545b606d7984919e9f9d9a92857a6d6053473a2d2014070000000000000000000000050e171f272f343d43484f54555c606366686a6b6c6c6c6c6b6a686664615e5653514b443f38302a211911080000000000000000000005121f2b3744505b6575818e9bacb6a99c8f8276685e5243392f21170b020000000000000000000000000000000000010b17222d3846525d6875828f9ca8b4aa9a8d807367564c4135291d11040005111e2a36424d576976838f9ca9b5ab998c7f7366584e43362c21180f0905010000000004070c1319242f3a45515d6774818e9aa7b4aa9b8e817468544a3f34281c1003000006131f2b37434e5866727f8c97a2adaa9e948a7d70695f574f46423b3935303433342e34383a40454b515b626d74818e97a1adab9e94897c6f62554b4035291d100400000006111c27313b434a4f5153535353535353535353535353535353535353535353535353535353535353535353535353535353504e4a433a31271c11050000000006121f2b3844505c6675828f9ca7b1aa9d928b7e736d66605954524d494644403d3a39352f2e2d2a252120282d3031383533312f2d2b28231c1d181109000000000000101d293643505c6976838f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8f8376695c504336291d100000000009121920262a2c2c2d2d2d2d2d2d2d22221f1b150f070000000000000000000810181f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2c2b2a29272522201f1b1711100b050000000000000000000000000000000000000000000000000000000000040c13191f272f34383b4146474b4e4f515253535251504e4b4846423b38352f271f18130c040000000000000000000000000008131e28323a414553535353535353534d4c4740382e24190e0200000009141f2a333c424648535353535353534c4a463f372d23180d010000000000000d1925303b4650585d5f606060606060606060606060606060606060605f5f5e5e5c5b5a585553514b4946443f3836312b261f19130c0400000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27303c464e54555f606060606060605f534d453b31251a0e02000000000000000000121e2b3845515e6b7884919eabb7afa59d9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a998d8073665a4d4033271a0d000000000000000000000714202d3946525e68767979797979797771675b4f464854606b70797979797979746e64584c4033271a0d01000000000000000000000004101c2834404a54606d7883919aa4a89e938c80746d6660595755555556585f666c75818e96a1aca3998e8174675d5145392c201306000000000000000000000000050d151d232932383d44484b515356595b5d5e5f5f5f5f5e5d5c5a5754524c47454039342e261e180f0800000000000000000000000613202d394653606c7885929eabb3a9988b7f7265564c4131271d0f050000000000000000000000000000000000000006111c2935414c5665727f8b98aab4aa9d918477685d5245392c201306000714202d3a46525e697885929eabafa399897c6f6256493d32231a0f060000000000000000000108131e2935404b5564707d8a97a9b3aa9d908377665c5044382b1f120600000815222e3b4754606a7884919ea9b1a79c8f82756c61574d453d36302d292427272723282c2e343a4145515b606d7a85929eaab0a69b8e8275675d5145392c1f1306000000000b151f2931393f42444646464646464646464646464646464646464646464646464646464646464646464646464646464643423e3831281f150a00000000000713202d3a4653606d7985929facaea3988d80746c605c544f4746413c3a38342e2d2c292421201d19242c34393d3e4442403e3b3a38342e2e29231b12090000000000101d293643505c6976838f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8f8376695c504336291d100000000000080f151a1d1f20202020202020201615130f0a040000000000000000000000060d14191c1f1f202020202020202020202020202020202020202020202020202020201f1f1e1c1a181513120f0b0600000000000000000000000000000000000000000000000000000000000000000001080d151d23292c3036393b3e414344454646454543413e3b3a36302c29241d150d07010000000000000000000000000000010c1620282f35394646464646464646403f3b362e261c120800000000030e18212a31373a3b464646464646463f3e3a342d251b11060000000000000008141f2a343e464d51525353535353535353535353535353535353535352525251504e4d4b494645403c3937332d2a251f1a150d080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e2b343c43474953535353535353534846423b33291f140900000000000000000000121e2b3845515e6b7884919eabacacafa9a7a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6998d8073665a4d4033271a0d000000000000000000000814212e3b4754616e7a86868686868683776a5d5144495663707d8686868686868074675a4e4134271b0e010000000000000000000000000c18232e3944515c66707d88939fa6a59c928c8079706b666462616263666a6f78808d939ea9a89f92877b6e62554b4035291d100400000000000000000000000000030b121821272c323839404546494c4f50515253535252504f4d4a4746413a39352f28231c150c060000000000000000000000000815222e3b4855616e7b8897a1adada197887b6e6255483b3022150b0000000000000000000000000000000000000000000d1924303c4855626f7b8898a2aeaca095877a6d6054473a2d211407000814212e3b4754616e7b8797a2adac9f92867a6d6053473a2d2014070000000000000000000000010d18242f3b4754616e7a8797a1adac9f9286796d6053463a2d20130700000916222f3c4955626f7c8896a1acaca095897c6f625a50453b332a25201d191a1a1a181c1f23282f353f45515d67727f8b98a2aeac9f9286796d6053473a2d20140600000000040d171f272e333637393939393939393939393939393939393939393939393939393939393939393939393939393939393736322d271f160d0300000000000815222f3b4855626e7b8898a2aeac9f92867a6d615a504a423d3936302d2c282320201d18141317222c363e45494b514f4d4a4846443f383a342d241b110600000000101d293643505c6976838f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8f8376695c504336291d1000000000000004090e1112131313131313131309080603000000000000000000000000000002080d10121313131313131313131313131313131313131313131313131313131313131211100e0b0906050300000000000000000000000000000000000000000000000000000000000000000000000000030b12181c1f252a2d2e3134363838393939383634322e2d2a251f1d18120b030000000000000000000000000000000000040d161e24292c393939393939393934332f2b241c140a010000000000060f181f262b2d2e3939393939393932312e29231b13090000000000000000020d18222c343b41444646464646464646464646464646464646464646464545444342403e3c3a38342e2d2b27221b1a140e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c19222b32373b3c46464646464646463b3a36312921170d0300000000000000000000121e2b3845515e6b7884919e9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f998d8073665a4d4033271a0d000000000000000000000814212e3b4754616e7a87939393939084776a5d5144495663707c89939393938d8174675a4e4134271b0e0100000000000000000000000007121c2834404a54606b73808d949fa7a49c928d837d7773706f6e6f7072767c828d929da5aaa1968d8174695f5343392f24180d01000000000000000000000000000001070c161b21272c2e34383a3d3f42434545464645454442403d3a3936302c29241d17110a03000000000000000000000000000a1724303d4a5763707d8a96a9b3ab9e928578695f53473a2e2114030000000000000000000000000000000000000000000813202d394653606c7985929facb1a795897c6f6256493c2f231609000916232f3c4956626f7c8995a9b3aa9e918477675d5145382c1f13060000000000000000000000000714202d3946525e687885919eabaea398887b6e6255483b2f22150800000d1a2633404d596673808c99a8b2aa9d9083776a6054483e332a211a14110d080d070c1013181d242935414c55606d7985929fabaea2988a7d7164574a3e2e23170b0000000000050d151c2227292a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2a2926221c150d040000000000000a1723303d4a5663707d8996aab4a89c8f8275685e52443f38302d2a25201f1c181413100d07111d28343e485055575e5c59575553504a4a453f362d23180c01000000101d293643505c6976838f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8f8376695c504336291d10000000000000000001040606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c1014191e20212427292b2c2c2c2c2b29272521201e1a14100c070100000000000000000000000000000000000000040c13191d202d2d2d2d2d2d2d2d2726231f19120a0200000000000000060e141a1e21222d2d2d2d2d2d2d2524221e1811090100000000000000000006101a222a303538393939393939393939393939393939393939393939393837363533312f2d2c2823201f1b17110e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101920272b2e2f39393939393939392e2d2a251f170f050000000000000000000000121e2b3845515e6b7884919393939393939393939393939393939393939393939393939393939393939393939393939393938d8073665a4d4033271a0d000000000000000000000814212e3b4754616e7a87949f9f9d9084776a5d5144495663707c89969f9f9a8d8174675a4e4134271b0e01000000000000000000000000000c18232e39424f59606d788290959fa7a49d95908984807d7c7b7c7d7f838890949da4aaa39891847a6d61574d4231281d12070000000000000000000000000000000000040a0f161b1d23282c2d30333537383939393938373533312e2d2a251f1d18120c060000000000000000000000000000000c1926323f4c5965727f8c98a5b2a99c8f837669574d42372b1e120600000000000000000000000000000000000000000006121f2b3844505b667783909daab1a4978b7e7164584b3e3125180b000a1723303d4a5663707d8996a3b0a99c90837669554b4035291d100400000000000000000000000005111e2a36414c566a7683909da9b4aa96897c6f6356493c302316090005111e2a36424d576976838f9ca9b5ab998c7f7366584e43362c21180f0905010000000004070c1319242f3a45515d6774818e9aa7b4aa9b8e817468544a3f34281c10030000000000040b11161a1d1e202020202020202020202020202020202020202020202020202020202020202020202020202020201d1c1a16110a03000000000000000b1724313e4a5764717d8a97a4b0a6998d807366564c41342e26201e191312100c070604010815212d3945505a61646b68666462605c545651483f34291d1105000000101d293643505c6976838f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8f8376695c504336291d100000000000000000000000000000000000000000000000000000000000000000000004090e1112131313131313131313060400000000000000000000000000000000000000000000000004080a0a1313131313131313130e0e0b080300000000000000000000000000000000000000000000000000000000000004080e111414181b1c1e1f20201f1e1d1b181514120e0904000000000000000000000000000000000000000000000001080d111314202020202020201a1917130e080100000000000000000003090e12141520202020202020191815120d060000000000000000000000000810181f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2c2b2b2928272522201f1c1813120f0b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e151b1f22222c2d2d2d2d2d2d2d21211e1a140d05000000000000000000000000121e2b3845515e6b788486868686868686868686868686868686868686868686868686868686868686868686868686868686868073665a4d4033271a0d000000000000000000000814212e3b4754616e7a8794a1aa9d9084776a5d5144495663707c8996a3a79a8d8174675a4e4134271b0e010000000000000000000000000007121c27303d44505c666d7a8390959da5a7a09d95918d8a888888898c90959c9fa6a9a19892867c6f685e52453c311f160c0100000000000000000000000000000000000000040b1012181c1f202326282a2b2c2c2c2c2b2a29272421201d1913100c0701000000000000000000000000000000000e1b2834414e5b6774818e9aa7b3a79a8d8074675a4d4131261a0e02000000000000000000000000000000000000000000030f1c28333f4a546875818e9ba8b3a6998d8073665a4d4033271a0d000b1724313e4a5764717d8a97a4b0a89b8f8275685c4f422f24180c00000000000000000000000000010d192530424f5c6875828f9ba8b0a3968a7d7063574a3d3024170a000714202d3a46525e697885929eabafa399897c6f6256493d32231a0f060000000000000000000108131e2935404b5564707d8a97a9b3aa9d908377665c5044382b1f120600000000000000060a0e10111313131313131313131313131313131313131313131313131313131313131313131313131313131310100d0a050000000000000000000b1724313e4a5764717d8a97a4b0a5998c7f7266594c3f30231c15110e080807070808090e131925303d4955616c71777573716e6d6665625b51453a2e221509000000101d293643505c6976838f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8f8376695c504336291d10000000000000000000000000000000000000000000000000000000000000000000080f151a1d1f20202020202020202013100c070100000000000000000000000000000000000000050b101416172020202020202020201b1a18140f0901000000000000000000000000000000000000000000000000000000000000020507080b0e10111213131212100e0b0807050200000000000000000000000000000000000000000000000000000001040707131313131313130d0d0b07020000000000000000000000000002050708131313131313130c0b0906010000000000000000000000000000060d14191c1f1f202020202020202020202020202020202020201f1f1f1e1d1b1a18161313100c0705030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f13151620202020202020201514120e090300000000000000000000000000111d2a3743505c6872787979797979797979797979797979797979797979797979797979797979797979797979797979797979736e63584b3f3226190c000000000000000000000814212e3b4754616e7a8794a1a99d9084776a5d5144495663707c8996a3a79a8d8174675a4e4134271b0e0100000000000000000000000000000b151e28343f4a545d686d7a838e939ea0a8a8a09d999795949596999d9fa7aba49f9792867e706a60564c41332a1f0d040000000000000000000000000000000000000000000000070c10131316191c1d1e1f20201f1f1d1c1a171413110d080400000000000000000000000000000000000000101c2936434f5c6976828f9ca9b2a5998c7f7266594c3f3326190900000000000000000000000000000000000000000000000b17222d404d5a6773808d9aa6b3a89b8e8175685b4f4235281c0f000b1825313e4b5864717e8b97a4b1a89b8e8275685b4f4235281c070000000000000000000000000000081b2835414e5b6874818e9ba7b0a4978a7d7164574a3e3124170b000814212e3b4754616e7b8797a2adac9f92867a6d6053473a2d2014070000000000000000000000010d18242f3b4754616e7a8797a1adac9f9286796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a96abb5a69a8d807367544b403428201c1816151514141515171a1e242b37434e5864717e8482807d7b7977726d62564a3d3124170b000000101d293643505c6976838f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8f8376695c504336291d10000000000000000000000000000000000000000000000000000000000000000009121920262a2c2c2d2d2d2d2d2d2d2d1f1c18120b0300000000000000000000000000000000000810171c2023242d2d2d2d2d2d2d2d2d282724201a130b020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d1012131313131313131313131313131313131313131313121211100f0d0b090706040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030608091313131313131313080705020000000000000000000000000000000f1b27333f4b5660686b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c66635c52473b2f23170a000000000000000000000814212e3b4754616e7a87949c9c9c9084776a5d5144495663707c89969c9c9a8d8174675a4e4134271b0e010000000000000000000000000000030c17232e38424c565e686d79818991969d9fa4aca6a3a2a1a2a3a5a8a9a29f99938e857c706c61584e443a3021180e00000000000000000000000000000000000000000000000000000406070a0c0f10121213131212110f0d0a07070501000000000000000000000000000000000000000000101d2a3643505d697683909ca9b1a4978a7e7164574b3e3124180b0000000000000000000000000000000000000000000000061926323f4c5965727f8c98a5b2a89c8f8275695c4f4236291c0f000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2834414e5b6774818e9aa7b1a4978b7e7164584b3e3125180b000916232f3c4956626f7c8995a9b3aa9e918477675d5145382c1f13060000000000000000000000000714202d3946525e687885919eabaea398887b6e6255483b2f221508000000000000000000000000000000000000000000000105090b0b1313131313131313120706030000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8899a4afa89b8e8275665c51453a322c29232322212121212223252a2f353f47535f6a76828f8f8c8a8886837e7265584b3f3225180c000000101d293643505c6976838f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8f8376695c504336291d100000000000000000000000000000000000000000000000000000000000000008121b242b3136383939393939393939392c29231d150d0300000000000000000000000000000008121a22282d30313939393939393939393533302b251d140b010000000000000000000000000000000000000000000000000000000003090d1012131313131313131313060300000000000000000000000000000000000000000000000000000000000000000004080c0e0f13131313131313131313131313131313131313131313131313131313131313131313131313130f0e0c080400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232f3a444e565c5e60606060606060606060606060606060606060606060606060606060606060606060606060606060605a58524a40362a1f1307000000000000000000000814212e3b4754616e7a878f8f8f8f8f84776a5d5144495663707c898f8f8f8f8d8174675a4e4134271b0e0100000000000000000000000000000006111c26303a444c565e676d747d848a90939a9a9c9e9f9f9f9e9d9b9997928d87817a6f6a615a50463c32281e0f060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2a3744515d6a7783909daab0a3968a7d7063574a3d3024170a00000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4b1a99c908376695d5043362a1d10000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000a1723303d4a5663707d8996a3b0a99c90837669554b4035291d100400000000000000000000000005111e2a36414c566a7683909da9b4aa96897c6f6356493c30231609000000000000000000000000000000000000000000060c1115171820202020202020201f1312100c06000000000000000000000000000000000000000000000000000714202d3a4753606d7a86939facab9f9285796d60564c443d38342f2f2f2e2d2e2e2f3031363a4145515b626f7c87939b999798928a7e7164574b3e3124180b000000101d293643505c6976838f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8f8376695c504336291d10000000000000000000000000000000000000000000000000000000000000040f19242d353d424546464646464646464638342f271f150b010000000000000000000000000006101a242c33393c3d46464646464646464641403c362f261d1309000000000000000000000000000000000000000000000000000000070e14191d1f20202020202020202012100c06000000000000000000000000000000000000000000000000000000000002090f14181b1c20202020202020202020202020202020202020202020202020202020202020202020202020201c1b18140f0902000000000000000000000000000000000000000000000000000000040607090c0e1011121313131211100f0d0b0807050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607090c0e1011121313131211100e0b080705020000000000000000000000000000000000000000000000000007121d28323c444b505153535353535353535353535353535353535353535353535353535353535353535353535353535353534d4b4740382e24190e02000000000000000000000714212d3a4754606d7a8283838383838174675b4e414855626f7c8283838383827f7265584c3f3225190c00000000000000000000000000000000000a151e28323a444c555c606b70787e83878b8d909192929291908f8c8985817c746d68605850483e342b20160c000000000000000000000000000000000000000000000000000000000000000306060808080808080605030000000000000000000000000000000000000000000000000000111e2b3844515e6b7784919eaaafa396897c706356493d3023160a00000000000000000000000000000000000000000000000b1824313e4b5764717e8a97a4b1aa9d9083776a5d5044372a1d11000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1724313e4a5764717d8a97a4b0a89b8f8275685c4f422f24180c00000000000000000000000000010d192530424f5c6875828f9ba8b0a3968a7d7063574a3d3024170a00000000000000000000000000000000000000000911171d2124252d2d2d2d2d2d2d2d2b201f1c17110a03000000000000000000000000000000000000000000000006131f2c3945515d677683909dabada2978a7e71685e564f4745403e3c3b3b3a3a3b3b3d3f42464c515a626d76828f99a4a6aa9f92857a6d6053473a2d201407000000101d293643505c6976838f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8f8376695c504336291d100000000000000000000000000000000000000000000000000000000000000915202b353f474e5253535353535353535345403931271d1207000000000000000000000000050e18222c363e44494a5353535353535353534e4c4841392f251a0f03000000000000000000000000000000000000000000000000000811191f25292b2c2d2d2d2d2d2d2d2d1f1c17110a030000000000000000000000000000000000000000000000000000030c131a202527282d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d282725201a130c03000000000000000000000000000000000000000000000004070c10121316191b1d1e1f1f201f1f1e1d1b19171414110e0806030000000000000000000000000000000000000000000000000000000000000000000000000003070c10131416191b1d1e1f1f201f1f1e1c1a181514120e09050200000000000000000000000000000000000000000000010c16202a323a3f43454646464646464646464646464646464646464646464646464646464646464646464646464646464646403f3b362e261c120800000000000000000000000713202c3945525d686d767676767676746f64584c4047535f6a6f767676767676726d62564a3e3125180b0000000000000000000000000000000000030c162029323a434b515960666d71767b7e8183848586858484827f7d79746f6a615e564e463e362c22190e050000000000000000000000000000000000000000000000000000000000060b0f121314141414141413120f0b06000000000000000000000000000000000000000000000000121f2b3845525e6b7885919eabafa296897c6f6356493c3023160900000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0aa9e9184776b5e5144382b1e11000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8275685b4f4235281c070000000000000000000000000000081b2835414e5b6874818e9ba7b0a4978a7d7164574a3e3124170b0000000000000000000000000000000000000009121b22292e31323939393939393939382d2c28231c150c030000000000000000000000000000000000000000000004101d2935404b5566737f8c99a3aea99e91857a6d68605953514b4b494848474748484a4b4d53555d606c727f8c949fabaea3998d8074675d5145392c201306000000101d293643505c6976838f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8f8376695c504336291d100000000000000000000000000000000000000000000000000000000000000e1a26313d4751595e5f606060606060605f514b43392f23180c0000000000000000000000030c17202a343e485055576060606060606060605b59534b41362b20140800000000000000000000000000000000000000000000000007111a232a3135383939393939393939392c28231c150c03000000000000000000000000000000000000000000000000020c151e252c31343539393939393939393939393939393939393939393939393939393939393939393939393939393534312c251e150c020000000000000000000000000000000000000001070c1013181c1f20232527292b2b2c2d2c2c2b2a28262421201e1915120f0a03000000000000000000000000000000000000000000000000000000000000000000060b1012181d1f202325282a2b2b2c2d2c2c2a29272521211e1a14110e0902000000000000000000000000000000000000000000050f1820282f333738393939393939393939393939393939393939393939393939393939393939393939393939393939393933322f2a241c140a00000000000000000000000004111d2935414c565d6069696969696967645c53483c434e585f6269696969696965625b51463a2e221609000000000000000000000000000000000000040d172029303940454f545c6064686e7174767878797878777573706d67625f58524c443d342c241a100700000000000000000000000000000000000000000000000000000000020a11171c1f20212121212121201f1b17110a0200000000000000000000000000000000000000000000121f2b3845525e6b7884919eabafa296897c6f6356493c3023160900000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4b0aa9d9184776a5e5144372b1e11000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2834414e5b6774818e9aa7b1a4978b7e7164584b3e3125180b00000000000000000000000000000000000006111b242d343a3d3e4646464646464646453a38342e261e150a00000000000000000000000000000000000000000000000c18242f3b4754616e7a86929fa8ada19790827a6f6b63605c5557565554545454555658575e61676d747e88939fa6b0a89f92867b6e61554b4035291d1004000000101d293643505c6976838f8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8f8376695c504336291d10000000000000000000000000000000000000000000000000000000000000111d2a36424e59636a6c6c6c6c6c6c6c6c6c5c554b4034291c1004000000000000000000000b151e29323c46505a61646c6c6c6c6c6c6c6c6c68645d53483c3024180b0000000000000000000000000000000000000000000000030e19232c353c414546464646464646464638342e261e150a00000000000000000000000000000000000000000000000009131e272f373d4042464646464646464646464646464646464646464646464646464646464646464646464646464642403d372f271e1309000000000000000000000000000000000003090e12181d1f23282c2d3032343638383939393838373533312e2d2a25211f1b150f0b060000000000000000000000000000000000000000000000000000000000020a11171c1f24292c2d30323437373839393938373634312e2d2a25201e19140e09020000000000000000000000000000000000000000060f161d23272a2b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2726231f19120a02000000000000000000000000010d1924303a444c52545c5c5c5c5c5c5b58534a41363c464e53555c5c5c5c5c5c585651493f34291e120600000000000000000000000000000000000000050e171e272e343d424a5053565e616567696b6c6c6c6b6a686663605c55534e46413a322b221a110800000000000000000000000000000000000000000000000000000000020b141c22282b2d2e2e2e2e2e2e2d2b27221b140b02000000000000000000000000000000000000000000111e2b3844515e6b7784919eaab0a396897d7063564a3d3023170a00000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a99d9083766a5d5043372a1d10000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000000000000000000000000000000000010c17222d363f454a4b53535353535353535246443f3830261c1106000000000000000000000000000000000000000000000714202d3946525e6874808d96a1aaa99f9490847c76706d67666462626160616162636567696e737a818b939aa4afaaa1968d8074695e5343392f24180d01000000101d293643505c6976838f8b7f7265584c3f3225190c06060606060606060606060606060606060606060606060606060c1925323f4c5865727f8b8f8376695c504336291d10000000000000000000000000000000000000000000000000000000000000121f2c3845525e6a75797979797979797976675c5145382c1f130600000000000000000007121c27303a444e58616c70797979797979797979746f64594c4033271a0e010000000000000000000000000000000000000000000009141f2a353e474d51535353535353535353443f3830261c110600000000000000000000000000000000000000000000040f1a252f3941484d4f53535353535353535353535353535353535353535353535353535353535353535353535353534f4d4841392f251a0f04000000000000000000000000000001070c141a1d24292c2e34383a3c3f4143444546464645444342403e3b3936302e2b261f1c17110a020000000000000000000000000000000000000000000000000003090c141c23282b2f35383a3c3f41434445464646454443413e3b3a36312d2a251f1a140d050000000000000000000000000000000000000000050c12171b1d1e20202020202020202020202020202020202020202020202020202020202020202020202020202020201a1917130e0800000000000000000000000000000008131e28323a4145475050505050504e4c4841382f343c4347485050505050504c4a463f372d23180d010000000000000000000000000000000000000000050c151d232830383f44464d5254585a5d5e5f5f5f5e5d5c595653514b47433c3630292019100800000000000000000000000000000000000000000000000000000000000a141d262d3338393b3b3b3b3b3b3937332d261d140a000000000000000000000000000000000000000000111e2a3744515d6a7784909daab0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000c1825323f4b5865727e8b98a5b1a99c8f8276695c504336291d10000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000000000000000000000000000000000005111d29343f4850565860606060606060605e53504a42382e23170c0000000000000000000000000000000000000000000005111e2a36414c56606d7a849198a2aaa69f969189827d797573716f6e6e6d6d6e6e707274777b80858e939fa4acaba3989184796d60574d4231281d120700000000101d293643505c6976838f8b7f7265584c3f322519131313131313131313131313131313131313131313131313131313131925323f4c5865727f8b8f8376695c504336291d1000000000000000000104060606060606060606000000000000000000000013202c3946535f6c798786868686868686796d6053473a2d2014070000000000000000081118232e39424c565f6a707e8786868686868686868174685b4e4135281b0e02000000000000000000000000000000000000000000010d1925313c4750585e5f606060606060605f504a42382e23170c000000000000000000000000000000000000000000000814202c37414b53595b60606060606060606060606060606060606060606060606060606060606060606060606060605b59534b41372c20140800000000000000000000000000030b12181f252a2f35393a404446494c4e5051525253525251504e4c4a4746413c3a37312b28221c140b070000000000000000000000000000000000000000000000060d141a1e262e34383a404547494c4e50515252535252514f4d4b4846423b3a36302a251f170e07010000000000000000000000000000000000000001070b0f111213131313131313131313131313131313131313131313131313131313131313131313131313131313130d0c0a070200000000000000000000000000000000020c1620283035393a43434343434341403c362f262a32373b3c4343434343433f3e3a342d251b110700000000000000000000000000000000000000000000030b12181e262e34383b4146474b4e505152535251514f4c4a4645403937322a251e170e07000000000000000000000000000000000000000000000000000000000006111c262f383f444647474747474746443f382f261b11060000000000000000000000000000000000000000101d2a3643505d697683909ca9b1a5988b7e7265584b3f3225180700000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3a89b8f8275685c4f4235291c0f000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b00000000000000000000000000000000000915212e3a45505a62656c6c6c6c6c6c6c6c6b605c544a3f34281c1003000000000000000000000000000000000000000000020e1925303b45525d686f7c869298a0a8a8a09e948f8a8582807e7c7b7b7a7a7b7b7d7e8084878d92979da5afaaa29992867c6f675d51453b311f160c0100000000101d293643505c6976838f8b7f7265584c3f322520202020202020202020202020202020202020202020202020202020202025323f4c5865727f8b8f8376695c504336291d1000000000000004090e11121313131313131313090806030000000000000013202c3946535f6c7986929393939393867a6d6053473a2d20140700000000000000060f19232834404a545e686f7c86929a93939393968f82786d6053463a2d2013070000000000000000000000000000000000000000000004101d2935414d58626a6c6c6c6c6c6c6c6c6c5c544a3f34281c10030000000000000000000000000000000000000000000c1825313d48535d65686c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c68655d53483d3125180c000000000000000000000000060d151d24293136394045474a515356585a5c5e5e5f605f5f5e5d5b595754524c4847433c38332d261d18120b030000000000000000000000000000000000000000070f181f262a30383f44464b515356585b5d5e5e5f605f5f5d5c5a5854534d4746423b3630292018120b03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e161e24292c2d3636363636363433302b251d20262b2e2f36363636363632312e29231b130900000000000000000000000000000000000000000000000000070c151c23282c3036393b3e414345454645454442403d3a38342e2b262019130d050000000000000000000000000000000000000000000000000000000000000b17222d38424a505354545454545453504941382d22170b00000000000000000000000000000000000000000f1c2835424f5b6875818e9ba8b3a6998c807366594d402f23180c00000000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7b4a79a8e8174675b4e4134281b0e000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b00000000000000000000000000000000000b1724313d4a56626c717979797979797979786d665c5044382c1f13080000000000000000000000000000000000000000000008141e2935414c56606a707d8691969fa3aba69f9c98928f8c8a89888787878788898b8d9195999fa2a9aba69f9892877e706a60554b4133291f0d040000000000101d293643505c6976838f8b7f7265584c3f322d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d323f4c5865727f8b8f8376695c504336291d100000000000080f151a1d1f20202020202020201615130f0a04000000000013202c3946535f6c7986929f9f9f9f93867a6d6053473a2d201407000000000000040d18212b353d44515c666d7a849198a29f9fa19791847a6d665c5144382c1f12060000000000000000000000000000000000000000000005121f2b3845515e6a74797979797979797976665c5044382c1f12060000000000000000000000000000000000000000000e1b2734404d59656f757979797979797979797979797979797979797979797979797979797979797979797979797979756f65594d4034271b0e00000000000000000000000910181f272f353b42464b5153545c60636567696b6b6c6c6c6b6b6a686664615e5655534e46443f382f28231d150c05000000000000000000000000000000000000081019212931363e424a5053555d606365676a6a6b6c6c6c6b6a696764615e5754524d46423b3329241d150d040000000000000000000000000000000000000000000000000000000000020608080b0e1011121313121211100d0b0807050200000000000000000000000000000000000000000000000000000000000000000000000000040c13191d2021292929292929282724201a13151b1f21222929292929292525221e181109010000000000000000000000000000000000000000000000000000030a11171c1f252a2d2e3234363839393938373533302d2c28231d1b150d0802000000000000000000000000000000000000000000000000000000000000030f1c28333f4a545b60616161616161605b53493f33271b0f03000000000000000000000000000000000000000d1a2734404d5a6773808d9aa6b3a89b8e817568554b4034291c100400000000000000000000000000000000000000000005121e2a36424d576976838f9ca9b2a5988c7f7265594c3f3226190c000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000000000000000000000000000000005121e2a36424d5765717e868686868686868685786d6053463a3025190d01000000000000000000000000000000000000000000020d19242f3a434e58606b707c848d92999fa2aaaaa29f9c99979595949394949596989a9da0a8abaaa79f9d948f857d706c61584e433a2f21170d000000000000101d293643505c6976838f8b7f7265584c3f393939393939393939393939393939393939393939393939393939393939393939393f4c5865727f8b8f8376695c504336291d100000000009121920262a2c2c2d2d2d2d2d2d2d22221f1b150f070000000013202c3946535f6c7986929facaca093867a6d6053473a2d2014070000000000020b161f2a333d47515b606d78829096a1aaaea39992857b6e685d544a4034281c1004000000000000000000000000000000000000000000000613202c3946535f6c798686868686868686786d6053463a2d2013070000000000000000000000000000000000000000000f1c2835424f5b68758286868686868686868686868686868686868686868686868686868686868686868686868686868175685b4f4235281c0f0000000000000000000009121b222a313940454d53555d6065666d6f72747677787979797877767573716e6867625f5853504a423d342e271e170e050000000000000000000000000000000008111a222b333b424650545c6063676d6f727476777879797978777674716e6966615e56524d453f352f271f160d04000000000000000000000000000000000000000000000000000205090e121415181b1d1e1f20201f1f1e1c1a181514120e090502000000000000000000000000000000000000000000000000000000000000000000000002080d1113141d1d1d1d1d1d1b1a18140f080a0f1215151d1d1d1d1d1d191816120d07000000000000000000000000000000000000000000000000000000000000060c1014191e202125272a2b2c2c2c2b2a292623201f1c18120f0a04000000000000000000000000000000000000000000000000000000000000000006121f2b3844505b666c6e6e6e6e6e6e6c655b5044372b1f1205000000000000000000000000000000000000000c1925323f4c5865727f8b98abb5aa9d908477675c5145382c1f13060000000000000000000000000000000000000000000714212d3a46535f697885929fabb4aa968a7d7063574a3d3024170a000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000000000000000000000000000000000714212d3a46535e69768390939393939393978a7d7063564c4135291d11050000000000000000000000000000000000000000000008131e28313c464f59606a6f7980878e92989b9fa2aaa6a6a4a2a1a1a0a0a1a1a3a5a7a7aca49f9d9995908a827b706b615a50463d31281d0f05000000000000101d293643505c6976838f8b7f7265584c4646464646464646464646464646464646464646464646464646464646464646464646464c5865727f8b8f8376695c504336291d1000000008121b242b31363839393939393939392f2e2b272019100700000013202c3946535f6c7986929facada093867a6d6053473a2d20140700000000000a141d28313c454f59626d74818e949fa8aea49f92877d6f695f564c42392e23180c00000000000000000000000000000000000000000000000613202c3946535f6c798692939393939386796d6053463a2d2013070000000000000000000000000000000000000000000f1c2835424f5b6875828e9393939393939393939393939393939393939393939393939393939393939393939393938e8175685b4f4235281c0f00000000000000000009121b242c343c434b51575e61676d7175797c7f81838485858685858483817f7d7a77736f6a64605b544f454039302920170f050000000000000000000000000000060f1a232c343d454d535a61666d7075797c7f81838485858685858482807e7b77736e69615e575145403931281f160c030000000000000000000000000000000000000000000002080e11151a1e21222528292b2c2c2c2c2b2b29272522211e1a14120e09020000000000000000000000000000000000000000000000000000000000000000000000010407071010101010100e0d0b08030000030608091010101010100c0b09060100000000000000000000000000000000000000000000000000000000000000000003080e111414181b1d1e1f201f1e1e1c19171313100c0700000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c787a7a7a7a7a7a776c605346392d20130600000000000000000000000000000000000000091623303c4956636f7c8999a4afac9f9286796d6053473a2d22170b0000000000000000000000000000000000000000000815222e3b4855616e7b8897a2adaea298887b6e6155483b2e221508000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000000000000000000000000000000000815212e3b4854616e7b87939f9f9f9f9fa99b8f8275685e5246392d20150a00000000000000000000000000000000000000000000010c161f2b343d474f585f676d737b81868b8f9298989a9b9d9e9f9f9f9f9f9f9e9d9c9a989a93908d88837d766e69615950483e342b1f160c00000000000000101d293643505c6976838f8b7f72655853535353535353535353535353535353535353535353535353535353535353535353535353535865727f8b8f8376695c504336291d100000040f19242d353d424546464646464646463c3b37322b22190f04000013202c3946535f6c7986929facada093867a6d6053473a2d2014070000000006111c262f3a434d57606b727f8b939da6afa59c928b7e716b60574d443a30271c120700000000000000000000000000000000000000000000000613202c3946535f6c7986929f9f9f9f9386796d6053463a2d2013070000000000000000000000000000000000000000000f1c2835424f5b6875828e9b9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9b8e8275685b4f4235281c0f000000000000000008121b242d363e464e555d60696e74797e8285898b8d8f91919293929291908e8c8a8784807c76716c666059514b433b332921170e05000000000000000000000000030d18212c353e464e575f616c70787d8185898b8e90919192939292908f8d8b87847f7b746e69625b514b433a31281e150b000000000000000000000000000000000000000002080d14191e20262b2e2f323436383939393938373634322e2d2b26201e1a140e090200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080b0e101212131212110f0d0a070604000000000000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a8787878787877a6d6154473a2e211407000000000000000000000000000000000000000714202d3a4753606d7a86939facaea399897d706353493f33271b0f030000000000000000000000000000000000000004111d2935414c5565717e8b98a9b3ac9f9285786d6053463a2d201307000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b00000000000000000000000000000007131f2c38434e5866737f8c9aa4afaca8aaac9f92867a6d6154473c32261b0f0000000000000000000000000000000000000000000000040d19222b353d464e555d60696e747a7e8285888b8d8f909192929292929291908f8d8c898683807c76706c615f574f473e362c22190d0400000000000000101d293643505c6976838f8b7f72656060606060606060606060606060606060606060606060606060606060606060606060606060606065727f8b8f8376695c504336291d1000000915202b353f474e5253535353535353534947433c342b20150a000013202c3946535f6c7986929facada093867a6d6053473a2d201407000000071017222d38424c555f69707d87929fa5afa79e938d80736c61594f453c32281e150b0000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d2013070000000000000000000000000000000000000000000f1c2835424f5b6875828e9ba8acacb2adaba5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a59b8e8275685b4f4235281c0f0000000000000006101a242d363f4850585f676d737b80858b8f9298989a9c9e9e9f9f9f9e9e9d9b999795908d88837e786f6b605c554d453b332920170c0300000000000000000000010b151f2a333e474f5860696e767d84898e9298989a9d9d9e9f9f9f9e9d9c9a9795918c86817b726d605d554b433a30271d1207000000000000000000000000000000000000040c13191f252a2d31373a3b3e41434445464645454443403e3b3a37312d2a251f1a140d05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010507070c0f0e0c0904000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a8794949494877a6d6154473a2e211407000000000000000000000000000000000000000613202c3945515d677784909daab4ab9a8d8073655b5044372b1f140a000000000000000000000000000000000000010c13202c3945515d6775828e9ba8b5a89c8f8275665c5044382b1f1206000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000000000000000000000000000000915222e3b4854606a7784919eaca49f9b9ea5a3998b7f7265584e43372b1c12070000000000000000000000000000000000000000000000071019232b343c434b51575f61676d7175797c7e80828384858586868585848482817f7d7a77736f6a64615a534d453e352c241a10070000000000000000101d293643505c6976838f8b7f726c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c727f8b8f8376695c504336291d1000010e1a26313d4751595e5f6060606060606055544e463c32271b0f030013202c3946535f6c7986929facada093867a6d6053473a2d2014070000050e192228333f4a545d676e7b859299a3afa89f958e81776c605a50473d332a20160c030000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d2013070000000000000000000000000000000000000000000f1c2835424f5b6875818e9babb5b2a8a19e98989898989898989898989898989898989898989898989898989898988e8275685b4f4235281c0f000000000000030c18222c363f48505a616a6f7980868d92979c9fa2aaa7a9a8a7a6a6a6a7a8a9a8a6a7a09d9a94908a837c746d675e574d453b32291e150a0000000000000000000007121d27313c454f59616a6f7b828a91969b9fa2aaa7a7a5a3a2a2a3a4a5a8a7a7a09d99928e867f756d675d554b42392e23180c0300000000000000000000000000000000080e161e25293036393c4247484b4e50515253535252514f4d4b4846423c3a36302a251f170f0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d111314191c1b19150f090200000000000000000000000000000000000000030613131313131313130d0c0a07020000000000000000000000000003060809131313131313130b0b09050100000000000000000000000000000000000000000000000814212e3b4754616e7a8794a1a094877a6d6154473a2e2114070000000000000000000000000000000000000004101d2935404b556773808d9aa9b3ab9e9184786c6053463c2f261b1106000000000000000000000000000000000007131d28333f4a54606d7a86929facb1a7988b7f7265544a3f34281c1003000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000000000000000000000000000004101c2834404b54626f7c8996a0a49a938e939eab9d9083776a5f5347392e23180c000000000000000000000000000000000000000000000000071119222a313940454d53555d6065666d6f71737576777879797979787877757472706d6866625f58555046423b332c231a1208000000000000000000101d293643505c6976838f8b7f79797979797979797979797979797979797979797979797979797979797979797979797979797979797979797f8b8f8376695c504336291d100004111d2a36424e59636a6c6c6c6c6c6c6c6c6260584e43372b1f13060013202c3946535f6c7986929facada093867a6d6053473a2d20140700030d17202b343d44505b666d79839197a2abaaa1969083796d655b50483e352b21180e04000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d2013070000000000000000000000000000000000000000000d1a2734404d5a6773808d99a3aeada196918b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8175685b4f4235281c0f0000000000000b151e2a343e48505a626c717c848c92989fa2a9aca8a8a09e9c9a9a999a9a9b9d9fa3ababaaa69f9c95908781796e695e574d443b30261c11060000000000000000000c18242f39434d57616b707c858f949ea0a8aca8a19e9a989695959697989c9fa2aaaba39f98928b81796d675d544b4034281e150b0000000000000000000000000000020a121a202830353b4146474e5355585b5c5e5f5f5f5f5e5e5c5a5855534d4846423b363029211a120a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f13191d202126292825201b140c0300000000000000000000000000000000060c101220202020202020201a1917130e0800000000000000000000040a0f13151620202020202020181715110c06000000000000000000000000000000000000000000000814212e3b4754616e7a8794a1a094877a6d6154473a2e21140700000000000000000000000000000000000000010d18242f3d495663707c8997a1adaca196897d7063584e41382d22170f06000000000000000000000000000000071118242f3844505b66717e8b98a2aeaca095887b6e6155483b2e23170b00000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000000000000000000000000000006131f2c3845515c6674818d9aa89f9388828e9baaa095887c6f62544a4034281c10040000000000000000000000000000000000000000000000000710181f282f353b42464c5154545c60626567686a6b6c6c6c6c6c6c6b6a69676563605d5655534e49443e36312a211a110800000000000000000000101d293643505c6976838f918b86868686868686868686868686868686868686868686868686868686868686868686868686868686868686868b918f8376695c504336291d100006121f2c3845525e6a757979797979797979766a6054473b2e2215080013202c3946535f6c7986929facada093867a6d6053473a2d201407010b151f29333d46505a606c78828f95a0a9aba29891847a6e675c53493f362d23190f0600000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d2013070000000000000000000000000000000000000000000815212e3b4854616e7b86929faaab9e91847f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7d7063564a3d3023170a000000000007121d27303c46505a626c717e8691969fa2aaaba39f9b9796918f8e8d8d8d8d8f9092999a9ea1a9aba79f9a938d837b6e695e564c42382e23170c040000000000000004101d2935404b555f69707d8692979fa6aca69f9c96918e8b898988898a8c8f92989ea1a8aaa29f938f83796d665c51453d30271c1207000000000000000000000000020b141c242c323a41464d5254575f626567696b6c6c6c6c6b6a696765615f5754524d46423b332c241c140a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c10161b1e25292d2e333534312c251e150c0200000000000000000000000000030a11171c1f2d2d2d2d2d2d2d2d2726231f19120a0200000000000000070f161b1f22232d2d2d2d2d2d2d2524211d1811090000000000000000000000000000000000000000000814212e3b4754616e7a8794a1a094877a6d6154473a2e21140700000000000000000000000000000000000000000713202d3a4653606d7985929eacb2a89c8f82756a5f53493f332721180f0802000000000000000000000003091119232935404b55606c7884919daab3a99d908477695f53463a2d1c110600000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b00000000000000000000000000000713202d3a4653606d7985929eaa9d90837d8998a2a79a8d8074665c5144382c1f130800000000000000000000000000000000000000000000000000060d161d242931363a4145474a505355585a5c5d5e5f5f5f5f5f5f5e5d5c5a595654524c4847433c39332a261f180f080000000000000000000000101d293643505c6976828f9393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393938f8376695c504336291d10000613202c3946535f6c7987868686868686867c6f6255493c2f2216090013202c3946535f6c7986929facada093867a6d6053473a2d20140707121d27313b454e58616c73808d949ea7afa39992867c6f685e554b41382d241b11070000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d2013070000000000000000000000000000000000000000000714212d3a46535e6974818e98a2ada196887c7272727272727272727272727272727272727272727272727272727272706b6054483c2f22160900000000000c18232e39424e58616c717f8a9298a0a8aba49f99928e8a8784828180808081828486898d92979ea1a8aca49f9590847b6e685e544a3f342820150a0000000000000006131f2c3845515d676e7b869298a1a9aaa29f948f8984817e7d7c7c7c7d7f82868b91969da4aea59e958f82786d60594f42392e23180c0000000000000000000000010b141d262e363e444c52565e61666a6e717476777879797878777673716e6966615e57524d453e362e261c140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e12181d1f272b3035393a3f42413d3730271e1409000000000000000000000000030c151c23282c393939393939393933322f2a241c140a00000000000007101920272b2e2f3939393939393932312e29221b120900000000000000000000000000000000000000000814212e3b4754616e7a8794a1a094877a6d6154473a2e211407000000000000000000000000000000000000000006121f2c3844505c6673808d9aa4afaa9e94887c6f655b50443d332a2219140e09060400000100000406090e141a232b353d45515d67717e8a95a0acada2978b7e7265574d42362a1e0a0000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000000000000000000000000005111d2935414c5664707d8a97a2a9998c807885929fab9e9285796d6053463a3025190d0100000000000000000000000000000000000000000000000000040c12181f262a2f35393a3f4446494b4d4f505152525353525251514f4e4c4a4745413c3b37322d28221a140e06000000000000000000000000101d293643505c69768286868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868376695c504336291d10000613202c3946535f6c7986929393939393887c6f6255493c2f2216090013202c3946535f6c7986929facada093867a6d6053473a2d2014071118242f39434d57606a717e8b929ca6aea49f92877d706a5f564c43392f261b1209000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d20130700000000000000000000000000000000000000000005121e2a36424d57616e7b86929fa8a89c8f82766c6565656565656565656565656565656565656565656565656565656360594f44382c2014070000000004101c2834404b545f6a717e87939fa2aaa9a199938e86827e7a777574737373747577797c80858b91969da5afa79f9691847a6e665c50443c32261b0f04000000000004111d2935414b55606d79839098a2aaa9a198928a827c787472706f6f70717275797e848d929fa4aba79f948d80746b60544a4034281c10040000000000000000000009131d262f38404850565e61686e73777b7e81838485868685858482807e7b77736e69615e57504840382e261c13090000000000000000000000000000000000000000000000000000000000000000000000000000000000060c10151a1d24292c32383a4146474c4f4d49423930251b0f0400000000000000000000000a151e262e34384646464646464646403f3b362e261c120800000000040f19222b32383b3c464646464646463e3d3a342d241b1106000000000000000000000000000000000000000814212e3b4754616e7a8794a1a094877a6d6154473a2e211407000000000000000000000000000000000000000003101c28343f4a54616e7b87939fabb0a69c9083776c60584e453c342a251e1a1312100c070e070c1013131a1f262a353d47505a606d7984919ea7b1a99f9285796d6053473b31261a0e0000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000000000000000000000000000713202d3946525e6875828f9ba9a197897c75828e9baba1978a7d7064564c41362a1e1105000000000000000000000000000000000000000000000000000001070d141a1e24292c2e34383a3c3e40424344454646464645454442413f3d3a3935302e2b26201c170e0903000000000000000000000000000f1c2935424e5a66707679797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797670665a4e4235291c0f000613202c3946535f6c7986929f9f9f9f95887c6f6255493c2f2216090013202c3946535f6c7986929facada093867a6d6053473a2d2014101a232935404b555e696f7c86929fa4aea69d928b7f726b61584e443b31271d140a00000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d201307000000000000000000000000000000000000000000020e1a25313b46525e6973808c96a0ac9f948b7e716a5f5658585858585858585858585858585858585858585858585856544f473d33271c10040000000006131f2c3845515c666f7c869299a4aea8a0979187817b75716d6869676766676768676d7073797e848e939fa4aca8a0969083786d60584e43372b20150a00000000000613202c3945515d67737f8c95a0aaaba19792867e766f6c6565636262636465676d7279808b9399a4afa69d92897d70665c5144382c1f150a00000000000000000007101b252f38404a525a61686d747b8084888b8e8f919292929291918f8d8b8884807b746e69615a524a40382e251b0f060000000000000000000000000000000000000000000000000000000000000000000000000002090e11171c1f262b2f35393d43474c5254595c59534b42372c2015090000000000000000000006111c2630383f4453535353535353534d4b4740382e24190e020000000a16202b343d434749535353535353534b4a453f362d22180c010000000000000000000000000000000000000814212e3b4754616e7a8794a1a094877a6d6154473a2e2114070000000000000000000000000000000000000000000c17232e3846535f6975828e99a3afab9f948b7f726a60574e463e36302a25201f1c181b1a1b181c1f20262b31363f474f59616c74808d96a1adada2978d8073675d5145392a1f14090000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000000000000000000000000000714212e3a4754616d7a86929fab9e928579717e8b99a3a99b8f8275685e5246392d20150a0000000000000000000000000000000000000000000000000000000003090e13191d2023282c2d2f32343537383939393939393837363432302d2c2924211f1b15100b050000000000000000000000000000000d1926323e49545e66696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c69665e54493e3226190d000613202c3946535f6c7986929facaca295887c6f6255493c2f2216090013202c3946535f6c7986929facada093867a6d6053473a2d201418222c353e45515d676e7b859198a3aea79e948d80746d62594f463c32291f150b0200000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d2013070000000000000000000000000000000000000000000009141f2a36424d57606d7984919aa4a69f92867c6e685d554b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a48443d352b21160b0000000004111d2935414b55606d79839098a3aba9a09691857d746e6964615d565b5a5a5a5a555c6063666d7179818b939aa4afa89f958c80736a5f54473d32271b0f01000000000714212d3a4754606d7a85929fa7afa49992857c716c63605b535656555657555c60676d747f87939fa6aea49d9184796d6053463c31261b0f0300000000000000030c19222d37404a525c636c717a81868c9196989a9c9e9f9f9f9f9e9d9c9a9895918d86817b716c645c524a40372d21180e0300000000000000000000000000000000000000000000000000000000000000000001040b1014191c23282c3137394045474e54565e616668655d53493d3125190c000000000000000000000c17232e38424a505f606060606060605a58524a40362a1f13070000030f1b27323d464e545660606060606060585650483f34291d11050000000000000002050708080808080808080814212e3b4754616e7a8794a1a094877a6d6154473a2e21140808080808080808080705020000000000000000000006111c2a36424d57626e7b87929fa8b0a69f92877c6f695f585046413b36312d2c282327272723282c2d31373b42465159606b717e8a929da8b1a79f92857a6d61554b4035291d10040000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b00000000000000000000000006121e2b37424d5765727f8b99a3ab9b8e81756d7a86929fac9f92867a6d6154473c32271b0f00000000000000000000000000000000000000000000000000000000000001080d1113171c1f20222527292a2b2c2c2c2c2c2c2b2a2927262321201d1915120f0a0400000000000000000000000000000000000a16212d38424c545a5c60606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060605c5a544c42382d21160a000613202c3946535f6c7986929facaca295887c6f6255493c2f2216090013202c3946535f6c7986929facada093867a6d6053473a2d2016202a343e47515b606d79839097a1aaa9a0958f82786d605b51473d342a20170d030000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d20130700000000000000000000000000000000000000000000030e1a25303b45515d67707d88939fa6a29891847a6d675c544b423f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3d3c38332b231a0f05000000000613202c3945515d67737f8c95a0aaada19791847b706b615e5754524c4e4d4d4d4e4b5153545c60676d747f88939fa5afa79f92877c6f62584e43372b1d120700000005111e2a36424d5766727f8c97a2adaa9f93877d706a615a5350494a4949494a4b51555c606d73808c949fabaca0958b7e7164584e43372b1f1206000000000000000a151e2b343f49525c646e737e858d92999da0a8a9a29f9d9c9b9c9d9fa2aaa7a09d99928e857e736e645c52493f332a1f14090000000000000000000000000000000000000000000000000000000000000001080d11161c1f252a2e34383c42474b5153586062686d72756f65594d4134281b0e00000000000000000003101c28343f4a545c6c6c6c6c6c6c6c6c66635c52473b2f23170a000006131f2b38434e5860626c6c6c6c6c6c6c65625a50453a2e211509000000000002090e121415151515151515151515212e3b4754616e7a8794a1a094877a6d6154473a2e211515151515151515151514120e09020000000000000000000e1a26313b47535f6974808d96a0abaea39991857b6e6a615a524c46423c3a38342e3434342e34383a3c42474d535b626b707d86929fa4aeaaa0958b7f72685e5243392f24180d010000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000000000000000000000000814212e3a47535f697683909daba3998a7e716875828f9caba3998c7f7265584e43372b1d1207000000000000000000000000000000000000000000000000000000000000000104060c10121316181a1c1d1e1f1f20201f1f1e1e1c1b19171413110d0806030000000000000000000000000000000000000005101c26313a42494e505353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353504e49423a31261c1005000613202c3946535f6c7986929f9f9f9f95887c6f6255493c2f2216090013202c3946535f6c7986929facada093867a6d6053473a2d201e28323c464f59636d75818e959fa9aaa1979083796d665c50493f352c22180e05000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d201307000000000000000000000000000000000000000000000009141f2935404b55606b73808d949fa8a0968f82796d665c544b433a323232323232323232323232323232323232302f2c27211a110800000000000714212d3a4754606d7a85929fa7b0a69e92857b6e696059524d47464141404040414045464b51555d606d727f8b939ea9afa3998f82766a605447392f24180c0000000714202d3a46525e697784909da9a8a2988d80746b60585046443f3d3c3c3d3e40454b515b606d7882909ca6b0a89d9083776a5f53473a2e21150600000000000006111c26303d46515b646e74808a92979fa3a9a19e999792908f8f8f909298989d9fa7a39f97928a80736e635b51453b31261a0e0400000000000000000000000000000000000000000000000000000000040a0f13191d20272c3036383f44464e53555d60656a6f747a7f8175685c4f4235291c0f00000000000000000006121f2c3844505c667679797979797979736e63584b3f3226190c00000815222e3b4754606a6f79797979797979716c62564a3d3124170b00000000050d141a1e2021212121212121212121212e3b4754616e7a8794a1a094877a6d6154473a2e2121212121212121212121201e1a140d05000000000000000009141f2b37424d57606d79849199a4afaba19791847c706c615e56534d494644404141414141404546494d53575f616d727d869298a2aeaca2989083786c60564c4131281d1207000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000000000000000000000030f1b27333f4953626e7b88959fac9f92867a6d64717e8b99a3ab9d9083776a605447392e23180c0000000000000000000000000000000000000000000000000000000000000000000000030607090b0d0f101112131313131212110f0e0c0a0707040100000000000000000000000000000000000000000000000a151f2831383e4243464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464643423e3831281f150a00000613202c3946535f6c7986929393939393887c6f6255493c2f2216090013202c3946535f6c7986929facada093867a6d6053473a2d2026303a444e58616b727f8c939ea7aca29891857b6e675d544a3f372d231a100600000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d2013070000000000000000000000000000000000000000000000020c18242f39434f59606d78829096a0a89f948f82786d665d554c443b332b2525252525252525252525252525252322201c160f08000000000006131f2b37434e5866727f8c97a2adaa9e948a7d70695f574f46423b3935303433342e34383a40454b515b626d74818e97a1adab9e94897c6f62554b4035291d100400000814212e3b4754616e7b8795989a9b9c92857a6d61594f463e37332d2f2f302e34394045505c666f7c88949fabaca095887b6f6255483c2d22170b0000000000000c17232e38424f59626d74808d929ea1a9a39f97918c8885838282838385888b90959ea1a8a29f928d80736d62574d42362a20160a0000000000000000000000000000000000000000000000000001070c10151b1e24292c33383b42464a5053575f62676d71777c81868c83776a5d5144372a1e110000000000000000000713202d3a4653606d78868686868686868073665a4d4033271a0d00000916232f3c4956626f7c868686868686867e7165584b3e3225180b000000050f171f252a2d2e2e2e2e2e2e2e2e2e2e2e2e3b4754616e7a8794a1a094877a6d6154473a2e2e2e2e2e2e2e2e2e2e2e2e2d2a251f170f0500000000000000030e1a26313c45515d676f7d87939fa4aea9a19691867e756e68615e575653514a4e4e4d4e4e4b515356575f62696e767f879298a2aaafa49a92867c6f665b50443a301f160c01000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000000000000000000000005121f2b3744505b6573808d99a7ac9c8f837668606d7a86929faca095887c6f62554b4034281c100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d161f262d32353639393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393635322d261f160d0300000613202c3946535f6c7987868686868686867c6f6255493c2f2216090013202c3946535f6c7986929facada093867a6d6053473a2d232e38424c565f6a707d87939fa5afa49a92867c6f695e554b42382e251b11080000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d20130700000000000000000000000000000000000000000000000007121d27313d44505c666d7a849197a1a69e948f81786d675d564d453d3528231c141919191919191919191919171614100b050000000000000815222e3b4754606a7884919ea9b1a79c8f82756c61574d453d36302d292427272723282c2e343a4145515b606d7a85929eaab0a69b8e8275675d5145392c1f130600000b1825323e4b5865717e888a8b8d8e908e8174685e52473d342b272223222323282f343f4a545f6a76828f9cacb1a7998c7f736653493f33271b0f030000000003101c28343f4a54606b727f8c929ca4aaa299928c84807b787675757677797b7f838a91969fa6a49c928b7f72695f53463d32271b0f030000000000000000000000000000000000000000000003090e12181c1f262b2f35393d44484d52545c60646a6e74797e83898e929084776a5d5144372a1e110000000000000000000713202d3a4653606d798693939393938d8073665a4d4033271a0d00000916232f3c4956626f7c8993939393938b7e7165584b3e3225180b0000020d17212930363a3b3b3b3b3b3b3b3b3b3b3b3b3b4754616e7a8794a1a094877a6d6154473b3b3b3b3b3b3b3b3b3b3b3b3b3a36302921170d020000000000000009151f2935404b55606b727f8b929da4ada9a198928a817a746e696562605c545b5a5a5a5b545c606266696e747b828b9299a2aaaea39f93887e706a5f544a3f32291e0d0400000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b00000000000000000000000613202d394653606c7884919eaba49a8b7f72655d6875828f9caaa79a8d8074675c5145382c1f14080000000000000000000000000000000000020507080c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0906010000000000000000040d151c212629292d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d292926211c150d0400000006121f2c3845525e6a757979797979797979766a6054473b2e2215080013202c3946535f6c7986929facada093867a6d6053473a2d28343f4a545e686f7c869299a4afa59f93887e706a60574d433a30261c1309000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d201307000000000000000000000000000000000000000000000000010b151f28343f4a545e686e7b859298a2a69e938f82796d685f574f473e342e261e160d0c0c0c0c0c0c0c0c0c0a09070400000000000000000916222f3c4955626f7c8896a1acaca095897c6f625a50453b332a25201d191a1a1a181c1f23282f353f45515d67727f8b98a2aeac9f9286796d6053473a2d20140600000714212d3a4754606d797c7d7f808183847d7063564c41352b221b17161616181d232e38424e5864717d8a9aa4afa99c8f8276655b5044372b1f12050000000006121f2c3844505c666f7c87929fa4aba29892878079736f6a6a696869656c6e72777d848f949fa6a49f92867b6e61584e43382b1f13060000000000000000000000000000000000000000060b0f141a1d23292c32373a4145474f54565e61666d71767b80858b90959b9d9084776a5d5144372a1e110000000000000000000713202d3a4653606d7986939f9f9f998d8073665a4d4033271a0d00000916232f3c4956626f7c89959f9f9f988b7e7165584b3e3225180b000009141f29333b4246484848484848484848484848484854616e7a8794a1a094877a6d6154484848484848484848484848484846423b33291f140900000000000000030d18242f3a434f59626d74808d929ca3adaaa29f938e86807b76726f6d6669686767676869666d6f72777b81868f949fa3ababa39f918c7f726c61584e42382d20170d0000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000000000000000000004101d2935404b5563707d8996a1ac9f93877b6e615664717e8a98a2ab9e9285796d6053463b3025190e02000000000000000000000000000003090e12141519191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191816120d070000000000000000030a1016191c1d20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201d1c1916100a030000000004111d2a36424e59636a6c6c6c6c6c6c6c6c6260584e43372b1f13060013202c3946535f6c7986929facada093867a6d6053473a2d353d44505c666d7a849198a2aba69d938c7f726c61584e453b31281e140a01000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d20130700000000000000000000000000000000000000000000000000030d17232e38424c565f696f7c869299a3a59e948f827a6e69605950443f38302820180f07000000000000000000000000000000000000000d1a2633404d596673808c99a8b2aa9d9083776a6054483e332a211a14110d080d070c1013181d242935414c55606d7985929fabaea2988a7d7164574a3e2e23170b00000613202c3945515d676d6f707273757678706b6054443a30231a0f0b0609070c121c26303c4754616d7a86939facab9f9285796c605346392d20130600000003101c28343f4a54606d78839099a3afa39992867d736d67625f585c5c535b6061656c707a828f949fa9a2988f82766a6054473b2e221508000000000000000000000000000000000002080d11171c1f262a2f34383c43474c5254596063696e73797d82888d92979da0a79d9084776a5d5144372a1e110000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2aca4988b7e7165584b3e3225180b00020e1a25303b454d52545454545454545454545454545454616e7a8794a1a094877a6d61545454545454545454545454545454524d453b30251a0e020000000000000007131d28313d47515b606c77808c919ea1a9aea59e98928d87837f7c79777674747474747677797c7f83888e92999fa6aea8a199928b7f736d635a50463c2f261c0e050000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000000000000000000006131f2c3945515d6774818e9ba8ab9c908376695e53606d7a86929faca2978a7d7164564d41362a1e110500000000000000000000000000060d141a1e2122262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262525221e181109010000000000000000050a0d0f101313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313100f0d0a05000000000000010e1a26313d4751595e5f6060606060606055544e463c32271b0f030013202c3946535f6c7986929facada093867a6d6053473f383d47515b606d78828f96a0aaa89f948e81746d635a50463c33291f160c0200000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d201307000000000000000000000000000000000000000000000000000006111c26303a444d57606a707d879298a2a69e9490847b6f6b625a504a423a322a21191106000000000000000000000000000000000005111e2a36424d576976838f9ca9b5ab998c7f7366584e43362c21180f0905010000000004070c1319242f3a45515d6774818e9aa7b4aa9b8e817468544a3f34281c10030004111d2935414c555d606264656768696b6360594f4432291e110800000000010a14202d3946525e687784919daaaea298877a6e6154473b2e21140800000006121f2c3844505c66727f8b95a0aba89f92877d706b605d55534e4f4f495053555a61686d79829097a1a49f94897c6f6256493c2f231609000000000000000000000000000001040a0f13191c22282b3136394045474e53565d60656b70757b80848a8f949a9fa2a7a09d979083776a5d5144372a1e110000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0005121e2a36424d575e616161616161616161616161616161616e7a8794a1a094877a6d616161616161616161616161616161615e574d42362a1e120500000000000000010c161f2b353f44505b656c747f8a92979ea6acaaa29f9a93908c898684828181808181828486898c90959a9fa3ababa49f9691877e736d635b51473e342a1d140a000000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000000000000000000000714202d3a4753606d7985929faba3998b7f726557515d6775818e9ba9a99c8f8275685e5246392d20160a000000000000000000000000060f181f262a2d2e3232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232312e29231b13090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915202b353f474e5253535353535353534947433c342b20150a000013202c3946535f6c7986929facada093867a6d6059504a42454f59626d74808d949fa8a9a0968f82786d605b51483e342b21170d040000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000a151e29323c454e58616b707d869298a2a69f9691857d716c605c544c443c332b2317110a020000000000000000000000000000000714202d3a46525e697885929eabafa399897c6f6256493d32231a0f060000000000000000000108131e2935404b5564707d8a97a9b3aa9d908377665c5044382b1f120600010d19242f3a434c51545557585a5b5d5e56544f473d3320170d00000000000005111d2a36414c566875828e9ba8b3aa95897c6f6256493c2f2316090000000713202d3a4653606d7984919ea7ada1968d80736b6059514b474342423f44464850565d676d7a85929b9993908c8275685c4f4235291c0f02000000000000000000000001070d11161b1e252a2d33383b42464b5153585f62686d72777d82868c91969c9fa6a39f9b95908b857f7366594c403326190d0000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000714202d3a46525e696e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e7a8794a1a094877a6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e695e52463a2d2014070000000000000000040d192327333f49535b606d737d858f949da0a7acaca49f9c989892918f8e8d8d8d8e8f919298999d9fa7acaca69f99938d847d716c635b51493f352c22180b02000000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b00000000000000000005111e2a36414d5664717e8a98a2ac9f92867a6e61544b5563707d8a97a1ac9f92867b6e6154473d32271b0f0100000000000000000000030d18212931363a3b3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3e3a342d251b110700000000000000000000000000000000000000000000000000000000050a0d0f101313131313130f0f0d0904000000000000000000000000000000000000000000000000000000000000040f19242d353d424546464646464646463c3b37322b22190f04000013202c3946535f6c7986929facaea194887b706b605b544c4d57606b727f8b929da6aba19791847a6d665c51493f362c22190f05000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d201307000000000000000000000000000000000000000000000000000000030c17202a333d464f59616b707d869298a1a8a09792877e746d665d564d453d3527221b140b0300000000000000000000000000000814212e3b4754616e7b8797a2adac9f92867a6d6053473a2d2014070000000000000000000000010d18242f3b4754616e7a8797a1adac9f9286796d6053463a2d201307000008131e28313a414547494a4c4d4e50514948443d352b210e05000000000000010d192530414e5b6774818e9aa7b0a3968a7d7063574a3d3024170a000004101d2935404b5564717d8a96a1acaa9e9184796d60594f45403937312d3337393e444c555e68717e8b8e8a86837f7c6f6255483c2f22150900000000000000000000040a0f13181d20272c3036383f44464d53555c60646a6f747a7f84898f92999ea1a9a19e99928e89837e79736d63574b3e3225180c0000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000815212e3b4854616e7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7c8995a2a295887c7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b6e6154483b2e211508000000000000000000071017222d384149505b636b707b828990959c9fa4acaca9aaa39f9d9c9b9a9a9a9b9c9d9fa3aaaaababa39f9b948f878079706b625a514940372e231a100600000000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000000000000000000714202d3946525e6876828f9caaab9c8f8276685e524653606d7985929eaba3998c7f7266584e43372b1d12070000000000000000000009141f29333b4246484c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a463f372d23180d0100000000000000000000000000000000000000000000000000030a11161a1c1d2020202020201c1b1915100902000000000000000000000000000000000000000000000000000000000008121b242b31363839393939393939392f2e2b272019100700000013202c3946535f6c7986929facb8ab9e92857d736c665e56555f69707d87929fa4aea39992857b6e685d544a40372e241a100700000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d20130700000000000000000000000000000000000000000000000000000000050e18212b343e474f59616b707d8691969fa7a199928b80786d685f574f473f332d261d150c03000000000000000000000000000916232f3c4956626f7c8995a9b3aa9e918477675d5145382c1f13060000000000000000000000000714202d3946525e687885919eabaea398887b6e6255483b2f2215080000010c161f282f35393a3c3d3f404243453d3b38332b23190f0000000000000000081a2733404d5a6673808d99a6b0a4978a7d7164574a3e3124170b00000613202c3945515d6775828f9ba8aea3988b7e71675d51473d352f2b2622272b2d323a434c56606d7883817e7a76736f6a5f53473b2e2115080000000000000000070c10151b1d24292c32383a41464a5053575f61676d71767c81868b91959b9fa3a69f9c96918c86817c77716d67635b51463b2f22160a0000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00121f2b3845525e6b788487878787878787878787878787878787898e99a4a4988e888787878787878787878787878787878784786b5e5245382b1f120000000000000000000006111b262f383f44515961696e757d83898f939a9c9fa2aaa7a8aaa9a7a7a7a7a7a9a9a8a6a9a29e9b99928e88827c746d676059504840372e251c11080000000000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000000000000000000814212e3b4754616e7b86929faca3998b7e7165564c44515c6674818d9aa8ab9d9184776a605447392f23180c000000000000000000020e1a26313b454d535559595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959585651493f34291e1206000000000000000000000000000000000000000000000000040d151c2226292a2d2d2d2d2d2d292825211b140c03000000000000000000000000000000000000000000000000000000000009121920262a2c2c2d2d2d2d2d2d2d22221f1b150f070000000013202c3946535f6c7986929facb9ada197928780786d68605d676e7b859299a3aea49f92877d6f695f564c42392e251c12080000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000060f19222c353e474f59606b6f7c8490959ea5a39f928d827a6e69605950443f382f271e150d040000000000000000000000000a1723303d4a5663707d8996a3b0a99c90837669554b4035291d100400000000000000000000000005111e2a36414c566a7683909da9b4aa96897c6f6356493c30231609000000040d161e24292c2d2f313234353638302f2c272119110700000000000000000d1a2633404d596673808c99a6b1a4978a7e7164574b3e3124180b00000714202d3a4753606d7a86929facac9f92867a6d60554b403529241d1a171b1f2028313a44515c666d7775716d6866625f584e43372b1f1206000000000000030b12181c1f262b2f35393d43484c52545b6063696e73797e83888e92989da0a8a29f9a94908a847f7a756f6b65605d55514940352a1e12060000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00121f2b3845525e6b7885919494949494949494949494949494949599a0aaaaa098959494949494949494949494949494949184786b5e5245382b1f1200000000000000000000000a141d262d3340474f575e616b70777d82878b8f9298989a9b9d9e9e9f9f9f9e9d9d9b999797928e8a86817c766f6a605d554f473e362e251c130a000000000000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000000000000000006131f2b37434e5865727f8c99a3ac9f92867a6d615447404a54636f7c8996a1aca095897c6f62554b4034291c1004000000000000000005121e2a36424d575f616565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565625b51463a2e2216090000000000000000000000000000000000000000000000030d161f272d3235363939393939393635312c261e150c020000000000000000000000000000000000000000000000000000000000080f151a1d1f20202020202020201615130f0a04000000000013202c3946535f6c7986929facb9b3a9a199938c827a6f6a656d79839097a1aba59c928b7e716b60574d443a30271c130a000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000007101a232c353e474f59606a6f7a838f939fa4a49d948f847b706b625a5049413930271f160d0400000000000000000000000b1724313e4a5764717d8a97a4b0a89b8f8275685c4f422f24180c00000000000000000000000000010d192530424f5c6875828f9ba8b0a3968a7d7063574a3d3024170a00000000040c13191d202122242527282a2b252423211c170d0801000000000000000e1b2734414e5a6774818d9aa7b0a4978a7d7164574a3e3124170b00000a1723303d4a5663707d8998a3aea89b8e8275675d51433a2f23181d1d1d1d1d161f2834404a545c606a6864615e5655534e463c32261b0f030000000000030c151c23282c31373a4045474f54565e61666c70767b80858b90959a9fa2a8a09e98928e88837e79736e6863605953514b4340372e23190d020000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00121f2b3845525e6b7885919ea1a1a1a1a1a1a1a1a1a1a1a1a1a1a2a4aab2b2aaa4a2a1a1a1a1a1a1a1a1a1a1a1a1a1a19e9185786b5e5245382b1f120000000000000000000000020b141b2227353e454d525960636b70757b7e8285888b8d8f9091929292929191908e8c8a8885817e7a746f6a626058514b433d352d241c130a01000000000000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b00000000000000000815212e3b47535f6a7783909dabaa9c8f8275685e5246394653606c7884919eaba89a8d8174675c5145382c1f140900000000000000000714212d3a46535f696e72727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272726d62564a3e3125180b00000000000000000000000000000000000000000000000a151f2831383e424346464646464642413d3730271e140900000000000000000000000000000000000000000000000000000000000004090e11121313131313131313090806030000000000000013202c3946535f6c7986929facb9bab2aba49f948f847c726c77818f95a0a9a79e938c80736c61594f453c32281e150b01000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000008111a232c353d474f585f686e79818c939aa2a69f9691857d716c605b534a423931281f160d04000000000000000000000b1825313e4b5864717e8b97a4b1a89b8e8275685b4f4235281c070000000000000000000000000000081b2835414e5b6874818e9ba7b0a4978a7d7164574a3e3124170b000000000008121a22282d303132323232323231302d282219130c04000000000006121e2b37424d576875828f9ba8b4aa96897d7063564a3d3023170a00000d1a2733404d5a6673808d99aab4aa978b7e7164554c4131282a2a2a2a2a2a2a2a2a232e39424a51535d5b5754524c4847433c342a20150a0000000000000b151e272e34383c43474b5153596063686d72787d82878d92979d9fa7a49f9c96918b86817c76716d66615e56544f47454039312e251c1207000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00121f2b3845525e6b7885919e9f9f9f9f9f9f9f9f9f9f9f9f9f9fa1a3a8b0b0a8a3a09f9f9f9f9f9f9f9f9f9f9f9f9f9f9e9185786b5e5245382b1f12000000000000000000000000020a1117232c333b42464f54596063696e7276797c7e808283848585868585848382807d7b7975716d68625f58544e45403a312b231b120a0100000000000000000000000b1825313e4b5864717e8b97a4aca89b8e8175685b4e4235281b0f08040000000000000000000003050e1b2734414e5a6774818d9aa7aca4978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000000000000003101c28343f4a54626f7c8895a0aca3988b7e7164564c413744505b6573808d9aa7ab9f9285796d6053473b30251a0e02000000000000000815222e3b4855616e7b7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7265584c3f3225190c0000000000000000000000000000000000000000000005111c27313a434a4e505353535353534f4d49423930261b1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9b2a8a09da09f9691877f76808c939ea7a89f958e81776c605a50473d332a20160c0300000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000008111a232b353d464e565e676d7780889298a0a8a09792877e736c655c544b433a31281f160c030000000000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2834414e5b6774818e9aa7b1a4978b7e7164584b3e3125180b0000000005101a242c33393c3e3f3f3f3f3f3f3e3c393329241e16100c0709060b1117232d3a47535f697884919eabaea398887b6e6155483b2e2215080004101c2834404b546976828f9ca9aea398887b6f6255483c2f3737373737373737373737373039404446514e4b4746413c3b37322a261f180f060000000007121c2730394044464e53555d60656b6f757a7f848a8f939a9ea1a9a29e99938f89847f7a746f6a64605c54524c48433d39352f271f1c130a00000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00121f2b3845525e6b78849193939393939393939393939393939394979ea8a89e97949393939393939393939393939393939185786b5e5245382b1f12000000000000000000000000000006111a202930363d44484f54565e6165666d6f7174757778787979787877767573716f6d6664605d56534e47433d352f281f191109000000000000000000000000000b1825313e4b5864717e8b979f9f9f9b8e8175685b4e4235281b1614100b05000000000000060b0f12131b2734414e5a6774818d9a9f9f9f978b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000000000000006121f2b3844505c6673808d9aa7ac9f92867a6d6054473a333f4953626f7c8895a0aca2978a7e7164574d42362a1e1205000000000000000a1724303d4a5763707d8a8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c86796c5f5346392c2013000000000000000000000000000000000000000000000a16222d38434c545a5d6060606060605c5a544c42372c2115090000000000000000000000000000000000000000000000000000000105090b0b13131313070604000000000000000000000000000013202c3946535f6c7986929facb9aca0969196a0a199928c838c929ca5aaa1969083796d655b50483e352b21180e040000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000081119232b343c444d555d656c737e8691969fa6a299928b80776d665d554b433a31281e150a0000000000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000000000b17222c363e44494a4b4b4b4b4b4b4a49453e352f281f1c18171616171b222935404b55616e7b8896a1acac9f9286796d6053463a2d2013070006131f2c3845515c667884919eabac9f9286796d6053464444444444444444444444444444444444444444444444444444443b3a36312a21180e030000000c18232e39424a5153585f62676d72777c81868c91969c9fa4a7a09d97928d87827d78726d68625f5853504a46413b38322c29241d150d0a0100000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00121f2b3845525e6b788486868686868686868686868686868686878c97a3a3978c878686868686868686868686868686868684786b5e5245382b1f12000000000000000000000000000000080e171f2f3a454f575c5e60605f545c60626567686a6b6b6c6c6c6b6a6a68666462605c5454524c47433c383229241d160d0700000000000000000000000000000b1825313e4b5864717e8b93939393938e8175685b4e42352b2423201c170e09030000020a11171b1f20252c34414e5a6774818d93939393938b7e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000000000000000713202d3a4653606d7985919eabaa9b8f8275675d5145392d3847535f6a7784909daaa99c8f8276695e52463a2d20160a000000000000000a1724303d4a5763707d8a96989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989286796c5f5346392c2013000000000000000000000000000000000000000000010d1a26323e4a545e66696c6c6c6c6c6c69655e54493d3125190d0000000000000000000000000000000000000000000000000000060c111517182020201f1413100c0701000000000000000000000013202c3946535f6c7986929facb7aa9d91849196a0a39f9490949ca4aba29891847a6d675c53493f362d23190f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000000071019222a323b434b535b606c707c848f949da4a39f928d81786d675d554b433a30261c110600000000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b00000004101c28333e4850555758585858585857555045413a312c282323222322282d333d45515d67727f8c99a8b2a99d908376665c5144382c1f1206000713202d3a4653606d7986939facaa9d908477665c50505050505050505050505050505050505050505050505050505050504846423b332a1f1409000004101c2834404a545c60646a6f747a7e83898e92999ea1a8a39f9b95908b85807b75706c65605d56534e46443f3836302c271f1d18120b03000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00111e2a3743505c687278797979797979797979797979797979797a8794a1a094877a797979797979797979797979797979797872685c5043372a1e11000000000000000000000000000000000f1b2834404c5761686b6c6c6c605c5455585a5c5d5e5f5f565d6065696b6c6b6965605c554e463c37312b272018130c040000000000000000000000000000000b1825313e4b5864717e868686868686868175685b4e42393831302d28221a140c07070b141b22272b2d323939414e5a677480868686868686867e7164584b3e3125180b000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f06060403010000000000000203060e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b00000000000004111d2935414c5563707d8a97a1ada2988a7e7164554c41352b37434e5866737f8c99a7ac9f93877b6e6154483d32271b0f010000000000000a1724303d4a5763707d8a969f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9286796c5f5346392c2013000000000000000000000000000000000000000000030f1c2935424e5a6670767979797979797570655a4d4135281b0f020000000000000000000000000000000000000000000000000911181d2124252d2d2d2c201f1c18120b030000000000000000000013202c3946535f6c7986929facaea194877b849196a1a69f9c9fa6afa39992867c6f685e554b41382d241b110700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000071018202931394149505a616a6f7a828d929fa4a49c938e82796d675d554b42382e23171006000000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000000814212d3944505a616465656565656564615a514c433e38342e302f302d33383f44505a606d7985929eabb1a7998c807366544a4034281c1004000815212e3b4854616e7b879aa4afa99c90837669545d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d55534d453b31261a0e020006121f2c3844515c666d71767c81858b90959b9fa3a8a19e99928e89837e79736e6963605b53524c47433c38342e2a251e1b16100c070100000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000f1b2834404b5660686b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6e7a8794a1a094877a6d6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6860564b4034281b0f00000000000000000000000000000005111e2a3744505c6873787979796d665c504b4d4f4c52565e61686d727678797876726d675f584e463c30261c160d0701000000000000000000000000000000000a1724303d4956626c7179797979797979756f65594d4646453d3c39332a261f181212181d262d3337393e4546464c58646e7479797979797979716c6256493d3024170a000b1825313e4b5864717e8b97a4aca89b8e8175685b4e4235281b13131311100e0a050005090d0f1013131b2734414e5a6774818d9aa7aca4978b7e7164584b3e3125180b0000000000000613202c3945515d6775818e9ba9ac9f92867a6d6053473a2f26323c4855616e7b88959faba4998c7f7266594f43382c1d12070000000000000a1724303d4a5763707d8a93939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939286796c5f5346392c201300000000000000000000000000000000000000000003101d2a3643505d6976828686868686868275695c4f4236291c0f03000000000000000000000000000000000000000000000009121b22292e3132393939392d2c29231d150d0300000000000000000013202c3946535f6c7986929facada09386797b849197a1a9a9abb0a89f92877d706a5f564c43392f261b12090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000000000060e171f282f383f4450585f686d78808b9399a3a59e948f82796d675d544a3f342822180b020000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000000a1623303c4955616c71727272727272716c605d554f4645403e3d3c3c3d3f44495059616c73808d97a1adab9f95887c6f6255483c2e23180c00000916232f3c4956626f7c8995acb6a89c8f82756a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a615f574d42362a1e1205000713202d3a4653606d787e83888d92989da0a7a69f9c96918c86817c77716d67615f5753504945413a37312c28231c19140f0a0400000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000b17232f3a454e565c5e6060606060606060606060606060616e7a8794a1a094877a6d6160606060606060606060606060605e5c564e453a2f23170b00000000000000000000000000000005121f2b3845525e6b7885868686786d60534a4c51565e61686d737a7f82858685837f796f6a5f584e42382e23170b0000000000000000000000000000000000000815212d3945505a62646c6c6c6c6c6c6c68655d53535353514a49443e363129231d1d23282f383f44464b52535353535c64676c6c6c6c6c6c6c64625a5045392d211508000b1825313e4b5864717e8b979f9f9f9b8e8175685b4e423528202020201d1d1a16110b1015191c1c2020202734414e5a6774818d9a9f9f9f978b7e7164584b3e3125180b0000000000000714212d3a4754606d7a86929facaa9b8e8175675d5145392c212d3a46535f697683909dabab9e9184776b605448392f24180c0000000000000a1724303d4a5763707d8686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686796c5f5346392c201300000000000000000000000000000000000000000003101d2a3643505d69768390939393938f8275695c4f4236291c0f030000000000000000000000000000000000000000000006111b242d343a3d3e464646463a38342f271f150b01000000000000000013202c3946535f6c7986929facada093867a6e7b859197a1a9b3aca1968b7f726b60584e443a31271d140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000000000000050d161d262d333e464e565d666d747f879298a2a69e949082796d665c50443f342a1d140a0000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000000b1724313e4a5764717e7e7e7e7e7e7e7d756d67615953514b4b4a49494a4a50535b606b707e88939fa9b0a69d9083766a5f53473b2e1c120700000a1623303d495663707c8996a3afa89b8e8177777777777777777777777777777777777777777777777777777777777777776e695f53463a2d21140700101d293643505c6976828a90949a9fa2aaa29f9a948f8a847f7a756f6a64605d55534d46443f38352f2b261f1c17110e0802000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0007121e28333c454b50525353535353535353535353535354616e7a8794a1a094877a6d61545353535353535353535353535352504b453c33281e120700000000000000000000000000000003101d2a3643505d6976839098897c6f635a56555d60686d737a80858b8f9192928f8b847c6f6a5f544a3f34281c1003000000000000000000000000000000000005111d29343e48505658606060606060605b595e606060605e57555046423b342f27272e343c41495053585f6060605f5c585a60606060606060585650483e34291d1105000b1825313e4b5864717e8b93939393938e8175685b4e42352d2d2d2d2d2a2926221c151b212528292d2d2d2d34414e5a6774818d93939393938b7e7164584b3e3125180b000000000005121e2a36424d5765717e8b98a2aea2988a7d7064554b4035291e2a36424d5765727f8b99a3aca096897c6f63554b4035291d100400000000000916232f3c4855616b707979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979746a5e5145382b1f1200000000000000000000000000000000000000000003101d2a3643505d697683909c9f9f9c8f8275695c4f4236291c0f03000000000000000000000000000000000000000000010c18222d363f454a4b535353524745403931271d1207000000000000000013202c3946535f6c7986929facada093867a6d6f7c859297a2aaab9e91847a6d675c554b423930261e140b020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000000040b141b2227343c444c545c606d727e869298a2a69f958f82786d605a50463c2f261c110600000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000003101d2a3643505d6976838b8b8b8b8b8b8a817a706b64605c545756555657545b60656c727d86929aa4afaa9f948a7d7064584e43372b1f0b0000000a1724303d4a5763707d8a96a3b0ab9e928583838383838383838383838383838383838383838383838383838383838383837b6e6155483b2e22150800101d2a3743505d6a7683909c9fa6a8a09d98928d88837d78736d6862605853514b46423b37332d29241e1b15100c06000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00010c17212a333a4043454646464646464646464646464754616e7a8794a1a094877a6d6154474646464646464646464646464543403a332a21170c01000000000000000000000000000000010e1b2834414e5b6774818e9a8e81756c656364676d737a80868d92989c9e9f9e9c9691857c6f665c5044382b1f13080000000000000000000000000000000000000c17222d363e45494b5353535353535359636b6c6c6c6c6b64615a534d45403931303940454d535b60656c6c6c6c6b686157535353535353534b49453e362d22170c00000b1825313e4b5864717e868686868686868175685b4e423939393939393736322d271f262c3235363939393939414e5a677480868686868686867e7164584b3e3125180b00000000000714212d3a46535e697683909caaab9f9285796d6053463a2f241a26313b4754616d7a86929faca89a8e8174675d5145392c1f140900000000000714202c38444f5961636c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a62584d4135291d100000000000000000000000000407090a0b0b0b0b0b0b101d2a3643505d697683909ca9a89c8f8275695c4f4236291c0f0b0b0b0b0b0b0a09070400000000000000000000000005111d29343f485056586060605f53514b43392f23180c000000000000000013202c3946535f6c7986929facada093867a6d6a6f7c859298a2aaa1968f82796d675c544a423830261d140b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000000000000000020a1117222a323a424a505b626c717d869298a2a79f948e81746d62584e42382d22170b00000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000030f1c2936424f5c6975828f9898989898938e847d76706d6666646362636465666c71787f879298a2acaca2988f82766c6155463c32261b0f0000000a1724313d4a5764707d8a97a3b0ada1979290909090909090909090909090909090909090909090909090909090909090887b6e6255483b2f22150800101d2a3743505d6a7683909da9a49c96918b85817c76716d66615e56544e4745403936312b27221b19130f0a030000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000050f1821282f34373839393939393939393939393b4754616e7a8794a1a094877a6d6154473a39393939393939393939393837342f2821180f0500000000000000000000000000000000000c1825323f4b5865727e8b98938b7f75717071747a80858d92989fa2aaa4a3a5a8a1979083786d6053463a2f24190d01000000000000000000000000000000000006111b242d34393d3e464646464646525e6b757979797978706c615f57514b433e3d424b51575f656c71787979797873685c504646464646463e3d39342d241b110600000a1724303d4956626c7179797979797979756f65594d3b46464646464644423e39312930383d41434646464646464c58646e7479797979797979716c6256493d3024170a00000000000815212e3b4854616e7b87939faca99b8e8174675c5145382c1d14202d3946525e6876828f9caaab9f9285796d6053473b31251a0e00000000000714212d3a46535f696e72727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272726d62564a3e3125180b00000000000000000000040b10131616171717171717171d2a3643505d697683909ca9a89c8f8275695c4f4236291c17171717171717161613100b05000000000000000000000915212e3a45505a62656c6c6c6c605c554b4034291c10040000000000000013202c3946535f6c7986929facada093867a6d606a6f7d869298a3a89f948f82796d665c544a42382f261d140b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000061018202830383f44515a616b707d869299a4a69d938b7e716a5f544a3f33281d1207000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000020e1b2835414e5b6874818e9ba5a5a5a59e96918a837d79767271706f6f707275787d838b9299a2aaafa49a92867b6e61594f44342a20150a0000000a1724313d4a5764707d8a97a3b0b3a9a19e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d94887b6e6155483b2e22150800101d2a3743505d6a7683909da99c928d847f7a746f6a64605c54524c48433d38352f2a261f1b17110d080100000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000000060f171e23282a2b2d2d2d2d2d2d2d2d2d2d2e3b4754616e7a8794a1a094877a6d6154473a2e2d2d2d2d2d2d2d2d2d2d2b2a28231e170f060000000000000000000000000000000000000815222f3b4855626e7b88959b918b827e7d7e81858c92989fa2a29f9a9796989c9f9f958a7d7164554c4135291d110400000000000000000000000000000000000009121b22292d303139393939394653606c7987868686847d756e69605c554f46454f545c60696e777e8586868685786b5f5245393939393931302d29221b12090000000815212d3945505a62646c6c6c6c6c6c6c68655d534648535353535353504f4a433b313a42494e4f53535353535348535c64676c6c6c6c6c6c6c64625a5045392d2115080000000007131f2c38434e5866737f8c9aa4ada2978a7d7063554b4034281c111d2a36414c5664717e8b98a2aea2988b7e7164574d42362a1b1106000000000815222e3b4855616e7b7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7265584c3f3225190c000000000000000000070f161b20222324242424242424242a3643505d697683909ca9a89c8f8275695c4f42362924242424242424242322201c160f070000000000000000000b1724313d4a56626c71797979796d675c5145382c1f13060000000000000013202c3946535f6c7986929facada093867a6d60606a707d869299a3a69f948f82786d665c544a42382f261d140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e161e262e343f485059606b707e87939fa6a59f92867c6f665b5044392e23180c000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000010e1a2734414d5a6774808d9aa7b1b4aea8a19e94908a85827f7e7d7c7c7d7f82858a90959fa3ababa39f93887e71695f53473e3322180e040000000a1723303d4a5663707d8996a3b0b8b0aba99f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa9aaaaaaaaaa94877a6e6154473b2e21140800101d2a3743505d6a7683909da69a8d8079726d68625f5853504a46413b38322c29241d1a150f0b0600000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000000050c12171b1e1f202020202020202020212e3b4754616e7a8794a1a094877a6d6154473a2e212020202020202020201f1e1b17120c05000000000000000000000000000000000000000814212e3a47535f6a7784919d9b948f8b898a8d92989fa2a29f98928d8a898b90949c9c8f8276675d5145392c201306000000000000000000000000000000000000000911171d2124252d2d2d2d313e4b5864717e889396918a827b736d67615953525960666d737b828b929792877e7064574a3d312d2d2d2d2524211d1711090000000005111d29343e48505658606060606060605b59534d535f6060606060605d5b554d4339424c545a5c6060606060605f5353585a60606060606060585650483e34291d1105000000000915222e3b4854606a7784919eacab9e9285796d6053463a2e23180d1925303a4754606d7a86929facaa9c8f8276695e5346382d22170b000000000a1724303d4a5763707d8a8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c86796c5f5346392c2013000000000000000007111921272c2f303131313131313131313643505d697683909ca9a89c8f8275695c4f4236313131313131313131302f2c272119110700000000000000000b1825323e4b5865717e86868686796d6053473a2d20140a0000000000000013202c3946535f6c7986929facada093867a6d6058606b707d879299a3a69e948f81786d665c544a41382f261b11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000010000040607080707050100040c141c2328363e474f59616c727f8c949faaa3989083786c60554b4034281c10040000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000000d1a2633404d596673808c99a6b4aaa29f9a9f9f9c98928f8c8a8988898a8b8e92979da0a7aea8a199928b7f726c61574d42352c21100600000000091623303c4956636f7c8996a2afb0a69f9c9393939393939393939393939393939393939393939393939c9ea6b0aea398877a6d6054473a2d21140700101d2a3743505d6a7683909da99c928d847f7a746f6a64605c54524d48443d39352f2b261f1c17110d080200000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000000000001070b0f1112131313131313131314212e3b4754616e7a8794a1a094877a6d6154473a2e2114131313131313131312110f0b0701000000000000000000000000000000000000000006121e2b37424e5765727e8b95a09e9c9896979a9fa2a39f98928c85817e7d7e838c929f92867a6d6054473a2d2114070000000000000000000000000000000000000000060c1115171820202024303d4956626c717f8b919e948f868079706b615f5d606b6f797f868f949f93887e716c6155493c3023202020181715110c060000000000000c17222d363e45494b535353535353534e4d4d575e6c6c6c6c6c6c6c6a665f554a3e49545e66696c6c6c6c6c6c6c5e574d4e535353535353534b49453e362d22170c0000000004101c2834404b54626f7c8996a0aca99a8e8174665c5144382c1d120813202c3945515d6775818e9ba9ac9f93877b6e6153493f33271b0f030000000a1724303d4a5763707d8a96989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989286796c5f5346392c201300000000000000040f19232b32383b3d3e3e3e3e3e3e3e3e3e3e43505d697683909ca9a89c8f8275695c4f423e3e3e3e3e3e3e3e3e3e3d3b38332b23190f05000000000000000a1723303d4a5663707d8993988a7d7063574a3d31261b0f0300000000000013202c3946535f6c7986929facada093867a6d605359616b717e87929aa4a69e938e81786d665b534941382d2217140a01000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d201307000000000000000000000000000000000000000000000000000000020608080e070c101313151413110d0802020a1117242c353d47505a606c77828f98a2aa9f958b7e71675c5145382c1f14080000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000000c1926323f4c5965727f8c98a5aea298928d939aa0a29f9c999796959697989b9ea1a9acaba39f9691877f726d625a50453c31231a1000000000000815222f3b4855626e7b8895a9b3ab9f948f8686868686868686868686868686868686868686868686868f949eaaac9f928579675d5145392c20130600101d2a3743505d6a7683909da9a49c96918b86817c76716d66615e56544f4745403937312b28221c19130f0a040000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000000000000000020405060606060606060814212e3b4754616e7a8794a1a094877a6d6154473a2e211407060606060606060504020000000000000000000000000000000000000000000000020e1a26313c4653606c78839097a1a8a4a3a4aaa29f98928d86807a74717072767f8c94998a7d7063574a3d3024170a0000000000000000000000000000000000000000000005080a0b131315212d3945505a626d727f8b919c98928c847d756e69686d747c838c92989c918b7f726c625a5044392d201413130b0a0805000000000000000006111b242d34393d3e464646464646464246535e69767979797979797771665b4f424e5a66707679797979797976695e5346464646464646463e3d39342d241b11060000000006131f2c3845515c6674818d9aa8ada197897d7063544a4034281c0b04111d2935414b5564707d8a97a2ada49a8c7f73655b5044372b1f13070000000a1724303d4a5763707d8a969f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9286796c5f5346392c2013000000000000000b16212b353d4448494a4a4a4a4a4a4a4a4a4a4a505d697683909ca9a89c8f8275695c4f4a4a4a4a4a4a4a4a4a4a4a4948443d352b21160b000000000000000815222f3b4855626e7b88959a8d817467584e43372b1f120600000000000013202c3946535f6c7986929facada093867a6d60534f59616c717e88939fa3a59e938e81786c655b53493f3327261c130a010000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d2013070000000000000000000000000000000000000000000000000003090e1214151a1c181c1f202121201d19130c050006121a232b353e44505b656e7b86929faaa79e9184796d6053463b3025190d0100000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000000b1825313e4b5864717e8b97a4ab9f9286818890959b9fa3aba4a3a2a2a3a5a8a9a7a8a19e99928d847d716d625b51483e332a1f110800000000000714212d3a4754606d7a8797a2ada99c8f82797979797979797979797979797979797979797979797979828f9ca9ab9e9184786b554b4135291d110400101d2a3743505d6a7683909c9fa6a8a09d98928d88837e79736e6863605953514b47423c38332d2a251e1b15100c07010000000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000000000000000000000000000000000000814212e3b4754616e7a8794a1a094877a6d6154473a2e2114070000000000000000000000000000000000000000000000000000000000000000000009151f2b3844505b666f7c8591969c9f9f9e9c98928d86807a736d686463656d76828f998d8073665a4d4033271a0d00000000000000000000000000000000000000000000000000000605111d29343e48505a626d727f8c929c9f96918a827b73717a818891959f9d928c7f736d625a50483e33281c1004060000000000000000000000000009121b22292d3031393939393939393b4854616e7b86868686868683776a5d50444f5c6976828686868686867b6e6154483b39393939393931302d29221b120900000000000713202d3a4653606d7985929eabab9e9185796d6053463a2e23180c010d18242f3a4653606d7985929fabac9e9184786c6053463a2f24180d0100000a1724303d4a5763707d8a93939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939286796c5f5346392c201300000000000004101b27323d474f54565757575757575757575757575d697683909ca9a89c8f8275695c57575757575757575757575756544f473d33271c10040000000000000714202d3a4753606d7a86979e9184786a5f53473a2e21150800000000000013202c3946535f6c7986929facada093867a6d605347505a616c727f8b919ba4a59e938e81776c655b504440382e261c130a0100000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d201307000000000000000000000000000000000000000000000000060e151a1e2122272823282c2d2e2e2d2a251e160e05000811192327333f49535e69737f8c98a2ada1968b7e7164564c41362a1e110500000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000000a1724313d4a5764707d8a97a3ac9f9286797c83898e9299999c9d9e9f9f9f9e9d9b9896918c86807a706b625a51493f362c21180e0000000000000613202c3945515d677885929eabaa9d9184776c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c667784919eaaa99c8f8376695c50432f24180d0100101c2936434f5c6976828a8f949a9fa2a9a29f9a94908a84807b756f6b65605d55534d46443f3836302b271f1c18120e0903000000000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000000000000000000000000000000000000814212e3b4754616e7a8794a1a094877a6d6154473a2e21140700000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a545f6a6f7c848c909292918f8b86807b746e68605d56565b64707d8a998f8275685c4f4235291c0f020000000000000000000000000000000000000000000000000000000c17222d363f48515b636d737f8c929ca09e948f867f7d848d939aa09d938d80736d635b51483e362c22170b000000000000000000000000000000000911171d2124252d2d2d2d2d2d2e3b4854616e7b87939393939083776a5d50444f5c6976828f93939393877b6e6154483b2e2d2d2d2d2d2524211d171109000000000005111d2935414c5664707d8a97a2ada89a8d8074665c5044382b1c12070007131f2c3845515c6674818e9aa8aca096897c7063554b4035291d110400000a1724303d4a5763707d8686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686796c5f5346392c20130000000000000713202c38444f59606364646464646464646464646464697683909ca9a89c8f827569646464646464646464646464646360594f44382c20130700000000000006131f2c3945515d677885929e96887b6f6255483c3025190d01000000000013202c3946535f6c7986929facada093867a6d60534748505a626d727f8c929ca4a59d938e80776c605c524a40382e251c130a01000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d2013070000000000000000000000000000000000000000000000060f181f262b2d2e34352e34383a3b3a3936302820160c0200071117222d38414d57606d7a86929faca89c908376685e5246392d20140700000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000000a1623303d495663707c8996a3afa399867a6f787d82868a8c8f909192929291908e8b8884807b736d68605950483f372d241a0f0600000000000004111d2935414c55697683909ca9ab9f928578695f606060606060606060606060606060606060606d7986929faca79a8d8174675a4e4134271b0700000713202d3a4653606d787d82888d92979da0a7a69f9c97918c86817c77726d67625f5753504a46413a37322c29231d1a140f0b0600000000000000000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000000000000000000000000000000000000814212e3b4754616e7a8794a1a094877a6d6154473a2e21140700000000000000000000000000000000000000000000000000000000000000000000000b17222d38424e585f6a6f797f83858684827f7a736e69615e56524c4a54606d7987868683776a5e5144372b1e110400000000000000000000000000000000000000000000000000000006101b242d363f49515b636d73808d929da49e98928c8a91969fa49e938e81746e645b51493f362d241a10050000000000000000000000000000000000060c111517182020202020212e3b4854616e7b87949f9f9d9083776a5d50444f5c6976828f9c9f9f94877b6e6154483b2e2120202020181715110c060000000000000713202d3946525e6875828f9ba9ada196897c6f63544a3f34281c0b000004101c2834404b5463707c8996a1ada89b8e8174675d5145392c20140900000916232f3c4855616b707979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979746a5e5145382b1f120000000000000916222f3b4854606b7071717171717171717171717171717683909ca9a89c8f82757171717171717171717171717171706b6054483b2f22160900000000000004101d2935404b556a7783909d998c7f7266564c41362a1d1105000000000013202c3946535f6c7986929facada093867a6d6053473e48515b626d737f8c929ca4a59d938d80746e645c524a40372e251c1309010000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d20130700000000000000000000000000000000000000000000030e18212a31373a3b414243404546484746413a32281e1308000006111b262f3b45525d6875828e9ba8ac9f93877a6e6154473b2e21140800000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000000916222f3c4955626f7c8895a2b5ab94877b6e6c70757a7d808284848586858583817f7c78736e68605d564f473f362d251b120800000000000000010d19242f414d5a6774808d9aabaea298887b6e61555353535353535353535353535353535355626f7c8899a3afa9988b7e7265584b3f3225180c000006121f2c3844505c666d71767b80858b90959b9fa3a9a19e99928e89837e79746e6964605b54524c47433d38342f2a251f1b17110d080100000000000000000000000000000713202d3a4653606d798693a0aca69a8d8073675a4d4034271a0700000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000000000000000000000000000000000000814212e3b4754616e7a8794a1a094877a6d6154473a2e211407000000000000000000000000000000000000000000000000000000000000000000000006111c262f3c464e585f676d727678797876726d68615e56524c454145515d67757979797771675b4f43362a1d10040000000000000000000000000000000000000000000000000000000009121b242d373f49525b636e74808d929da5a39f99979ea1a69e948e81786c605c524940372d241b1108000000000000000000000000000000000000000005080a0b1313131315212e3b4854616e7b8794a1aa9d9083776a5d50444f5c6976828f9ca9a194877b6e6154483b2e21151313130b0a080500000000000000000714212e3a4754616d7a86929facab9e9184786c605346392e23170b0000000c18232e394653606c7884919eabac9f92857a6d6053473b31261a0e02000714202c38444f5961636c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a62584d4135291d100000000000000a1623303d495663707d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7e83919daaaa9d90837e7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d706356493d3023160a000000000000000c18242f424f5c6875828f9b9c908376685e5246392d201307000000000013202c3946535f6c7986929facada093867a6d6053473a3f49515b636d73808d929da5a59d928d80746e635c524940372e251b13090000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d2013070000000000000000000000000000000000000000000009151f2a333c4247484d4f504b51535454524c443a3025190d0100000a141d2935414c5664717e8b97a4afa49a8a7e7164574b3e3124180b00000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000000815212e3b4854616e7b8794abb5a295887b6f6263686d7073767778797978787674726f6a66615e56524c433d352d241b1309000000000000000000081724313e4a5764717d8a99a3afaa988b7e7165574d42464646464646464646464646424d5765727f8c98abada297887b6f6255483c2f221509000003101c28343f4a545c60646a6e74797e83898e92989ea0a8a39f9b95908b85807b76706c66615e56544e4745403936312b27221b19130c04000000000000000000000000000713202d3a4653606d798693a0aca79a8e8174675b4e412e23180c00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000000000000000000000000000000000000814212e3b4754616e7a8794a1a094877a6d6154473a2e2114070000000000000000000000000000000000000000000000000000000000000000000000000a141d2a343c464e555d6065696c6c6b6965615e56524d46413b35414b555d6b6c6c6c6a675f564b3f33271b0e02000000000000000000000000000000000000000000000000000000000009121b252d374049525c646e74808d939da59f9f9f9fa79f948f82786d665b504a40372e251b1209000000000000000000000000000000000000000000000000000606060815212e3b4854616e7b8794a1a99d9083776a5d50444f5c6976828f9ca9a194877b6e6154483b2e2115080606000000000000000000000006121e2b37424d5765727f8b99a3aea89a8d8073655b5044372b1c110600000007121f2b3844505b6673808d9aa8aea2988b7e7164574d42362a1e12050004101c28333e474f5557606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060605f5e5850473c3125190d000000000003101d2a3643505d6976838a8a8a8a8a8a8a8a8a8a8a8a8a8a8a9195a0acab9f95908a8a8a8a8a8a8a8a8a8a8a8a8a8a8a83776a5d5044372a1d1104000000000000071a2734414d5a6774808d9a9f93867a6d6154473a2e23180c000000000013202c3946535f6c7986929facada093867a6d6053473a373f49525b636e74808d939da5a49d928d80736e635b51493f372d251b120900000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaca09386796d6053463a2d201307000000000000000000000000000000000000000000020e1a26313c454d53555a5b5c555c6061615e564c41362a1d11050000020b19242f3c4955626f7c8895a2b6ac998d8073665a4d4033271a0d00000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000000714212d3a4754606d7a8799a4afa296897c6f63565d606366696a6b6c6c6c6b6a6865625f5854524d45413a312b231b1209010000000000000000000714212e3a4754616d7a86929faca89b8e8275695e53463d313939393939393939303946525e6976828f9ca9ab9e9285786c605346392d2013060000000c17232e38424a5053575f62676d71777c81868c91969c9fa4a7a09d97928d87827d78726d6862605853514b46423b37332d29241e160d0a0100000000000000000000000713202d3a4653606d798693a0aca89b8f827568544b4034281c1004000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000000000000000000000000000000000000814212e3b4754616e7a87949f9f94877a6d6154473a2e211407000000000000000000000000000000000000000000000000000000000000000000000000020b18222a343c434b5154595d5f5f5e5c5854524c46423b36302f3a434b515e6060605e5b564d44392e22170b0000000000000000000000000000000000000000000000000000000000000009131c252e37404a525c606c77818e93939393939393959082796d665c544a3f382e251c130900000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b87949c9c9c9083776a5d50444f5c6976828f9c9c9c94877b6e6154483b2e211508000000000000000000000000000814212e3a47535f697683909d9f9fa096897c6f6253493f33271b0a00000000030f1c28333f4a54626f7c8895a09faa9c908376695f53463a2d21140700000b16212c353e44484a5353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353514d473e352a1f1409000000000003101d2a3643505d6976839097979797979797979797979797979da0a8b1b1a79f9d97979797979797979797979797979083776a5d5044372a1d11040000000000000c1926323f4c5965727f8c98a4998b7e7164544a4034281c10040000000013202c3946535f6c7986929facada093867a6d6053473a2d374049525c606c77818e939ea6a49c928c80736d635b51493f372d241b1209000000000000000000000000000000000000000000000000010101010101010101010613202c3946535f6c7986929facaca09386796d6053463a2d20130701010101010101010101000000000000000000000006121e2b37424d575f616768696a676d6e6d685e5246392d2013080000000814212e3b4754616e7a8794a1ada89b8e8175685b4e4235281b0f02000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0000000613202d394653606c7986939faca3968a7d706357525457595c5d5e5f5f5f5e5d5b5855534e4746413b352f281f19110900000000000000000000000713202d3946525d6876828f9ca9ac9f92867b6e61584e433b322c292424292c3139424d57616e7b86929faca89b8e8174655b5044372b1f120500000006111c2630383f44464e53555d60656a6f747a7f848a8f93999ea1a9a29f9a938f8a847f7a746f6a64605c55534d46443f38352f28201c140a00000000000000000000000713202d3a4653606d798693a0aca99d908376665c5145382c1f130700091623303c4956636f7c8996a2afa4988b7e7165584b3e3225180b0000000000000000000000000000000000000814212e3b4754616e7a8792929292877a6d6154473a2e21140700000000000000000000000000000000000000000000000000000000000000000000000000061018222a313a4145474c50525352504c4746413a36302a2528313a414547535353514f4b443b32281d110600000000000000000000000000000000000000000000000000000000000000010a131c252e384044505b656c7881868686868686868683796d675d544a42382d261c130a0100000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b878f8f8f8f8f83776a5d50444f5c6976828f8f8f8f8f877b6e6154483b2e211508000000000000000000000000000815222f3b4855626e7b8895939393939184776a605441382d22170b00000000000b17222d3847545f6a7784919393939394887b6e6155483b2e221508000005101a232c33383c3d464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464645413c352c23190e03000000000003101d2a3643505d697683909c9f9f9f9f9f9f9f9f9f9f9f9f9fa9abb0b8b8b0aaa89f9f9f9f9f9f9f9f9f9f9f9f9f9d9083776a5d5044372a1d11040000000000000b1724313e4a5764717d8a97ab9b8e8275665c5144382c1f12060000000013202c3946535f6c7986929facada093867a6d6053473a2d2e374044505b656d78818e949ea6a49c928c7f736d635b51493f362d241b120900000000000000000000000000000000000000010406070d0d0d0d0d0d0d0d0d0d0d13202c3946535f6c7986929facaca09386796d6053463a2d20130d0d0d0d0d0d0d0d0d0d0d07060400000000000000000814212d3a47535f696e7475767778797b7a6d6154473a2f24190d0100000714202d3a4753606d7a8693a0ada89c8f8275695c4f4236291c0f03000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b00000005121f2b3744505b657885929faba4978b7e7164584b474a4d4f515152535252504e4c4947433c39363029241e160d0700000000000000000000000005111d2935414c5664717e8b96a1ada3998d80746a60564d443e39352f2f35383c434b545e6973808d99a3aca096897d706353493f33271b0f03000000000a151e262e34383c42474b5153586062686d72787d82878d92979c9fa6a49f9c96918c86817c76716d67615e5753504945413a322e261c1207000000000000000000000713202d3a4653606d798693a0acac9f9286796d6053463a2e23180d060a1723303d4a5663707d8996a3b0a4978b7e7164584b3e3125180b0000000000000000000000000000000000000814212e3b4754616e7a8786868686877a6d6154473a2e21140700000000000000000000000000000000000000000000000000000000000000000000000000000610181f282f35393a3f43454645433f3a3936302a251f191f282f35393a46464644433f39322920160b000000000000000000000000000000000000000000000000000000000000000000010a131c2627333f49535b666c757979797979797979776d675d554b42392f261c140a010000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a8283838383828074675a4e414d5a6673808283838383827a6e6154473b2e211408000000000000000000000000000d1a2733404d5a66738086868686868686807366584e432f261b1106000000000006111c2b37434e5866737f86868686868686807366594d4033261a0d00000008111a21282c2f3039393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393835312a231a110700000000000003101d2a3643505d6976839093939393939393939393939393939c9fa6b0b0a69e9c93939393939393939393939393939083776a5d5044372a1d11040000000000000916232f3c4956626f7c8995ab9f9285796d6053463a2d2013090000000013202c3946535f6c7986929facada093867a6d6053473a2d2027333f49535c666d78828f949fa6a49c918c7f726d625b51483f362d241b12080000000000000000000000000000000001070d1113141a1a1a1a1a1a1a1a1a1a1a1a202c3946535f6c7986929facaca09386796d6053463a2d201a1a1a1a1a1a1a1a1a1a1a1a1313100c070000000000000815222e3b4855616e7b80828384858687807367554c4135291d120c070a0a15212e3b4854616e7b8794a1aea89c8f8275695c4f4236291c0f03000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000000030f1b27333f495e6b7884919eaba5988b7f7265584c3f3d404344454646454543413f3c3b37322d2a251f19130c0400000000000000000000000000010d1924303a4653606d7984919ea7ab9f92877c6f685e564f47454141414045474e555c666e7b86929faba89e9184786c605346392d22170b0000000000030c151c23282c3137394045474e54565e61666c70757b80858a90949a9fa2a8a19e98928e89837e79736e6963605b53524c4440382e24190e020000000000000000000713202d3a4653606d798693a0acaea398897c6f62544b4034281f1612101824313e4b5764717e8a97a4b1a4978a7e7164574b3e3124180b0000000000000000000000000000000000000714202d3946525e687579797979797975685e5246392d201307000000000000000000000000000000000000000000000000000000000000000000000000000000060d161d24292c2d323639393836322e2d2a251e19140d161d24292c2d3939393736332e2820170e0400000000000000000000000000000000000000000000000000000000000000000000010a1417222d38414a545b60686c6c6c6c6c6c6c6c6a605d554c433930271d140a02000000000000000000000000000000000000000000000000000000000000000714202d3946525e686e767676767676746e64584c404b58636e737676767676766e685e5246392d201407000000000000000000000000000c1926323f4b57636e7379797979797979736e6358463d321d140a000000000000000f1b26323c4b57636d7379797979797979736e63574b3f3226190c000000000810161c2023242d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2b29251f1911080000000000000003101d2a3643505d69768286868686868686868686868686868690949fabaa9e948f86868686868686868686868686868683776a5d5044372a1d11040000000000000814212e3b4754616e7a8799a3a297897c706356493d31261a0e0200000013202c3946535f6c7986929facada093867a6d6053473a2d20222d38414a545c666d79828f949fa7a49c918c7f726d625b51483f362c241a12080000000000000000000000000000040c13181d2021272727272727272727272727272c3946535f6c7986929facaca09386796d6053463a2d27272727272727272727272727201f1c18120b03000000000915222f3c4855626f7b888e8f9192978f8276675d5145392f241d181616141b222f3c4955626f7c8895a2afa89b8e8275685b4f4235281c0f02000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000000000b17222d44505d6a7783909daaa6998c7f7366594c403333363738393939383735322f2e2b26201e19140d080b09050100000000000000000000000008131f2c3845515c67727f8b95a0aba39991847a6e68615954514c4e4e4b5153575f676d78839098a2aca0968b7f72665b5044382b1b1106000000000000030a11171c1f262b2f35393d43474c52545b6063696e73797e83888e92989da0a7a39f9b95908b85807b75706c65605d56524a40352a1f13070000000000000000000713202d3a4653606d798693a0acb4aa998d8073665c51453b3128201f1c1e26323f4c5965727f8c98a5b0a3968a7d7063574a3d3024170a00000000000000000000000000000000000005111e2a36414c565e616c6c6c6c6c6c615e564c4135291d110500000000000000000000000000000000000000000000000000000000000000000000000000000000040c13181d2021262a2c2c2b292521201d19130e09040c13181d20212d2d2d2b2a27221d160e050000000000000000000000000000000000000000000000000000000000000000000000000006111b262f38424a50535b60606060606060605d54514c433a31271e150b02000000000000000000000000000000000000000000000000000000000000000005111e2a36414c565e6169696969696967645c52473c47525c6366696969696969615e564c41362a1e1105000000000000000000000000000a17232f3b47525c63666c6c6c6c6c6c6c66635c5247342b200b02000000000000000a15202f3b46515b63666c6c6c6c6c6c6c66635c52473b2f23170a0000000000050b1014161720202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201f1d19140e070000000000000000030f1c2935424e5a66707679797979797979797979797979797982909ca9a89c8f827979797979797979797979797979797771665b4f4236291d10030000000000000613202d394653606c7986929fa99a8d807367574d42372b1e120600000013202c3946535f6c7986929facada093867a6d6053473a2d201b262f38424a545c676d798290959fa7a39b918b7f726d625a50483e362c241a1108000000000000000000000000040d161d24292c2d34343434343434343434343434343946535f6c7986929facaca09386796d6053463a34343434343434343434343434342d2c28231d150c030000000713202d3a4653606d7985929c9d9f9f92867a6d60554b40352f2923232324262d36424d5765717e8b98a4b1a69a8d8073675a4d4034271a0d01000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b00000000061d293643505c6976838f9ca9a69a8d8073675a4d403427292a2b2c2c2c2b2a282522211f1b1919191919181715110c06000000000000000000000004101c2834404b55606d78839099a3aba09690837a706b64605d555b5b555d60636a6e79818e959faaa49a9184796d60544a3f33281c0a000000000000000000060c10151a1d24292c32383a41464a5053575e61666d71767c81868b91959b9fa3a79f9d97928d87827d78726d68635c52473b2f23170a0000000000000000000713202d3a4653606d798693a0acb8ab9e9285796d60574d433a322d2c282a2d36424d576774818e9aa7b3a995897c6f6256493c2f231609000000000000000000000000000000000000010d1925303b444c52545f5f5f5f5f5f54524c443a3025190d01000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d111314191d1f201f1d191413110d0802000001070d1113142020201e1d1b17110b040000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262f383f44464e5353535353535353504745413a31281f150c03000000000000000000000000000000000000000000000000000000000000000000010d1925303b444c52545c5c5c5c5c5c5a58524a4136404a52585a5c5c5c5c5c5c54524c443b3025190d010000000000000000000000000007131f2a35404a52575a606060606060605a58524a403522190f000000000000000004121e2a354049515759606060606060605957524a40352a1f1307000000000000000407090a131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131312100d0903000000000000000000010d1a26323e4a545e66696c6c6c6c6c6c6c6c6c6c6c6c6c6c76838f9ca9a89c8f82756c6c6c6c6c6c6c6c6c6c6c6c6c6c6a665f554a3e32261a0e0100000000000005121f2b3744505b657784919eaa9d918477695f53473a2d21140800000013202c3946535f6c7986929facada093867a6d6053473a2d20141d263039424b555d676d79839095a0a8a39f93887f726c625a50483e362c231a110800000000000000000000010c161f282f35393a40404040404040404040404040404046535f6c7986929facaca09386796d6053464040404040404040404040404040403a38342e271e150b00000006121f2c3844515c6676828f9caaaba2988b7e72675d51454039342f3030312f383f46525e6975818e9ba8b3a9988b7e7265584b3f3225180c00000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000000020f1c2935424f5c6875828f9ba8a79a8e8174675b4e413428252525252525252525252525252525252525252524211d17110900000000000000000000000c18232e3944515c666f7c87929fa4a8a09590847d76716d6769676869676d70757b838e939ea7a59f93887d70665c5142382d22170b000000000000000000000003090e12181d1f272b3036383f44464d53545c60646a6f747a7f84898e92999ea1a8a19e99938f89847f7a736e63574b3f3226190c0000000000000000000713202d3a4653606d798693a0acb9ada1978b7e71695e554c443e3a3834363a3d46535e697784909daaada297877a6e6154473b2e2114080000000000000000000000000000000000000008141e29323b4146475353535353534746413a32281e13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010406070c10121312100c070705010000000000000104060713131311100e0b060000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141d262d333839424646464646464646443a39352f281f160d03000000000000000000000000000000000000000000000000000000000000000000000008141e29323b4146475050505050504e4c4741382f3840474b4d5050505050504746413b32291e14080000000000000000000000000000020e19242e3840474b4d535353535353534d4b4740382e2410070000000000000000020d19232e3740464b4c535353535353534d4b4740372e24190e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16222d38434c545a5d606060606060606060606060606976838f9ca9a89c8f827569606060606060606060606060605d5b554d43392d22160a00000000000000030f1b27333f49536976838f9ca9a096887b6e6155483b2f24190d01000013202c3946535f6c7986929facada093867a6d6053473a2d2014141e273039434b555d676d7a839096a0a8a49a93887e716c615a50483e352c231a110800000000000000000007131d28313a4145474d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d535f6c7986929facaca09386796d60534d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4645403930271d1207000004101c2834404a5465727e8b98a2aeaa9e9184796d605b514b45403e3d3d3d3f4149505b616e7b86929facada197887c6f6255493c2f22160900000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000000020e1b2835414e5b6874818e9ba7a89b8f8275685c4f4235323232323232323232323232323232323232323232312e29221b12090000000000000000000007121d2834404a54606a727f8c929ca4a7a096918a827d7a7775747475767a7d818790959ea5a59e938d80736b60544b402f261c11060000000000000000000000000001070c10161b1e252a2d33383b42464b5153585f62676d72777c82868c91969c9fa4a49f9c96918b868073665a4d4033271a0d0000000000000000000713202d3a4653606d798693a0acb1a7a09d92857b6e675d56504846443f4246474f58616e7b8795a0acab9f928578685e5246392d20140700000000000000000000000000000000000000020d1720293036393b4646464646463a3935302820160c020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141c22282b2d353939393939393939372d2c29241e160d04000000000000000000000000000000000000000000000000000000000000000000000000020d1720293036393b43434343434341403c362f262e353b3f404343434343433b3936302920170d0200000000000000000000000000000007121c262e353b3f4046464646464646403f3b352e261c120000000000000000000007121c252e353b3e4046464646464646403f3b352e251c12070000000000000000000000000000000000000000000000000000000000000000000004090d0f101313131313130e0d0b0803000000000000000000000000000000000000000000000000000000030f1b26323c464e53555656565656565656565656565c6976828f9ca9a89c8f8275695c56565656565656565656565655544e463c32271b0f0300000000000000000b17222d414e5b6874818e9ba7a8988c7f7265554c4135291d1104000013202c3946535f6c7986929facada093867a6d6053473a2d20140c151e273039434c555d686e7a849196a1a9a49a93877e716c615a50473e352c231a110700000000000000010d18242f3a434b51545a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5f6c7986929facaca09386796d605a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a53514b42392e23180c0000000c18232e3a4754616d7a86929fa9aca1968d80746d605d55514b4a49494a4b4f535b606d74818e98a3aeab9e9285796d6053463a2d20130700000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000000010d1a2734404d5a6773808d9aa6a99c8f8376695c50433f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3e3d3a342d241b1106000000000000000000000c18232e39424e58626d73808c929ea1a8a19e948f8a8683828181828386898e93999fa7a39f938f81786d60594f42392e1d140a0000000000000000000000000000000000040a0f13191c22282b3136394045464e53555d60656b70757b7f848a8f939a9fa2a8a09e989083776a5d5144372a1e110000000000000000000713202d3a4653606d798693a0acaca09590959082796d68615a5553504a4d525459606a74808d9aa7b1a99c8f827669564d41362a1e11050000000000000000000000000000000000000000050e171e252a2d2e3939393939392e2d29251e160e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030607090b0d0f1111121313121211100f0d0a080705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171c1f20282d2d2d2d2d2d2d2d2a21201d19130c040000000000000000000000000000000000000000000000000000000000000000000000000000050e171e252a2d2e3636363636363433302b241d242a2f32333636363636362e2d2a251e170e0500000000000000000000000000000000000a141c242a2f32333939393939393933322f2a241c140a00000000000000000000000a131c232a2f32333939393939393933322f2a241c130a000000000000000000000000000000000000000000000000000000000000000000020a1015191b1c2020202020201b1a17140e08010000000000000000000000000000000000000000000000000006131f2b37434e585f62636363636363636363636363636976828f9ca9a89c8f827569636363636363636363636363636260584e43372b1f13060000000000000000061a2633404d596673808c99a6a99c8f8276675d5145392c201306000013202c3946535f6c7986929facada093867a6d6053473a2d2014070c151e27313a434c565e686e7b849196a1a9a49992877e716c61594f473e352b23190f0400000000000004111d2935414b555d606767676767676767676767676767676767676c7986929facaca09386796d676767676767676767676767676767676767605c544b4034281c100400000713202d3946525e6874808d97a2ada89d928c7f746d67605c5557565657585960656c727f8b939daaafa4998d8074665c5044382b1f120600000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000000000d192633404c5966737f8c99a6aa9d9083776a5d504c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4a453f362d22170c0100000000000000000007121c27303d46515b646e73808a92979fa3a69f9c9992908f8e8e8f9092989b9fa4a69f99928c81786d665c50473d30271d0b020000000000000000000000000000000000000002080d11171c1f252a2e34383c43474c5154596063686e73797d82878d92979da0a79d9084776a5d5144372a1e110000000000000000000713202d3a4653606d798693a0acaa9d9084909490827a716c6562605c54565e61646b707c87929facb0a6998c7f7266594c3f3025190e02000000000000000000000000000000000000000000050d14191e20212c2c2c2c2c2c21201d19130c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104060b10121315171a1c1d1e1f1f201f1f1e1d1b19171514120e09060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f12131b20202020202020201d1413110d080100000000000000000000000000000000000000000000000000000000000000000000000000000000050d14191e20212929292929292726241f1a13191f23262729292929292921201e19140d05000000000000000000000000000000000000020a12191f2326272d2d2d2d2d2d2d2726231f19120a020000000000000000000000010a12191e2325262d2d2d2d2d2d2d2626231f19120a010000000000000000000000000000000000000000000000000000000000000000040c141b212528292d2d2d2d2d2d2726241f1a130b020000000000000000000000000000000000000000000000000815212e3b47535f6a6f707070707070707070707070707075828f9ca8a89c8f827570707070707070707070707070706f6a6054473b2e22150800000000000000000b1825323e4b5865717e8b98a4ac9f92867a6d6054473a2d22170b000013202c3946535f6c7986929facada093867a6d6053473a2d201407030c151f28313a444c565e696e7b849197a1a9a39992877e706c61594f473d352b21160b0000000000000613202c3945515d676d737373737373737373737373737373737373737986929facaca0938678737373737373737373737373737373737373736d665c5145382c1f1306000005111d2935414c56616d7a85929fa5aea49b918c8079716d67656463636465686b70787f87929fa5afa89f93877b6e61544a3f34281c100300000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000000000c1925323f4c5865727f8b98a5aa9e9184776b5e5858585858585858585858585858585858585858585858585650483f34291d1105000000000000000000000b151e2b343f49525c646e737e858e92999ea1a8a39f9d9c9a9b9c9d9fa3a9a29f9b948f877f776d665c544a3f352c1e150b0000000000000000000000000000000000000000000000060b0f141a1d23282c32373a4145474f54565e61666d70767b80858b90959b9d9084776a5d5144372a1e110000000000000000000713202d3a4653606d798693a0aca396897d85929490847d76726e6d666b6b696e71757d859299a3afab9f94887b6e6155483b2e221508000000000000000000000000000000000000000000000002080d1114142020202020201413110d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d1113171c1f20222426292a2b2b2c2c2c2b2b2a28262422211e1a1312100c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306060f131313131313131311070604010000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d1114141d1d1d1d1d1d1b1a17140e080e1317191a1d1d1d1d1d1d1414110d0802000000000000000000000000000000000000000000070e1317191a202020202020201a1917130e08000000000000000000000000000000070d12161919202020202020201a1917130e07000000000000000000000000000000000000000000000000000000000000000000020c161e262c3135363939393939393433302b241d140b0100000000000000000000000000000000000000000000000916222f3c4955626f7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7d82909ca9a99d90837d7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c6f6255493c2f22160900000000000000000a1723303d4a5663707d8996a3aea3998a7d7164544a3f33281c0f030013202c3946535f6c7986929facaca093867a6d6053473a2d20140700030d161f28323b444d575f696e7c859297a2aaa39992877e706b61594f473d32271b100400000000000714212d3a4754606d79808080808080808080808080808080808080808087929facb3a69a8d8080808080808080808080808080808080808080796d6053463a2d2013070000010d1925303a46525e68717e8b939da5ada39b928d847e797572717070707274777d828c9299a3afaaa1968e8174695f5342382e23170b0000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000000000b1825313e4b5864717e8b97a4ab9f9285786565656565656565656565656565656565656565656565656565625a50453a2e21150900000000000000000000030c19222d37404a525c636c717a81868d9196989b9c9e9f9f9f9f9e9d9b9997928e89827c736c655c544b42382e231a0c030000000000000000000000000000000000000000000000000003090e12181c1f262b2f35393d44484d52545c6064696e74797e83898e929084776a5d5144372a1e110000000000000000000714202d3a4753606d7a8693a0ada194887b7e8b9296918a837f7b79787778797a7d82889297a1abafa4998f8276695f53473a2d211408000000000000000000000000000000000000000000000000000105070813131313131307070501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e13181d2023282b2d2f3133353737383939393837373533312e2d2a26201f1c17110d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010507081010101010100e0d0b08030002070a0c0d1010101010100807050100000000000000000000000000000000000000000000000002070a0c0d131313131313130d0c0a0702000000000000000000000000000000000002060a0c0d131313131313130d0c0a0702000000000000000000000000000000000000000000000000000000000000000000000a141e2830383d414346464646464641403c362f261d13080000000000000000000000000000000000000000000003101d2a3643505d69768289898989898989898989898989898990949fabab9f959089898989898989898989898989898983776a5d5044372a1d1104000000000000000815222f3b4855626e7b8895a99f9f9b8e8174665b5044382b1f12060013202c3946535f6c7986929f9f9f9f93867a6d6053473a2d2014070000040d162029323b454d575f6a6f7c859298a29fa39992877d706b60594f44382c20130700000000000814212e3b4754616e7a878d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d9299a3afb5a89d928d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d867a6d6053473a2d20140700000008131e2a36414c56626c74818e939da4aea49d96918b85827f7d7c7c7d7e8184898f949fa3abaaa29891847a6d60574d4230261c11060000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000000000a1724313d4a5764707d8a97a3ac9f93867872727272727272727272727272727272727272727272727272716c62564a3d3124170b000000000000000000000007101b252e38404a525a61686d747b8084888b8e90919292929291908e8c8985817c766f6a605b534b423930261c11080000000000000000000000000000000000000000000000000000000000070c10151b1e24292c32383b41464a5053575f62676d71777c81868c83776a5d5144372a1e110000000000000000000714212d3a4754606d7a8793a0ada194877b74818e949e95908c888685848585878a8f939aa1a9afa59f93877c6f62574d42372b1e1206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f151a1d24292c2e34383a3c3e404244444546464545444342403d3b3a36312d2c28231c19130d08020000000000000000000000000000000000000000000000000000000000000000000000000000000000040607090c0e1011121313131211100f0d0b08070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101b26303a42494e4f5353535353534e4c4741382f241a0e0300000000000000000000000000000000000000000003101d2a3643505d6976839096969696969696969696969696969c9fa6b0b1a79f9d96969696969696969696969696969083776a5d5044372a1d1104000000000000000714202d3a4753606d7a8697939393939285796c605346392d2013060013202c3946535f6c7986929393939393867a6d6053473a2d201407000000040e172029333b454e585f6a6f7c8692989393939992867d706b6054483b2f22160900000000000814212e3b4754616e7a87949a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9fa3abb5b9aea49d9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a93867a6d6053473a2d201407000000020d1925303a44505a606d78818d929fa2aaa8a09e97928f8c8a89898a8b8e91969c9fa6ada7a09892867c6f685d52453c311e140a000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b00000000091623303c4956636f7c8996a2afa4998c7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7165584b3e3225180b00000000000000000000000009131c262e38404850565e61696e73787c7e818384858686858583817f7c79746f6a625f585049413930271e150a0000000000000000000000000000000000000000000000000000000000000000040a0f13191d20272c3036383f44464d53555d60656a6f747a7f8175685b4f4235281c0f0000000000000000000714212e3a4754616d7a8794a0b4ab94877a6d78828f939f9d989a939291919298979b9fa4acaba39f938d80736a6054453c31261a0e020000000000000004080c0e0f0c07070501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c151b20262b2f35393a3f4446484a4d4f5051525253525251504e4c4a4846423d3a38342e29251e19140d050000000000000000000000000000000000000000000000000000000000000000000000000004070c10121316191b1d1e1f1f201f1f1e1d1b19171414110e0806030000000000000000000000000000000000000000000000000004090e1112131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313130b0a08040000000000000000000000000004080a0b1313131313131313131313131313131311100e0b06000000000000000000000005090d0f101313100f0d090500000000000000000000000000000000000000000000000000000000000000000000000000000915212c38424c545a5c6060606060605a58524a41362b1f140800000000000000000000000000000000000000000003101d2a3643505d697683909c9f9f9f9f9f9f9f9f9f9fa3a3a3a9abb0b9b9b1aba9a3a3a39f9f9f9f9f9f9f9f9f9f9d9083776a5d5044372a1d11040000000000000006131f2c3945515d677885868686868686867c6f6256493c2f2316090013202c3946535f6c798786868686868686796d6053473a2d20140700000000050e172129333c464e58606a707d8686868686868686867c706356493d3023160a00000000000814212e3b4754616e7a8794a1a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6acafb5acacacaea8a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a093867a6d6053473a2d2014070000000008131e29323f44505c666d78808b92989fa3aba9a29e9b9897969697989b9ea0a8aca9a19e9590867d6f6a60564c41332a1f0c02000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000000000915222f3c4855626f7b8895a2b5ab9b918c8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b85786b5f5245382c1f12050000000000000000000000010a141c262e363e444c52575e61666a6f7274767878797978787675726f6d66626058534e443f382f271e150c030000000000000000000000000000000000000000000000000000000000000000000001080d11161b1f252a2e34383c42474b5153586062686d72756f65594d4134281b0e0000000000000000000814212e3b4754616e7a87949f9fa39986796d6d79818c92989fa29f9e9e9e9fa2aaa8a9aaa29f99928b81786d60584e43332a1f150900000000000002090f14181b1b191413110d08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b121820262b31373a4145474a50535557595c5d5e5e5f5f5f5e5e5d5b595755534d4946443f3835302a251e170e0802000000000000000000000000000000000000000000000000000000000000000001070c1013181c1f20232527292b2b2c2d2c2c2b2a28262421201e1915120f0a0300000000000000000000000000000000000000000000080f151a1d1f20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020171714110c05000000000000000000050c11141717202020202020202020202020202020201e1d1b17120b0400000000000000020a1015191c1c20201c1c1915100a020000000000000000000000000000000000000000000000000000000000000000000000000d1925313d49545e65696c6c6c6c6c6c67645c52473c3024170b00000000000000000000000000000000000000000003101d2a3643505d6976839093939393939393939393939b9ea5afb7b7b6b7b9b8afa59d9b93939393939393939393939083776a5d5044372a1d11040000000000000004101d2935404b55687378797979797979796f6a6054483b2e22150900121f2c3845525e6a75797979797979797976675c5145382c1f13060000000000050f18212a333c464e58606b70797979797979797979706b6054483b2f22160900000000000814212e3b4754616e7a87949f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f93867a6d6053473a2d20140700000000020d172028343f4a545c666d747e858e92999ea1a8a7a8a5a4a3a3a3a5a7a8aca49f9d97928c837b6f6b60584e443a3021180e00000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b000000000815212e3b4854616e7b8794abb5ada39b989898989898989898989898989898989898989898989898989285786b5f5245382c1f1205000000000000000000000000020a131c242c323a41464d5254585f626568696b6c6c6c6c6b6a686663605c54544e47433c332d261d150c030000000000000000000000000000000000000000000000000000000000000000000000000001040b1014191c23282c3137394045474e54565e616568655d53483d3125190c0000000000000000000815222e3b4855616e7b889393939392867966676d787f868d92989a9c9e9e9f9f9e9d9c9998928d877f746d665c50463d3221180e030000000000030b131a202527282621201d19130f0a040100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c151d232831373c42474b5154545c60626466686a6a6b6c6c6c6b6a6a686664615f575653504a46413a3630292019130d05000000000000000000000000000000000000000000000000000000000003090e12181d1f23282c2d3032343638383939393838373533312e2d2a25211f1b150f0b060000000000000000000000000000000000000009121920262a2c2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2423211c171008000000000000000810171c2123242d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b2a27231d160e050000000000040c141b212528292d2d292825211b140c0400000000000000000000000000000000000000000000000000000000000000000000020f1b2835414e5a657076797979797979746e64584c4033261a0d00000000000000000000000000000000000000000003101d2a3643505d6976828686868686868686868686868e939ea9b0aba9abacb2a99d938e86868686868686868686868683776a5d5044372a1d110400000000000000000c18242f39435761686b6c6c6c6c6c6c6c6260584e43382c1f130700111d2a36424e59636a6c6c6c6c6c6c6c6c6c5c554b4034291c1004000000000000060f18212a343d464f5960636c6c6c6c6c6c6c6c6c6360594f44382c20130700000000000814212e3b4754616e7a8793939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393867a6d6053473a2d2014070000000000050e17232e38424a545c606c717a81868d9196989a9c9e9f9f9f9f9e9d9c999a93908b857f786e6960594f463c32281e0f0600000000000b1825313e4b5864717e8b97a4aca89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7aca4978b7e7164584b3e3125180b000000000714212d3a4754606d7a8799a3afacada7a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a59e9285786b5f5245382c1f120500000000000000000000000000010a121a202830363b4246484e5355585b5d5e5f5f5f5f5e5d5b595653514a47433d373127221b140b03000000000000000000000000000000000000000000000000000000000000000000000000000000000002080e11171c1f262b2f35393d43474c5254595b59534b42372c2015090000000000000000000916232f3c4956626f7c86868686868685786b5c666c727b80858a8d8f9192929291908f8c8a86807b726d605c544a3f342b200f060000000000020b151d252c313435332e2d2a251e1b16110d0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810191e272e343c43474d53555d6064666d6f7173757777787979787877767573706e696763605c54524c46413b322a251e170e06000000000000000000000000000000000000000000000000000001070c141a1d24292c2e34383a3c3f4143444546464645444342403e3b3936302e2b261f1c17110a020000000000000000000000000000000008121b242b3136383939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393931302d28221a1208000000000008121a22282d3031393939393939393939393939393939393736332e2820170e04000000020c161e262c32353639393635322c261e160c0200000000000000000000000000000000000000000000000000000000000000000003101c2936434f5c6976828686868686868074675a4e4134271b0e010000000000000000000000000000000000000000030f1c2935424e5a667076797979797979797979797979818e9ba7a69f9c9ea1a8a79b8e817979797979797979797979797771665b4f4236291d1003000000000000000007121d2731454f575d5f6060606060606056544e463d32271b0f03000e1a26313d4751595e5f606060606060605f514b43392f23180c0000000000000000060f18222b343d474f54565f606060606060605f56544f473d32271b100400000000000814212e3b4754616e7a868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686796d6053473a2d20140700000000000006111c263038424a505a61686e747b8084888b8e90919292929291908f8d8a87837e79726d665f574f473d342b20160c0000000000000b1825313e4b5864717e8b979f9f9f9b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9a9f9f9f978b7e7164584b3e3125180b000000000613202c3945515d677986929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9e9285786b5f5245382c1f1205000000000000000000000000000000080e161e252a30363a3c4347484b4e50515253535252504e4c494644403937322b262017110a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c10151a1d24292c32373a4146474c4f4d48423930251b0f040000000000000000000815222e3b4754606a6f797979797979787368545b60696e74797d808284858685858482807d7a746e69625b504a42382e22190f00000000000009131d272f373d40423f3a3936302c27201d18130f0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009111a222a303940454e53575f62676d7175797b7d8082838485858685858483817f7d7b7874706d66615e56524c443e36302920180f07000000000000000000000000000000000000000000000000030b12181f252a2f35393a404446494c4e5051525253525251504e4c4a4746413c3a37312b28221c140b070000000000000000000000000000040f19242d353d4245464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646463e3c39332c241a100500000005101a242c33393c3e4646464646464646464646464646464644433f39322920160b0000000a141e2830383d4143464643413d3830281e140a000000000000000000000000000000000000000000000000000000000000000000020f1c2835424f5b6875828e939393938d8073675a4d4034271a0d010000000000000000000000000000000000000000010d1a26323e4a545e66696c6c6c6c6c6c6c6c6c66707d89939eab9f94909196a1ac9f93887c6f666c6c6c6c6c6c6c6c6c6a665f554a3e32261a0e010000000000000000010b151f333d454c5052535353535353534948433d342b21160a00000915202b353f474e5253535353535353535345403931271d1207000000000000000000061019222b353d4448495253535353535353524948443d352b21160b0000000000000714202d3946525e687679797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797976675d5145392c201306000000000000000a141e2630383f4450565e61696e73787b7e81838485868685858482807d7a76726d67605c544d453d352b22190e040000000000000b1825313e4b5864717e8b93939393938e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d93939393938b7e7164584b3e3125180b0000000004111d2935414b556b7885929393939393939393939393939393939393939393939393939393939393939285786b5f5245382c1f120500000000000000000000000000000000050c13191f252a2d32373b3c3f414345454646454543423f3c3a38342e2b27201b150b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e12181d1f272b3035393a3f42413d3730271e14090000000000000000000006131f2b37434e5860626c6c6c6c6c6c6b68615750575e61676d7073767778797978777673706d67615e5751443f3830261c10070000000000040f1a252f3941484d4e4c4746413a38322c29241d1a15100c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b232c343c424b51585f62696e747a7d8185888a8c8f9091919292929191908e8c8a8884807d79736d68615e565046413a322a2119100700000000000000000000000000000000000000000000060d151d24293136394045474a515356585a5c5e5e5f605f5f5e5d5b595754524c4847433c38332d261d18120b030000000000000000000000000915202b353f474e52535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353534a49453e362c22170c0000000c17222c363e45494a53535353535353535353535353535353514f4b443b32281d12060005101b26303a42494e4f53534f4e49423a30261b10050000000000000000000000000000000000000000000000000000000000000000020e1b2835414e5b6874818e9b9f9f998c807366594d4033261a0d000000000000000000000000000000000000000000000a16222d38434c545a5d6060606060606057606d7883919da5a499908384919ea6a49a9083786d6057606060606060605d5b554d43392d22160a00000000000000000000030d212b333b404445464646464646463c3b38322b22190f040000040f19242d353d424546464646464646464638342f271f150b0100000000000000000000071019232b32383b3d4646464646464646463d3b38322b23190f0400000000000005111e2a36414c565e6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5d554b4035291d110400000000000000020c141e262e343e444c52575e61666a6f727476777879797978777573716d6865605d55504a423c332b23191007000000000000000b1825313e4b5864717e868686868686868175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a677480868686868686867e7164584b3e3125180b00000000010d18242f44515e6b7784868686868686868686868686868686868686868686868686868686868686868685786b5f5245382c1f1205000000000000000000000000000000000002080d141a1e20262b2e2f323536383939393938373533302d2c28231c1b150f0a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c10161b1e25292d2e323534312c251e150c0200000000000000000000030f1b27323d464e545660606060606060595751444d53555c606367696b6b6c6c6b6a696663605d55534d453f342e261e140a0000000000000814202c37414b53595b5954524c48433d39352f2b261f1c18120e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b242d353e464e545c606a6f757b81868a8e929797999b9d9d9e9f9f9f9e9d9d9b999796918d8985807a746e68615a524c443c332b2219100700000000000000000000000000000000000000000910181f272f353b42464b5153545c60636567696b6b6c6c6c6b6b6a686664615e5655534e46443f382f28231d150c0500000000000000000000000e1a26313d4751595e5f606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060575550483e33281c11040004111c28333e48505557606060606060606060606060606060605e5b564d44392e23170b000915212c38424c545a5c60605c5a544c42382c2115090000000000000000000000000000000000000000000000000000000000000000010e1b2734414e5a6774818d9aa7a5998c7f7266594c3f3326190c0000000000000000000000000000000000000000000005111c27313a434a4e50535353535353535e69727f8c95a0a99f93877c7e8a949faba0958c7f72695e53535353535353504f4a433b31271c110500000000000000000000000f1921292f343738393939393939392f2e2c27211910070000000008121b242b3136383939393939393939392c29231d150d0300000000000000000000000007111921272c2f30393939393939393939302f2c272119110700000000000000020e1925303b444c525f6060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060605f514b433a2f24180d010000000000000000020c141c2328323b41464d5354585f626567696b6c6c6c6c6b6a696664615e5653514b443f38302a2119110700000000000000000a1724303d4956626c7179797979797979756f65594d4034271b0e01000000000000000000000000010d1a2733404c58646e7479797979797979716c6256493d3024170a0000000000071d2a37434f5c67727779797979797979797979797979797979797979797979797979797979797979797873685d5044372b1e11050000000000000000000000000000000000000003090e12151b1f212225282a2b2c2c2c2c2b2a282623201f1c18120f0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f13191d202126282825201b140c030000000000000000000000000a16202b343d434749535761686b6c6c66635b5146464b515357565e61666a6c6c6a66605d56514c46423b3328231c140c020000000000000c1825313d48535d656866615e56544f4745403a37312c28231c1a140f0b0600000000000000000000000000000000000000000000000000000000000000000000000000000007101b242d363e474f585f666d737c82878e92989b9ea2a9a6a8aaa8a7a6a6a6a7a8a9a8a6a8a19e9a97928c86807a716c615e564d453c342b22190e0500000000000000000000000000000000000009121b222a313940454d53555d6065666d6f72747677787979797877767573716e6867625f5853504a423d342e271e170e0500000000000000000000111d2a36424e59636a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c64615a5045392d211408000814212d3945505a61646c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a675f564b3f33271b0e000d1925323d49545e66696c6c69665e54493d3225190d0000000000000000000000000000000000000000000000000000000000000000010d1a2734404d5a6773808d9aa6a5988b7e7265584b3f3225180c00000000000000000000000000000000000000000000000a151f2831383e42434646464643505a616e7b86929fa7a2978d817476828f99a3a79f92867b6e61594f434646464644423e3931291f150b000000000000000000000000070f171e24282b2c2d2d2d2d2d2d2d23221f1b160f0700000000000009121920262a2c2c2d2d2d2d2d2d2d2d1f1c18120b030000000000000000000000000000070f161b2022232c2d2d2d2d2d2d2d2c2322201b160f0700000000000000000008141e29323b4146535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535345403a31281d130700000000000000000000020a1117202930363b4246484e5355585b5d5e5f5f5f5f5e5d5c5a5754524c47454039342e261e180f070000000000000000000815212d3945505a62646c6c6c6c6c6c6c68655d53483d3124180c00000000000000000000000000000b1824303c48535c64676c6c6c6c6c6c6c64625a5045392d21150800000000020f1b27333f4b5660676b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6861574c4034281c0f0300000000000000000000000000000000000000000002050a0f121515181b1d1e1f20201f1f1d1b19161312100c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d111314191c1b19150f090200000000000000000000000000040f19222b32373b3c505c6873787979736d63574b434750555d60686d7276787977736d685f584e443b31292117110a02000000000000000e1b2734404d59656f75726d6863605953514b47433c38342e2a251f1b17110d08020000000000000000000000000000000000000000000000000000000000000000000000050e19222d363e485059616a6f7980878f93999fa3aaabaaaaa29f9d9b9a9a999a9a9b9d9fa2aaa9aba9a19e98928d857e756d685f574e463c342a20170c030000000000000000000000000000000009121b242c343c434b51575e61676d7175797c7f81838485858685858483817f7d7a77736f6a64605b544f454039302920170f05000000000000000000121f2c3845525e6a7579797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979716c6155493c3023170a000a1723303c4955616c71797979797979797979797979797979797771675b4f43362a1d10000f1c2835414e5a66707679797670665a4e4135281c0f0200000000000000000000000000000000000000000000000000000006050403020d1a2633404d596673808c99a6a4978b7e7164584b3e3125180b0203040506000000000000000000000000000000000000030d161f272d323536393935404b55616c75828f98a2a79f92857a6d6e7c87929fa9a2988f82756c61554b403539393736322d271f170d0300000000000000000000000000060d13181c1e1f202020202020201615130f0a040000000000000000080f151a1d1f20202020202020202013100c070100000000000000000000000000000000040b101316161f202020202020201f161613100b0400000000000000000000020d1720293036393b4646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464639352f281f160c01000000000000000000000000060e171e252a31363a3c4347484b4e50515253535252514f4d4a4746413a39352f28231c150c060000000000000000000005111d29343e48505658606060606060605b59534b41372c20140800000000000000000000000000000814202b36414a53585a60606060606060585650483e34291d110500000000000b17232e3a444e565c5e60606060606060606060606060606060606060606060606060606060606060605f5d574f453b2f24180c00000000000000000000000000000000000000000000000000030608090c0e10121213131212100f0c09070604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010507070c0f0e0c09040000000000000000000000000000000007101920272b3845525f6b788586867f7366574d4e535a61676d727a7f83858584807a6f6a5f564d42362a1f14080000000000000000000f1b2835424e5b6875817f7a756f6b65605d55534e4644403936302b27221b19130f0a040000000000000000000000000000000000000000000000000000000000000000020d17202b343e48505a616b707c838c92999fa4abaca7a09d999892908f8d8d8d8d8d8f909298989c9fa4abaaa29f97928a827a6e6960584e463c32291e150b00000000000000000000000000000008121b242d363e464e555d60696e74797e8285898b8d8f91919293929291908e8c8a8784807c76716c666059514b433b332921170e05000000000000000013202c3946535f6c79878686868686868686868686868686868686868686868686868686868686868686868686868686868686868686867e7164574a3e3124170b000b1724313e4a5764717d8686868686868686868686868686868684776a5e5144372b1e1100101c2936434f5c69768286868276695c4f4336291c10030000000000000000000000000000000000000000000000030608091211100f0e0d1926333f4c5966727f8c99a5a4978a7d7164574a3e3124170d0e1011121307060401000000000000000000000000000000040d151c2226292a2d2c3945515d67707d8a949eaaa0958b7f72686a73808d97a1aa9e938a7d70675d51453c31262a2926221c150d0500000000000000000000000000000002070c0f11121313131313131309090703000000000000000000000004090e111213131313131313131306040000000000000000000000000000000000000000000307090a1313131313131313130a09070400000000000000000000000000050e171e252a2d2e393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939392c29241d160d040000000000000000000000000000050d14191f252a2d31373a3c3f41434445464646454442403e3a3936302c29241d17110a030000000000000000000000000c17222d363e45494b535353535353534e4d4841392f251a0f040000000000000000000000000000030f1a252f3841484c4e535353535353534b49453e362d22170c00000000000006121d28323c444b4f51535353535353535353535353535353535353535353535353535353535353535352504c453d33291e1307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f161b2a3743505d6a7683908f8276695e54585f626c71797f858c909292908c857c6f695e52463b3025190e020000000000000000101d2a3743505d6a76838c86817c77726d67625f5853514a46423b37332d29241e1b15100c0701000000000000000000000000000000000000000000000000000000000009141f29323d46505a626c717d8690959fa3ababa49f9b95908c898584828180808081828385888b8f93999fa2aaa9a19e938f847b6f6a60584e443b30271d12070000000000000000000000000006101a242d363f4850585f676d737b80858b8f9298989a9c9e9e9f9f9f9e9e9d9b999795908d88837e786f6b605c554d453b332920170c030000000000000013202c3946535f6c798692939393939393939393939393939393939393939393939393939393939393939393939393939393939393938a7e7164574a3e3124170b000b1724313e4a5764717d8a93939393939393939393939393939184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c1003000000000000000000000000000000000000000000040a0f1315161f1e1d1c1b1a1925323f4c5865727f8b98a5a3968a7d7063574a3d3024191a1b1c1d1e1f1413110d08010000000000000000000000000000030a11161a16202b37434e58606d7984919ea6a59d9083786d60606d7a85919ea6a59e9184796d60584e43372b20161a16110b0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d14191e20212d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d201d18130c040000000000000000000000000000000002080d141a1e21262b2e2f323436383939393938373633312e2d2a25201d18120c06000000000000000000000000000006111b242d34393d3e4646464646464642403d372f271d13090000000000000000000000000000000008131d262f363c4041464646464646463e3d39342d241b1106000000000000010c16202a323a3f434446464646464646464646464646464646464646464646464646464646464646464544403b332b21170d0200000000000000000000000000000000000000000000000000000000000000000000020608080c0f111213131312100e0c08070502000000020404060606060606000000000000000000000000000000000001040707131313131313130d0c0a07020000000000000000000000000002060808131313131313131310060603000000000000000000000000040a1b2835424e5b6875818e92877b6e6663646a6f767e848c92989d9f9f9d9791857b6e61564d41362a1e11050000000000000000101d2a3743505d6a768390928e89837e7a746f6a64605c54524d46443f3835302b271f1d18120e09030000000000000000000000000000000000000000000000000000030d1925303b444e58626c717e879298a0a7afa79f99938e88837f7c79777574737373747577797c7f83878d92989ea5ada59e9691857c6f6a5f564c42392e23180c030000000000000000000000030c18222c363f48505a616a6f7980868d92979c9fa2aaa7a9a8a7a6a6a6a7a8a9a8a6a7a09d9a94908a837c746d675e574d453b32291e150a0000000000000013202c3946535f6c7986929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f978a7d7164574a3e3124170b000b1724313e4a5764717d8a979f9f9f9f9f9f9f9f9f9f9f9f9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c10030000000000000000000000000000000000000000070f161b1f22232c2b2a2928272625323e4b5865717e8b98a4a396897c706356493d3025262728292a2b2c21201d19130c040000000000000000000000000000000508131e28323a47535f6a73808d96a1aa9e93897d70665c5d67717e8b949faba1968d80736a5f53473e32281e13080500000000000000000000000000000000000407090a13131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313130a0907040000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080e1114142020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202013110d07010000000000000000000000000000000000000003090e12151a1f212225282a2b2c2c2c2c2b2a29272421201e1913100d07010000000000000000000000000000000009121b22292d3031393939393939393534312c251d150b0100000000000000000000000000000000010b141d252b3033343939393939393931302d29221b12090000000000000000040e1820282e33373839393939393939393939393939393939393939393939393939393939393939393837342f2921190f0600000000000000000000000000000000000000000000000000000000000000000003090e121415191b1d1f1f201f1f1d1b191514120e09030b0e10111313131313130b0b0905010000000000000000000001080d111314202020202020201a1916130d0700000000000000000000030a0f1214151f202020202020201c13120f0b0600000000000000000000000c1926333f4c5966727f8c998f8279727071757c838a91969fa2aaa3a3a9a1978e8174685e5246392d2014060000000000000000101d2a3743505d6a7683909d9b95908b85807b76716d66615e5753504945413a37322c29241d1a15100b060000000000000000000000000000000000000000000000010b151f2a36424d56606a717e889299a2aaafa49c959087817c77726f6d6668676766676768666c6f72767b80868e939fa3aaa8a09792867c6f685e544b40342820150900000000000000000000000b151e2a343e48505a626c717c848c92989fa2a9aca8a8a09e9c9a9a999a9a9b9d9fa3ababaaa69f9c95908781796e695e574d443b30261c110600000000000013202c3946535f6c7986929facacacaea9a7a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a4978a7d7164574a3e3124170b000b1724313e4a5764717d8a97989898989898989b9ea6b0aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c10030000000000000000000000000000000000000007101920272b2e2f3938373635343331313e4a5764717d8a97a4a295897c6f6256493c3132333435363738392d2c29241e160d040000000000000000000000000000020c1924303a44505a626e7c87929fa8a2988e81756b605455606c78839099a4a89f92877c6f625a50443a3024190c03000000000000000000000000000000040b101316162020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020171614100b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205070813131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313060401000000000000000000000000000000000000000000000002050a0f121515181b1d1e1f20201f1f1e1c1a171413110d080401000000000000000000000000000000000000000911171d2124252d2d2d2d2d2d2d282724201a130b03000000000000000000000000000000000000020b131a202427272d2d2d2d2d2d2d2524211d17110900000000000000000000060e161d23272a2b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2b28241e170f070000000000000000000000000000000000000000000000000000000000000000060b0f151a1e212225282a2c2c2d2c2b2a282522211e1a1410171b1d1e202020202020181715110c060000000000000000040c13191d202d2d2d2d2d2d2d2d2625231e19120a0100000000000000060e151a1f21222c2d2d2d2d2d2d2d29201f1c17110a020000000000000000000a1623303d495663707c8998948f837e7d7e828790949ea1a19e9996979a9f9f92877b6e6154473b2d22170b0000000000000000101d2a3743505d6a7683909da7a09d98928d88837e79736e6963605b53524c47433c38352f2b261f1c17110e0802000000000000000000000000000000000000000007121d27313946525e696f7c86929aa3ababa39f928d837c756f6a6662605c545a5a5a5a5a545b606265696e747b818a9298a2a9a9a19891847a6e665c51453c31261a0e0500000000000000000007121d27303c46505a626c717e8691969fa2aaaba39f9b9796918f8e8d8d8d8d8f9092999a9ea1a9aba79f9a938d837b6e695e564c42382e23170c04000000000013202c3946535f6c7986929facb9aea49d9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a978a7d7164574a3e3124170b000b1724313e4a5764717d8a8b8b8b8b8b8b8b8b8f939eaaaa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c1003000000000000000000000000000000000000040f19222b32373b3c4544434241403f3e3d3d4a5763707d8a96a3a295887b6f6255483c3d3e3f4041434445463a39352f281f160c01000000000000000000000000000a141e2935414c56616c76828f99a3a89f92867b6e61594f505b656f7c87939fa9a3999082766c62564c4135291e150a0000000000000000000000000000070f161b2022232d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2323201c16100800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030608090c0e10111213131312110f0d0b070705010000000000000000000000000000000000000000000000060c11151718202020202020201b1b18140f0901000000000000000000000000000000000000000001080f14181a1b20202020202020181715110c06000000000000000000000000040c12171b1d1e20202020202020202020202020202020202020202020202020202020202020201f1e1c18130d0600000000000000000000000000000000000000000000000000000000000000020a11171b1f262b2e2f32353738393939383735322e2d2b261f1c23272a2b2d2d2d2d2d2d2524211d181109000000000000040d161e24292c393939393939393933322f2a241c130a000000000000060f1820262b2e2f3939393939393939362d2b28221c140b0200000000000000000713202d3a4653606d7985929f95908b898b8f93999fa39f97918c8a8a8e9299998c7f7265544a3f33281c0f0300000000000000101d2a3743505d6a768390979d9fa7a29f9a94908a85807b75706c65605d56544e4745403937312b28231c1914100b040100000000000000000000000000000000000c18232f3943505a616e7b859198a3acaca399928b80786f6a625f585653504a4e4d4d4d4e4a505355575e61696e757e869297a2aaaaa1969082786d60574e42372b21170b0000000000000000000c18232e39424e58616c717f8a9298a0a8aba49f99928e8a8784828180808081828486898d92979ea1a8aca49f9590847b6e685e544a3f342820150a000000000013202c3946535f6c7986929facb9a99d928d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8a7e7164574a3e3124170b000815222e3b4855616e7b7f7f7f7f7f7f7f7f7f818f9ba8aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c10030000000000000000000000000000000000000a16202b343d4347495251504f4e4d4c4b4a49495663707c8996a3a194887b6e615548494a4b4c4d4e4f5051524745413a31281e130800000000000000000000000006111c26303845525d68717e8b949faba1968c8073695e534749535f6a74818d97a2ab9f948b7e71685d52463d30261c110600000000000000000000000007111921272c2f303939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939302f2c27211a11080000000000000002080d101213131313131313130707040100000000000000000000000000000000000000000000000000030613131313131313131313120f0a05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005080a0b131313131313130f0e0c080400000000000000000000000000000000000000000000000003080b0d0e131313131313130b0a080500000000000000000000000000000001060b0f1111131313131313131313131313131313131313131313131313131313131313131312110f0c070200000000000000000000000000000000000000000000000000000000000000060b141b22272b31373a3b3f4244454646464543413f3b3a37312c282e33363739393939393932312e29221b120900000000010c1620282f35394646464646464646403f3b352e251c120700000000040d18222a31373a3b4646464646464646433938332d261d140a000000000000000006131f2c3845515c6774818d98a09d9896979b9fa49f99928d85807d7d818792998f8276665b5044382b1f1206000000000000000c1926323f4c5965727f858b90959b9fa3a69f9c97918c87827d78726d6862605853514b47423c38342e2a251e1b16110d0801000000000000000000000000000004101c2934404b55616c76828f97a1aaafa49a92877e736d665f58534e4946443f41404040413f4446484d53565e616c717c859298a2aca89f948d80736a5f53473e33281c10040000000000000004101c2834404b545f6a717e87939fa2aaa9a199938e86827e7a777574737373747577797c80858b91969da5afa79f9691847a6e665c50443c32261b0f040000000013202c3946535f6c7986929facb3a79a8d80808080808080808080808080808080808080808080808080808080808080808080808080807c6f6255483c2f221509000714212d3a46535f696e7272727272727272727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c10030000000000000000000000000000000000030f1b27323d464e54565f5e5d5c5b5a595857565556626f7c8995a2a194877a6e615455565758595a5b5c5d5e5f54524c433a2f24190d0100000000000000000000000b17232e38424e58606d7a85929ea6a69e9184796d60574d42414e58616d7a85929ea7a69e92857a6d61584e42382e23170c0200000000000000000000040f19232b32383b3d46464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646463d3c38332c231a10050000000000060d14191c1f1f202020202020201413110d0801000000000000000000000000000000000000000000060c1012202020202020202020201e1b161009010000000000000002080d101213131313131313090806030000000000000000000000000000000000000000000000010407071213131313131313131313120f0a050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f181d262d33373c4247484c4e505252535252504e4c4846423c3834393f43444646464646463e3d3a342d241b110600000008131e28323a414553535353535353534d4b4740372e24190d020000010c161f2a343c43474852535353535353534f46443f382f261c11060000000000000004101c2834404b55616e7b86929fa4a5a3a4a7a09d948f868079737070747d87939285796c605346392d201306000000000000000b1825313e4a57626d72797e83898e92999ea1a8a19e99928f89847f7a746f6a65605d55534d46443f3836302c27201d19130f0a0400000000000000000000000006131f2c3845515c67707d8a949fa9b0a69f93887e716c605c544e47433c3a38342e3433342d3338393c42464d525a616a6f7c86929aa4afa69f92877b6e62594f44392d20150a0000000000000006131f2c3845515c666f7c869299a4aea8a0979187817b75716d6869676766676768676d7073797e848e939fa4aca8a0969083786d60584e43372b20150a0000000013202c3946535f6c7986929facada0938679737373737373737373737373737373737373737373737373737373737373737373737373736f6a5f53473a2e2115080005121e2a36424d575f616565656565656566727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c1003000000000000000000000000000000000006131f2b37434e5860626c6b6a696867666463626160626f7b8895a2aa93867a6d606162636465666768696a6b6c605d564c4135291d11040000000000000000000003101c28343f4a54606a74818d97a1ab9f948a7e71675d51453b3c46525e68727e8b95a0aca1978e81746a60544a3f34281f1409000000000000000000000b16212b353d44484953535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353534a48443d352c21160b000000000810181f25292b2c2d2d2d2d2d2d2d2d201d19130c04000000000000000000000000000000000000030a11171c1f2d2d2d2d2d2d2d2d2d2d2b27211b130a010000000000060d14191c1f1f2020202020201515120f0a030000000000000000000000000000000000000001080d1113141f202020202020202020201e1b161009010000000000000004090e1112131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313130b0a0804000000000000000000000001060b0f111113131313131207060300000000000000000000000000000000000000000000000000000000000000000000060606060606060503000000020608080c0f111213131312100e0b08070502000000000000000000000000000000000000000000000000000008111a212a2f383f44464d5355585b5d5f5f605f5e5d5b5855534d46443f444b4f515353535353534b4a453f362d22180c0100010d19242f3a444c525f606060606060605957524940352a1e1307000007131d28313c464e53555f606060606060605c53504a42382d22170b00000000000000000c18232e3946525e69727f8b929b9e9f9e9b959089827b736d6763646b74818e98887b6e6255483b2f221508000000000000000916222e3a46515b62676d71777c81868c91969c9fa6a39f9b96918c86817c77716d67615f5753504a46413b38322c29241e1b15100c0700000000000000000003101c28343f4a54606d7984919ea6b0aa9e948c7f736c625a504a423c37322d2c282327272722282b2d31363b42465058606a707e88939fa8aea3998f82766c6155493c31261b0f00000000000004111d2935414b55606d79839098a3aba9a09691857d746e6964615d565b5a5a5a5a555c6063666d7179818b939aa4afa89f958c80736a5f54473d32271b0f0100000013202c3946535f6c7986929facada093867a6d676767676767676767676767676767676767676767676767676767676767676767676767625f584e43372b1f120600020e1a26313b454d53555858585858585966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c100300000000000000000000000000000000000815222e3b4754606a6f7877767574737271706f6e6d686e7b8894a1a39886796c6c6d6e6f7071727374767778796d685d5245392c201306000000000000000000030c19232b3844505c666f7c87939fa9a3998f82766c61554b403335414c56606c7883909aa4a99f93887c6f665c50443b30251a0d03000000000000000004101b27323d474f5456606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606056554f473d33271c1004000006101a222a3035383939393939393939392c29241e160d0400000000000000000000000000000000030c151c23282c3939393939393939393937332c251c1309000000000810181f25292b2c2d2d2d2d2d2d22211f1b150e060000000000000000000000000000000000040c13191d20212b2d2d2d2d2d2d2d2d2d2d2b27211b130a010000000000080f151a1d1f20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020171714110c050000000000000000040c12171b1d1e20202020201f1312100c060000000000000000000000000000000000000000000000000000000105090b0b13131313131312120f0c04090e121415191b1d1f1f201f1f1d1b181414110e0802000000000000000000000000000000000000000000000008111a232c333c41495053575f6265686a6b6c6c6c6b6a6865615f5753504a4e565b5e606060606060585650483f34291d11050004111d2935414c565d6c6c6c6c6c6c6c6c66635b52473b2f23160a00071018242f3a434e585f626c6c6c6c6c6c6c6c69605b544a3f33281c0f030000000000000007121d2a36424d56626d7380898f9292918f8a837d766e69605d5559626f7c89988a7d7063574a3d3024170a0000000000000006121e29353f4951555c60646a6f757a7f848a8f949a9fa2a8a09e98928e88837e79736e6964605c54524c48443d39352f2b261f1c18120b030000000000000006121f2b3844505c66727f8c96a0acaea2988f82776c605a50443f38302b26201f1c171a1a1a171c1f20252a30363e464e58616c73808d96a1acab9f948a7d7064584e43372b1d120700000000000613202c3945515d67737f8c95a0aaada19791847b706b615e5754524c4e4d4d4d4e4b5153545c60676d747f88939fa5afa79f92877c6f62584e43372b1d120700000013202c3946535f6c7986929facada093867a6d605a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a55534e463c31261b0f03000009141f2a333b4246484c4c4c4c4c4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c100300000000000000000000000000000000000916232f3c4956626f7c8584838281807f7e7d7c7b7a79787a8794a19f92867978797a7b7c7d7e7f8081828384867a6d6054473a2d2114070000000000000000000b151e2a36414d56606d78839099a4a99f92877c6f625a5043392f303a44505b666f7c87939faaa49a9083786d60574d42362a1f150b01000000000000000713202c38444f5960636c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6361594f44382c20140700020d18222c343b414446464646464646464639352f2820160c010000000000000000000000000000000a151e262e343846464646464646464646433e372e251b1005000006101a222a303538393939393939392f2e2b2620181006000000000000000000000000000000040d161e24292c2d383939393939393939393937332c251c13090000000009121920262a2c2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2423211c171008000000000000060e161d23272a2b2d2d2d2d2d2c201f1c17110a03000000000000000000000000000000000000000000000000060c111517182020202020201f1e1c1810151a1e212225282a2b2c2d2c2b2a282521201e19140f0a040000000000000000000000000000000000000000060f1a232c353e454d535b6064696e72757778797979787674726e6964605c545660676a6c6c6c6c6c6c65625a50453a2e211509000713202c3945525d687679797979797979736d63574b3f3225190c050e19222935404b555f6a6e7979797979797979766c665b5044382b1f120600000000000000000e1925303b44515b636e737d82858684827d78706b625f57514b53606d788686867f7265584c3f3225190c00000000000000010d18232d373f434b5153586062686d73787d82888d92989da0a8a29f9b95908b85807b76706d66615e56544f4745413a37312c28231d150c030000000000000713202d3a4653606d7884919ea8b2a99f92867b6e655b50483e342e261e1b1312100c060d060b0f12131a1f252a343d46505a606d7984919ea8b0a69c8f83766a5f5347392e23180c00000000000714212d3a4754606d7a85929fa7b0a69e92857b6e696059524d47464141404040414045464b51555d606d727f8b939ea9afa3998f82766a605447392f24180c00000013202c3946535f6c7986929facada093867a6d60534d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4847433c342a20150a000000030e18212a31363a3b3f3f3f3f3f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c100300000000000000000000000000000000000916232f3c4956626f7c8991908f8e8d8c8b8a898887868583919daa9f92878385868788898a8b8c8d8e8f9091877a6d6054473a2d211407000000000000000007121d27303946525e68727f8b95a0aba1978d80746a5f53483e312728333f4a54606b74818e98a2aca0958c7f72695e52463e31271d1207000000000000000916222f3b4854606b707979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979706b6155483c2f2316090008141f2a343e464d5152535353535353535345413a32281e1308000000000000000000000000000006111c2630383f44535353535353535353534f4940372c21160a00020d18222c343b4144464646464646463c3a37312a22180e0300000000000000000000000000010c1620282f35393a4546464646464646464646433e372e251b1005000008121b242b3136383939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393931302d28221a120800000000040e1820282e3337383939393939392d2c28231c150c03000000000000000000000000000000000000000000000911181d2124252d2d2d2d2d2d2c2b28241c1f262b2e2f32353738393939383735312e2d2a251f1b150d07010000000000000000000000000000000000020b18212c353e474f575f656c71767b7f8183858586858583817f7b77716d665f58677277797979797979716c62564a3d3124170b000714212d3a4754606d7a86868686868686807366594d4033261a0d0b16202b343d45515d676e7c868686868686868682796c605346392d201306000000000000000009141f29323f49525c636b707578797875706c656059534d4544505c6674797979726d62564a3e3124180b000000000000000007111b252d31394045474e54565e61666d70767b81858b91959b9fa3a79f9d97928d87827d78736e6863605954514c47433c38342e271e150b000000000005111e2a36414c5664707d8a96a1adada1978c7f72695e53493f3628231c140c0a060300000000000306090e1419222b343e45515d67717e8a96a0acab9f94887c6f62544b4034281c100400000006131f2b37434e5866727f8c97a2adaa9e948a7d70695f574f46423b3935303433342e34383a40454b515b626d74818e97a1adab9e94897c6f62554b4035291d1004000013202c3946535f6c7986929facada093867a6d6053474040404040404040404040404040404040404040404040404040404040404040403c3a37312a22180e0400000000060f181f262a2d2e323232333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c100300000000000000000000000000000000000916232f3c4956626f7c89959d9c9b9a99979695949992919195a0aca399929091929995969798999a9b9c9d93877a6d6054473a2d21140700000000000000000c18232e39424f59616e7b85929fa7a79e92857a6d60584e43362c1f222d38424f59616e7a86929fa7a79f92867b6e61594f43392f24180c030000000000000a1623303d495663707d86868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686867d7063564a3d3023170a000d1925303b4650585d5f606060606060605f524c443a2f24190d01000000000000000000000000000c17232e38424a505f60606060606060605f5a52493e33271b0f0008141f2a343e464d51525353535353534847433c342a20150a0000000000000000000000000008131e28323a41454752535353535353535353534f4940372c21160a00040f19242d353d4245464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646463e3c39332c241a10050000010c16202a323a3f43444646464646453a38342e261e150a00000000000000000000000000000000000000000009121b22292e313239393939393939373430282c31373a3b3f4244454646464543413e3b3936302b272018130c04000000000000000000000000000000000a141d2a333e474f5961696e787e83888b8e909292939291908e8b88837e786f6a606a77848686868686867e7165584b3e3225180b000714212d3a4754606d7a8793939393938c807366594d4033261a0a141d28323d46515b606d798391989393939991847a6d665b5044382b1f12060000000000000000020d17202d37404952596063686b6c6b6864605b534f47423c3f4a545c6a6c6c6c65625b51463a2e2215090000000000000000000a131b1f272f34383d43474c52545c60646a6e747a7f84898f92999ea1a9a29f9a938f8a847f7a75706b65605d55534e4645403930271d1207000000000714202d3946525e6876828f9ca8b2ab9e9185796d60574d41382d2417110a02000000000000000000000002091019222935404b55606c7884919dabb0a69a8e8174665c5145382c1f13060000000815222e3b4754606a7884919ea9b1a79c8f82756c61574d453d36302d292427272723282c2e343a4145515b606d7a85929eaab0a69b8e8275675d5145392c1f1306000013202c3946535f6c7986929facada093867a6d6053473a34343434343434343434343434343434343434343434343434343434343434342f2e2b2620181006000000000000060e141a1e2122252526333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c100300000000000000000000000000000000000916232f3c4956626f7c8995a2a7a6a5a4a3a2a1aaa29f9e9da0a7b1aba39f9d9e9fa2aaa2a3a4a4a5a6a7a093877a6d6054473a2d2114070000000000000004101c2834404b54606b75818e98a2aca0958b7e72685d52463c31241a1c262f3d46525e68727f8c95a0aca2988e81756b61554b4035292015090000000000000a1623303d495663707c89939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393897d7063564a3d3023170a00101c2935414d5862696c6c6c6c6c6c6c6c6c5d564c4135291d110400000000000000000000000003101c28343f4a545c6c6c6c6c6c6c6c6c6c6c645a4f43372b1e12000d1925303b4650585d5f60606060606055534e463c31261b0f030000000000000000000000030c19242f3a444c52545e6060606060606060605f5a52493e33271b0f000915202b353f474e52535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353534a49453e362c22170c000006121d28323c444b4f5153535353535246443f3830261c11060000000000000000000000000000000000000006111b242d343a3d3e4646464646464544403b34383c4247484c4e505252535252504e4b4746413b373229241d160d05000000000000000000000000000006111b262f3c454f59616b707b838a9095989b9d9e9f9f9f9e9d9b9895908b837c706b67798592939393938a7d7164574a3e3124170b000714212d3a4754606d7a87939f9f9f998c807366594d4033261a111c262f3a444e58626d75818e95a0aaa59f92877c6f685e544a3f33281c0f03000000000000000000050e1b252e3740474f54565c5f5f5e5c57535049413d373138424a50535f6060585651493f34291e1206000000000000000000010a0d151d23292c32383a41464a5053585f62676d72777d82878d92979d9fa7a49f9c96918c86827c77726d67625f5853514b42392e23180c000000000814212e3b4754616e7a87939facafa3998c7f72675d51453b2f261b1206000000000000000000000000000000071018242f3944505b66727e8b99a3aeac9f9285796d6053463a2d2013080000000916222f3c4955626f7c8896a1acaca095897c6f625a50453b332a25201d191a1a1a181c1f23282f353f45515d67727f8b98a2aeac9f9286796d6053473a2d201406000013202c3946535f6c7986929facada093867a6d6053473a2d2727272727272727272727272727272727272727272727272727272727272722211f1b150e06000000000000000003090e121415191926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c100300000000000000000000000000000000000916232f3c4956626f7c89959b9a999998979695949892919095a0aba39992909192989495969798999a9b9c93877a6d6054473a2d211407000000000000040d1a242c3845515c66707d89939eaaa59d9083786c60564c41342a2012141d2a36414c56606d7883919da5aa9e938a7d70675d51453c31261a0d0400000000000a1623303d495663707c89969f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f96897d7063564a3d3023170a00121f2b3844515d6974797979797979797976685d5245392c20130700000000000000000000000006121f2c3844505c66767979797979797979766c5f5346392d201300101c2935414d5862696c6c6c6c6c6c6c625f584e43372b1f120600000000000000000000000b151e2935414c565d606b6c6c6c6c6c6c6c6c6c6c645a4f43372b1e12000e1a26313d4751595e5f606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060575550483e33281c1104000b17232e3a444e565c5e60606060605f53504a42382e23170c000000000000000000000000000000000000010c18222d363f454a4b53535353535352504c454044464e5355585b5d5e5f605f5e5d5b5854524d47433d352f281f170f05000000000000000000000000000b17222d38414d57616b707d8690959d9fa7a8aaaaa39f9e9e9e9fa3a09d9590867d706d798698a29f9f96897d7063564a3d3023170a000714212d3a4754606d7a8793a0aca6998c807366594d4033261a17222d38424c56606a727f8b939ea8a79e938b7f726a60564c42382d22170b000000000000000000000009131c252e353d4448494f5253514f4a46443f382f2b2630383f44465353534c4a463f372d23180d010000000000000000000000030b12181c1f272b3036383f44464e53555d60656b70757b80858b90959b9fa3a8a19e99928e89847f7a746f6a64605c544b4034281c10040000030f1b27333f495364717e8b9aa4afac9f92867a6e61554b4033291d140a000000000000000000000000000000000007121d28333f4a54616d7a86929facaea298897d706356493d2f24190d0100000d1a2633404d596673808c99a8b2aa9d9083776a6054483e332a211a14110d080d070c1013181d242935414c55606d7985929fabaea2988a7d7164574a3e2e23170b000013202c3946535f6c7986929facada093867a6d6053473a2d201a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1515120f0a040000000000000000000000020507080c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c100300000000000000000000000000000000000916232f3c4956626f7c89908f8e8d8c8b8a898887868584839099a49f9287838485868788898a8b8c8d8e8f90877a6d6054473a2d2114070000000000010c161f2a36424d57606d7984919da5aa9e93897c6f665b50443a3022180e0b1925303b44515c66707d89939eaaa59e9184796d60574e42372b20160c01000000000a1623303d495663707c8996a3acacacb5afaca7a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a396897d7063564a3d3023170a00131f2c3946525f6c7986868686868686867a6d6054473a2d2114070000000000000000000000000713202d3a4653606d788686868686868686796c605346392d201300121f2b3844515d697479797979797979766a5f53473a2e2115080000000000000000000007121d27303945525d686d78797979797979797979766c5f5346392d201300111d2a36424e59636a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c64615a5045392d211408000f1b27333f4b5660676b6c6c6c6c6c6c605c544a3f34281c1003000000000000000000000000000000000005111d29343f485056586060606060605f5d574f4a5153575f6265686a6b6c6c6c6b6a6864615e56544e45413a312921170f050000000000000000000000030f1b27333f49535f69707d8792989fa7aba7a09d9898929191919299989d9f9892877d707a8794aab4a396897c706356493d3023160a000714212d3a4754606d7a8793a0ada6998c807366594d403326172128333f4a545e686f7c87929fa5aaa0958e81756d62584e443a2f261c11060000000000000000000000010a131c232b33383c3d42454645423d3937332d261d1e262e34383a4646463f3e3a342d251b11060000000000000000000000000001070c10161b1e252a2e34383c43474b5154596063696e73797e83888e92989ea1a8a39f9b95918b85817c76716d665c5145382c1f1306000005121f2b3744505b6575818e9bacb6a99c8f8276685e5243392f21170b020000000000000000000000000000000000010b17222d3846525d6875828f9ca8b4aa9a8d807367564c4135291d11040005111e2a36424d576976838f9ca9b5ab998c7f7366584e43362c21180f0905010000000004070c1319242f3a45515d6774818e9aa7b4aa9b8e817468544a3f34281c10030013202c3946535f6c7986929facada093867a6d6053473a2d20140d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0908060300000000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c100300000000000000000000000000000000000916222f3c4955626f7c83838281807f7e7d7c7b7a7978777887939f9e9184787879797a7b7c7d7e7f80818283847a6d6054473a2d211407000000000007131d28313a46535f69737f8c96a0aca2988e81756b60544a3f32281e100608141e2834404a54606b75828f98a2aca0968c80736a5f53473e32281e1308000000000a1623303d495663707c8996a7b1bbb5aba39f9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a96897d7063564a3d3023170a00131f2c3946525f6c7985929393939393877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693939393939386796c605346392d201300131f2c3946525f6c79868686868686867c6f6255483c2f221509000000000000000000000c18232e39424f59606d7a85868686868686868686796c605346392d201300121f2c3845525e6a7579797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979716c6155493c3023170a00111d2a37434f5c6772777979797979786d665c5044382c1f120600000000000000000000000000000000000915212e3a45505a62656c6c6c6c6c6c6c696157545c60646a6e72757778797979787674716e68626058514b433b332921170d030000000000000000000005121f2b3744505b656e7b859299a2aaaaa39f95918b888584848586888b90959e9992857b7b8894a1aea295897c6f6256493c2f231609000714212d3a4754606d7a8793a0ada6998c807366594d4033261e29333b44505b666d7a849199a3aea2989083796d605b51463d32281d140a00000000000000000000000000010a111921272c2f303538393835312d2b27221b14151c23282c2d39393932312e29231b13090000000000000000000000000000000000040a0f13191c23282b31373a4145474f54575e61676d71767c81868c91969c9fa4a7a09d98928e88837e796d6053463a2d20130700000613202d394653606c7885929eabb3a9988b7f7265564c4131271d0f050000000000000000000000000000000000000006111c2935414c5665727f8b98aab4aa9d918477685d5245392c201306000714202d3a46525e697885929eabafa399897c6f6256493d32231a0f060000000000000000000108131e2935404b5564707d8a97a9b3aa9d908377665c5044382b1f12060013202c3946535f6c7986929facada093867a6d6053473a2d201407010101010101010101010101010101010101010101010101010101010000000000000000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c100300000000000000000000000000000000000815212e3b47535f6a6f77767574737271706f6e6e6d66667885929e9d9083766b676d6e6f7071717273747576776d675d5145392c20130600000000020b18242f3a43505a616e7b86929fa8a89f92867b6e61594f42382d20160c00020c18232e39424f59616e7b86929fa8a89f92867b6e625a50443a2f24190c020000000a1623303d495663707c8995a0a9b3afa399928d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d897d7063564a3d3023170a00131f2c3946525f6c7985929f9f9f9f93877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d7986939f9f9f9f9386796c605346392d201300131f2c3946525f6c79859293939393887b6f6255483c2f22150900000000000000000005101c2834404b54606b74818e979393939393939386796c605346392d20130013202c3946535f6c79878686868686868686868686868686868686868686868686868686868686868686868686868686868686868686867e7164574a3e3124170b00111e2b3844515e6b7784868686868686786d6053463a2d20130800000000000000000000000000000000000b1724313d4a56626c71797979797979787369585f666d71777b7f8183858586858583817e7b756f6a605d554d453b33291f150b010000000000000000030f1b27333f4953606c77829097a2abaaa398928b837f7b79787778797b7f83899196978f827c8895a2aea295897c6f6256493c2f231609000714212d3a4754606d7a8793a0ada6998c807366594d40332627303b454f59606c78828f96a1aba49f92857b6e675d51493f342b20160b02000000000000000000000000000000070f161c202223292c2c2b2924201f1b17110a0a11171c1f202c2d2d2524221e181109010000000000000000000000000000000000000002080d11171c1f262b2f35393d44484d53555c60646a6f747a7f848a8f939a9fa2aaa29f9a94908a8376695d5043362a1d1000000815222e3b4855616e7b8897a1adada197887b6e6255483b3022150b0000000000000000000000000000000000000000000d1924303c4855626f7b8898a2aeaca095877a6d6054473a2d211407000814212e3b4754616e7b8797a2adac9f92867a6d6053473a2d2014070000000000000000000000010d18242f3b4754616e7a8797a1adac9f9286796d6053463a2d2013070013202c3946535f6c7986929facada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c1003000000000000000000000000000000000006131f2b37434e585f626a69686766666564636261605c6a7784919d9c8f8275695c60616263646566676869696a605d554c4135291d1104000000000a141d2935404b55616c75828f98a3aca0968c7f73695e52473d2f261c0e04000007121c27303d46535e69737f8c96a0aca3998f82766c61564c4135291e140a0000000714202d3a4753606d79839097a2acac9f928780808080808080808080808080808080808080808080808080808080808080808080808080807b6e6255483b2f22150800131f2c3946525f6c7985929facaca093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929f9f9f95887b6f6255483c2f2215090000000000000000050e1b242c3845515c666f7c88939fa99f9f9f9f9f9386796c605346392d20130013202c3946535f6c798692939393939393939393939393939393939393939393939393939393939393939393939393939393939393938a7e7164574a3e3124170b000e1b2734414e5a6774818d93939398897c6f6356493c2f24190d01000000000000000000000000000000000b1825323e4b5865717e868686868686857866616a6f787e83888b8e909192939291908e8b86827c746d675e574d453b31271d1207000000000000000005121f2b3744505b65717e8a949fa9aea39892867f78726e6c656b666d6e72767d849094948c7f8c99a5afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d4033232e39424d57616b73808c949fa8a69d928a7e71695f554b40372d22190e050000000000000000000000000000000000050b101316161c1f201e1c1713120f0b060000060c101213202020191815120d06000000000000000000000000000000000000000000000000060b10151a1d24292c33383b42464b5153586062686d72787d82878d92989da0a7a69f9c9084776a5d5144372a1e1100000a1724303d4a5763707d8a96a9b3ab9e928578695f53473a2e2114030000000000000000000000000000000000000000000813202d394653606c7985929facb1a795897c6f6256493c2f231609000916232f3c4956626f7c8995a9b3aa9e918477675d5145382c1f13060000000000000000000000000714202d3946525e687885919eabaea398887b6e6255483b2f2215080013202c3946535f6c7986929facada093867a6d6053473a2d20140c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c070604010000000000000000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c10030000000000000000000000000000000000030f1b26323c464e53555e5d5c5b5a595857565554535d697683909c9b8e8174685b535455565758595a5b5c5d5e54514c433a2f24190d0100000006111b262f3845515d67717e8a949eaaa69e9184796d60574d42352b1d140a000000000b151e2a36424d57606d7984919ea6ab9f948a7e71685d52453d30261c1106000006131f2c3945515d676e7b85929aa4afa3998e81747373737373737373737373737373737373737373737373737373737373737373737373736e695f53473a2e21140800131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c2f22150900000000000000020c16202b37424d57606d7983919aa4afacacacac9f9386796c605346392d20130013202c3946535f6c7986929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f978a7d7164574a3e3124170b000a1724313d4a5764707d8a99a3aa998c807366564c4135291d1104000000000000000000000000000000000b1724313e4a5764717d8a939393939786796d6c707c838b9095989b9d9e9f9f9f9e9d9b99928f8781796e695e574d43392f24180c03000000000000000613202d394653606c7883909da6b0a79f92867d726c6662605b545c6062656b707a8290959286929facafa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d40332834404b545e69707d88939fa6a99f948d80736c61574d43392f251b100700000000000000000000000000000000000000000407090a0f1213120f0a0605030000000000000306071313130c0b090601000000000000000000000000000000000000000000000000000000030a0f13181d20272c3136394045464e54565e61666c70767b80858b90959ca4aa9d9084776a5d5144372a1e1100000c1926323f4c5965727f8c98a5b2a99c8f837669574d42372b1e120600000000000000000000000000000000000000000006121f2b3844505b667783909daab1a4978b7e7164584b3e3125180b000a1723303d4a5663707d8996a3b0a99c90837669554b4035291d100400000000000000000000000005111e2a36414c566a7683909da9b4aa96897c6f6356493c302316090013202c3946535f6c7986929facada093867a6d6053473a2d2019191919191919191919191919191919191919191919191919191413110d0701000000000000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c10030000000000000000000000000000000000000a15202a343c43474951504f4e4d4c4b4a4948474f5b6875828e9b9a8d8073675a4d4748494a4b4c4d4e4f50514745413a31281e1308000000000b17222d38414e58606d7984919ea6ab9f948a7d70675c51453b3023190b0200000000030c1a25313b45515c67707d8a949eaba69e91857a6d60584e42382e23170b000004101d2935404b555f69707d88939fa6ab9d938b7e716a67676767676767676767676767676767676767676767676767676767676767676767625f574d42372b1e120600131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c2f2215090000000000000008131e28323a47535f69737f8c95a0acb6b8b9beac9f9386796c605346392d20130013202c3946535f6c7986929facacacaea9a7a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a4978a7d7164574a3e3124170b000714212d3a4754606d7a86929fa99d908376685d5245392c201307000000000000000000000000000000000a1723303d4a5663707d89969f9fa994877a6d707e8690959da09e9c9b9a9b9c9ea1a9aba39f9a938e847b6e695e554b403529201509000000000000030f1c28333f4a5463707d8995a0acab9f958b7e716b605b5453504a5053555961686d798391999299a3aeafa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d4033343c45515c666e7b85929aa4aba1979082786d605a50453c31271d1309000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d11161c1f252a2e34383c43474c52545b6064696e747a7e838c929caa9d9084776a5d5144372a1e1100000e1b2834414e5b6774818e9aa7b3a79a8d8074675a4d4131261a0e02000000000000000000000000000000000000000000030f1c28333f4a546875818e9ba8b3a6998d8073665a4d4033271a0d000b1724313e4a5764717d8a97a4b0a89b8f8275685c4f422f24180c00000000000000000000000000010d192530424f5c6875828f9ba8b0a3968a7d7063574a3d3024170a0013202c3946535f6c7986929facada093867a6d6053473a2d26262626262626262626262626262626262626262626262626262621201d18130c040000000000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c1003000000000000000000000000000000000000040e18222a32373b3c44434241403f3e3d3c3b414e5a6774818d9a988c7f7265594c3f3c3d3e3e3f40414243443a39352f281f160c01000000030f1b27333f49535f6a73808d96a19fa3998f82766c61554b4033291f100700000000000009141f2934404b55616c76828f99a39fa1978d80746a60544a3f34281c100300000c18242f39434d57616b73808c949ea8a59f92867c6f685d545a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a55534d453c31261a0e0200131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c2f221509000000000000030d1925303a44505a616e7b86929fa7afacabadb3ac9f9386796c605346392d20130013202c3946535f6c7986929facb9aea49d9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a978a7d7164574a3e3124170b000613202c3945515d677683909ca99f92867a6d6054473a2d211409000000000000000000000000000000000a1623303d495663707c8996a3aca195887b707e8792989e9896918f8e8d8e8f91979b9fa4aca49f9691847b6e675d51453c31261a0f02000000000006121f2b3844505b6674818e9ba7b1a99d9083766d6259504a46443f4446484f565d676f7c87929fa3abb4afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d40313c46505a606d78839097a2aca39991857a6e665c50483e332a1f150b00000000000000000000000000000000000000000000000000000000000004080a0a1313131312110f0b070100000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f141a1d24292c32383a41464a5053585f62676d7279808c99a69d9084776a5d5144372a1e110000101c2936434f5c6976828f9ca9b2a5998c7f7266594c3f3326190900000000000000000000000000000000000000000000000b17222d404d5a6773808d9aa6b3a89b8e8175685b4f4235281c0f000b1825313e4b5864717e8b97a4b1a89b8e8275685b4f4235281c070000000000000000000000000000081b2835414e5b6874818e9ba7b0a4978a7d7164574a3e3124170b0013202c3946535f6c7986929facada093867a6d6053473a333333333333333333333333333333333333333333333333333333332d2c29241d160d0400000000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c10030000000000000000000000000000000000000007101820262b2e2f37363534333332313033404d596673808c99978b7e7164584b3e313031323334353636372d2c29241e160d040000000005121f2b3744505b656f7c87929393939392877c6e625a5043392e21170d00000000000000030c18232f3943505a616e7b86929393939393877c6f665c5044382b1f1206000007121d27313b454f59606c78828f96a0aaa39891847a6d665b504d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4847423c332a2015090000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c2f2215090000000000010b151f2a36414c56626c76828f98a3aca49f9ea1a9b39f9386796c605346392d20130013202c3946535f6c7986929facb9a99d928d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8a7e7164574a3e3124170b0004111d2935414c5566737f8c99a9a3998a7d7164574a3e31261a0e02000000000000000000000000000000091623303c4956636f7c8996a2afa295897c7c86929996918c8784828181818285888e939aa1a9a8a0969083796d60584e43372b1f140900000000000613202d394653606c7985929eabada1978a7d70645a50443f393734383a3d444c555f6a74818e9aa7b1bdafa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d403a434e58616c74808d959fa9a59f92877d6f685e544a3f362c21180d0300000000000000000000000000000000000000000000000000000000050b10141617202020201f1e1b17120c0500000000000000000000000000000000000000000000000000000000000000000000000002080d11171c1f262a2f35383d43484c52545c60646a6e747a7e838c929caa9d9084776a5d5144372a1e110000101d2a3643505d697683909ca9b1a4978a7e7164574b3e3124180b0000000000000000000000000000000000000000000000061926323f4c5965727f8c98a5b2a89c8f8275695c4f4236291c0f000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2834414e5b6774818e9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d6053473f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3a39352f281f160c01000000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c10030000000000000000000000000000000000000000070e151b1f21222b2a29282726252425323f4c5865727f8b98968a7d7063574a3d30242425262728292a2b21201d19130c0400000000000613202d394653606c79838686868686868680736a5f53473e30271d0f05000000000000000007121d27313e47535f6973808686868686868683796d6053463a2d2013070000010b151f2a333e44505b666d7a849198a2aaa1968f82786c60594f45404040404040404040404040404040404040404040404040404040403b3a37312a21180e030000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c2f221509000000000007121d27313946525e68717e8b949faaa49a939297a1ad9f9386796c605346392d20130013202c3946535f6c7986929facb3a79a8d80808080808080808080808080808080808080808080808080808080808080808080808080807c6f6255483c2f22150900010d19242f3c4956626f7c8997a2ab9a8e817467574d42372b1e12050000000000000000000000000000000916232f3c4956626f7c8995a2afa396897d839098938d847f7b777574747476787c81889197a1a9a8a0958d80736a5f53473b30251a0e02000000000916232f3c4956626f7c8997a2adab9e9285796d6053463f332d2b282c2d323a434e58626e7b88959fabb8afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d40414b555f6a717e8a929da7a89e938c7f726b60564c42382e241a0f06000000000000000000000000000000000000000000000000000000000810171c2023242d2d2d2d2b2a28231e170f06000000000000000000000000000000000000000000000000000000000000000000040a0f13191c22282b3136394045474e54565e61666d70767b80858b90959ca4aa9d9084776a5d5144372a1e110000111e2a3744515d6a7783909daab0a3968a7d7063574a3d3024170a00000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4b1a99c908376695d5043362a1d10000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d60534c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4745413a31281d1307000000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c1003000000000000000000000000000000000000000000040a0f1315161e1d1c1b1a19181724313e4a5764717d8a9795897c6f6256493c2f231718191a1b1c1d1e1413110d080100000000000005121f2b3744505b656c7679797979797979736e64584e43352c1e150b000000000000000000010b151f2b37424d57636e7379797979797979776d665c5044382b1f1206000000030d182128333f4a545d686f7c86929fa4a89f948c80736b61574d43392f343434343434343434343434343434343434343434343434342f2e2b2620180f06000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c2f22150900000000020b18232f39434f59616d7a85929ea6a99f938785929eab9f9386796c605346392d20130013202c3946535f6c7986929facada0938679737373737373737373737373737373737373737373737373737373737373737373737373736f6a5f53473a2e21150800000813202d394653606c7985929eab9e918478695f53463a2d2114060000000000000000000000000000000916222f3c4955626f7c8895a2afa89c8f828f9593888079726e6969686768696a6f747d859197a2ada79f92877c6e62574d42362a1e1205000000000c1926323f4c5965727f8c98a9b3a79b8e8174665c50443828221f1c1f2028313c47535f6a7683909da9b6afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d3f45515d676f7c86929fa4aaa0968f81756d62594f443b30261c12080000000000000000000000000000000000000000000000000000000008111a22282d3031393939393837342f2821180f05000000000000000000000000000000000000000000000000000000000000070c10151b1e24292d33383b42464b5153586062686d73787d82888d92989da0a7a69f9c9084776a5d5144372a1e110000111e2b3844515e6b7784919eaaafa396897c706356493d3023160a00000000000000000000000000000000000000000000000b1824313e4b5764717e8a97a4b1aa9d9083776a5d5044372a1d11000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d605959595959595959595959595959595959595959595959595959595959595954514b433a2f24180d010000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c100300000000000000000000000000000000000000000000000306080911100f0e0d0c0b1623303d495663707c899694877b6e6154483b2e21150b0c0d0e0f1011070604010000000000000000030f1b27333f49535b60696c6c6c6c6c6c6c67645c52463c31231a0c0300000000000000000000030d1a26313c45525c63666c6c6c6c6c6c6c6a605c544a3f34281c100300000000060f17222d38424c565f6a717e8b929da7a69f93887d70695f554b40352927272727272727272727272727272727272727272727272722211e1a150e0600000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c2f221509000000000a141d2934404b55606b74818e97a1ada1978e8183909da99f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d676767676767676767676767676767676767676767676767676767676767676767676767625f584e43372b1f1206000006121f2b3844505b6675828e9ba8a196887b6e6155483b2e23170c0000000000000000000000000000000916222f3c4955626f7c8895a2afaa9e948f9493887e736d67615e575b5a5b5860626b6f7c85929ea6afa3998e8175695e52463a2d201408000000020f1b2835424e5b6875818e9ba8b5ab988b7e7165544a3f342817121012161f2b37434e5866727f8c99abb5afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366595049515b606d79849198a2aea29891847a6d605b51473d32291e150a0000000000000000000000000000000000000000000000000000000005101a232c33393c3d464646464543403a332a21170c01000000000000000000000000000000000000000000000000000003090e12181c1f262b3035383f44464d53555d60656a6f757a7f848a8f949a9fa2aaa29f9a948f8a8276695d5043362a1d100000121f2b3845525e6b7885919eabafa296897c6f6356493c3023160900000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0aa9e9184776b5e5144382b1e11000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d6666666666666666666666666666666666666666666666666666666666666666605d554b4135291d11040000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c10030000000000000000000000000000000000000000000000000000000403020100000915222f3c4855626f7b889598867a6d6053473a2d201407000102030304000000000000000000000000000b17222d38414950535d606060606060605a58524a40332a20110800000000000000000000000009151f2a33404a52585a606060606060605d53504a42382e23170b00000000000006111c262f3a444e58616c74808d959fa9a49a92857b6e675d51453f342b20171a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1514120e09030000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c2f22150900000006111b262f3845515c67707d89939ea9a69e91857a84919daa9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d605a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a55534e463c31261b0f030000030f1c28333f4a5465717e8b98a8a8988b7e7265544a3f34281c100300000000000000000000000000000916222f3c4955626f7c8895a2afb0a69e9c958c80736c605c55524d4e4e4e4e5459606a717e8a949fabab9f92877b6e6154483b3025190e02000005111d2a36414c566a7784909daaafa499887b6f6255483c2e23170603060d1a26313c4956626f7c8999a3afafa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c80736b605b5358626d75818e96a0aaa49f92867c6f675d51493f352b20170c03000000000000000000000000000000000000000000000000000000000b17222c363e44494a5353535352504b453c33281e1207000000000000000000000000000000000000000000000001040b10141a1d23282c32373a41464a5053575f61676d71777c81868c91969c9fa6a7a09d98928d88837e786d6053463a2d2013070000121f2b3845525e6b7884919eabafa296897c6f6356493c3023160900000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4b0aa9d9184776a5e5144372b1e11000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada09386797272727272727272727272727272727272727272727272727272727272727272726d675d5145392c2013060000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c10030000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a879a928579675d5145392c2013060000000000000000000000000000000000000006111b262f383f444650535353535353534d4c4740382e21180e00000000000000000000000000030e18212e3840474b4d535353535353535046443f3830261c1106000000000000000a141d28323c46505a606d78839097a1aba2979083796d605b51463d32291e140a0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0808060200000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c2f2215090000000b17222d38414e58606d7984919ea5aa9e948a7e7885919eab9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d60534d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4847433c342a20150a000000000b17222d3b4854616e7b8795a0a89b8f8275665c5044382c1f120600000000000000000000000000000916222f3c4955626f7c8895a2afb8b0a89d9083786d605a514b464241414143474f58616c76828f9ca9afa3998c7f7266564c41362a1e110500000713202d3946525e687985929facac9f9386796d6053463a2d20130600000913202d3a4653606d7986929facafa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0adab9e91847d726c655d606a727f8b939ea8a79d928a7e716a5f554c41372d23190e050000000000000000000000000000000000000000000000000000000004101c28333e48505557606060605e5c564e453a2f23170b00000000000000000000000000000000000000000001080d11161c1f252a2e34383c43474c52545b6063696e73797e83898e92999ea1a8a39f9b95908b85807b76716d665c5144382c1f12060000111e2b3844515e6b7784919eaab0a396897d7063564a3d3023170a00000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a99d9083766a5d5043372a1d10000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facb2a6998c7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f796d6054473a2d2114070000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c10030000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7986939184786b554b4035291d100400000000000000000000000000000000000000000a141d262d3337394346464646464646403f3c362e261c0f060000000000000000000000000000060f1c262e363b3f4046464646464646443a38342e261e140a0000000000000000020b16202a343e44515c666e7b859199a3a9a0958e81756d62584e443a30261c11060001010101010101010101010101010101010000000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c2f2215090000040f1b27333f49535f6a73808c96a0aca2988f82757985929fac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d6053474040404040404040404040404040404040404040404040404040404040404040403c3a37312a22180e04000000000614202d3a46525e697784919daa9f9285796d6053463a2d20130800000000000000000000000000000916222f3c4955626f7c8895a2afb9ada1968a7d71665c5045403936303432373d46505a63707d8a97a1adab9d908377685e5246392d20140700000714212e3a4754616d7a8798a2aeab9e918478675c5145382c1f1306000006131f2c3845515c667784919daaafa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0adada19691877f776d68686f7c87929fa5a99f958d80746c61584e433a2f251b110700000000000000000000000000000000000000000000000000000000000814202d3944505a61646c6c6c6c6b6860564b4034281b0f0200000000000000000000000000000000000000040c13191d20272c3036394045464e54565d61666c70757b80858b90959b9fa3a8a19e99928e89837e7a746e6a64605c544a4034281c10040000111e2a3744515d6a7784909daab0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000c1825323f4b5865727e8b98a5b1a99c8f8276695c504336291d10000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facb9a89c918c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c877b6e6154483b2e2115080000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c10030000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d79869a9184786b554b4135291d11040000000000000000000000000000000000000000020b141b22272b2d36393939393939393433302b241c140b000000000000000000000000000000000a141c242a2f323339393939393939372d2b28231c140c02000000000000000000040e18222834404a545e69707d87929fa5a79e938b7f726a60564c42382e23170f0600000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c2f22150900040d1a232b3744505b656f7c87929fa8a79f92867b6e7986939fac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d6053473a34343434343434343434343434343434343434343434343434343434343434342f2e2b2620181006000000000005121e2a36424d576774808d9aaaa298897c6f6356493c2f24190d01000000000000000000000000000916222f3c4955626f7c8895a2afb8ab9e9184786c60544a3f342f2a2527272b333e4653606c7885929eabaca095877a6e6154473b2e21140800000915222f3c4855626f7b8895aab4a99d9083766a554b4034281c1004000004101c2834404b546975828f9ca8afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0adb2a9a199928c827a6f6d7a849199a3aba1979083786d605a50463c31281e130a000000000000000000000000000000000000000000000000000000000000061623303c4955616c70797979797872685c5043372a1e07000000000000000000000000000000000000010a0d161e24292c33383b42464b5153585f62686d72787d82878d92979da0a7a49f9c96918c86817c77726d67625f5853514a42392e23180c000000101d2a3643505d697683909ca9b1a5988b7e7265584b3f3225180700000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3a89b8f8275685c4f4235291c0f000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facb9ada39c999999999999999999999999999999999999999999999999999999999999999994877b6e6154483b2e2115080000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c10030000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a8794928679675d5145392c201306000000000000000000000000000000000000000000020a11171b1f202a2d2d2d2d2d2d2d2726231f19120b0200000000000000000000000000000000020a12191f2326272d2d2d2d2d2d2d2a201f1c17110a020000000000000000000000061018232e39424d57606b727f8c939ea7a59f92877c6f685e544a3f342821180d04000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c2f221509010c161f2a36414c56606c77839099a3aba0958c7f726d7a879aa4af9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d6053473a2d2727272727272727272727272727272727272727272727272727272727272722211f1b150e06000000000000020e1a25303d4a5763707d8a98a3aa998c807366564c4135291d1104000000000000000000000000000916222f3c4955626f7c8895a2afb6ac9a8d8074665b5042382e231d1a1b1b212b3844505b6674818e9ba7b1a7978a7e7164574b3e3124180700000a1623303d495663707c8996a3afa89c8f8275695c4f422e23180c000000000c18232e414e5a6774818d9aa7afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0adbbb2aba39f948f847c78828f96a1aba49992857b6e665c51483e342a1f160c0100000000000000000000000000000000000000000000000000000002080e111724313d4a5764707d8686868684786b5e5245382b18120e09030000000000000000000000000000000a131c1f282f35393d44484d52545c60646a6f747a7f848a8f939a9fa2a9a19e9a938f8a847f7a756f6b65605d55534e4644403930271c12070000000f1c2835424f5b6875818e9ba8b3a6998c807366594d402f23180c00000000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7b4a79a8e8174675b4e4134281b0e000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facb9b5ada8a6a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a194877b6e6154483b2e2115080000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c10030000000000000000000000000000000000000000000000000000000403020101000915222f3c4855626f7b889598877a6d6054473a2d2114070001020303040000000000000000000000000000000000060b0f12131d202020202020201a1917130e080100000000000000000000000000000000000000080e1317191a202020202020201d1312100b06000000000000000000000000000007121c27303b454f59626d75818e95a0aaa39991847a6d665c50443e332a1f160c010000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c2f22150907121d28313946525e68727e8b949faba3999083786d6e7a8794a1b69f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d6053473a2d201a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1515120f0a0400000000000000000914202d3a4753606d7a86929fa99d908376685d5245392c201307000000000000000000000000000916222f3c4955626f7c8895a2afafa49a897d7063544a3f30261c120e0a0f1c28333f4a5465717e8b98abb5a69a8d8073675a4d402e23180c00000a1724313d4a5764707d8a97a3b0a89b8e8175685b4e4235281b0700000000071a2633404d596673808c99a6afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0adb8b0aaa9a69e969186828f949fa8a69f93877d70695e544b40362c22180d04000000000000000000000000000000000000000000000000000001070c14191b2227313d4a5764707d8a93939185786b5e52453828231c1a140d070100000000000000000000000007121c252e313a4145474f54575e61666d71767c81868c91969c9fa4a79f9d97928d87827d78726d6863605953514b47433c38342e271e150b000000000d1a2734404d5a6773808d9aa6b3a89b8e817568554b4034291c100400000000000000000000000000000000000000000005121e2a36424d576976838f9ca9b2a5988c7f7265594c3f3226190c000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facb9afa7a2a09f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f94877b6e6154483b2e2115080000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c100300000000000000000000000000000000000000000000000206080811100f0e0d0c0b1623303d495663707c899694887b6e6155483b2e22150b0c0d0e0f10110707050100000000000000000000000000000003050610131313131313130d0d0b07030000000000000000000000000000000000000000000002070a0c0d131313131313131107060300000000000000000000000000000000000b151e29333d47515b606d79839098a2aba1968f82786d605a50453c31281d13070000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070303030303030303030303030713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c2f2215090b18242f39434f59616e7a85929fa6a89f92877c6f666e7b8894a1ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d6053473a2d20140d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d090806030000000000000000000006131f2c3945515d6776838f9ca99f92867a6d6054473a2d211409000000000000000000000000000916222f3c4955626f7c8895a2afac9f93867a6d6054473a2d21150a01000b17222d3c4855626f7b8899a4afa99c8f837669554b4034281c1004000b1724313e4a5764717d8a97a4b0a79a8d8174675a4e4134271b0e010000000c1926323f4c5965727f8c98a5afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0adb0a69e9c9fa2a199928f949ea6a89e948c7f736b60574d42392e241b10060000000000000000000000000000000000000000000000000000030b12181e252a2d33373d4a5764707d8a979e9185786b5e524538342e2a251f18120c0400000000000000000000020d19232e3740434c5154596063696e73797e83888e92989ea0a8a29f9a95908b85807b76706c66615e56544f4745403a37312c28231c150c03000000000c1925323f4c5865727f8b98abb5aa9d908477675c5145382c1f13060000000000000000000000000000000000000000000714212d3a46535f697885929fabb4aa968a7d7063574a3d3024170a000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facb9a79d95939393939393939393939393939393939393939393939393939393939393939393877b6e6154483b2e2115080000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c1003000000000000000000000000000000000000000000030a0f1214151e1d1c1b1a19181824313e4b5764717e8a9795897c6f6256493c2f231718191a1b1c1d1e1413110d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c17202b353f45515d676e7b86929aa4a89f948d80736c61574e433a2f2418110700000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114101010101010101010101010101013202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c2f22150a141d2935404b55616b75818e97a2aca1968d80746a626f7b8895a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d6053473a2d20140701010101010101010101010101010101010101010101010101010101000000000000000000000000000004101d2935404b5566727f8c99a9a3998a7d7164574a3e31261a0e020000000000000000000000000916222f3c4955626f7c8895a2afaa9e918477675d5145392c20130300000613202d3a4653606d7986939facab9e918478675c5145382c1f1306000b1824313e4b5764717e8a97a4b1a79a8d8174675a4e4134271b0e010000000c1825323f4b5865727e8b98a5afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0adaa9e948f9298a2a39f9c9ea6aaa1968f82776c60594f453b30271d12090000000000000000000000000000000000000000000000000000060d151d23293036383f44464a5764707d8a979e9185786b5e5246444039363029241d160d0600000000000000000006121e2a35404951555d60656b70757b80858a90959a9fa2a8a09d98928e88837e79736e6963605b54524c48433d39352f2b261f1c18120b030000000000091623303c4956636f7c8999a4afac9f9286796d6053473a2d22170b0000000000000000000000000000000000000000000815222e3b4855616e7b8897a2adaea298887b6e6155483b2e221508000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facb9a2958b868686868686868686868686868686868686868686868686868686868686868686867b6e6154483b2e2115080000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c10030000000000000000000000000000000000000000060e151a1f21222b2a29282726252425323f4c5865727f8b98968a7d7063574a3d30242425262728292a2b21201d19130c0500000000000000000000000305060e101010101010090806030000000000000000010304060606060504030100000000000000000000000000000000000000000000000000000000000000000000000000000000050e19232935404b555f69707e88939fa6a69d928a7e716a5f554b40352923190e05000000000000000000000000000000000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d211c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c2f2215111c262f3845515d67707d8a939ea9a59e9184796d60626f7c8895a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18242f3c4955626f7c8897a1ab9a8d817467574d42372b1e12050000000000000000000000000916222f3c4955626f7c8895a2afa89c8f827569554b4135291d1104000006131f2c3845515c677884919eabac9f9386796d6053463a2d201307000b1825313e4b5864717e8b97a4b1a79a8d8074675a4d4134271a0e010000000b1825323e4b5865717e8b98a4afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada99c8f82869298a3aba9aaaea39891847a6d655b50473d33291e150b0000000000000000000000000000000000000000000000000000070f181f272f343b4146495053565964707d8a979e9185786b5e5753514a46423b352f281f180f0700000000000000000a16232f3b46515b63676d72777d82878d92979d9fa7a39f9b96918b86817c76716d67615f5753504a46413a38322c29241d1a15100c07000000000000000714202d3a4753606d7a86939facaea399897d706353493f33271b0f030000000000000000000000000000000000000004111d2935414c5565717e8b98a9b3ac9f9285786d6053463a2d201307000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867979797979797979797979797979797979797979797979797979797979797979797976695e52463a2d2014070000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c100300000000000000000000000000000000000000060f1820262b2e2f37363534343332313033404d596673808c99978b7e7164584b3e313031323334353636372e2d2a251e170e050000000000000000060b0f12131b1d1d1d1d1d1d1615130f0a0400020507080b0e1011121313131211100e0b08070502000000000000000000000000000000000000000000000000000000000000000000000000071118242f39434d57616c73808d949fa8a49f92867c6e675d51453f352b20170c030000000000000000000000000000000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2929292929292929292929292929292929292d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c2f221517222d38424e58606d7984919ea5a99e938a7d70675d626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d6053473a2d20140c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c070604010000000000000000000000000000000713202d394653606c7885919eaa9e918477695f53463a2d2114060000000000000000000000000916222f3c4955626f7c8895a2afa79a8d8174675a4e412f24180d01000004101c2834404b556a7683909da9afa49a887b6e6155483b2e221508000b1824313e4b5764717e8a97a4b1a79a8d8074675a4d4134271a0e010000000b1825323e4b5865717e8b98a4afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807d869299a3abb5ac9f92867c6f685d53493f352b21170c0300000000000000000000000000000000000000000000000000071019212a313940454c52535b60636669707d8a979e9185786b6763605c54524d454039312921191007000000000000000c1925323e4b57636d737a7f84898f92999ea1a9a19e99928f89847f7a746f6a64605c55534d46443f3836302c27201d18130f0a040000000000000000000613202c3945515d677784909daab4ab9a8d8073655b5044372b1f140a000000000000000000000000000000000000010c13202c3945515d6775828e9ba8b5a89c8f8275665c5044382b1f1206000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5e574d42362a1e12050000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c1003000000000000000000000000000000000000030e18222a31373a3b44434241403f3e3d3c3b414e5a6774818d9a998c7f7266594c3f3c3d3d3e3f40414243443a3936302920170c020000000000020a11171b1f202729292929292922221f1b150e090e111414181a1c1e1f20201f1f1e1c1a181514120e0904010000000000000000000000000000000000000000000000000000000000000000000007121d28313c45505a606c78828f96a1aaa2989183796d605b51473d33291e150b0000000000000000000000000000000000000000000000131f2c3946525f6c7985929facada093877a6d6054473a36363636363636363636363636363636363636363a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c2f22151c28333f4a545f6a73808d96a1aca2978e81756b6155626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d6053473a2d2019191919191919191919191919191919191919191919191919191413110d07010000000000000000000000000005121f2b3744505b6575818e9baca096887b6e6155483b2e23170c0000000000000000000000000916222f3c4955626f7c8895a2afa6998c807366594d4033261a07000000000c18232e424f5c6975828f9ca8b6ac95897c6f6256493c2f231609000b1724313e4a5764717d8a97a4b0a79a8d8174675a4e4134271b0e010000000c1825323f4b5865727e8b98a5afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c80737d879299a4aca6998c80736a60584e453c332a21170f05000000000000000000000000000000000000000000000000060f19222b333c434b51565e61656c6f7375777e8a979e9184787674706d66615e57514b433b332b22190f060000000000000d192633404c5966737f868b91959b9fa3a69f9c97918c86827d78726d68625f5853514b46423b38332d2a251e1b16110d0701000000000000000000000004101d2935404b556773808d9aa9b3ab9e9184786c6053463c2f261b1106000000000000000000000000000000000007131d28333f4a54606d7a86929facb1a7988b7f7265544a3f34281c1003000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d60606060606060606060606060606060606060606060606060606060606060605f524d453b30251a0e020000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c10030000000000000000000000000000000000000a15202a343c43474851504f4e4d4c4b4a4948474f5b6875828e9b9a8d8073675a4d4748494a4b4c4d4e4f50514746413a32291e130800000000020b141b22272b2d343636363636362f2e2b262019141a1e20212527292b2c2c2d2c2c2b29272421211e1a14110d08020000000000000000000000000000000000000000000000000000000000000000010c161f2a333e44505b666d7a849198a3aaa0958e81756d62594f453b30271c120700000000000000000000000000000000000000000000131f2c3946525f6c7985929facada093877a6d605447434343434343434343434343434343434343434343434653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c2f221a242b3844505b666f7c87929fa8a69f92857a6e615956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d6053473a2d26262626262626262626262626262626262626262626262626262621201d18130c04000000000000000000000000030f1b27333f495364717e8b9aa4a8988b7e7265544a3f34281c100300000000000000000000000916222f3c4955626f7c8895a2afa5988b7f7265584c3f3225190c00000000071b2835424e5b6875818e9ba8b0a396897d7063564a3d3023170a000a1724303d4a5763707d8a96a3b0a89b8e8175685b4e4235281b07000000000c1926323f4c5965727f8c98a5afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c8073717e87939aa4ab9e92857c6f6a5f574d453b332921170e0500000000000000000000000000000000000000000000040d18212b343c454d555c60686e73787c7f828486929fa196898482807d79746e69605d554d453d342b21180d030000000000101d2a3743505d6a768390989da0a8a29f9a948f8a84807b75706c65605d56544e4745403936312b28221c19130f0a040100000000000000000000000000010d18242f3d495663707c8997a1adaca196897d7063584e41382d22170f06000000000000000000000000000000071118242f3844505b66717e8b98a2aeaca095887b6e6155483b2e23170b00000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d60535353535353535353535353535353535353535353535353535353535353534846423b33291f1409000000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c10030000000000000000000000000000000000020f1a26313c464e53555e5d5c5b5a595857565554535d697683909c9b8e8174685b535455565758595a5b5c5d5e54524c443a3025190d010000000a141d262d333739414343434343433c3b37322a2220252a2d2e313436373939393938373634312e2d2a25201d19130d070100000000000000000000000000000000000000000000000000000000000000040d182128333f4a545e686f7c86929fa5a79e938c7f726b60574d42392e23181006000000000000000000000000000000000000000000131f2c3946525f6c7985929facada093877a6d60544f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f53606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c2f221f2a36424d57606c78839099a3ab9f948b7e71685e5256626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d6053473a333333333333333333333333333333333333333333333333333333332d2c29241d160d040000000000000000000000000b17222d3b4754616e7a87939fa89b8f8275665c5044382c1f120600000000000000000000000916222f3c4955626f7c8895a2afa5988b7e7265584b3f3225180c000000010e1b2834414e5b6774818e9aa7b0a3978a7d7064574a3d3124170a000916232f3c4956626f7c8995acb6a89b8f8275685c4f422e23180c000000000d1a2633404d596673808c99a6afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c80736c717e88939fa3a19792857c6e695f574d453b332920170e050000000000000000000000000000000000000000010c161f2a333c464e575f676d737a8084898c8f919298a3a8a197918f8d8a85817b736d675f574e463d332a1f150b0100000000101d2a3743505d6a7683909da7a09d98928d88837d79736e6963605b53524c47433c38342f2a261f1c17110d080200000000000000000000000000000000000713202d3a4653606d7985929eacb2a89c8f82756a5f53493f332721180f0802000000000000000000000003091119232935404b55606c7884919daab3a99d908477695f53463a2d1c110600000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d60534746464646464646464646464646464646464646464646464646464646463b3a36302921170d02000000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c1003000000000000000000000000000000000006121f2b37434e585f626a69686767666564636261605c6a7784919d9c8f8275695c60616263646566676869696a615e564c41362a1d1105000006111b262f383f44464e5050505050504947433c34292c30363a3b3e41434445464646454443413e3b3a36312c29241e18130c0400000000000000000000000000000000000000000000000000000000000000060f17222d38424c56606a717e8b939da7a59f92877d70695e544a40342822180d040000000000000000000000000000000000000000131f2c3946525f6c7985929facada093877a6d605c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c2f2228313a46525e69727f8b959faba3999082776c60564c56626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d6053473f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3a39352f281f160c0100000000000000000000000614202d3946525e687783909daa9f9285796d6053463a2d20130800000000000000000000000916222f3c4955626f7c8895a2afa4988b7e7165584b3e3225180b000000010e1b2734414e5a6774818d9aa7b1a4978a7e7164574b3e3124180b000815222e3b4855616e7b889aa4afa99d9083766a544b4034281c10040000010e1b2734414e5a6774818d9aa7afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c8073666c727f8b919ca4a19791857b6e695f574d453b322920170e050000000000000000000000000000000000000008131e28313c464e5860696e7980868d9196999c9d9fa3aaaba9a19e9c9a97928d8680796e6960584e453b31271d120700000000101d2a3743505d6a7683909d9b95908b85807b76716d66615e5753504945413a37322c29231d1a140f0b06000000000000000000000000000000000000000006121f2c3844505c6673808d9aa4afaa9e94887c6f655b50443d332a2219140e09060400000100000406090e141a232b353d45515d67717e8a95a0acada2978b7e7265574d42362a1e0a0000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d6053473a393939393939393939393939393939393939393939393939393939392e2d2a251f170f0500000000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c100300000000000000000000000000000000000814212e3a47535f6a6e77767574737271706f6e6d6d66667885929e9d9083766b666d6e6f7070717273747576776d685e5246392d20130700000b17222d38414950535a5c5c5c5c5c5c55544e463c35393b4246474b4d4f515253535252514f4d4b4846423b39353029241d160d070000000000000000000000000000000000000000000000000000000000000006111c262f3a444e58626c74818e959fa9a39991857b6e665c51443e342a20160b0200000000000000000000000000000000000000131f2c3946525f6c7985929facada093877a6d696969696969696969696969696969696969696969696969696969696d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c2f242f3a43505a616e7b86929fa7a89f92867c6e655b504956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d60534c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4745413a31281d1307000000000000000000000005111e2a36414c566773808d9aaaa298897c6f6356493c2f24190d01000000000000000000000916222f3c4955626f7c8895a2afa4988b7e7165584b3e3225180b000000010e1a2734414d5a6774808d9aa7b1a4978b7e7164584b3e3125180b000714202d3a4753606d7a86939facab9e918478665c5145382c1f1306000004111d2935404b556976828f9ca9afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366626d727f8c929ca4a19791847b6e695e574d443b322920160e040000000000000000000000000000000000010d19242f3a434e58606a6f7b838c92989ea1a9a8aaa39f9e9e9fa3aaa8a9a29f98928d837b6f6a60574d43392f24180c03000000101d2a3743505d6a768390928e89837e79746e6a64605c54524d46443f38352f2b261f1c18120e09030000000000000000000000000000000000000000000003101c28343f4a54616e7b87939fabb0a69c9083776c60584e453c342a251e1a1312100c070e070c1013131a1f262a353d47505a606d7984919ea7b1a99f9285796d6053473b31261a0e0000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d6053473a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d21201e1a140d050000000000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c100300000000000000000000000000000000000815222f3b4855626e7c83838281807f7e7d7c7b7a7978777887939f9e9184787778797a7b7c7d7e7f80818283847a6d6154473a2e21140700030f1b27333f49535b6067696969696969625f584e454045474d5254585a5c5e5f5f605f5f5e5c5a5754534d4745413a352f281f191109010000000000000000000000000000000000000000000000000000000000000a141d28323c46505a606d79839097a1aba1979083786d605a50463c32281d140a00000000000000000000000000000000000000131f2c3946525f6c7985929facada093877a767676767676767676767676767676767676767676767676767676767676788693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c2f2935414c55616c75828f98a2aca0968c80736a5f53494956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d605959595959595959595959595959595959595959595959595959595959595954514b433a2f24180d0100000000000000000000010d1925303d495663707d8998a2aa998c807366564c4135291d1104000000000000000000000916222f3c4955626f7c8895a2afa4988b7e7165584b3e3225180b000000010e1b2734414e5a6774818d9aa7b1a4978a7e7164574b3e3124180b0006131f2c3845515c677885919eabac9f9286796d6053463a2d20130600000613202c3945515d677784919eaaafa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c8073665b636d73808d929da5a19691847b6e695e564d443a322820160d040000000000000000000000000000000004111d2935414c555f6a6f7c8590959fa2aaa69f9c98989291919298979c9fa4aaa39f9590857c6f695f554b4035291f1509000000101d2a3743505d6a76838c86817c77716d67625f5853504a46423b37332d29241e1b15100c0701000000000000000000000000000000000000000000000000000c17232e3846535f6975828e99a3afab9f948b7f726a60574e463e36302a25201f1c181b1a1b181c1f20262b31363f474f59616c74808d96a1adada2978d8073675d5145392a1f14090000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d6053473a2d2020202020202020202020202020202020202020202020202020201514120e0902000000000000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c100300000000000000000000000000000000000916222f3c4955626f7c88908f8e8d8c8b8a898887868584839099a49f9287838485868788898a8b8c8d8e8f90877a6e6154473b2e2114080005121f2b3744505b656c747676767676766f6a5f574d4b5153575e616467696a6c6c6c6c6b6a696764615e5754524c45403a312b231b130a010000000000000000000000000000000000000000000000000000000000020b16202b343f45515c676e7b859299a3a99f958d80746c61584e443a2f261b1106000000000000000000000000000000000000131f2c3946525f6c7985929facb6a99c8f82828282828282828282828282828282828282828282828282828282828282828f9ca9b5ac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c2f303845515d67707d8a939eaaa49a9184796d60584e414956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d6666666666666666666666666666666666666666666666666666666666666666605d554b4135291d110400000000000000000000000813202d3a4653606d7985929fa99d908376685d5245392c201307000000000000000000000916222f3c4955626f7c8895a2afa5988b7f7265584c3f3225190c000000010e1b2834414e5b6774818e9aa7b0a4978a7d7164574a3e3124170b0004101c2934404b55697683909ca9afa399887b6f6255483c2d22170b00010714202d3a4753606d7a86939facafa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366595b636e74808d939da5a19691847b6e685e564c443a32281f160d040000000000000000000000000000030e18222c3945515d676e7c859297a0a7a8a09e94908b8886858586878a8f93999fa7a7a09792857b6e675d51453c31261a0e0000000f1b2835424e5b6875817f7a756f6b65605d55534e46443f3836302b27221b19130f0a040000000000000000000000000000000000000000000000000000000006111c2a36424d57626e7b87929fa8b0a69f92877c6f695f585046413b36312d2c282327272723282c2d31373b42465159606b717e8a929da8b1a79f92857a6d61554b4035291d10040000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d6053473a2d201413131313131313131313131313131313131313131313131313080705020000000000000000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c100704000000000000000000000000000000000916222f3c4955626f7c88959b9a9a99989796959a93929190959faba39992909192989495969798999a9b9c94877a6e6154473b2e211408000613202d394653606c79808283838383837c6f695e56555d6065696e717476777879797978777674716e6966605d56514b433d352d251c130a000000000000000000000000000000000000000000000000000000000000040e19222834404b555e69707d87929fa5a79d928a7e716a5f564c41382d22170f050000000000000000000000000000000000131f2c3946525f6c7985929facb8ab9f948f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f949fabb7ac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c2e38424e58606d7a84919ea6a99f93887d70675c51463c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada09386797272727272727272727272727272727272727272727272727272727272727272726d675d5145392c201306000000000000000000000006131f2c3845515c6775828f9ca89f92867a6d6054473a2d211409000000000000000000000916222f3c4955626f7c8895a2afa6998c7f7366594c4033261906000000020f1b2835424e5b6875818e9ba8b0a3968a7d7063574a3d3024170a00000c18232f414d5a6774808d9aa7b5ab978b7e716453493f33271b0f0b0e121c28333f4a5463707d899aa4afafa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c80736659525c606c77818e939ea6a09691847a6e685e564c443a31281f160d04000000000000000000000000000a15202b37434e58606d7a849197a2a9a79f969189837e7b797878797b7e828790959ea5a9a1979184796d60574d42372b1d120700000e1b2734404d59656f75726d6863605953514b47433c38342e2a251f1b17110d0801000000000000000000000000000000000000000000000000000000000000000e1a26313b47535f6974808d96a0abaea39991857b6e6a615a524c46423c3a38342e3434342e34383a3c42474d535b626b707d86929fa4aeaaa0958b7f72685e5243392f24180d010000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d6053473a2d20140d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b0a0805000000000000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336291c1614100b0500000000000000000000000000000916222f3c4955626f7c8895a2a7a6a5a4a3a2aca49f9f9e9d9fa7b1aba39f9d9e9fa2aaa2a3a3a4a5a6a7a194877a6e6154473b2e2114080005121f2b3744505b656e7b858f8f8f8f8f857b6e685d60676d72777b7e80828485868685858482807e7b77726d68605d554f473f372e251c1209000000000000000000000000000000000000000000000000000000000000071018232e39434d57606b727f8c939ea8a49f92867c6f685d53493f332721170c0300000000000000000000000000000000131f2c3946525f6c7985929facb8b0a69f9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9fa6b0bbac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c343f4a54606a74808d96a1ada1978e81746b60554b403c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facb2a6998c7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f796d6054473a2d211407000000000000000000000004101c2834404b5565727f8b98a8a3998a7d7064574a3d31261a0e020000000000000000000916222f3c4955626f7c8895a2afa79a8d8074675a4d412e23170c000000030f1c2936424f5c6975828f9ca8afa296897c6f6356493c302316090000071824313e4b5764717e8a97a7b1a79a8e8174655b5044372b211b171a1d242b3844505b6673808d9aacb6afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d505b656c78818e949ea6a09691837a6d685e564c433a31281f160d030000000000000000000000020f1a26313b4754606a74818e96a0a9a89f9590847d76716e6c656b696e71757c838e939ea6a9a0968d8073695f5347392e23180c00000c1825313d48535d656866615e56544f4745403937312c28231c1a140f0b060000000000000000000000000000000000000000000000000000000000000000000009141f2b37424d57606d79849199a4afaba19791847c706c615e56534d494644404141414141404546494d53575f616d727d869298a2aeaca2989083786c60564c4131281d1207000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d6053473a2d201a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a171714110c0500000000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f4336292423201c171008000000000000000000000000000916222f3c4955626f7c88959d9c9b9a98979695949992919095a0aca399929091929994969798999a9b9c9d94877a6e6154473b2e21140800030f1b27333f49535e696f7c8692999c9790837a6d666d72797f83878b8d8f919292939292918f8d8a87837f7a736d676059514940372e241b0f0600000000000000000000000000000000000000000000000000000000000007121d27303b454f59636d75818f95a0aaa29891847a6d655b50443d33291e150b00000000000000000000000000000000131f2c3946525f6c7985929facb8b8b0aba9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9abb0b8b9ac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c3844505c666f7c87939fa9a69e92857a6d60594f43393c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facb9a89c918c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c877b6e6154483b2e2115080000000000000000000000000c18232e3b4855626e7b8896a1ab9a8d817467574d42372b1e12050000000000000000000916222f3c4955626f7c8895a2afa89b8f827568544a3f34281c1003000004101d2935404b556a7683909da9b4aa95887b6e6255483b2f22150800000814212e3b4754616e7b8795a0acab9e9184786c6053463e332b2722252a2f35404a54606c7884919eabb8afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d49535b666d78828f949fa6a09590837a6d685d564c433a31281f150c030000000000000000000006121f2b37434e58626f7c89939da8aca09690837a706b6561605b575e61646a6f78818e949faaa89f92867b6e62554b4034281c1004000814202c37414b53595b5954524c48433d39352f2b261f1c17110e0903000000000000000000000000000000000000000000000000000000000000000000000000030e1a26313c45515d676f7d87939fa4aea9a19691867e756e68615e575653514a4e4e4d4e4e4b515356575f62696e767f879298a2aaafa49a92867c6f665b50443a301f160c01000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d6053473a2d27272727272727272727272727272727272727272727272727272727272423211c171008000000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f433633302f2c28211a11080000000000000000000000000916222f3c4955626f7c8891908f8e8d8c8b8a898887868583909daa9f92878385868788898a8b8c8d8e8f9091877a6e6154473b2e21140800000b17222d38414d57606a707e87939fa0958f82786e787f858b9095979a9c9d9f9f9f9f9e9d9c9a9795908c868079706b625b514940362c21180e030000000000000000000000000000000000000000000000000000000000000b151e29333d47515b606d79839198a2aaa0968f82776c60594f453b30271d1207000000000000000000000000000000131f2c3946525f6c7985929facb8b0a8a2a09f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa0a1a6aeb8ac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c424d57606d78839099a4aa9e948a7e71685d52473d303c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facb9ada39c999999999999999999999999999999999999999999999999999999999999999994877b6e6154483b2e2115080000000000000000000000000714212e3a47535f6a7884919eaa9e918477695f53463a2d2114060000000000000000000916222f3c4955626f7c8895a2afaa9d908377665c5044382c1f1206000006131f2c3845515d677885919eabaea298877a6d6154473a2e21140700000714202d3a46525e697784909dabada197897d70635a50453d37332d3136394045515c66717d8a96a1adb9afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d414a545c666d79828f949fa7a09590837a6d685d554b433931271e150c030000000000000000000814212e3a47535f6a76828f9ca5afa49a91847a6d6860595553504d5254585f666d78828f98a3aea3998d8074675c5145382c1f130600040f1a252f3941484d4e4c4746413a38322c29241d1a15100c060000000000000000000000000000000000000000000000000000000000000000000000000000000009151f2935404b55606b727f8b929da4ada9a198928a817a746e696562605c545b5a5a5a5b545c606266696e747b828b9299a2aaaea39f93887e706a5f544a3f32291e0d0400000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d6053473a34343434343434343434343434343434343434343434343434343434343431302d28221a12080000000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f433e3f3d3c38332c231a110800000000000000000000000915222f3c4855626f7c8584838281807f7e7d7c7b7a79787a8794a19f92867978797a7b7c7d7e7f8081828384867a6e6154473b2e211408000006111b262f3b454e58616c727f8b929d9f948e817b838c92979d9fa7a8a09e9c9b9a9b9c9d9fa4a7a09d98928d847d726d635b51483e332a201509000000000000000000000000000000000000000000000000000000000000030c17212b353f45515d676e7c86929fa4a89e948c7f736b60574d43392e231810070000000000000000000000000000131f2c3946525f6c7985929facb8a89e969393939393939393939393939393939393939393939393939393939393939393959ca6b1ac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255483c46535f69727f8c95a0aba2988f82766c61564c41352f3c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facb9b5ada8a6a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a194877b6e6154483b2e21150800000000000000000000000006121f2b37434e586774818e9aaba096887b6e6155483b2e23170c0000000000000000000916222f3c4955626f7c8895a2afac9f9286796d6053463a2d20130900000714202d3a4753606d7a86939facab9f928578685e5246392d201307000005111e2a36424d5666737f8c99a3afa99c8f82766c61574f46443f414142464b515a606d7883919da8b0b8afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d40424a545c676d79829095a0a7a09590837a6d675d554b433930271e150c0300000000000000000815222f3b4855626e7b88949fabac9f93877d6f685d564f4846444246484e545c666e7b86929facab9f9285796d6053463a2d201307000009131d272f373d40423f3a3936302c27201d18120f0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d18242f3a434f59626d74808d929ca3adaaa29f938e86807b76726f6d6669686767676869666d6f72777b81868f949fa3ababa39f918c7f726c61584e42382d20170d0000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d605347404040404040404040404040404040404040404040404040404040404040403e3c39332c241a100500000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f464a4c4a48443e352c231a1108000000000000000000000815212e3b47535f6a6f7877767574737271706f6e6d676e7b8894a1a39886796c6c6d6e6f7071727374757677796e685e5246392d2014070000000a141d29333c464f59626d74808d939e9d938e8690959ea2a8a19e9896918f8e8d8e8f91939a9d9fa7a29f9691877f736d635a50453c31261a0e05000000000000000000000000000000000000000000000000000000000000050f19232935414b555f6a717e8a929da6a69f93877d70695e554b40342822190e0400000000000000000000000000131f2c3946525f6c7985929facb8a2968c87868686868686868686868686868686868686868686868686868686868686868a95a1adac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f62554844505a616e7b86929fa7a79f92867b6e615a50443a302f3c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facb9afa7a2a09f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f94877b6e6154483b2e211508000000000000000000000000020f1a26313e4a5764717d8a99a4a8988b7e7265544a3f34281c100300000000000000000916222f3c4955626f7c8895a2afaea398887c6f6255493c31251a0d06030615222f3c4855626f7c889aa4afaa9d9083776a564c4135291d11050000020e1925303b4854616e7b87929fabab9f948a7d706a60595350494e4e4d53555d606c73808c959c9ea6b0afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d4038424b555d676d7a839095a0a79f959082796d675d554b433930271e150c0200000000000006121f2b37434e586774808d9aa6b0a89b8e82756b60564c443d3937363a3c424a545f6975818e9baba7a2978a7d7064574a3d3124170a0000020b151d252c313435332e2d2a251e1b16100d070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131d28313d47515b606c77808c919ea1a9aea59e98928d87837f7c79777674747474747677797c7f83888e92999fa6aea8a199928b7f736d635a50463c2f261c0e050000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d60534d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4a49453e362c22170c00000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c4f51575957554f473e352c231a110800000000000000000006121f2b37434e585f626c6b6a696867656463626160626f7b8895a2aa93867a6d606061636465666768696a6b6c615e564c41362a1e1105000000020b17212b343e47515b606c78818f959f9d999299a0a7a49f96918b8884828181818284878b90959ea2a8a199928c7f736c61574e42372b22170b00000000000000000000000000000000000000000000000000000000000000071118242f3a434e58616c73808d949fa8a49992857b6e675c51453f342b20160b02000000000000000000000000131f2c3946525f6c7985929facada093877a797979797979797979797979797979797979797979797979797979797979788693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6255484c56616c76828f98a2aba0958c7f72695e53483e32282f3c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facb9a79d95939393939393939393939393939393939393939393939393939393939393939393877b6e6154483b2e211508000000000000000000000000000a14212e3a4754616d7a86939fa89b8f8275665c5044382c1f120600000000000000000916222f3c4955626f7c8895a2afb4aa988b7f7265574d42362a1f161210121c2834404a5465717e8b98acb6a79b8e8174685b4e413025190d010000000914202d3a46525e6975818e99a3afa69e92857c6f6b62605b535a5b575e61676d737e8893948f949eaaafa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d403039434b555d686d7a839096a0a79f959082796d675d554b423930261e140b0200000000000815212e3b47535f6a7884919eabaca096897c6f62594f443a322d2b2a2d3038424d5763707d89999b9a99988d8073665a4d4033271a0d000000030b131a202527282621201d19130f0a04010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2b353f44505b656c747f8a92979ea6acaaa29f9a93908c898684828181808181828486898c90959a9fa3ababa49f9691877e736d635b51473e342a1d140a000000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d605a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a575550483e33281c1105000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c515b63666361594f473e352c231a11080000000000000000030f1b26323c464e53555f5e5d5c5b5a595857565556626f7c8995a2a194877a6e615455565758595a5b5c5d5e5f54524c443b3025190d0100000000050f19222c353f44505b666d79839096a1a39fa3aba49a938c847f7b777675747475777a7e838a9297a1a8a39f918a7e716a5f53473e33281c10040000000000000000000000000000000000000000000000000000000000000007131d28313c46505a606d78828f96a1aba1979083796d605a50463c32281d140a000000000000000000000000131f2c3946525f6c7985929facada093877a6d6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f625548525d68717e8a949faaa4999083786d60574d42362c232f3c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facb9a2958b868686868686868686868686868686868686868686868686868686868686868686867b6e6154483b2e211508000000000000000000000000000713202d3946525d687683909da99f9285796d6053463a2d20130800000000000000000916222f3c4955626f7c8895a2afb6a99c8f8376695e53463c3128201f1c1f232c3844515c6675818e9ba8b3a9988b7f7265584c3f322519080000000005121e2a36424d57626e7c87929fa7ada19791857d746f6c6568676869696e7279808893958f828f9ca8afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d40333039434c565e686e7a849196a1a79f948f82796d675c544b423830261d140a00000000000915222f3c4855626f7c8896a1adaa9e9184776a6054473d3228201f1e2026303c4753606d79868f8e8d8c8b8b8276695c504336291d100000000002090f14181b1b191413110d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d192327333f49535b606d737d858f949da0a7acaca49f9c989892918f8e8d8d8d8e8f919298999d9fa7acaca69f99938d847d716c635b51493f352c22180b02000000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d6767676767676767676767676767676767676767676767676767676767676767676764615a5045392d211408000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695c5b636d72706b61594f473e352c231a110800000000000000000a15202a343c4347485251504f4e4d4c4b4a49495663707c8996a3a194887b6e615548494a4b4c4d4e4f5051524746413b32291e140800000000000007101a2328333f4a545d676e7a84919eabacafa49a93888079726e696968676869686d71767e859196a1aaa39f92867c6e625a5044392d20150a00000000000000000000000000000000000000000000000000000000000000010c161f2a333e44505c666d7a849199a3a99f958e81746c62584e443a2f261c11060000000000000000000000131f2c3946525f6c7985929facada093877a6d606060606060606060606060606060606060606060606060606060606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f62554f59606d7a85929ea6a89f93877c6f665c50453b3124232f3c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867979797979797979797979797979797979797979797979797979797979797979797976695e52463a2d2014070000000000000000000000000005111d2935414c566673808c99aaa298897c6f6356493c2f24190d01000000000000000916222f3c4955626f7c8895a2afb9ac9f93877b6e61584e433a312d2c282b2e343f4953606d7985929eabada197887c6f6255493c2f22160900000000020e1a25303b47535f6a73808d95a0a8a9a1979188817c797674747476787b7f848d939890837e8a97a3afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d403328313a434c565e686e7b849197a1a69f948f82796d665c544a42382f261c1106000000000c1925323f4c5865727f8b98a8b2a79a8d807467584e43352b20161212151f2c3845515c677481828180807f7e7d7063564a3d3023170a00000000000004080c0e0f0c07070501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071017222d384149505b636b707b828990959c9fa4acaca9aaa39f9d9c9b9a9a9a9b9c9d9fa3aaaaababa39f9b948f878079706b625a514940372e231a100600000000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada09386797373737373737373737373737373737373737373737373737373737373737373737373716c6155493c3023170a000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f82766958636d727f7d706b61594f473e352c231a110800000000000000040e18222a32373b3c4544434241403f3e3d3d4a5763707d8a96a3a295887b6f6255483c3d3e3f4041424344463b3936302920170d0200000000000000081117222d38424b555e6873808c99a6b3ac9f93887e736d67615f575b5a5b565e61656c717b849198a2aea2988f82766c6155493c32271b0f0300000000000000000000000000000000000000000000000000000000000000040d182128343f4a545e686f7c87929fa5a79d938b7e716a60564c42382d22170f0600000000000000000000131f2c3946525f6c7985929facada093877a6d605453535353535353535353535353535353535353535353535353606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f625554606b74818e97a1ada1968d80746a60544a3f33291f232f3c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5e574d42362a1e120500000000000000000000000000010d1924303c4956636f7c8998a2aa998c807366564c4135291d1104000000000000000916222f3c4955626f7c8895a2afbbafa4998d80746a5f554c433d3a383438393f44505b65717d8a97a2adab9e9285786c605346392d201306000000000009141f2b37434e58606d79839096a0a8a9a19a938e8985828181818284878c91969992867c7d8a97a4afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d40332628313a444c565e696e7b859197a1a69f948f82786d665c544a42382d22170b000000030f1b27333f49536875818e9ba8b4aa978a7d7064574a3d3224190d0505101c2934404b55646f74757474737271706b6054483c2f221609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b262f383f44515961696e757d83898f939a9c9fa2aaa7a8aaa9a7a7a7a7a7a9a9a8a6a9a29e9b99928e88827c746d676059504840372e251c11080000000000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facb3a79a8d8080808080808080808080808080808080808080808080808080808080808080808080807e7164574a3e3124170b000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695f6a727f8c867d706b61594f473e352c231a11080000000000000006101820262b2e2f3938373635343231313e4a5764717d8a97a4a295897c6f6256493c3132333435363738392e2d2a251e170e0500000000000000000006111c28343f4a54606d7a85929eabb7aa9d91847a6d665d55534d4e4e4e4c52545a61696f7c86929fa8aa9f948a7d7064584e43372b1f13060000000000000000000000000000000000000000000000000000000000000000060f17232e38424c56606a727f8b939da7a59f92867c6f685e544a3f332821180d03000000000000000000131f2c3946525f6c7985929facada093877a6d605447464646464646464646464646464646464646464646464653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f62555c666f7d88939fa9a59e9184796d60584e42382e2117232f3c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d60606060606060606060606060606060606060606060606060606060606060605f524d453b30251a0e0200000000000000000000000000000813202d3a4653606d7985929fa99d908376685d5245392c201307000000000000000916222f3c4955626f7c8895a2afb4aba39f92877c6e675d554f4846443f44464a5059606c7883909da9b1a79a8e8174655b5044372b1f12050000000000030f1a26313c45515c676e7b8491969fa4aca49f9b97928f8e8d8e8f9196999e9892877e717e8a97a4afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d4033261f28323b444d575f696f7c859298a2a69e948f81786d665c544a3f33281c0f03000005121f2b3744505b657784909daaaea298877b6e6154483b2e21150800000c18232f3943535d64686968676665646360594f44382c2014070000000000000000000000000000000000000000000406071013131313131310100d0a050000000003060809121313131313130d0c0a0702000000000000000000000000000000000a141d262d3340474f575e616b70777d82878b8f9298989a9b9d9e9e9f9f9f9e9d9d9b999797928e8a86817c766f6a605d554f473e362e251c130a000000000000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facb9a99d928d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8174675b4e4134281b0e010000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f827669626e7b869292877d706b61594f473e352c231a110800000000000000060e151b1f21222c2b2a2928272625323e4b5865717e8b98a4a396897c706356493d3025262728292a2b2c21201e19140d050000000000000000000006121f2b3844505c66727f8c97a1adb8aca0968f81786c605b514842414141464750575f6a727f8c96a1ada69d9083766a6054473b2e22150900000000000000000000000000000000000000000101010101010101010101010006111c26303a444e58626d74818e95a0a9a39891847a6d665b50443e332a1f150b010000000000000000131f2c3946525f6c7985929facada093877a6d6054473a39393939393939393939393939393939393939393a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca295887b6f6257606d7984919aa4a99e938a7d70675d51463c30261c16232f3c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d60535353535353535353535353535353535353535353535353535353535353534846423b33291f140900000000000000000000000000000006121f2c3844505c6675828f9ba89f92867a6d6054473a2d211409000000000000000916222f3c4955626f7c8895a2afaea39992999083796d6760595553504a5053545c606b727f8b959fabaca095897c6f6353493f33271b0f030000000000000a15202934404b555e696e7b848e939a9fa3aba9a19e9c9b9a9b9c9e9f9d9590867e70717e8b97a4afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d403326162029323b454d575f6a6f7c869298939393938e81786d665b5044382b1f120600000613202d394653606c7985929facab9f928578695e52463a2d201407000007121d2731414b53595b5c5b5a59585856544f473d33271c100400000000000000000000000000000000000001070c1013141d2020202020201d1c1a16110a03040a0f1215151f2020202020201a1916130d07000000000000000000000000000000020b141b2227353e454d525960636b70757b7e8285888b8d8f9091929292929191908e8c8a8885817e7a746f6a626058514b433d352d241c130a01000000000000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000060606060e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facb9aea49d9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a8e8174675b4e4134281b0e010000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276695f6a707e869292877d706b61594f473e352c231a0e0400000000000000040a0f1215151f1e1d1c1b1a1925323f4c5865727f8b98a5a3968a7d7063574a3d3024191a1b1c1d1e1f1414110d080200000000000000000000000713202d3a4653606d7985919ea9b3b2aca89e938d80746d625a50463d3336393e454e58606d7984919eabab9f95887c6f6255493c31251a0e02000000000000000000000000000000010507070d0d0d0d0d0d0d0d0d0d0d0d0d0d0a141e29323d46515b606d79839097a1aaa1968f82786c60594f453c31271d12070000000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca195887b6e625f69737f8c95a0aca2978e81756b61554b40342b1e1516232f3c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d60534746464646464646464646464646464646464646464646464646464646463b3a36302921170d0200000000000000000000000000000003101c28343f4a5465727e8b98a8a3998a7d7064574a3d31261a0e020000000000000916222f3c4955626f7c8895a2afac9f928692958f827a706b6562605c545b6062666d727d86929fa7b0a69d9083776b605441382d22170b00000000000000030c18232f39434d575e696e7981878f92999b9d9e9f9f9f9e9d9b9895908a837c706c717e8b97a4afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d4033261a172029333c454e58606a6f7d868686868686868681796c605346392d20130600000714212e3a4754616d7a8798a2aeaa9d9084776a574d42362a1e12050000010b151f2f3941484c4e4f4e4d4d4c4b4a48443d352b21160b000000000000000000000000000000000000030b12181d1f202a2d2d2d2d2d2d2a2926221c150d0e151b1f21222c2d2d2d2d2d2d2625231e19120a010000000000000000000000000000020a1117232c333b42464f54596063696e7276797c7e808283848585868585848382807d7b7975716d68625f58544e45403a312b231b120a0100000000000000000000000b1825313e4b5864717e8b97a4aca89b8e8175685b4e4235281b0f0200000000000306060c13131313131b2734414e5a6774818d9aa7aca4978b7e7164584b3e3125180b0013202c3946535f6c7986929facacacaea9a7a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a69a8e8174675b4e4134281b0e010000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f82766958616c707d869292877d706b61594f473e352c20160c020000000000000000030608091211100f0e0d1926333f4c5966727f8c99a5a4978a7d7164574a3e3124170d0e0f1011130807050100000000000000000000000000091623303c4956636f7c8997a1adb2a8a19ea19d928b7f726c61584e453c322d333c44515c66727f8c99a7b1a79a8d807367574d42362a1e12050000000000000000000000000002080d1113141a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a17202b343f45515c676e7b859299a4a89f948d80736c61574d43392f2418100700000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2120202020202020202020202020202020202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca194887b6e61626e7b86929fa8a69f92857b6e61594f433a2f22190c16232f3c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d6053473a393939393939393939393939393939393939393939393939393939392e2d2a251f170f0500000000000000000000000000000000000c17232e3b4855616e7b8896a0ab9a8d817467574d42362a1e12050000000000000916222f3c4955626f7c8895a2afa6998c7f8c94948f847d76726f6d666b666c6e72787f879298a3aea99f948a7e7164594f442f261b1106000000000000000007121d27313b454d575e676d747c82868b8e909192929291908e8b88837e786f6a64717e8b97a4afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d4033261a0e17212a333c464e58606b6f7979797979797979756c665b5044382b1f120600000815222f3b4855626e7b8895aab4a99c8f8276695c4f4330251a0e02000000030d1d262f363c4041424141403f3e3d3c38332b231a0f050000000000000000000000000000000000030d151d24292c2d363939393939393736322d271f161820262b2e2f3939393939393933322f2a241c130a0000000000000000000000000000000006111a202930363d44484f54565e6165666d6f7174757778787979787877767573716f6d6664605d56534e47433d352f281f191109000000000000000000000000000b1825313e4b5864717e8b979f9f9f9b8e8175685b4e4235281b0f02000000060b0f12131920202020201b2734414e5a6774818d9a9f9f9f978b7e7164584b3e3125180b0013202c3946535f6c7986929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9a8e8174675b4e4134281b0e010000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276696464646b707d859292867d706b61594f473d32281e130800000000000000000000000006050403020d1a2633404d596673808c99a6a4978b7e7164584b3e3125180b02030405060000000000000000000000000000000005111d2935414c566773808d9aa9b2a8a0969196a19f93877e706a60574d443a312834404a54616e7b8795a0acaa9e918477695e53463a2d211407000000000000000000000000050c13191d2021272727272727272727272727272727272727272934404b555e69707d87939fa6a69f93887d70695f554b40352922190e05000000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114131313131313131313131313131313202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca194877a6e616c76828f98a3ab9f948b7e72685e52473e31281d100916232f3c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d6053473a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d21201e1a140d050000000000000000000000000000000000000614212d3a46535f697784919eaa9e918477695f53463a2d2114060000000000000916222f3c4955626f7c8895a2afa396897d828f97969189837f7b79787778797b7f848b9299a3aaaaa2978f82766c6155473d321d140a000000000000000000010b151f29333b454d555d606a6f757a7e8183858586858583817f7b77716d665f64717e8b97a4afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d4033261a0d0f18212a343c464f5960636c6c6c6c6c6c6c6c68605b544a3f33281c0f030000091623303c4956636f7c8996a2afa89b8e8275685b4f4235281c0900000000000b141d252b303335363534333231302f2c27211a11080000000000000000000000000000000000020c151f272f35383a4346464646464643423e3831281f222a31373a3c45464646464646403f3b352e251c120700000000000000000000000000000000080e171f252a33383d44484d5254545c60626567686a6b6b6c6c6c6b6a6a68666462605c5454524c47433c383229241d160d0700000000000000000000000000000b1825313e4b5864717e8b93939393938e8175685b4e4235281b0f0200020a11171c1f20262c2d2d2d2c202734414e5a6774818d93939393938b7e7164584b3e3125180b0013202c3946535f6c79869293939393939393939393939393939393939393939393939393939393939393939393939393939393938e8174675b4e4134281b0e010000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f8f8276717171717171717c859292867d706b61594f443a3024190d01000000000000000000000000000000010d1a2734404d5a6773808d9aa6a5988b7e7265584b3f3225180c0000000000000000000000000000000000000000000713202d3946525d687784919daaaca09691849197a19992867c6f695f564c43392f2e3946535e697784919daaaca096877b6e6154483b2e2115080000000000000000000000050e171e252a2d2e34343434343434343434343434343434343434342f39434d57606b737f8c939ea8a49a92857b6e675d51453f342b20170c030000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070606060606060606060606060713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca094877a6d68717e8b949faaa3999083776c60564d41352c1f160c0916232f3c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d6053473a2d2020202020202020202020202020202020202020202020202020201514120e09020000000000000000000000000000000000000005121e2a36424d576774818d9aaba096887b6e6155483b2e23170b0000000000000916222f3c4955626f7c8895a2afa3968a7d7b8592999e95908b888685848486888c91959fa3abaaa29892857b6e615a5045352b210b0200000000000000000000030d172129333b434b51586062686e71747678797978787674726e6964605c5464717e8b97a4afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d4033261a0d060f18222b343d474f54565f606060606060605b53504a42382d22170b0000000a1723303d4a5663707d8996a3b0a79a8e8174675b4e4134281b0e0100000000020b131a202427282928272625252322201c160f080000000000000000000000000000000000000a141e27313940454750535353535353504e4a433a31212a343c434748525353535353534d4b4740372e24190d0200000000000000000000000000000000050d141a21272c33383b4246474a505355585a5c5d5e5f5f5b60666c6c6c6c6c6a5c544a4745413a37312b272018130c040000000000000000000000000000000b1825313e4b5864717e868686868686868175685b4e4235281b0f00060b141c22282b2d333939393939382b34414e5a677480868686868686867e7164584b3e3125180b0013202c3946535f6c7987868686868686868686868686868686868686868686868686868686868686868686868686868686868686868174675b4e4134281b0e010000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f90837e7d7d7d7d7d7d7d7e7f869392867d706b61564c4135291d1105000000000000000000000000000000010e1b2734414e5a6774818d9aa7a5998c7f7266594c3f3326190c0000000000000000000000000000000000000000000714212e3a4754616d7a8796a0acaa9e91847b859298a29892857b6e685e554b42382d36424d576774818d9aa7b2a8978a7e7164574b3e3124180b00000000000000000000020c1720293036393a4040404040404040404040404040404040404040404040454f59606c77828f96a0aaa2979083796d605b51463d32291e150a0000000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca093867a6d6d7a85929ea6a89f92867c6e655b50443b30231a0d040916232f3c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d6053473a2d20141313131313131313131313131313131313131313131313131308070502000000000000000000000000000000000000000000020e1a26313d4a5764707d8a99a3a8988b7e7265544a3f34281c100300000000000916222f3c4955626f7c8895a2afa4978a7d717d8792989f9d9899929191919298989da0a8aba79f9892867d70695f53483e3323190f000000000000000000000000050f172129313a40454e54565e6164686a6b6c6c6c6b6a6865615f5753505864717e8b97a4afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d4033261a0d00061019222b353d43484952535353535353534e46443f382f261c11060000000a1724303d4a5763707d8a96a3b0a79a8d8174675a4e4134271b0e01000000000001090f14181a1b1c1b1a1a1918171614100b0500000000000000000000000000000000000006111c263039434b51535d6060606060605d5b554d433829333c464e53555f6060606060605957524940352a1e1307000000000000000000000000000000000002090e161c21272c30363a3b3f4446494b4d4f5051575f666c72797979797975665c504439352f2b26201b160d0701000000000000000000000000000000000a1724303d4956626c7179797979797979756f65594d4034271b0e090f181d262d3338393f4646464646453834404c58646e7479797979797979716c6256493d3024170a00121f2c3845525e6a757979797979797979797979797979797979797979797979797979797979797979797979797979797979797979746f64594c4033271a0d010000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f95908a8a8a8a8a8a8a8a8a8c93999892867d70685d5246392d201307000000000000000000000000000000020e1b2835414e5b6874818e9b9f9f998c807366594d4033261a0d000000000000000000000000000000000000000000091623303c4956636f7c8996a8b2a89b8e81757c869299a19791847a6d675c544a3f33313e4b5865717e8b98a4b1a6998d8073665a4d4033271a060000000000000000000008131e29323a4146474d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d505b656d7a849198a2a9a0958e81756d62594f443b30261c110600000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca39986796d75818e97a2aca0968c80736a5f53493f32291f1108000916232f3c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d6053473a2d20140d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b0a080500000000000000000000000000000000000000000914212d3a4754606d7a86929fa89b8f8275665c5044382b1f120600000000000916222f3c4955626f7c8895a2afa4978a7e71707d8690959d9fa39f9e9e9e9fa3aaa9a8a79f9d9590867d706b60574d42362c22110700000000000000000000000000050f171f282f353d43474c5254585b5d5e5f5f5f5e5d5b5855534d464b5864717e8b97a4afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d4033261a0d0000071019232b32383b3c4646464646464646423938332d261d140a000000000a1724303d4a5763707d8a96a3b0a79a8d8174675a4e4134271b0e010000000000000003070909131211100f0e0d0a09070400000000000000000000000000000000000000091317232e38424b555d60696c6c6c6c6c6c6a665f554a3e323b454e585f626c6c6c6c6c6c6c66635b52473b2f23160a00000000000000000000000000000000000000050b10161c1f252a2d2e34383a3c3e444d525b62696e787f8686868687796d6053463a2d241e1b150f0a040000000000000000000000000000000000000815212d3945505a62646c6c6c6c6c6c6c68655d53483d3124180d1419212a2f383f44464c535353535352443f3848535c64676c6c6c6c6c6c6c64625a5045392d21150800111d2a36424e59636a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c67645d53483c3024180b000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828f9393939393939393939393979fa4a39892857a6d6154473a2e211407000000000000000000000000000000020f1c2835424f5b6875828e939393938d8073675a4d4034271a0d0100000000000000000000000000000000000000000b1825323e4b5865717e8b98a4b1a6998c7f73707e87939fa0969083796d665b50443f363c4956636f7c8996abb5a89c8f8275695c4f422e23170b000000000000000000010d1925303a444c52545a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a535d686f7c86929fa4a79e938b7f726b60564c42382e23170c00000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929fac9f928679707d89939ea9a59d9184796d60584e41382d20170d00000916232f3c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d6053473a2d201a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a171714110c050000000000000000000000000000000000000613202c3945515d677683909ca99f9285796d6053463a2d20130800000000000916222f3c4955626f7c8895a2afa4978a7e716b707c838a9095989b9d9e9f9f9f9e9d9b9895908a837b706b60594f453b31241a10000000000000000000000000000000050d161d242932373b4146474b4e505252535252504e4c4846423e4b5864717e8b97a4afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d4033261a0d00000007101921272c2f303939393939393939352d2b28221c140b02000000000a1723303d4a5663707d8996a3b0a79a8e8174675b4e4134281b0e010000000000040a0f131516201f1e1d1c1b1a171614100b050000000000000000000000000000000009121b2528343f4a545d676d767979797979797671665b4e423b444d575f6a6f78797979797979736d63574b3f3225190c000000000000000000000000000000000000000000050b1014191e202429323a414650565e616d727b828c929992877e71665c5044382b1f130f0a04000000000000000000000000000000000000000005111d29343e48505658606060606060605b59534b41372c200e171f252a333b424a5053595f6060605f5e504a42414a53585a60606060606060585650483e34291d1105000e1a26313d4751595e5f606060606060606060606060606060606060606060606060606060606060606060606060606060606060605b59534a41362b201408000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100101c2936434f5c6976828686868686868686868686868b93999992877e70685d5246392d20130700000000000000000000000000000003101c2936434f5c6976828686868686868074675a4e4134271b0e0100000000000000000000000000000000000000010e1a2734414d5a6774808d9aa7b1a4978a7e716c727f8b929d9f958f81786c605b51483e3b4754616e7a8799a4afaa9d9084776a544a3f34281c1003000000000000000005111d2a36414c565e6167676767676767676767676767676767676767676767676767676767676a717e8a929daba59f92877d6f685e544a3f34281c1003000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929fac9f9285797984919ea5a99d93897d70675c51463c2f261b0e0500000916232f3c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d6053473a2d27272727272727272727272727272727272727272727272727272727272423211c171008000000000000000000000000000000000004111d2935414c5566737f8c99a9a297897c6f6356493c2f24190d01000000000916222f3c4955626f7c8895a2afa4978b7e71646a6f787e83888b8e909192929291908e8b88837e766e6960594f473d33291f120800000000000000000000000000000000040c131820272b3036393b3e4143454646454543413f3b3a363e4b5864717e8b97a4afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d4033261a0d00000000070f161b1f22232c2d2d2d2d2d2d2d28201f1c17110a020000000000091623303c4956636f7c8996a2afa79b8e8174685b4e4135281b060000000000070f161b1f22232c2b2a292827262322201c160f08000000000000000000000000000008111b242d373f44505c666d798286868686868683766a5d5043434c565f696f7c85868686868686807366594d4033261a0d00000000000000000000000000000000000000000000000710191f282f353e444c525a61696e767f8690949a93877e716c61544a3f34281c100100000000000000000000000000000000000000000000000c17222d363e45494b535353535353534e4d4841392f251a19202930363f454d545b60666c6c6c6c6c6a5c544a3f41484c4e535353535353534b49453e362d22170c00000915202b353f474e5253535353535359636b6c6c6c6c6b64615a534d53535353535353534d535b60656c6c6c6c6b686157535353534e4c4841382f251a0f03000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e11000f1c2835414e5a6670767979797979797979797979797e869392877e706c61564c4135291d1105000000000000000000000000000000020f1b2835414e5a657076797979797979746e64584c4033261a0d0000000000000000000000000000000000000000020f1c2835424f5b6875828e9ba8afa396897c70636d74808d939e9e938d80746d625a50463d4653606c7986939facab9e928578665c5044382b1f120600000000000000000713202d3946525e686d7373737373737373737373737373737373737373737373737373737373737374808d99a3aea39991847a6e665c5044382c1f1206000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929fab9e918578808d96a0aca1978e81746b60554b40342a1d140a0000000916232f3c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d6053473a34343434343434343434343434343434343434343434343434343434343431302d28221a120800000000000000000000000000000000010d19242f3c4956626f7c8997a2a9998c807366564c4135291d1104000000000916222f3c4955626f7c8895a2afa4978b7e71645f666d71777b7e8183858586858583817e7b76716c615f574f473d352b21180d00000000000000000000000000000000000001070d151b1e252a2d2e31353738393939383735322e2d313e4b5864717e8b97a4afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d4033261a0d0000000000040a0f1315161f202020202020201b13120f0b06000000000000000915222f3c4855626f7b8895aab4a89b8f8275685c4f422d22170b0000000007101921272c2f3039383736353433302f2c27211a110800000000000000000000000007101a232d363f49525c606d78828f94939393938c807366594d434c565e686e7b85919793939992877d706356493d3023160a00000000000000000000000000000000000000000000040f19222b313a41454f565e616c717b828b92989a93887e716c615a5042382e23170b00000000000000000000000000000000000000000000000006111b242d34393d3e4646464646464642403d372f271d1e2529323b424651575f666c72797979797975665c5044383c4041464646464646463e3d39342d241b11060000040f19242d353d42454646464646525e6b757979797978706c615f57514b434646424b51575f656c71787979797873685c5046464641403c362f261d130800000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e11000d1925323d49545e66696c6c6c6c6c6c6c6c6c6c717e879392877e716c615a50443a3024190d01000000000000000000000000000000000d1925313d49545e65696c6c6c6c6c6c67645c52473c3024170b000000000000000000000000000000000000000003101c2936434f5c6976828f9ca9aea295887b6f62606c78818f959f9d928b7f726c61584e4544505b667885929fabac9f9386796d6053463a2d20130700000000000000000714212e3a4754616d7a80808080808080808080808080808080808080808080808080808080808080808086929facaba1969082786d6053463a2d201307000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faa9d91847b87929fa8a69e92857a6d61594f43392e22180b020000000916232f3c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d605347404040404040404040404040404040404040404040404040404040404040403e3c39332c241a1005000000000000000000000000000000000813202d394653606c7985929ea99d908376685d5245392c201306000000000916222f3c4955626f7c8895a2afa4978b7e7164545c6064696e72747678787979787675726e6964615a534d453d352b23190f060000000000000000000000000000000000000000040a0f14191e202125282a2b2c2c2c2b2a28252225313e4b5864717e8b97a4afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d4033261a0d000000000000000307090913131313131313130f0606030000000000000000000714212e3a4754616d7a8798a2aea99c8f837669544a3f33281c0f030000040f19222b32383b3c464544434241403d3c38332b231a0f0500000000000000000000060f19222c353e48515b636e74818e949ea69e948e81746e63574b4b555d686e7a849197a1a49f93877e716b6054483b2f221609000000000000000000000000000000000000000000000a16212b343d434b515961686d757e858f949f9f93887f716c625a50483e30261c11060000000000000000000000000000000000000000000000000009121b22292d3031393939393939393534312c2518202830353e444d525b62696e787f8686868687796d6053463a2d33343939393939393931302d29221b12090000000008121b242b313638393939394653606c7987868686847d756e69605c554f46454f545c60696e777e8586868685786b5f524539393433302b251d140b0100000000000000000000000000000c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e11000915212c38424c545a5c6060606060605a626c717e879392877e716c615a50483e32281e130800000000000000000000000000000000000915212c38424c545a5c6060606060605a58524a41362b1f1408000000000000000000000000000000000000000003101d2a3643505d697683909ca9aea194877b6e615b666d79839096a09f93877e706a60574d444a546b7884919eabafa49a867a6d6053473a2d20140700000000000000000815222f3b4855626e7b888d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d9299a3aeb2a99f94897d7063564a3d3023170a000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faa9d9083839099a3aa9f948a7e71685d52473d30271d0f06000000000916232f3c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d60534d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4a49453e362c22170c0000000000000000000000000000000006121f2b3844505b6675828e9ba89f92867a6d6054473a2d211409000000000916222f3c4955626f7c8895a2afa4978b7e7164585053575f6165686a6b6c6c6c6b6a6865615f57555046423b332b231a1108000000000000000000000000000000000000000000000002080e111414181b1d1f1f201f1f1d1b191825313e4b5864717e8b97a4afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d4033261a0d00000000000000000000000606060606060606020000000000000000000000000613202d394653606c7985929facaa9e918477665b5044382b1f120600000a16212b343d434849535251504f4e4d4a48443d352b21160b000000000000000000050f18222b343e47505a626d73808d939da69f948f82786d605c524a545c676d7a839096a0a49c918b7f726c61594f44382c201307000000000000000000000000000000000000000000030f1b27323d464e555d606b707a818a92979f9b918b7f726d625a50483e362c1e140a0000000000000000000000000000000000000000000000000000000911171d2124252d2d2d2d2d2d2d282724201d2429323a414650565e616d727b828c929992877e71665c5044382b27272d2d2d2d2d2d2d2524211d17110900000000000009121920262a2c2c2d2d313e4b5864717e889396918a827b736d67615953525960666d737b828b929792877e7064574a3d312d282724201a130b020000000000000000000000020507080c1926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e110005101b26303a42494e4f535353534e58626c717e879393877e716c615a50483e362c20160c02000000000000000000000000000000000004101b26303a42494e4f5353535353534e4c4741382f241a0e03000000000000000000000000000000000000000004111d2a3744505d6a7783909daaada194877a6e61545d676d7a849197a19992867c6f695f564c515e6b7784919eaab6a094877a6d6154473a2e21140700000000000000000815222f3b4855626e7b88959a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9fa3abb5bbb0a6968a7d7063574a3d3024170a000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929fac9f928790959faba2988f82766c61564c41352b1e150b00000000000916232f3c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d605a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a575550483e33281c1105000000000000000000000000000000030f1c28333f4a5465717e8b98a7a3998a7d7064574a3d31261a0e020000000916222f3c4955626f7c8895a2afa4978b7e7164584b464d5355585b5d5e5f5f5f5e5d5b5855534d49453e36312a211a11080000000000000000000000000000000000000000000000000000020507080b0e101213131212100e0c1825313e4b5864717e8b97a4afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d4033261a0d000000000000000000000000000000000000000000000000000000000000000005121f2b3744505b657784909daaac9f9285796c605346392d20130600030f1b27323d464f54565f5e5d5c5b5a5956544f473d33271c100400000000000000040e17212a343d464f59616c727f8c929ca5a0959082796d665c5044505c666d79829095a0a59d928c7f736d625a50473d32271b100400000000000000000000000000000000000000000007131f2c38434e5860676d747d858e939fa29b918b7f726d625a50483f362d241a0c0200000000000000000000000000000000000000000000000000000000060c11151718202020202020201b1b191f282f353e444c525a61696e767f8690949a93877e716c61544a3f34281c1b20202020202020181715110c060000000000000000080f151a1d1f202024303d4956626c717f8b919e948f868079706b615f5d606b6f797f868f949f93887e716c6155493c30231b1a18140f08010000000000000000000003090e121415191926333f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100000a141e2830383d414346464647535f6a717e879393877e716c615a50483e362c231a0e04000000000000000000000000000000000000000a141e2830383d414346464646464641403c362f261d130800000000000000000000000000000000000000000004111e2b3744515e6a7784919daaada094877a6d6154555e686e7b859298a29892857b6e685e554b5e6a7784919daaada194877a6e6154473b2e21140800000000000000000815222f3b4855626e7b8895a1a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a7acaeb5acacaca3968a7d7063574a3d3024170a000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929faca39992999fa7a79f92867b6e615a50443a3023190c0300000000000916232f3c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada093867a6d6767676767676767676767676767676767676767676767676767676767676767676764615a5045392d211408000000000000000000000000000000000b17222d3b4854616e7b8795a0ab9a8d817467574d42362a1e12050000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e4246484b4e505252535252504e4b4847423c39332a261f180f0800000000000000000000000000000000000000000000000000000000000000000204050606060504020b1825313e4b5864717e8b97a4afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000000000030f1b27333f49536875818e9ba8aea398887b6e6255483b2d22170b0407131f2c38434f5960636c6b6a696867666360594f44382c201407000000000000040d162029333c464e58616b717e88939fa4a19690837a6d675d544a525c606d78818f949fa69e938d80746d635b51483e352b21160b000000000000000000000000000000000000000000000915222e3b4854606a6f79818a91979ea39c918c7f726d625b51483f362d241b12080000000000000000000000000000000000000000000000000000000000000005080a0b131313131313130f19222b313a41454f565e616c717b828b92989a93887e716c615a5042382e23170b131313131313130b0a0805000000000000000000000004090e11121315212d3945505a626d727f8b919c98928c847d756e69686d747c838c92989c918b7f726c625a5044392d20140d0b08030000000000000000000000060e141a1e2122252526333f4c5966727f8c99a5aa9d9184776a5e5144372b1e110000020c161e262c32353639393c4855626f7b869393887e716c615a50483e362c241a11080000000000000000000000000000000000000000020c161e262c3135363939393939393433302b241d140b0100000000000000000000000000000000000000000004111e2b3744515e6a7784919daaada194877a6e61544c565f696f7c869299a19791847a6d675c545e6b7784919eaaada094877a6d6154473a2e21140700000000000000000815222f3b4855626e7b88959f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f968a7d7063574a3d3024170a000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929facaba39fa3ababa0958c7f72695f53483e32281e11070000000000000916232f3c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facada09386797373737373737373737373737373737373737373737373737373737373737373737373716c6155493c3023170a000000000000000000000000000000000614202d3a46525e697784919daa9e918477695f53463a2d2114060000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e363a3b3f4143454546464543423f3b3a37312d28221a140e060000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0ada6998c807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000000000000b17222d3f4c5865727f8b98a8b2aa978a7e7164544a3f33281b13101014222f3b4854606b6f79787776757473706b6054483c2f2216090000000000030c161f28323b454e58606a707d87929aa4a19791847b6e685d554b515b636e74818e939ea69e948e81776c605b51493f362c23190f04000000000000000000000000000000000000000000000916232f3c4956626f7c848e9393939393918c7f726d625b51493f362d241b12090000000000000000000000000000000000000000000000000000000000000000000000000606060606000a16212b343d434b515961686d757e858f949f9f93887f716c625a50483e30261c110600060606060606000000000000000000000000000000000001040605111d29343e48505a626d727f8c929c9f96918a827b73717a818891959f9d928c7f736d625a50483e33281c100400000000000000000000000000060f181f262a2d2e323232333f4c5966727f8c99a5aa9d9184776a5e5144372b1e11000000040c141b212528292d2e3a47535f6a73808c887e716c625a50483e362c241a120800000000000000000000000000000000000000000000040c141b212528292d2d2d2d2d2d2726241f1a130b020000000000000000000000000000000000000000000004111d2a3744505d6a7783909daaaea194877b6e6154484d57606a707e87939fa0969082796d665b5e6b7884919eabb4aa93877a6d6054473a2d21140700000000000000000815222f3b4855626e7b88939393939393939393939393939393939393939393939393939393939393939393939393939393938a7d7063574a3d3024170a000000131f2c3946525f6c7985929facada093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929facb5afacafafa4999083786d60574d42362c20160c000000000000000916232f3c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facb3a79a8d8080808080808080808080808080808080808080808080808080808080808080808080807e7164574a3e3124170b0000000000000000000000000000000005121e2a36424d576774808d9aaaa096887b6e6155483b2e23170b0000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e312d2e32353738393939383735322e2d2b261f1c170e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4afa295887c6f6255493c2f221609000714212d3a4754606d7a8793a0aca6998c807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000000000000616222f3c4955626f7c8896a1ada79a8e8174665b5044382d241f1c1d1f27303c4956636f7d868584838281807d7063564a3d3023170a00000000020b151e28313a444d575f6a6f7c869299a3a29892857b6e695e564c505a626d73808d939da59f948f82786d655b504940372d241a110700000000000000000000000000000000000000000000010e1b2734414e5a67748186868686868686867f736d635b51493f372d241b1209000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27323d464e555d606b707a818a92979f9b918b7f726d625a50483e362c1e140a00000000000000000000000000000000000000000000000000000000000c17222d363f48515b636d737f8c929ca09e948f867f7d848d939aa09d938d80736d635b51483e362c22170b00000000000000000000000000030e18212a31363a3b3f3f3f3f3f4c5966727f8c99a5aa9d9184776a5e5144372b1e1100000000020a1015191c1c1f2b37434e58636d73807e716c625a50483e362c241a1208000000000000000000000000000000000000000000000000020a1015191b1c2020202020201b1a17140e0801000000000000000000000000000000000000000000000003101d2a3643505d697683909ca9aea295887b6f625548454e58616c727f8c929d9f948e81786c605b657885929eabaea29886796d6053463a2d20130700000000000000000815222f3b4855626e7b8686868686868686868686868686868686868686868686868686868686868686868686868686868686867d7063574a3d3024170a000000131f2c3946525f6c7985929facaca093877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693a0acac9f9386796c605346392d201300131f2c3946525f6c7985929facb8bbb9b2a89f93877c6f665c50453b31241a0e04000000000000000916232f3c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facb9a99d928d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8174675b4e4134281b0e01000000000000000000000000000000020e1a25303d4a5763707d8a98a3a8988b7e7265544a3f34281c100300000916222f3c4955626f7c8895a2afa4978b7e7164584b3e31252225282a2b2c2c2c2b2a282522211e1a15110c050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4aca295887c6f6255493c2f221609000714212d3a4754606d7a87939f9f9f998c807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000000000000815212e3b47535f6a7884919eabab9e9185786c6053493f352f2c28292c2f39424f5966727f8c91908f8e8d8b7e7265584b3f3225180c000000000a141d273039434c565e696e7c859298a2a39992867c6f695f564d4f59626c727f8c929ca5a0959082796d665c53493f372e251b12080000000000000000000000000000000000000000000000010d1a2733404c58646e747979797979797979736d635b51493f372d251b12090000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131f2c38434e5860676d747d858e939fa29b918b7f726d625a50483f362d241a0c02000000000000000000000000000000000000000000000000000000000006101b242d363f49515b636d73808d929da49e98928c8a91969fa49e938e81746e645b51493f362d241a10050000000000000000000000000009141f2a333b4246484c4c4c4c4c4c5966727f8c99a5aa9d9184776a5e5144372b1e1100000000000005090d0f0f1a26313c46525b646e73716d625a50483e362d241a120800000000000000000000000000000000000000000000000000000004090d0f101313131313130e0d0b080300000000000000000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8afa296897c6f6356493d46505a626d74808d939e9e938d80736d606c7986929facab9f928578665c5044382c1f120600000000000000000814212e3a47535f6a76797979797979797979797979797979797979797979797979797979797979797979797979797979797979706b6155483c2f231609000000131f2c3946525f6c7985929f9f9f9f93877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d7986939f9f9f9f9386796c605346392d201300131f2c3946525f6c7985929facacacacada1968d80746a60544a3f33291f120900000000000000000916232f3c4956626f7c8995a2ac9f9386796c605346392d20130013202c3946535f6c7986929facb9aea49d9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a8e8174675b4e4134281b0e01000000000000000000000000000000000914202d3a4753606d7a86929fa89b8f8275665c5044382b1f120600000916222f3c4955626f7c8895a2afa4978b7e7164584b3e312518181b1d1f1f201f1f1d1b181514120e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b979f9f9f95887c6f6255493c2f221609000714212d3a4754606d7a8793939393938c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000006131f2b37434e586774808d9aa6ada1978a7d70655b5045413a383435393b424b54606b7783909d9d9c9b95887b6e6155483b2e22150800000006111b262f39424b555e686e7b849197a2a49a92877d706a60574d4f59616c717e88939fa4a19690837a6d675d544a41382d251c1309000000000000000000000000000000000000000000000000000b1824303c48535c64676c6c6c6c6c6c6c6c66635b51493f372d251b130900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222e3b4854606a6f79818a91979ea39c918c7f726d625b51483f362d241b12080000000000000000000000000000000000000000000000000000000000000009121b242d373f49525b636e74808d929da5a39f99979ea1a69e948e81786c605c524940372d241b110800000000000000000000000000020e1a26313b454d53555858585858585966727f8c99a5aa9d9184776a5e5144372b1e11000000000000000000000a15202a344049525c646765625a50483f362d241b1209000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978a7e7164574b3e3e48515b606c78818f959f9d928b7f726c6d7a8799a3afaa9e9184776b544a3f34281c1003000000000000000006121e2b37424e575f6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6361594f44382c201407000000131f2c3946525f6c7986929393939393877a6d6054473a2d2114070000000000000000000000000713202d3a4653606d798693939393939386796c605346392d201300131f2c3946525f6c7985929f9f9f9f9fa59e9184796d60584e42382e21170d0000000000000000000916232f3c4956626f7c89959f9f9f9386796c605346392d20130013202c3946535f6c7986929facacacaea9a7a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a69a8e8174675b4e4134281b0e010000000000000000000000000000000006131f2c3945515d6776828f9ca99f9285796d6053463a2d20130800000916222f3c4955626f7c8895a2afa4978b7e7164584b3e3125180c0e101212131312100f0c08080602000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b9393939393887c6f6255493c2f221609000714212d3a4754606d7a86868686868686807366594d4033261a0d000000000000000000000000000000000000000000000000000000000000000000030f1b26323c4855626e7b88949eaca99d9083786c605a524c4645404045474c545c66707d8995a0aaa99d918477695f53463a2d2114070000000b17222d38414a545d676d7a839196a1a49f93887e716b60584e4e58606b707e87929aa4a19791847b6e685d554b42392f261b130a00000000000000000000000000000000000000000000000000000814202b36414a53585a60606060606060605957514940372e251b13090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c848e9393939393918c7f726d625b51493f362d241b120900000000000000000000000000000000000000000000000000000000000000000009121b252d374049525c646e74808d939da59f9f9f9fa79f948f82786d665b504a40372e251b1209000000000000000000000000000005121e2a36424d575f616565656565656566727f8c99a5aa9d9184776a5e5144372b1e1100000000000000000000030e18222e37404a52585a585650483f362d241b120900000000000000000000000000000000000000000000000000000000000000000000000000010507071313131313131313080705020000000000000000000000000000000000000c1926333f4c5966727f8c99a5b2a5998c7f7266594c3f363f44505b666d79839096a09f93877e706f7c8995abb5a99c8f8376695c50432e23170c000000000000000000020e1a26313c454e535560606060606060606060606060606060606060606060606060606060606060606060606060606060606057554f473e33281c1004000000131f2c3946525f6c7986868686868686867a6d6054473a2d2114070000000000000000000000000713202d3a4653606d788686868686868686796c605346392d201300131f2c3946525f6c798692939393939393938a7d70675d51463d30261c0f060000000000000000000916232f3c4956626f7c89939393939386796c605346392d20130013202c3946535f6c7986929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9a8e8174675b4e4134281b0e010000000000000000000000000000000004101d2935404b5566727f8c99a9a297897c6f6356493c2f24190d01000916222f3c4955626f7c8895a2afa4978b7e7164584b3e3125180b0204050606060504020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e868686868686867c6f6255493c2f221609000713202c3945525d687679797979797979736d63574b3f3225190c000000000000000000000000000000000000000000000000000000000000000000000a15212e3a47535f6a76828f9aa4ab9f958c7f726c605d5653514b4b5153565e666d7983909da7ada2978b7f7265574d42372b1e12050000030f1b27333f49535c666d79839095a0a59c928b7f726c61594f4d575f6a6f7d869299a3a29892857b6e695e564c433930271d140a010000000000000000000000000000000000000000000000000000030f1a252f3841484c4e53535353535353534c4b4640372e251c1309010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1b2734414e5a67748186868686868686867f736d635b51493f372d241b1209000000000000000000000000000000000000000000000000000000000000000000000009131c252e37404a525c606c77818e93939393939393959082796d665c544a3f382e251c13090000000000000000000000000000000714212d3a46535f696e7272727272727272727f8c99a5aa9d9184776a5e5144372b1e11000000000000000000000006101c252e3840474c4d4b4a453f362d241b120900000000000000000000000000000000000000000000000000000000000000000000000002080d11131420202020202020201514120e0902000000000000000000000000000000000a1724313d4a5764707d8a97a9b2a89b8e817568564c4136333f4a545d676d7a849197a19992867c717e8a97a4b1a79a8e8174675b4e4134281b06000000000000000000000915202a333c4247485353535353535353535353535353535353535353535353535353535353535353535353535353535353534a48443e352c21160b00000000121f2b3844515d6974797979797979797976685d5245392c20130700000000000000000000000006121f2c3844505c66767979797979797979766c5f5346392d201300131f2c3946525f6c7986868686868686868681756c61554b40342b1e150a000000000000000000000916232f3c4956626f7c86868686868686796c605346392d20130013202c3946535f6c79869293939393939393939393939393939393939393939393939393939393939393939393939393939393938e8174675b4e4134281b0e0100000000000000000000000000000000000c18242f3c4955626f7c8897a1a9998c807366564c4135291d1104000916222f3c4955626f7c8895a2afa4978b7e7164584b3e3125180b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4956626c7179797979797979766a5f53473b2e2115080004111d2935414c565d6c6c6c6c6c6c6c6c66635b52473b2f23160a0000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e58626f7c87939fa8a79f93887e746d6863605c54555d6063686e78818e95a0aca69f9285796d6053473c31261a0e02000005121f2b3744505b656d78828f959fa59d938c80736d625a504c565f696f7c859298a3a39892867c6f695f564d443a31271e150b020000000000000000000000000000000000000000000000000000000008131d262f363c40414646464646464646403e3b352e251c130a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1a2733404c58646e747979797979797979736d635b51493f372d251b1209000000000000000000000000000000000000000000000000000000000000000000000000010a131c252e384044505b656c7881868686868686868683796d675d544a42382d261c130a010000000000000000000000000000000815222e3b4855616e7b7f7f7f7f7f7f7f7f7f818f9ba8aa9d9184776a5e5144372b1e110000000000000000000000000a131c262e363c3f403e3d3a342d241b1209000000000000000000000000000000000000000000000000000000000000000000000000050c13191d20212d2d2d2d2d2d2d2d21201e1a140d050000000000000000000000000000000815222e3b4855616e7b8896a1adaa9d908477685e5246392d38424b555e686e7b859298a29892857b808d9aa6b4aa988b7f7265584c3f3225190c00000000000000000000030e18212a31373a3b4646464646464646464646464646464646464646464646464646464646464646464646464646464646463d3c38332c231a100500000000101c2935414d5862696c6c6c6c6c6c6c6c6c5d564c4135291d110400000000000000000000000003101c28343f4a545c6c6c6c6c6c6c6c6c6c6c645a4f43372b1e1200121f2b3844515d6974797979797979797979756f65594f433a2f22190c03000000000000000000000815222e3b4754606a6f79797979797979766c5f5346392d20130013202c3946535f6c7987868686868686868686868686868686868686868686868686868686868686868686868686868686868686868174675b4e4134281b0e0100000000000000000000000000000000000713202d394653606c7885919ea99c908376685d5245392c201306000916222f3c4955626f7c8895a2afa4978b7e7164584b3e3125180b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212d3945505a62646c6c6c6c6c6c6c625f584e43372b1f130600010d19242f3a444c525f606060606060605957524940352a1e130700000000000000000000000000000000000000000000000000000000000000000000020f1a26313c4754606a74818e96a0a9a49a9387807a74706d666a6a676d70747a828e939ea7a89f948b7e72675d5145392a1f140900000815212d3945505a606c77818e949fa69e938e81746e635b5146525e686e7b859197a2a39992867d706a5f574d443b32281f150c030000000000000000000000000000000000000000000000000000000000010b141d252b303334393939393939393933322f2a231c130a0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824303c48535c64676c6c6c6c6c6c6c6c66635b51493f372d251b13090000000000000000000000000000000000000000000000000000000000000000000000000000010a131c2627333f49535b666c757979797979797979776d675d554b42392f261c140a01000000000000000000000000000000000b1724313e4a5764717d8a8b8b8b8b8b8b8b8b8f939eaaaa9d9184776a5e5144372b1e11000000000000000000000000010b141c242b30333432312e29221b1209000000000000000000000000000000000000000000000000000000000000000000000000050e161e252a2d2e39393939393939392e2d2a251f170f0500000000000000000000000000000714212d3a46535f697884919eabac9f93877a6d6154473c322f39434c565f696f7d86929aa197918483909daaaea298897c6f6356493c302316090000000000000000000000060f1820262b2e2f393939393939393939393939393939393939393939393939393939393939393939393939393939393939302f2c28211a110800000000000d1925303b4650585d5f606060606060605f524c443a2f24190d01000000000000000000000000000c17232e38424a505f60606060606060605f5a52493e33271b0f00101c2935414d5862696c6c6c6c6c6c6c6c6c68655d53473e31281d1007000000000000000000000006131f2b38434e5860626c6c6c6c6c6c6c6c645a4f43372b1e1200121f2c3845525e6a757979797979797979797979797979797979797979797979797979797979797979797979797979797979797979746f64594c4033271a0d01000000000000000000000000000000000005121f2b3744505b6575818e9bac9f92867a6d6054473a2d211407000916222f3c4955626f7c8895a2aca4978b7e7164584b3e3125180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d29343e485056586060606060606055534e463c32261b0f03000008131e28323a414553535353535353534d4b4740372e24190d0200000000000000000000000000000000000000000000000000000000000000000000000a15202b37434e58606d7a849197a2a9a499938d85807d79787777787a7c81868f949ea5a9a1969082776c60554b403529180e0300000a1724303d4956626c74808d939ea69f948f81786d605c52494754616e7a849197a1a49a92877e706b60584e453c322920160d0300000000000000000000000000000000000000000000000000000000000000020b131a202427272d2d2d2d2d2d2d2d2625231e19120a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814202b36414a53585a60606060606060605957514940372e251b130900000000000000000000000000000000000000000000000000000000000000000000000000000000010a1417222d38414a545b60686c6c6c6c6c6c6c6c6a605d554c433930271d140a0200000000000000000000000000000000000b1724313e4a5764717d8a97989898989898989b9ea6b0aa9d9184776a5e5144372b1e1100000000000000000000000000020b12191f2326272524211d181109000000000000000000000000000000000000000000000000000000000000000000000000020c1620283036394646464646464646463b3a36302921170d020000000000000000000000000005121e2a36424d576875818e9baaafa49a8b7e7164584e43372b313a444d57606b717e88939fa096919095a0abac9f9285796d6053463a2d201307000000000000000000000000060e151a1e21222d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2423201c16100800000000000008141f2a343e464d5152535353535353535345413a32281e1308000000000000000000000000000006111c2630383f44535353535353535353534f4940372c21160a000d1925303b4650585d5f60606060606060605b59534b42352c1f160c000000000000000000000000030f1b27323d464e5456606060606060605f5a52493e33271b0f00111d2a36424e59636a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c67645d53483c3024180b000000000000000000000000000000000000030f1b27333f495364717e8a9aa4a3998a7d7064574a3d3124170a000916222f3c4955626f7c88959f9f9f978b7e7164584b3e3125180b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17222d363e45494b535353535353534947433c342a20150a000000010c1620282f35394646464646464646403f3b352e251c1207000000000000000000000000000000000000000000000000000000000000000000000000030f1b27323c45515d676e7c859297a0a7a49f97928d89868584848586898d92989fa6a79f9791847b6e655b50433a2f2418060000000b1825313e4b5864717e8b929da5a0958f82796d665c504a43505d6a76839096a0a99f93887e716c61594f463c332a20170e0400000000000000000000000000000000000000000000000000000000000000000001080f14181a1b2020202020202020191916120d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1a252f3841484c4e53535353535353534c4b4640372e251c13090100000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b262f38424a50535b60606060606060605d54514c433a31271e150b020000000000000000000000000000000000000b1724313e4a5764717d8a979f9f9f9f9f9f9f9f9f9f9f9f9d9184776a5e5144372b1e11000000000000000000000000000001080e1317191a181715110c060000000000000000000000000000000000000000000000000000000000000000000000000008131e28323a41465353535353535353534846423b33291f140900000000000000000000000000020e1a26313e4a5764717e8a98a2aeac9c8f82766a5f53473f352f323c454f59616c727f8c929da09d9da0a7b1aa9c8f8275665c5145382c1f13060000000000000000000000000003090e121415202020202020202020202020202020202020202020202020202020202020202020202020202020202020171614100b0500000000000000020d18222c343b414446464646464646464639352f2820160c010000000000000000000000000000000a151e262e343846464646464646464646433e372e251b10050008141f2a343e464d515253535353535353534f4d48423930231a0d04000000000000000000000000000a16202b343d43474953535353535353534f4940372c21160a000e1a26313d4751595e5f606060606060606060606060606060606060606060606060606060606060606060606060606060606060605b59534a41362b201408000000000000000000000000000000000000000b17222d3a4754616d7a87939393938d8174675a4e4134271b0e000916222f3c4955626f7c8893939393938b7e7164584b3e3125180b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b242d34393d3e464646464646463c3b37322a22180e0400000000040d161e24292c393939393939393933322f2a241c130a00000000000000000000000000000000000000000000000000000000000000000000000000000a15202935414c555f6a6f7c8590959fa3a9a19e9a96979291909192999a9fa2aaa29f9590857b6e695e53493f31281d13070000000d1a2633404d596673808c99a4aa9d91847a6d675c544a3f45525e6b7885919ea8a5998c7f726c625a50473d342a21180e0500000000000000000000000000000000000000000000000000000000000000000000000003080b0d0e13131313131313130d0c0a06020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131d262f363c40414646464646464646403e3b352e251c130a0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262f383f44464e5353535353535353504745413a31281f150c03000000000000000000000000000000000000000b1724313e4a5764717e8a93939393939393939393939393939184776a5e5144372b1e110000000000000000000000000000000003070b0d0d0b0b09050100000000000000000000000000000000000000000000000000000000000000000000000000010d1925303a444c525f60606060606060605f524d453b30251a0e02000000000000000000000000000914202d3a4753606d7985929fabab9f94887c6f625b5145403937333d46505a626d74808d939ea7aaabb1aea2988b7e7164544b4034281c1004000000000000000000000000000000020608081313131313131313131313131313131313131313131313131313131313131313131313131313131313130a0907040000000000000000000006101a222a3035383939393939393939392c29241e160d0400000000000000000000000000000000030c151c23282c3939393939393939393937332c251c13090000020d18222c343b414446464646464646464642413d3730271e11080000000000000000000000000000040f19222b32383b3c4646464646464646433e372e251b1005000915202b353f474e5253535353535353535353535353535353535353535353535353535353535353535353535353535353535353534e4c4841382f251a0f03000000000000000000000000000000000000000613202d3946525e687783868686868684776b5e5144382b1e11000916222f3c4955626f7c868686868686867e7164584b3e3125180b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b22292d3031393939393939392f2e2b2620181006000000000000040c13191d202d2d2d2d2d2d2d2d2625231e19120a010000000000000000000000000000000000000000000000000000000000000000000000000000040d19242f3a434e58606a6f7b838c92989ea1a9a7a9a29f9d9d9e9fa3aba9a19e98928d837b6e695f574d41382d1f160c010000000d1a2633404d596673808c99a3ac9f92867c6f695f564c4345525e6b7885919ea6a89c8f82786d605c52493f362c2319100700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b141d252b303334393939393939393933322f2a231c130a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141d262d333839424646464646464646443a39352f281f160d0300000000000000000000000000000000000000000b1724313e4a5764717e8686868686868686868686868686868684776a5e5144372b1e1100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2a36414c565e6c6c6c6c6c6c6c6c6c6c5e574d42362a1e12050000000000000000000000000006131f2c3945515d6774818d99a3afa69c8f82766d625a514b474242414148515b606c78818f959fabb8b4aa9f92857a6d6054473a2e23180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810181f25292b2c2d2d2d2d2d2d2d2d201d19130c04000000000000000000000000000000000000030a11171c1f2d2d2d2d2d2d2d2d2d2d2b27211b130a0100000006101a222a3035383939393939393939393534312c251e150c0000000000000000000000000000000007101920272b2e2f393939393939393937332c251c13090000040f19242d353d4245464646464646464646464646464646464646464646464646464646464646464646464646464646464646464641403c362f261d1308000000000000000000000000000000000000000005111e2a36414c5667717779797979797772675c4f43372a1d11000815212e3b47535f6a7679797979797979716c6256493d3024170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000911171d2124252d2d2d2d2d2d2d22211f1b150e06000000000000000001080d111314202020202020201a1916130d07000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28313c464e5860696e7980868d9197999c9d9fa3aaaaa9a19e9c9a97928d8680796e695f574d453b2f261b0d04000000000a1623303d495663707d87929aa4a29891857b6e685e554b424e5b6874818e949fa79e948e81746e635b51483e352b22180f060000000000000000000000000000000000000000000000000000000000000000000000000000030607090b0d0f1111121313121211100f0d0a08070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b131a202427272d2d2d2d2d2d2d2d2625231e19120a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141c22282b2d353939393939393939372d2c29241e160d040000000000000000000000000000000000000000000a1723303c4955616c71797979797979797979797979797979797771675b4f43362a1d10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a0d0f1013130f0e0c09040000000000000713202d3946525e6876797979797979797976695e52463a2d2014070000000000000000000000000004101d2935404b55616e7b87929fa9ab9f948b7f726c605d55534d4e4e4e4b51535b666d7983909da9b6aea2988d8073675d5145392c1d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d14191c1f1f202020202020201413110d0801000000000000000000000000000000000000000000060c1012202020202020202020201e1b1610090100000000000810181f25292b2c2d2d2d2d2d2d2d2d282825201b140c030000000000000000000000000000000000070f161b1f22232d2d2d2d2d2d2d2d2b27211b130a0100000008121b242b31363839393939393939393939393939393939393939393939393939393939393939393939393939393939393939393433302b251d140b010000000000000000000000000000000000000000010d1925303a44555f676a6c6c6c6c6c6b6760564b3f33271b0e0006131f2b37434e585f626c6c6c6c6c6c6c64625a5045392d21150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c11151718202020202020201615130f0a04000000000000000000000001040707131313131313130d0c0a0702000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2a333d464e575f676d737b8085898c8f919298a3a8a196918f8d8985807b736d675e574d453c33291d140a00000000000916222f3b4854606b717e88939fa4a19791847a6d675d544a4653606d78828f959fa69d938d80736d625a50473d342a21180e050000000000000000000000000000000000000000000000000000000000000000000104060b10121315171a1c1d1e1f1f201f1f1e1d1b19171514120e0906030000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080f14181a1b2020202020202020191916120d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171c1f20282d2d2d2d2d2d2d2d2a21201d19130c04000000000000000000000000000000000000000000000814212d3945505a61646c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a675f564b3f33271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a11161a1c1d20201c1b1915100902000000000714212e3a4754616d7a86868686868686867b6e6154483b2e21150800000000000000000000000000000c18242f3946535f6974808d96a1aba69f92877e736d67615f575b5a5b555d60636a6f7a83909daab6ab9f92857a6d61554b42382d2217110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d101213131313131313130707040100000000000000000000000000000000000000000000000000030613131313131313131313120f0a050000000000000000060d14191c1f1f20202020202020201c1b19150f090200000000000000000000000000000000000000040a0f13151620202020202020201e1b16100901000000000009121920262a2c2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d282724201a130b020000000000000000000000000000000000000000000008131e2932434d555b5d60606060605e5c564e44392e23170b00030f1b26323c464e535560606060606060585650483e34291d110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005080a0b1313131313131309080603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d18212b343d454d555d60696e73787c7f828486929fa196898482807d79746e69605c554d453c332a21170b0200000000000713202c38444f59616c727f8c929da5a0969083796d665c5044515c666d79839096a0a59c928b7f726c61594f463c332920170d0400000000000000000000000000000000000000000000000000000000000001070d1113171c1f20222426292a2b2b2c2c2c2b2b2a28262422211e1a1312100c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000003080b0d0e13131313131313130d0c0a06020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f12131b20202020202020201d1413110d0801000000000000000000000000000000000000000000000004111c28333e48505557606060606060606060606060606060605e5b564d44392e23170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d151c2226292a2d2d292825211b140c030000000714212e3a4754616d7a87939393939393877b6e6154483b2e211508000000000000000000000000000007121d2a36424d57606d7a849199a3aba39992878079736e696968676869676d70757c8490959fabb3ab9e91847a6e675d544a3f3328231a100700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d10121313131313131313130f0e0c09040000000000000000000000000000000000000000000000030608091313131313131313120f0a050000000000000000080f151a1d1f20202020202020202020202020202020202020202020202020202020202020202020202020202020202020201b1a18140f08010000000000000000000000000000000000000000000000020d1720313b434a4f515353535353514f4b443c32281d120600000a15202a343c434749535353535353534b49453e362d22170c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010407070b0d0f111213131212100e0c080705020000000000000000000000000000000000000000000000000000000000060f19222b333c434b51565e61666c6f7375777e8a979e9184787673706d66615e56514b433b332a21180f0500000000000003101b27323d47505a626d73808d939ea69f958f82786d605b524a545d676d7a849197a1a49f93887e716b60584e453b32291f160c0300000000000000000000000000000000000000000000000000000003090e13181d2023282b2d2f3133353737383939393837373533312e2d2a26201f1c17110d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306060f1313131313131313110706040100000000000000000000000000000000000000000000000000000c17222c363e45494a53535353535353535353535353535353514f4b443b32281d12060000000000000000000000000000000000000000000000000000000000000000000000000000000000030d161f272d32353639393534312c261e150c0200000714212e3a4754616d7a87949f9f9f9f94877b6e6154483b2e2115080000000000000000000000000000010e1a26313b45525d686f7d879299a3aaa399938d847f7b787675747475777a7d828991969fa7aca6a8a1969083796d665b50443f362c22190f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080b0e111112131312110f0c0908060300000000000000000406070b0f1213131211100e0c0b0906010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004090e111213131313131313131313131313131313131313131313131313131313131313131313131313131313131313130e0d0b08030000000000000000000000000000000000000000000000000000050e1f2931393f4244464646464644433f39322a20160c010000040e18222a32373b3c464646464646463e3d39342d241b110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010406070a0d10111213131211100d0a07060400000000030505060606060606000000000000000000000000000000000000000000000000000002080d111314171a1c1e1f1f201f1f1d1b181514120e090400000000000000000000000000000000000000000000000000000000071019212a313940454d52545b60636669707d8a979e9185786b6763605c54524d454039302921180f0600000000000000000b16212b353e48515b606c77818e949fa79e948e81746d635a504b555e686e7b859198a2a49a92877d706a5f574d443a31281e150b02000000000000000000000000000000000000000000000000040a0f151a1d24292c2e34383a3c3e404244444546464545444342403d3b3a36312d2c28231c19130d08020000000000000000000000000000000000000000000000000000000000000000000000000000000000040607090c0e1011121313131211100f0d0b080705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101a242c33393c3e4646464646464646464646464646464644433f39322920160b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151f2831383e4243464642413d3730271e140900000714212e3a4754616d7a8794a0acaca194877b6e6154483b2e21150800000000000000000000000000000009141f2935414c56606b717e879298a0a8a49f97918c8885838181818283868a8f939da0a8a39f999b9e9f958f81786c605b51483e342b21170d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e121415181b1d1e1f201f1f1d1b191515120f0a0401000000070c101313181c1e1f201f1e1d1b181815120d0600000000000000000004090e111213131313131313131313131313131313131313131313131313131211100e0c0a07060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d171f272e33363739393939393837332e2820180e040000000006101820262b2e2f3939393939393931302d29221b120900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080d111314171a1d1e1f1f201f1e1c1a171413100c07010c0f1112131313131313090907030000000000000000000000000000000000000000050b1013191d20212427292b2b2c2c2c2b2a282522211e1a14100c07010000000000000000000000000000000000000000000000000000070f181f272f353b42464a5053565964707d8a979e9185786b5e5653504a46423b342e271e170f06000000000000000000040f19232c363f44505b656d78828f95a0a69d938c80736c62594f4c565f696f7c869299a3a39992867c6f695f564c433a30271d140a0000000000000000000000000000000000000000000000070c151b20262b2f35393a3f4446484a4d4f5051525253525251504e4c4a4846423d3a38342e29251e19140d050000000000000000000000000000000000000000000000000000000000000000000000000004070c10121316191b1d1e1f1f201f1f1e1d1b19171414110e0806030000000000000000000000000000000000000000000000000004090e1112131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313130b0a080400000000000000000008121a22282d3031393939393939393939393939393939393736332e2820170e04000000000000000000000000000000000000000000000000000000000000000000000000000000000005111c27313a434a4e5053534f4d49423930261b1004000714212e3a4754616d7a8794a0adaea194877b6e6154483b2e211508000000000000000000000000000000030d19242f3a444f59616c717e8691969fa2a9a19e9997918f8e8d8e8f9092999b9ea5a69f99928d8e939e9e938d80746d625a50463d33291f140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f141a1e212125282a2b2c2c2c2b2a282622211f1b15110d08030b12181c1f2025292b2c2c2c2b2a272524221d18110901000000000000080f151a1d1f202020202020202020202020202020202020202020202020201f1f1e1d1b19161413100c07040100000000000000000000000000000000000000000000000407090a13131313131313131313131313131313131313131313131313131313131313131313131313131313130b0a080400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d151c2227292a2d2d2d2d2d2b2a27231d160e06000000000000060e151b1f21222d2d2d2d2d2d2d2524211d171109000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e13191d20212427292b2b2c2c2c2b292724201f1c18120e181c1e1f2020202020201615130f0a0400000000000000000000000000000000040a0f171c1e24292c2d3133363738393939383735322e2d2a261f1d18120b060000000000000000000000000000000000000000000000000000060d151d24293036383f44464a5764707d8a979e9185786b5e5246443f38363028231d150c05000000000000000000000007111a2427333f49535c666d79839096a1a59c928b7e716b61584e4d575f6a707d879299a4a29891857b6e685e554b42392f261b11060000000000000000000000000000000000000000030b121820262b31373a4145474a50535557595c5d5e5e5f5f5f5e5e5d5b595755534d4946443f3835302a251e170e0802000000000000000000000000000000000000000000000000000000000000000001070c1013181c1f20232527292b2b2c2d2c2c2b2a28262421201e1915120f0a0300000000000000000000000000000000000000000000080f151a1d1f20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020171714110c0500000000000000000810171c2123242d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b2a27231d160e050000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16222d38434c545a5d60605c59544b42372c211509000714212e3a4754616d7a8794a0adaea194877b6e6154483b2e2115080000000000000000000000000000000008131e28323d47505a616c717c848c92989d9fa4a9a19e9c9b9a9b9c9d9fa3a9a29f9a94908780818e949f9d928b7f726c61584e453b31251a0e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c161b1f252a2d2e31343738393939383735322f2e2b26201d19130c151d23282c2d32353839393838363432312e29231b1309000000000009121920262a2c2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2c2c2b29282623201f1d1813110d080100000000000000000000000000000000000000050b101416172020202020202020202020202020202020202020202020202020202020202020202020202020202020171714110c05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b11161a1d1e20202020201e1d1b17120c040000000000000000040a0f13151620202020202020181715110c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e141a1e24292c2d3033363738393939383634302d2c29231d1a24282b2c2d2d2d2d2d2d23221f1b160f070000000000000000000000000000070f151b22282d3035393a3e404244454646454543413f3b3a36312c29241d17110a0200000000000000000000000000000000000000000000000000030b12181f252a2d33383d4a5764707d8a979e9185786b5e524538342e2a251f18120b0300000000000000000000000000091217222d38414b545d676e7a849197a1a49f92877d706a60574d4e58606b717e87939fa4a19791847a6d675d544a41382d22171209000000000000000000000000000000000000070c151d232831373c42474b5154545c60626466686a6a6b6c6c6c6b6a6a686664615f575653504a46413a3630292019130d05000000000000000000000000000000000000000000000000000000000003090e12181d1f23282c2d3032343638383939393838373533312e2d2a25211f1b150f0b060000000000000000000000000000000000000009121920262a2c2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2423211c1710080000000000000000050c11141717202020202020202020202020202020201e1d1b17120b04000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1a26323e4a545e66696c6c68655d54493d3125190c000714212e3a4754616d7a8794a0a2a2a194877b6e6154483b2e21150800000000000000000000000000000000010c16202b343e48505a616a6f797f858b90939a9a9c9d9e9f9f9f9e9d9c9a9897928d88837c7378828f95a09f93877e706a60574d42362a1e1205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a111720272b31363a3b3e4144444546464544423f3c3b37322c29241e191e272e34383a3e42454646454443413f3d3a342d251b110600000008121b242b31363839393939393939393939393939393939393939393939393939393837363432302d2c2924201d19130e0902000000000000000000000000000000000810161c2023232d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2423211c17100800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060a0e1011131313131311110e0b0601000000000000000000000003060809131313131313130b0a0805000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f181f262a2f35393a3d404344454646454443403d3a38342f2a252f3437383939393939392f2e2c272119100700000000000000000000000009101920272b33393a4145474a4d4f515252535252504e4b4846423b39352f27221b140b050000000000000000000000000000000000000000000000000001070c14191c2228313d4a5764707d8a93939185786b5e52453828231c19140c070000000000000000000000000000000006111b262f39424c555e686e7b859298a2a39992867c6f695f564c4f59616c727f8b929ca5a0969083796d665c53493f3327241a1007000000000000000000000000000000000810191e272e343c43474d53555d6064666d6f7173757777787979787877767573706e696763605c54524c46413b322a251e170e06000000000000000000000000000000000000000000000000000001070c141a1d24292c2e34383a3c3f4143444546464645444342403e3b3936302e2b261f1c17110a020000000000000000000000000000000008121b242b3136383939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393931302d28221a120800000000000000000004080a0b1313131313131313131313131313131311100e0b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c2935424e5a6670767979756f65594d4134281b0e000714212e3a4754616d7a87949595959594877b6e6154483b2e2115080000000000000000000000000000000000040d19222d363e48505860676d737a7f83878a8d8f90929292929190908e8b8885807c766f6a6d7a8390969a9992867c6f695e53463a2d2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151c232832373b4246484b4e505152535252504e4c4847433c39352f28222b30394045464b4f5152535251504e4b4a463f372d23180d0100040f19242d353d42454646464646464646464646464646464646464646464646464646454443413f3d3a38352f2c29241e1a140c06000000000000000000000000000008111a21272c2f30393939393939393939393939393939393939393939393939393939393939393939393939393939393931302d28221a120800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b1218212a31363a4145474a4d505152525352514f4d4a4745403936313a4044454646464646463c3b38322b22190f04000000000000000000020a131b222b32373e44494c5254575a5c5e5e5f5f5f5e5d5b5855534d47454039332d261d170e06000000000000000000000000000000000000000000000000000002090e111724313d4a5764707d8686868684786b5e5245382b17110e09020000000000000000000000000000000000000a141d27303a434c565f696f7c869299a3a29892857b6e685e554b505a626d73808d939da69f958f82786d655b50443f362c22190f04000000000000000000000000000009111a222a303940454e53575f62676d7175797b7d8082838485858685858483817f7d7b7874706d66615e56524c443e36302920180f07000000000000000000000000000000000000000000000000030b12181f252a2f35393a404446494c4e5051525253525251504e4c4a4746413c3a37312b28221c140b070000000000000000000000000000040f19242d353d4245464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646463e3c39332c241a1005000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d69768286868175685c4f4235291c0f000714212e3a4754616d7a87888888888888877b6e6154483b2e21150800000000000000000000000000000000000007101b242d363e464e555c60676d72767b7e80828485858685848483817e7c79746f6a625f686e7b848d8d8d8d8d857b6e6154483b2e21150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d151e262e343d43474d5354585b5d5e5f5f5f5e5d5b5955534e4745413a3129343c424b5153585c5e5f5f5f5e5d5a585651493f34291d1206000915202b353f474e5253535353535353535353535353535353535353535353535353525251504e4c494745403a39352f2a251f17110a03000000000000000000000005101a232c33383c3d46464646464646464646464646464646464646464646464646464646464646464646464646464646463e3c39332c241a100500000000000004090e111213131313131313131306040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004090e111213131313131313131306040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151c2328333b42464c5254575a5c5e5e5f5f5f5e5c5a5753514b46423b454c50525353535353534948433d342b21160a0000000000000000000a141c252d343d43475055565d606466696a6b6c6c6c6b6a6865615f5753514b443f382f292018100600000000000000000000000000000000000000000000000000000000061623303c4955616c70797979797872685c5043372a1e06000000000000000000000000000000000000000000020b151e28313b444d57606a707d87929fa3a19791847a6e675d544a515b636e74818e949ea79f948e81776c605b51483e342b21160a0000000000000000000000000009121b232c343c424b51585f62696e747a7d8185888a8c8f9091919292929191908e8c8a8884807d79736d68615e565046413a322a2119100700000000000000000000000000000000000000000000060d151d24293136394045474a515356585a5c5e5e5f605f5f5e5d5b595754524c4847433c38332d261d18120b030000000000000000000000000915202b353f474e52535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353534a49453e362c22170c00000000000000000000000000000000000000010406070a0c0e101112131313121211100e0c0a070604010000000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000713202d3a4653606d787c7c7c7c7c7c7c7c786d6053463a2d2013070000000000000000000000000000000000000009121b242d343d434b51555d6065696e717375777879797978777674716f6d66625f58565e696f7c8181818181807f7265584b3f3225180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151f2730383f444e54575e6164676a6b6c6c6c6b6a6865625f5854524c433f353c464e545c6065686b6c6c6b6b696765625b51463a2e221509000e1a26313d4751595e5f60606060606060606060606060606060606060606060605f5f5f5e5c5b595653514b4745413a363028231c150c05000000000000000000000b16212c353d44484a53535353535353535353535353535353535353535353535353535353535353535353535353535353534a49453e362c22170c0000000000080f151a1d1f20202020202020202013100c0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f151a1d1f20202020202020202013100c070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e272e343f454d53565d606366696a6b6c6c6c6b696763605c55534d444f575c5f60606060606056544e463d32271b0f030000000000000009121c262e373f464e545a6164686d7173757778797978787674726e6965605d555049413a322a221810060000000000000000000000000000000000000000000000000000000814202d3944505a61646c6c6c6c6b6860564b4034281b0f00000000000000000000000000000000000000000000030c161f29323c454e58616b717e8b919ca4a0969083796d665c5349525c606d78828f959fa69e938d80736d625a50473d32271b0f03000000000000000000000009121b242d353e464e545c606a6f757b81868a8e929797999b9d9d9e9f9f9f9e9d9d9b999796918d8985807a746e68615a524c443c332b2219100700000000000000000000000000000000000000000910181f272f353b42464b5153545c60636567696b6b6c6c6c6b6b6a686664615e5655534e46443f382f28231d150c0500000000000000000000000e1a26313d4751595e5f606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060575550483e33281c11040000000000000000000000000000000104080d11131417191b1d1e1f1f20201f1e1e1d1b19161413100d0704000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f0006121f2c3844505c666d6f6f6f6f6f6f6f6f6d665c5144382c1f1206000000000000000000000000000000000000000009121b222b313940454b5154575e616467696a6b6c6c6c6b6a69676562605c54534e4d575f6a6f747474747474726d62564a3d3124180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d273139424a50586062696e71747777787979787775726f6a66605d56504540454e5860666d717578797978777674726d62564a3d3124180b00111d2a36424e59636a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6a69676563605d5554524c46423b342e261e170f06000000000000000004101c27333d474f55566060606060606060606060606060606060606060606060606060606060606060606060606060606060575550483e33281c110400000009121920262a2c2c2d2d2d2d2d2d2d2d1f1c18120b030000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121920262a2c2c2d2d2d2d2d2d2d2d1f1c18120b0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c273039404451575f61686d7073767778797978777673706d67615e57505761686b6c6c6c6c6c6c6260584e43382c1f130700000000000006101b242e384049515860626c70757a7d808284858586858583817e7b77726d67605b534c443c342a22180e05000000000000000000000000000000000000000000000000000004101c28333e48505557606060605e5c564e453a2f23170b0000000000000000000000000000000000000000000000040d17202a333d464f59626c737f8c929da5a0958f82786d655b5044505c666d79839095a0a59d928c7f726c61594f43382c1f13070000000000000000000007101b242d363e474f585f666d737c82878e92989b9ea2a9a6a8aaa8a7a6a6a6a7a8a9a8a6a8a19e9a97928c86807a716c615e564d453c342b22190e0500000000000000000000000000000000000009121b222a313940454d53555d6065666d6f72747677787979797877767573716e6867625f5853504a423d342e271e170e0500000000000000000000111d2a36424e59636a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c64615a5045392d2114080000000000000000000000000002080d1113191d2021232628292b2c2c2c2c2c2b2b2a28252320201d1813100c0700000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f0003101c28343f4a545c606262626262626262605c544a4034281c10040000000000000000000000000000000000000000000910191f272f343a4145474d5254575a5c5d5f5f5f5f5e5d5d5b585553514a4743454e585f6267676767676765625b51463a2e2215090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c18242f39434b545c606a6f757b7e8183848586858583817f7c78726d68625a514b4d57606a6f797e82848586858483817f7265584b3f3225180c00121f2c3845525e6a7579797979797979797979797979797979797979797979797979797877767472706d6765605d56524d443f38302921180f06000000000000000714202c38444f5961636c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c64615a5045392d211408000008121b242b3136383939393939393939392c29231d150d03000000000000000000000000000000000000000000000000000000000000000000000000000000000008121b242b3136383939393939393939392c29231d150d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e39424a515b63696e747a7d808384858586858482807d79746e69605b536873787979797979796f6a6054483b2e2215090000000000030e18222d36404a525b626a6f767d82868a8d8f919192929291908e8b88847e79716c655e564e463c342a20170c0300000000000000000000000000000000000000000000000000000b17222c363e44494a5353535352504b453c33281e1207000000000000000000000000000000000000000000000000050e18212b343e47505a636d74808d939ea69f948e81776c6053464a545d676d7a839196a1a49f93887e716b6054483b2f221509000000000000000000050e19222d363e485059616a6f7980878f93999fa3aaabaaaaa29f9d9b9a9a999a9a9b9d9fa2aaa9aba9a19e98928d857e756d685f574e463c342a20170c030000000000000000000000000000000009121b242c343c434b51575e61676d7175797c7f81838485858685858483817f7d7a77736f6a64605b544f454039302920170f05000000000000000000121f2c3845525e6a7579797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979716c6155493c3023170a000000000000000000000001080d13191d2024292c2d303335363738393939393837363432302d2c29241f1c18120b060000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f00000c17232e38424a5053555555555555555553514a42392e23180c0000000000000000000000000000000000000000000000070d151d23292f35393b4246474a4d4f51525253525151504e4b4946444039373c464e53555a5a5a5a5a5a585651493f34291d120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141e2935404b555d666d747c82878b8e909192929291908e8c88847f7a716d605d55535f696f7c848b8f9192929291908d86796c605346392d20130013202c3946535f6c798786868686868686868686868686868686868686868686868685858483817f7c7976726d68615e57504a423b332a22180f050000000000000916232f3c4855616b707979797979797979797979797979797979797979797979797979797979797979797979797979797979716c6155493c3023170a00040f19242d353d424546464646464646464638342f271f150b01000000000000000000000000000000000000000000000000000000000000000000000000000000040f19242d353d424546464646464646464638342f271f150b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404a545c606d727b81868a8d8f9191929292918f8d8a85807b726c655c6b78858686868686867c6f6256493c2f23160900000000000a15202a343e48525c636d727c838a8f9299999c9d9e9f9f9f9e9d9b9895908b857e776d685f584e463c32291e150a000000000000000000000000000000000000000000000000000005101a232c33393c3d464646464543403a332a21170c0100000000000000000000000000000000000000000000000000060f19222c353f48515b606c78818f94939393938c7f7366594c424b555d686e7b84919793939a92867c6f6356493c302316090000000000000000020d17202b343e48505a616b707c838c92999fa4abaca7a09d999892908f8d8d8d8d8d8f909298989c9fa4abaaa29f97928a827a6e6960584e463c32291e150b00000000000000000000000000000008121b242d363e464e555d60696e74797e8285898b8d8f91919293929291908e8c8a8784807c76716c666059514b433b332921170e05000000000000000013202c3946535f6c79878686868686868686868686868686868686868686868686868686868686868686868686868686868686868686867e7164574a3e3124170b00000000000000000000040c13191e24292c2f35393a3d3f4143444546464645454443413f3d3a39352f2c28231d17110a02000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000006111c2630383f444649494949494949494644403930271c1207000000000000000000000000000000000000000000000000030b12181d24292c30363a3b3e40424445464646454443413e3c3a38342e2b343c4347484e4e4e4e4e4e4b4a463f372d23180c010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303845515d676d7880898f93999a9d9e9f9f9f9e9d9b9896918c857e756d675d58626e7b8691969b9e9f9f9e9e9c9386796c605346392d20130013202c3946535f6c79869293939393939393939393939393939393939393939399929292918f8e8c8986827e7a746e69605c544d453c342a21170c0200000000000a1723303d4a5663707d86868686868686868686868686868686868686868686868686868686868686868686868686868686867e7164574a3e3124170b000915202b353f474e5253535353535353535345403931271d12070000000000000000000000000000000000000000000000000000000000000000000000000000000915202b353f474e5253535353535353535345403931271d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000030e18212c3844515c666d757f878d9298999c9d9e9f9f9f9e9c9a98928d867f776d666679869293939393887b6e6255483b2f22150800000000030f1b26313c46505a636e737f8790949c9fa3aba8a5a3a1a1a1a3a5a7a7a09d97928b827a6f6a5f584e443b30261c1106000000000000000000000000000000000000000000000000000008111a22282d3031393939393837342f2821180f0500000000000000000000000000000000000000000000000000000007101a232d364044505b666d79828686868686868275695c4f42434c565e696f7c858686868686867f7265584c3f3225190c000000000000000009141f29323d46505a626c717d8690959fa3ababa49f9b95908c898584828180808081828385888b8f93999fa2aaa9a19e938f847b6f6a60584e443b30271d12070000000000000000000000000006101a242d363f4850585f676d737b80858b8f9298989a9c9e9e9f9f9f9e9e9d9b999795908d88837e786f6b605c554d453b332920170c030000000000000013202c3946535f6c798692939393939393939393939393939393939393939393939393939393939393939393939393939393939393938a7e7164574a3e3124170b000000000000000000070d161e24293035393a4145474a4c4e505152525353525151504e4c494745403a38342e27221b140b060000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f00000c17232e38424a5053555555555555555553514a42392e23180c0000000000000000000000000000000000000000000000000001070c13181d20252a2d2e313436373839393938373634322f2d2c2823222a31373a3c4141414141413f3d3a342d251b110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e3842505a606d79828d929b9fa4ababa39f9d9c9b9c9d9fa19e97928b82796d685f6a76828f98a1a8aaa39f9995949386796c605346392d20130013202c3946535f6c7986929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa39f9f9e9d9c9a9899928f8b86817b736d665e574e463c33291e140a00000000000a1723303d4a5663707d899393939393939393939393939393939393939393939393939393939393939393939393939393938a7d7164574a3e3124170b000e1a26313d4751595e5f606060606060605f514b43392f23180c0000000000000000000000000000000000000000000000000000000000000000000000000000000e1a26313d4751595e5f606060606060605f514b43392f23180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000915202c38434f59606d78818c92999fa2aaa9a8aaa29f9e9e9e9fa29f98928c81786d6d798699a39f9f94877a6e6154473b2e2114080000000006121f2b37434e58626c73808b92999fa6aca49f9c989695949596989c9fa4a9a19e948f847c6f6a5f564d42382e23170c0300000000000000000000000000000000000000000000000000000810171c2023242d2d2d2d2b2a28231e170f06000000000000000000000000000000000000000000000000000000000008111b2428333f4a545c676d767979797979797570655a4d413a444d575f6a6f78797979797979726d62564a3e3124180b00000000000000030d1925303b444e58626c717e879298a0a7afa79f99938e88837f7c79777574737373747577797c7f83878d92989ea5ada59e9691857c6f6a5f564c42392e23180c030000000000000000000000030c18222c363f48505a616a6f7980868d92979c9fa2aaa7a9a8a7a6a6a6a7a8a9a8a6a7a09d9a94908a837c746d675e574d453b32291e150a0000000000000013202c3946535f6c7986929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f978a7d7164574a3e3124170b00000000000000000810181f282f353a4145474c525456595b5c5e5f5f5f5f5f5e5e5d5b585653514b46454039332d261d180f0700000000000000000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f0003101c28343f4a545c606262626262626262605c544a4034281c1004000000000000000000000000000000000000000000000000000001070d11141a1e20212427292a2c2c2c2c2b2a2a282522201f1c181820262b2e2f34343434343432312e29231b1309000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54616c74818e949da4aca7a09d9992908f8f8f9192999a9e9f948f837a6d666f7c88949faaaea398928c88878886796c605346392d20130013202c3946535f6c7986929facacacada7a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a6a7a8a9a7aba39f9c98928d867f786e695f584e453b30261c1106000000000a1723303d4a5663707d89969f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f978a7d7164574a3e3124170b00111d2a36424e59636a6c6c6c6c6c6c6c6c6c5c554b4034291c10040000000000000000000000000000000000000000000000000000000000000000000000000000111d2a36424e59636a6c6c6c6c6c6c6c6c6c5c554b4034291c1004000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a26313b4854606b74808d939fa3ababa49f9b979892919192939a989d9f938f82786d7a8794abb4a094877a6d6154473a2e211407000000000815212e3a47535f6a717e8b929fa3aba69f9a938f8c89888788898c90939a9ea6a69f9691857c6f685e544a3f34281f1409000000000000000000000000000000000000000000000000000000050b10141617202020201f1e1b17120c0500000000000000000000000000000000000000000000000000000000000000091217222d38424b555c60696c6c6c6c6c6c69655e54493d323b454e585f626c6c6c6c6c6c6c65625b51463a2e221509000000000000010b151f2a36424d56606a717e889299a2aaafa49c959087817c77726f6d6668676766676768666c6f72767b80868e939fa3aaa8a09792867c6f685e544b40342820150900000000000000000000000b151e2a343e48505a626c717c848c92989fa2a9aca8a8a09e9c9a9a999a9a9b9d9fa3ababaaa69f9c95908781796e695e574d443b30261c110600000000000013202c3946535f6c7986929facacacaea9a7a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a4978a7d7164574a3e3124170b0000000000000008111a222a313a41454c5254565d60636668696a6b6c6c6c6c6b6a69676563605d5553514b443f382f2a21191107000000000000000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f0006121f2c3844505c666d6f6f6f6f6f6f6f6f6d665c5144382c1f1206000000000000000000000000000000000000000000000000000000000104090e111414171a1c1e1f1f201f1e1e1d1b18161312100c0e151b1f21222727272727272524221d18110900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c66717e8b939ea6aea59d95908a86838282838486898d92979f959083786d73808d99a6b0a89f9286807c7a7b7d7063574a3d3024170a0013202c3946535f6c7986929facb9ada39b9898989898989898989898989898989899999a9c9ea1a8a9acaaa29f98928c837b6e6a5f574d42382e23170b010000000a1723303d4a5663707d8996a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1978a7d7164574a3e3124170b00121f2c3845525e6a75797979797979797976675c5145382c1f13060000000000000000000000000000000000000000000000000000000000000000000000000000121f2c3845525e6a75797979797979797976675c5145382c1f130600000000000000000000000000000000000000000000000000000000000000000000000000000006121e2b37424e57636f7c87939fa5afa9a199938f8a878584848586888c90959e948d80747b8794a1ada093877a6d6054473a2d2114070000000713202c38444f59626f7c86929fa4afa49c948f87827f7c7b7a7b7c7f83878f949fa3a8a19791857a6e665c50443b31261a0e030000000000000000000000000000000000000000000000000000000004080a0a1313131312110f0b070100000000000000000000000000000000000000000000000000000000000000000006111c262f39434b51535d6060606060605c5a544c423729333c464e53555f606060606060585651493f34291e120600000000000007121d27313946525e696f7c86929aa3ababa39f928d837c756f6a6662605c545a5a5a5a5a545b606265696e747b818a9298a2a9a9a19891847a6e665c51453c31261a0e0500000000000000000007121d27303c46505a626c717e8691969fa2aaaba39f9b9796918f8e8d8d8d8d8f9092999a9ea1a9aba79f9a938d837b6e695e564c42382e23170c04000000000013202c3946535f6c7986929facb9aea49d9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a978a7d7164574a3e3124170b00000000000007101a242c343c434c51565d6065686d707274767778797979787877767472706d6764605c555049413c332b231910070000000000000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000713202d3a4653606d787c7c7c7c7c7c7c7c786d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000020507080b0d0f11121313131211100e0b0907060400040a0f1215151b1b1b1b1b1b181815120c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7884919ea5afa69d938e837d797776757677797c80858c9298958e81747683909ca9aca0958a7e736f6e6e706b6155483c2f2316090013202c3946535f6c7986929facb9a79b918b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8c8d8d8f9196979c9fa3abaaa29f9590847c6e695e544a3f34281d13070000000a1723303d4a5663707d899494949494949494949494949494949494949494949494949494949494949494949494949494948a7d7164574a3e3124170b0013202c3946535f6c798786868686868686796d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798786868686868686796d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3a47535f6a76828f9aa4afaba1979287827d7a79787778797b7f838a9196928a7e7b8895a1ada093867a6d6053473a2d2014070000000916222f3b4854606b76828f98a2aea49c928c827b7672706e6e6e7072767c828b9299a3a9a1979082786d60574d42362a20150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d273139404547505353535353534f4d49423930212a343c434748525353535353534c4a463f372d23180d010000000000000c18232f3943505a616e7b859198a3acaca399928b80786f6a625f585653504a4e4d4d4d4e4a505355575e61696e757e869297a2aaaaa1969082786d60574e42372b21170b0000000000000000000c18232e39424e58616c717f8a9298a0a8aba49f99928e8a8784828180808081828486898d92979ea1a8aca49f9590847b6e685e544a3f342820150a000000000013202c3946535f6c7986929facb9a99d928d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8a7e7164574a3e3124170b0000000000040e19222c363e464e555d60686d72767a7d7f8183848585868685848483817f7c7a75706d67605b534e463d352b22190d0400000000000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000714212e3a4754616d7a87888888888888877b6e6154483b2e21150800000000000000000000000000000000000000000000000000000000000000000000000001030405060606050403010000000000000000030608090e0e0e0e0e0e0c0b09060100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a96a0acac9f948e8179716d67696869676d70747a7f869095938a7e7885929fabaa9d9184776c6261616361594f44382c2014070013202c3946535f6c7986929facb2a5988b7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f80808284878b8f92999fa7aea79f9691847b6e665c50443a2f24180d0100000a1723303d4a5663707d87878787878787878787878787878787878787878787878787878787878787878787878787878787877e7164574a3e3124170b0013202c3946535f6c7986929393939393867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929393939393867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000815222f3b4855626e7b88949facaea39992857d75716e686b6b666d6e72767d84909492857d8996a3aca09386796d6053463a2d201307000005111e2a36424d5663707d89949faaa79d928c80766e69656362616263656a6f767f879299a4a99f948c7f73695f53463c31261a0f010000000000000000000005080a0b1313131313131313131313131313131313131313131313131313131313131313131313130f0f0d09040000000000000000000000000000000000000000020b151f272f34383a4346464646464642413d3730271e222a31373a3c454646464646463f3e3a342d251b110600000000000004101c2934404b55616c76828f97a1aaafa49a92877e736d665f58534e4946443f41404040413f4446484d53565e616c717c859298a2aca89f948d80736a5f53473e33281c10040000000000000004101c2834404b545f6a717e87939fa2aaa9a199938e86827e7a777574737373747577797c80858b91969da5afa79f9691847a6e665c50443c32261b0f040000000013202c3946535f6c7986929facb3a79a8d80808080808080808080808080808080808080808080808080808080808080808080808080807c6f6255483c2f22150900000000020c16202b343e4850585f676d737a7f8386898c8e8f9192929292929191908e8b8986827d79716c655f584f473d342b20160c01000000000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000714212e3a4754616d7a87949595959594877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d576875818e9ba8afa49a8f82786d66605d555c555c6063676d727b838f9391857b8797a2ada79a8d8074675a545557554f473e33281c10040013202c3946535f6c7986929facada093867972727272727272727272727272727272737475787a7e828790959da4aea9a1969083786d60554b4135291d110400000713202d3a4653606d787a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a796d6053463a2d2013070013202c3946535f6c7986929f9f9f9f93867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929f9f9f9f93867a6d6053473a2d2014070606060606060606060504020000000000000000000000000000000000000000000000000000000d192633404c5966737f8c99a6b0ac9f92877c6f6b64615e56545c6062656c707a8290949083909daaaca09386796d6053463a2d20130700000714202d3a46525e6976828f9ca6aca0958d80736d625f575655545556585f626d727e87939fa6a69f92867b6e61584e43372b1e13080000000000000000060c111517182020202020202020202020202020202020202020202020202020202020202020202020201c1b191510090200000000000000000000000000000000000000030d151d23292c2d363939393939393635312c261e151820262b2e2f3939393939393932312e29231b13090000000000000006131f2c3845515c67707d8a949fa9b0a69f93887e716c605c544e47433c3a38342e3433342d3338393c42464d525a616a6f7c86929aa4afa69f92877b6e62594f44392d20150a0000000000000006131f2c3845515c666f7c869299a4aea8a0979187817b75716d6869676766676768676d7073797e848e939fa4aca8a0969083786d60584e43372b20150a0000000013202c3946535f6c7986929facada0938679737373737373737373737373737373737373737373737373737373737373737373737373736f6a5f53473a2e2115080000000008131e28323d46505a616a6f7a80868b909399999b9c9d9e9f9f9f9f9e9d9c9a9898928e8a847e786e6a60594f463d32281e1308000000000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000714212e3a4754616d7a8794a0a2a2a194877b6e6154483b2e2115080000000000000000000000000000000000000000000000000000000000020608080b0e10121213131211100e0b0807050200000000000000000000000000000000000000000000000000000000000000000000000000020507080a0d0f1111121313131211100e0c0906050300000000000000000000000000000000000000000714202d3a46525e697885919eabac9f93877c6f665c54514b4f4b5153555d60696e79818f949083909da9b3a4988b7e7165584b484a48443e352c21160b000013202c3946535f6c7986929facada093867a6d656565656565656565656565656566666769686d71767c838d929da5afa89f958c7f72675d5145392c201307000006131f2c3845515c666d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6d675c5145382c1f13060013202c3946535f6c7986929facaca093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facaca093867a6d6053473a2d20141313131313131313131212110f0d0a07060401000000000000000000000000000000000000000005111e2a36424d576976838f9ca9b1a79a8d80736a605954524c4a5053555a61676d798290959095a0abaca09386796d6053463a2d20130700000814212e3b4754616e7b87939e9fa39d9083786d605b534d49484748494e535b626c727f8c949faba3988f82756a5f53473a2f24190d010000000000000911171d2124252d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d292825211b140c0300000000000000000000000000000000000000030b12181c1f202a2d2d2d2d2d2d292825211b140c0e151b1f21222c2d2d2d2d2d2d2524221e1811090100000000000003101c28343f4a54606d7984919ea6b0aa9e948c7f736c625a504a423c37322d2c282327272722282b2d31363b42465058606a707e88939fa8aea3998f82766c6155493c31261b0f00000000000004111d2935414b55606d79839098a3aba9a09691857d746e6964615d565b5a5a5a5a555c6063666d7179818b939aa4afa89f958c80736a5f54473d32271b0f0100000013202c3946535f6c7986929facada093867a6d676767676767676767676767676767676767676767676767676767676767676767676767625f584e43372b1f1206000000010d1924303a444e58616c707c848d92989c9fa4a49f9e9c9a9a99999a9a9b9d9fa3a29f9b96918b837c706b60584e443a2f24190d020000000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000714212e3a4754616d7a8794a0adaea194877b6e6154483b2e21150800000000000000000000000000000000000000000000000000000104090e121415181b1d1e1f20201f1e1d1a181514120e090401000000000000000000000000000000000000000000000000000000000000000105080e11141417191c1d1e1f20201f1f1e1c1b181513120f0b060000000000000000000000000000000000000815212e3b4854616e7b8797a1adaa9d9083776a5f544b4540424045474b51575f676d78828f9590959fabb0a3968a7d7063574a3d3d3c38332c231a1005000013202c3946535f6c7986929facada093867a6d6058585858585858585858585858595a5a565d60646a6f78808d939eaab1a79e92857a6d6054473a2f24180d010004101c2834404b545c606161616161616161616161616161616161616161616161616161616161616161616161616161616161605c554b4034281c10040013202c3946535f6c7986929facada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d20202020202020202020201f1f1e1c1a171413110d08040000000000000000000000000000000000000714202d3a46525e697885929fabaca095877b6e61584f4746413f44464850555d676e7b85929da0a7b1aca09386796d6053463a2d20130700000c1926323f4c5965727f8c8f91929996897d70665c5047423d3b3b3b3d4347515a606c77828f99a3aa9f93877c6f62564c4135291d1104000000000009121b22292d30313939393939393939393939393939393939393939393939393939393939393939393939393635312c261e150c020000000000000000000000000000000000000001070c1013141d2020202020201c1b1915100902030a0f1215151f202020202020191815120d06000000000000000006121f2b3844505c66727f8c96a0acaea2988f82776c605a50443f38302b26201f1c171a1a1a171c1f20252a30363e464e58616c73808d96a1acab9f948a7d7064584e43372b1d120700000000000613202c3945515d67737f8c95a0aaada19791847b706b615e5754524c4e4d4d4d4e4b5153545c60676d747f88939fa5afa79f92877c6f62584e43372b1d120700000013202c3946535f6c7986929facada093867a6d605a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a55534e463c31261b0f0300000005111d2935414c56606a707e8691969fa2a49f9b9993918f8e8d8d8c8d8d8f9092989a9fa2a19e9590867d706a60564c4135291e13080000000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000714212e3a4754616d7a8794a0adaea194877b6e6154483b2e21150800000000000000000000000000000000000000000000000001080d11151a1e212225282a2b2c2c2c2b2b2a272421211e1a14100d070100000000000000000000000000000000000000000000000000000002080d1114191e20212426292a2b2c2c2d2c2c2b29272522201f1b17110f0a040000000000000000000000000000000916222f3c4955626f7c8895a9b3a79a8d817467584e4239352f34383a40454d555c666d7a85919d9fa7b1afa396897c706356493d302f2c28211a110800000013202c3946535f6c7986929facada093867a6d60534c4c4c4c4c4c4c4c4c4c4c4c4c4d4d4c5254585f666c78818e98a2aeada2978b7e7265554b4035291d100400000c18232e39424b51535454545454545454545454545454545454585c5c5c5c5c58545454545454545454545454545454545453514b43392e23180c000013202c3946535f6c7986929facada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d2d2d2d2d2d2d2d2d2d2d2d2c2b2a28262421201d1913100c07000000000000000000000000000000000814212e3b4754616e7b8798a2aeaa9d908377695e53463d393634383a3e434c555e69717e8b97a1adb9aca09386796d6053463a2d20130700000a1723303d4a5663707d80828486888a84776b60544a3f37312f2e2f31373f44505b656e7b87929faca49a8e8174685d5245392c2013080000000006111b242d34393d3e46464646464646464646464646464646464646464646464646464646464646464646464642413d3730271e140900000000000000000000000000000000000000000000040607101313131313130f0f0d09040000000003060809121313131313130c0b0906010000000000000000000713202d3a4653606d7884919ea8b2a99f92867b6e655b50483e342e261e1b1312100c060d060b0f12131a1f252a343d46505a606d7984919ea8b0a69c8f83766a5f5347392e23180c00000000000714212d3a4754606d7a85929fa7b0a69e92857b6e696059524d47464141404040414045464b51555d606d727f8b939ea9afa3998f82766a605447392f24180c00000013202c3946535f6c7986929facada093867a6d60534d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4847433c342a20150a000000000713202d3946525d686f7c869298a0a7a099938f8a868482818080808081828486898d92989da59f9892867c6f685d52453a3024190d0100000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000714212e3a4754616d7a8794a0acaca194877b6e6154483b2e2115080000000000000000000000000000000000000000000000070c13191d20262b2e2f3234363839393938373634312e2d2a25201d18120c0400000000000000000000000000000000000000000000000002090e13191e20252a2d2e30333537383839393938373634322f2d2b27221b1b16100b04000000000000000000000000000a1723303d4a5663707d8996a3b0a6998c7f7366594c402f2924292c2f353b434b545d68707d8a959fabb7afa396897c706356493d3023201c1610080000000013202c3946535f6c7986929facada093867a6d6053473f3f3f3f3f3f3f3f3f3f3f3f40414145474e545b666d7a85929fabb3a99c908376675d5145392c201306000007121d2730394045464747474747474747474747474747505a6264686868686865625b5147474747474747474747474747474645403930271d1207000013202c3946535f6c7986929facada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a3939393939393939393939393938373533312d2c29241f1c18120c060000000000000000000000000000091623303c4956636f7c8996aab4a79a8e817467574d42342d2a282b2d313a434d57606d7985929eabb8aca09386796d6053463a2d20130700000916222f3c4854606b70737577797b7d7d7063594f42382e26222122262b333f49535f6974818e9aa6ac9f92867a6d6054473a2f24190d010000000c17222d363e45494b5353535353535353535353535353535353535353535353535353535353535353535353534f4d49423930261b10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36414c5664707d8a96a1adada1978c7f72695e53493f3628231c140c0a060300000000000306090e1419222b343e45515d67717e8a96a0acab9f94887c6f62544b4034281c100400000006131f2b37434e5866727f8c97a2adaa9e948a7d70695f574f46423b3935303433342e34383a40454b515b626d74818e97a1adab9e94897c6f62554b4035291d1004000013202c3946535f6c7986929facada093867a6d6053474040404040404040404040404040404040404040404040404040404040404040403c3a37312a22180e0400000005121e2a36424d57616d7a859298a3a69f959087827d7a77767474737373747577797d80868e929ba3a29891847a6d60564c4135291d110400000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000714212e3a4754616d7a87949f9f9f9f94877b6e6154483b2e211508000000000000000000000000000000000000000000030b12181e24292c31373a3b3e414345454646454443413e3b3a36312c29241d160d0802000000000000000000000000000000000000000000070c141a1e252a2d3036393b3d4042444445464646454443413f3c3937332d2b27201b160d070100000000000000000000000a1724313d4a5764707d8a97a3b0a5988c7f7265594c3f2e23181c1f24293139424c56616c7683909da9b3afa396897c706356493d302316100b05000000000013202c3946535f6c7986929facada093867a6d6053473a3232323232323232323233332f35393c424a545e68737f8c99a9b2ac9f9286796d6053473a2d2014070000000b151e272e34383a3b3b3b3b3b3b3b3b3b3b3b3b3b4956626c717575757575726d62564a3b3b3b3b3b3b3b3b3b3b3b3b3b3a38342e271e150b00000013202c3946535f6c7986929facada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d6053474646464646464646464646464645454442403d3a39352f2c28231d17110a030000000000000000000000000a1724313d4a5764707d8a97a3b0a5988c7f7265594c3f31261e1c1f2028313b45515c6673808d99aab4aca09386796d6053463a2d20130700000714202c38444f5960636669666d6f71706b6054473d30262c2c2c2b2a222d38414d57626e7b88949faba3988b7e7265554c4135291d1104000005111d29343e485056586060606060606060606060606060606060606060606060606060606060606060606060605c5a544c42372c21150900000000000002070a0c0d131313131313120908060300000000060b0e10111313131313130f07060300000000000000000000000000000000000000000000000714202d3946525e6876828f9ca8b2ab9e9185796d60574d41382d2417110a02000000000000000000000002091019222935404b55606c7884919dabb0a69a8e8174665c5145382c1f13060000000815222e3b4754606a7884919ea9b1a79c8f82756c61574d453d36302d292427272723282c2e343a4145515b606d7a85929eaab0a69b8e8275675d5145392c1f1306000013202c3946535f6c7986929facada093867a6d6053473a34343434343434343434343434343434343434343434343434343434343434342f2e2b2620181006000000000714212d3a46535f6974808d97a1a99f948f837c75706d686967676666676768666d70747a818b919ba5a1968d8074685d5245392c20130700000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000714212e3a4754616d7a87939393939393877b6e6154483b2e2115080000000000000000000000000000000000000000060c151d23282f35393c4247484b4e50515253535251504d4b4846423b39352f281f19130c04000000000000000000000000000000000000030b12181f252a3036393b4146474a4c4f50515253535252514f4e4b4846443f3837322c272118130c04000000000000000000000a1723303d4a5663707d8996abb5a6998d807366544a403428211e1a181f27303a44505a64707d8a97a2adafa396897c706356493d3023160a0000000000000013202c3946535f6c7986929facada093867a6d6053473a2d252525252525252525262724292c2f38424c56626f7b8896a1adaea399897c6f6256493c2f231609000000030c151d23282c2d2e2e2e2e2e2e2e2e2e2e2e313e4b5864717e82828282827f7265584c3f322e2e2e2e2e2e2e2e2e2e2e2d2c28231d150c0300000013202c3946535f6c7986929facada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d605353535353535353535353535353535252514f4d4a4745413a38342e28231c150c0700000000000000000000000b1824313e4b5764717e8a97a4b0a4978a7d7164574a3e3124171012161f2834404b54626f7c8998a3aeaca09386796d6053463a2d201307000004101c27333d474f54565a545c6062646360594f44353638393939383734312f3c47535f6a76838f9ca9aa9c908376675d5145392c20130600000815212d3945505a62646c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c69655e54493d3125190d0000000000070d1316191a2020202020201f1515120f0a04040b11171a1d1e2020202020201c1312100b060000000000000000000000000000000000000000000814212e3b4754616e7a87939facafa3998c7f72675d51453b2f261b1206000000000000000000000000000000071018242f3944505b66727e8b99a3aeac9f9285796d6053463a2d2013080000000916222f3c4955626f7c8896a1acaca095897c6f625a50453b332a25201d191a1a1a181c1f23282f353f45515d67727f8b98a2aeac9f9286796d6053473a2d201406000013202c3946535f6c7986929facada093867a6d6053473a2d2727272727272727272727272727272727272727272727272727272727272722211f1b150e0600000000000815222e3b4855616e7b86929fa9a1978f82796e6a64615d565b5a5a595a5a545c6063686d747f8b939ea89f92867a6d6054473a2d21140700000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000714212e3a4754616d7a86868686868686867b6e6154483b2e211508000000000000000000000000000000000000000810181e272e343a4145474d5355585b5d5e5f5f5f5e5e5d5a5754534d474540393129251e160e0500000000000000000000000000000000050c151c232830363a4146474d525457595c5d5e5f5f605f5f5e5c5a585553504947433d383229241d160d060000000000000000000915222f3c4855626f7b8899a3afa89b8f8275665c51443a322d2b2627272628323e4653606d7985929fabafa396897c706356493d3023160a0000000000000013202c3946535f6c7986929facada093867a6d6053473a2d201919191919191919191a191d20262f3a47535f6a7885919eabb5ab978b7e7164584b3e3125180b00000000030b12181c1f20212121212121212121212734404d5a6773808d8f8f8f8e8174685b4e41352821212121212121212121201f1c18120b030000000013202c3946535f6c7986929facada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d606060606060606060606060606060605f5e5d5b595754514c46454039342e261e191009000000000000000000000b1825313e4b5864717e8b97a4b0a396897d7063564a3d3023170a060d18232e3a4653606d7986929facaca09386796d6053463a2d2013070000000b16212b353d44484a4d4b5153555756544f473e4143454646464543413e3a39424e5765727e8b98a7ac9f92867a6d6054473a2d21140600000a1724303d4956626c717979797979797979797979797979797979797979797979797979797979797979797979797570655a4d4135281b0f000000010a12191e2325262d2d2d2d2d2d2c22211f1b150e0e161d22272a2a2d2d2d2d2d2d29201f1c17110a02000000000000000000000000000000000000030f1b27333f495364717e8b9aa4afac9f92867a6e61554b4033291d140a000000000000000000000000000000000007121d28333f4a54616d7a86929facaea298897d706356493d2f24190d0100000d1a2633404d596673808c99a8b2aa9d9083776a6054483e332a211a14110d080d070c1013181d242935414c55606d7985929fabaea2988a7d7164574a3e2e23170b000013202c3946535f6c7986929facada093867a6d6053473a2d201a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1515120f0a04000000000004101c2934404b556673808c99a2a99e91857a6d675f5854524c4e4d4d4d4d4e4b5153565d606d75818e9ba9a2988b7e7164584b3e3125180b00000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000713202d3946525e6876797979797979797976695e52463a2d20140700000000000000000000000000000000000009121a222a303940454c5254575f626567696b6c6c6c6b6a696764615e5753514b433e35302820170e050000000000000000000000000000050e171e272e343b42464c5254565e616366686a6b6b6c6c6c6b6a69676562605b53544e48443d352f281f180f0600000000000000000714202d3a4753606d7a86929facab9e9285796d60564c443d3a373134333332323845515c6675828f9ca8afa396897c706356493d3023160a0000000000000013202c3946535f6c7986929facada093867a6d6053473a2d20140c0c0c0c0c0c0c0c080d11141d2b37434e58697683909ca9b2a5988c7f7265594c3f3226190c000000000000070c1013131414141414141414141a2734404d5a6773808d9a9b9b8e8174685b4e4135281b1414141414141414141313100c0700000000000013202c3946535f6c7986929facada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6a686664605d5553514b443f38302b221b120a0100000000000000000b1825323e4b5865717e8b98a4afa296897c6f6356493c302316090007131f2c3845515c667683909da9aca09386796d6053463a2d201307000000050f1a232b33383c3d40404546484a494845474a4d505152535252504e4b4746414754616e7a8795a0aca3998a7d7064574a3d2e23170b00000b1825313e4b5864717e8686868686868686868686868686868686868686868686868686868686868686868686868275695c4f4236291c0f0000000a131c242a2f3233393939393939392f2e2b2620181720272e333637393939393939352d2b28231c140c02000000000000000000000000000000000005121f2b3744505b6575818e9bacb6a99c8f8276685e5243392f21170b020000000000000000000000000000000000010b17222d3846525d6875828f9ca8b4aa9a8d807367564c4135291d11040005111e2a36424d576976838f9ca9b5ab998c7f7366584e43362c21180f0905010000000004070c1319242f3a45515d6774818e9aa7b4aa9b8e817468544a3f34281c10030013202c3946535f6c7986929facada093867a6d6053473a2d20140d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d090806030000000000000006131f2c3845515c6777848f929797988b7f72685d554e4746414141404040414045464c525b626f7c8897a2aa9b8e8174685b4e4135281b0e02000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f0005111d2a36414c565e6c6c6c6c6c6c6c6c6c6c5e574d42362a1e1205000000000000000000000000000000000009121a242c343c434b51565d6066696e7174767878797978777674716e6965605d555046413a322920170e05000000000000000000000000050e172029303940444d52565e6165686e70737577777879797978777674726f6c65626058544f45413a312a21180f060000000000000006131f2c3945515d677783909dabada1978a7e71685e564f484742424140403f3f3f404b546673808c99a6afa396897c706356493d3023160a0000000000000013202c3946535f6c7986929facada093867a6d6053473a2d201407000000000000000001040b1b2631424f5c6875828f9ba8b2a6998c7f7366594c403326190d000000000000000004060708080808080808080d1a2734404d5a6773808d9aa69b8e8174685b4e4135281b0e0808080808080808070604000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facada093867979797979797979797979797979797979797878777573706d6764605c54504a423d342d241c130a01000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f2316090004101c2834404b546875828f9ba8aca09386796d6053463a2d2013070000000008111a21272c2f302e34383a3c43474b5154575a5c5e5f5f5f5e5d5a5854524c48525e687784919daaab9a8d807467544a3f34281c1003000b1825313e4b5864717e8b939393939393939393939393939393939393939393939393939393939393939393938f8275695c4f4236291c0f000007121c252e353b3f40464646464646453c3a37312a22202932393f4344464646464646423a38342e261e140a00000000000000000000000000000000000613202d394653606c7885929eabb3a9988b7f7265564c4131271d0f050000000000000000000000000000000000000006111c2935414c5665727f8b98aab4aa9d918477685d5245392c201306000714202d3a46525e697885929eabafa399897c6f6256493d32231a0f060000000000000000000108131e2935404b5564707d8a97a9b3aa9d908377665c5044382b1f12060013202c3946535f6c7986929facada093867a6d6053473a2d2014070101010101010101010101010101010101010101010101010101010100000000000000000000000714202d3a4753606d79808285878a8c86796d60564c433c393530343333342e34383a4147535f6a7885929fa99d9083766a5d5043372a1d1004000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f00010d1925303a444c525f60606060606060605f524d453b30251a0e020000000000000000000000000000000007111a242c363e464e555c60686d72777b7e818384858686858483807e7b76716d67615a524c443b332920170b0200000000000000000000040d172029323b424a51575e61686d72777a7d7f82838485868685858482817e7b78746f6a636059514b433b332a21180d0400000000000004101d2935404b5566737f8c99a3aea99e91847a6d68615955534d4f4e4d4c4c4c4b4b4c5865727f8b98a5afa396897c706356493d3023160a0000000000000013202c3946535f6c7986929facada093867a6d6053473a2d201407000000000000000001040a1b2835424e5b6875818e9ba8b2a5988b7f7265584c3f3225190c000000000000000000000000000000000000010d1a2734404d5a6773808d9aa69b8e8174685b4e4135281b0e0200000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9a2958b86868686868686868686868686868686868685858482807d7a76716d66605c544e463f372e251c1309000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000c18232e414e5b6874818e9ba7aca09386796d6053463a2d2013070000000000080f161c2022232a313a41454e53555d606467696b6c6c6c6b6a6764615d56544f566774818d9aa7a99c908376665c5044382b1f1206000b1825313e4b5864717e8b979f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9c8f8275695c4f4236291c0f00020d19242e3740474b4d535353535353524847433c342a21323b444a4f515353535353534f46443f3830261c1106000000000000000000000000000000000815222e3b4855616e7b8897a1adada197887b6e6255483b3022150b0000000000000000000000000000000000000000000d1924303c4855626f7b8898a2aeaca095877a6d6054473a2d211407000814212e3b4754616e7b8797a2adac9f92867a6d6053473a2d2014070000000000000000000000010d18242f3b4754616e7a8797a1adac9f9286796d6053463a2d2013070013202c3946535f6c7986929facada093867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c676d7376787b7d807f73675d51443a312d29242727262723282c3037434e586a7784919daa9e9184776b5e5144382b1e1105000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000008131e28323a41465353535353535353534846423b33291f140900000000000000000000000000000000050e19232c363e4850585f676d737a7f84888b8e90919292929191908d8a87837e79716c615e564d453b32291d140a000000000000000000010c161f29323b444c545c60696e757a7f83878a8c8f90919292939292918f8d8b8885817c76706b605d554d453c332a20160c010000000000000c18242f3b4854616e7b86929fa8ada19690827a706b65615f575c5a5a5959585858585865717e8b98a4afa396897c706356493d3023160a0000000000000013202c3946535f6c7986929facada093867a6d6053473a2d20140a0a0a0a0a0a0a0b070d10141b2a36414c566976828f9ca9b4aa978a7e7164574b3e3124180b000000000000000000000000000000000000010d1a2734404d5a6773808d9aa69b8e8174685b4e4135281b0e0200000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d20140b0b0b0b0b0b0b0b0b0a0a0907060401000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9a79d959393939393939393939393939393939399939291908e8c8a86837e79726d666058514940372e251b10070000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f2316090000071a2734404d5a6773808d9aa6aca09386796d6053463a2d201307000000000000050b1019232b343c434c52585f62676d71747678797979787674716d686360595865717e8b98a4ac9f9285796d6053463a2d201307000b1825313e4b5864717e8b97a4a5a5a5a5a5a5a5a5a5a5a5a7a9aeacacacafa9a7a5a5a5a5a5a5a5a5a5a5a59c8f8275695c4f4236291c0f0007131e2a3540495257596060606060605f55534e463c332939444d555b5d6060606060605c53504a42382e2317130a0000000000000000000000000000000a1724303d4a5763707d8a96a9b3ab9e928578695f53473a2e2114030000000000000000000000000000000000000000000813202d394653606c7985929facb1a795897c6f6256493c2f231609000916232f3c4956626f7c8995a9b3aa9e918477675d5145382c1f13060000000000000000000000000714202d3946525e687885919eabaea398887b6e6255483b2f2215080013202c3946535f6c7986929facada093867a6d6053473a2d20140c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c07060401000000000000000000000004101c2934404b555c606769696e7073736d63554b403228201d191a1a1e21262b30363e46525e697885919eab9e9184786b5e5145382b1e1205000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f00000c17232e38424a5053555555555555555553514a42392e23180c000000000000000000000000000000020d17202b353e48505a616a6f797f868c9195989a9c9e9f9f9f9e9d9c9a9795908b857e766d685e574d443b2f261b1106000000000000000007121d28313b444d565e666d727b81868c909596999b9d9e9e9f9f9f9e9d9c9a9897918d89837d746d675f574d453c32281e13080000000000000714202d3a46525e6974808d96a1a9a89f9590847d77726e696a6867666665656565646465717e8b98a4afa396897c706356493d3023160a0000000000000013202c3946535f6c7986929facada093867a6d6053473a2d2016161616161616171718181d20262d3946525e687784909daaaea298897c6f6356493c30231609000000000000000000000000000000000000010d1a2734404d5a6773808d9aa69b8e8174685b4e4135281b0e0200000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d20181818181818181818171716151413110d080705020000000000000000000000000000000000000013202c3946535f6c7986929facb9afa7a2a09f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa49f9f9e9d9b9999928f8b857f786f6a625b514940372d22190c0300000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000000000000050e19222b353d464e565d606a6f747a7d8083848586858583817e7a76706b625f626f7c8995aaaea298887b6e6255483b2f221508000b1825313e4b5864717e8b979898989898989898989898989a9da4aebaafa59d9a9898989898989898989898988f8275695c4f4236291c0f000a16232f3b47525b63666c6c6c6c6c6c6c625f584e453b323f4a555f676a6c6c6c6c6c6c68605c544a3f3428251c120900000000000000000000000000000c1926323f4c5965727f8c98a5b2a99c8f837669574d42372b1e120600000000000000000000000000000000000000000006121f2b3844505b667783909daab1a4978b7e7164584b3e3125180b000a1723303d4a5663707d8996a3b0a99c90837669554b4035291d100400000000000000000000000005111e2a36414c566a7683909da9b4aa96897c6f6356493c302316090013202c3946535f6c7986929facada093867a6d6053473a2d2019191919191919191919191919191919191919191919191919191413110d0701000000000000000000000c18232f39434b51535a575e61646666635b5143392f20191d2021262b2e31373a41464f59616e7b8796a1aa9d9083776a5d5044372a1d1104000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f0003101c28343f4a545c606262626262626262605c544a4034281c1004000000000000000000000000000008141e29323d47505a616c717c848c92989da0a7a7a7a4a3a2a1a2a4a6a7a79f9d97918a827a6e695e564c41382d22170b01000000000000010d18242f39434d565e686e787f868e92999da0a7a6a8a7a5a4a3a3a4a5a7a9a7a9a19e9a94908981796e695f574d443a2f24190d04000000000005121e2a36424d57606d79849197a1a9a79f969189837f7b78767574737372727271717171717e8b98a4afa396897c706356493d3023160a0000000000000013202c3946535f6c7986929facada093867a6d6053473a2d232323232323232324242524292c2f38404b55616e7a86939facac9f9285796d6053463a2d201307000000000000000004060708080808080808080d1a2734404d5a6773808d9aa69b8e8174685b4e4135281b0e0808080808080808070604000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d242424242424242424242424232221201d191514120e0903000000000000000000000000000000000013202c3946535f6c7986929facb9b3a9a19e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9fa2aaa2a5a8aba39f9c97928c837c726d635b51493f342b1e150b00000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d2013070000000000020c17202b343d474f585f686d747c81868a8d8f9192929291908d8b86827d766f6a616d7a8798a2aeaa968a7d7063574a3d3024170a000b1825313e4b5864717e8b8b8b8b8b8b8b8b8b8b8b8b8b8b8d929da9b5a99d938e8b8b8b8b8b8b8b8b8b8b8b8b8b8275695c4f4236291c0f000c1925323f4b57636d73797979797979786f6a5f574d443a434f5b677177797979797979756d665c504440372d241b1108000000000000000000000000000e1b2834414e5b6774818e9aa7b3a79a8d8074675a4d4131261a0e02000000000000000000000000000000000000000000030f1c28333f4a546875818e9ba8b3a6998d8073665a4d4033271a0d000b1724313e4a5764717d8a97a4b0a89b8f8275685c4f422f24180c00000000000000000000000000010d192530424f5c6875828f9ba8b0a3968a7d7063574a3d3024170a0013202c3946535f6c7986929facada093867a6d6053473a2d26262626262626262626262626262626262626262626262626262621201d18130c0400000000000000000007121d2731394045474d4d535457595957514940312720252a2d2e31373a3c42464c5259616b73808d99a9aa9b8e8175685b4f4235281c0f02000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f0006121f2c3844505c666d6f6f6f6f6f6f6f6f6d665c5144382c1f120600000000000000000000000000020b1925303b444f59616c717e8691969fa2aaa9a19e9b9796959595979a9ea1a8a9a19e948f837b6e685e53493f33271e130800000000000004101d2935404b555e696e7a838c92989fa3ababa39f9d9a9897969697989a9d9fa3ababa69f9c938e847b6e695f564c41352921160a0000000000020e1a25303b45515d676f7c8591979ea5a8a09e95908b8885838281807f7f7f7e7e7e7e7d7d808d9aa7afa396897c706356493d3023160a0000000000000013202c3946535f6c7986929facada093867a6d6053473a3030303030303030303031312f35393c4149515d67727e8b99a4afa79c8f8275665c5145382c1f1306000000000000070c1013131414141414141414141a2734404d5a6773808d9aa69b8e8174685b4e4135281b1414141414141414141313100c0700000000000013202c3946535f6c7986929facada093867a6d6053473a31313131313131313131313131302f2d2c292422211e1a14100b0600000000000000000000000000000013202c3946535f6c7986929facb9ada1979292929292929292929292929292929292989495989b9fa3aaa9a19e9591877f736d635b51463c30271d1207000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000000000008131e29323d464f59606a6f7a81878e92989a9c9e9f9f9f9e9d9a99928f89837c726d687885929faba5988b7f7265584c3f3225190c000815222f3b4855626e7c7f7f7f7f7f7f7f7f7f7f7f7f7f7f808d9aa7b4a79a8e807f7f7f7f7f7f7f7f7f7f7f7f7f7d7063574a3d3024170a000d1a2633404d59667380868686868686857c6f695e564c4344515d6a778386868686868682786d605c52493f362d231a1107000000000000000000000000101c2936434f5c6976828f9ca9b2a5998c7f7266594c3f3326190900000000000000000000000000000000000000000000000b17222d404d5a6773808d9aa6b3a89b8e8175685b4f4235281c0f000b1825313e4b5864717e8b97a4b1a89b8e8275685b4f4235281c070000000000000000000000000000081b2835414e5b6874818e9ba7b0a4978a7d7164574a3e3124170b0013202c3946535f6c7986929facada093867a6d6053473a333333333333333333333333333333333333333333333333333333332d2c29241d160d040000000000000000010b151f272f34383a404246484a4d4c4b464037292c2d3036393a3e4247484d53565e616b707d87929faca2988b7e7265584b3f3225180c00000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000713202d3a4653606d787c7c7c7c7c7c7c7c786d6053463a2d201307000000000000000000000000000a141d2a36414c56606b717e879298a0a8a8a19e97928e8b898888898a8d91969ea1a8a69f9591847a6e655b50443a2f24190d0000000000050f1a232c3945515d676e7b8490959fa2aaa9a19e9992908d8b8a89898a8b8d9092999ea1a9aba59e9691847b6e685d52453d32271b0f03000000000009141f2935414b555f6a6f7c858f939c9fa4a79f9d989892908f8d8d8c8c8b8b8b8b8a8a8a8d929da9afa396897c706356493d3023160a0000000000000013202c3946535f6c7986929facada093867a6d6053473d3d3d3d3d3d3d3d3d3d3d3e3e3f4045474e535b606d7984919eababa0958a7d7164544b4034281c100400000000030b12181c1f20212121212121212121212734404d5a6773808d9aa69b8e8174685b4e41352821212121212121212121201f1c18120b030000000013202c3946535f6c7986929facada093867a6d6053473e3e3e3e3e3e3e3e3e3e3e3e3e3d3d3c3a39352f2e2d2a261f1c17110a020000000000000000000000000013202c3946535f6c7986929facb8ab9e9285858585858585858585858585858585858687898b8e92989fa2aaa7a099928b7f736d62584e43392e23180c000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700000000010d1925303a444e58606b707c848e939a9fa2aaa9a8a4aba39fa3aba39f9c9490877f746d7784919daaa69a8d8073675a4d4034271a0d000814212e3a47535f6a6e72727272727272727272727272727d8a96a3b0a3978a7d72727272727272727272727272706b6155483c2f231609000a1623303d495663707d87929a93939791847b6e685e554b424d5a6774808d93939393938e81746e635b51483f352c231910060000000000000000000000101d2a3643505d697683909ca9b1a4978a7e7164574b3e3124180b0000000000000000000000000000000000000000000000061926323f4c5965727f8c98a5b2a89c8f8275695c4f4236291c0f000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2834414e5b6774818e9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d6053473f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3a39352f281f160c010000000000000000030d151d23292c2d31363a3b3d40403e3b352f35393a3d4146474a4d5355575f61686d747d869299a3a79f92867a6d6154473a2e21140700000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000714212e3a4754616d7a87888888888888877b6e6154483b2e21150800000000000000000000000006111b262f3846525e68707d879299a3aaa49d96918a85817e7d7b7b7c7d80848a91969fa7a7a0968f82776c60564c4135291c1106000000000b16212c38444f59606d798390969fa7aea59d97918c8683817e7d7d7d7d7e8083868c91979ea5ada8a09691847a6d60594f43382c1f14090000000000020d18242f3a434e585f6a6f7a82898f93999c9fa2aaa29f9d9b9a999998989898979797979a9da4aeafa396897c706356493d3023160a0000000000000013202c3946535f6c7986929facada093867a6d605349494949494949494949494a4a4b4c4b5153585f656c74808d96a1aca4999083786c605346392e23180c00000000030c151d23282c2d2e2e2e2e2e2e2e2e2e2e2e34404d5a6773808d9aa69b8e8174685b4e41352e2e2e2e2e2e2e2e2e2e2e2d2c28231d150c0300000013202c3946535f6c7986929facada093867a6d60534b4b4b4b4b4b4b4b4b4b4b4b4b4a4a49484745413f3b3a36312b28231c140c0701000000000000000000000013202c3946535f6c7986929facada093867978787878787878787878787878787878797a7c7f82868c92989fa7aba39f918b7f726a60554b4034281d12070000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d2013070000000005111d2a36414c56606a707d8691969fa4acaaa29f9b979599929994979a9e9f99928c81787683909ca9a79b8e8174685b4e4135281b0e0006121e2b37424e575f6265656565656565656565656565707d8a96a3b0a3978a7d706565656565656565656565656361594f44382c201407000916222f3b4854606b717e88939fa4a19691847a6d675d544a4653606c78818e949fa69d938d80736d635a50473e352b22180f0600000000000000000000111e2a3744515d6a7783909daab0a3968a7d7063574a3d3024170a00000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4b1a99c908376695d5043362a1d10000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d60534c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4745413a31281d1307000000000000000000030b12181c1f20252a2d2e3133332f34383a4045474a4c525457575f6265696e737a81889298a2a8a0958d8073685d5246392d20130700000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000714212e3a4754616d7a87949595959594877b6e6154483b2e2115080000000000000000000000000b17222d38414f59616e7a859299a3aba49c928d847e787471706f6e6f7173787d8490959fa8a89f948c7f72685d5245382d22170b00000004101c27333c4854606b74818e95a0a8ada39c938e857f7b777472717070717274777a7f858e939ca4ada9a0968e81746b6054483b31251a0e02000000000007131d28313c464e585f686d757c82878b8f929897999a9b9c9d9d9d9e9e9e9e9f9f9f9fa3abacb5afa396897c706356493d3023160a0000000000000013202c3946535f6c7986929facada093867a6d6056565656565656565656565657575859555d60646a6f77808d929da8a59f93877d70655b5044372b1d1207000000000b151e272e34383a3b3b3b3b3b3b3b3b3b3b3b3b404d5a6773808d9aa69b8e8174685b4e413b3b3b3b3b3b3b3b3b3b3b3b3a38342e271e150b00000013202c3946535f6c7986929facada093867a6d6057575757575757575757575757575757565554514c4c4846423b38342e261e18120b030000000000000000000013202c3946535f6c7986929facada093867a6d6b6b6b6b6b6b6b6b6b6b6b6b6b6b666d6d6f72757a808590959fa6aea49f92877c6f675c5145392e23180c0000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000000040f19232d3946525e686f7c869298a1a8aba39f98928e8a88878686888a8e92979f9f938d8075828f9ba8a89c8f8275695c4f4236291c0f00020e1a26313c454e535558585858585858585858585863707d8a96a3b0a3978a7d7064585858585858585858585857554f473e33281c1004000713202c38444f59616c727f8b929ca5a0969083796d665c5349505b666d78828f959fa59c928c7f726c625a50473d342a21180e05000000000000000000111e2b3844515e6b7784919eaaafa396897c706356493d3023160a00000000000000000000000000000000000000000000000b1824313e4b5764717e8a97a4b1aa9d9083776a5d5044372a1d11000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d605959595959595959595959595959595959595959595959595959595959595954514b433a2f24180d0100000000000000000001070c1013141a1e2124293036394045474b515357565e616467696e72767b80858d939aa2a79f969183796d60564c4135291d110500000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000714212e3a4754616d7a8794a0a2a2a194877b6e6154483b2e2115080000000000000000000000030f1b27333f4953616b75828f97a1aba49c918c8079716c66646362626264666c707a839096a0aca69f92857a6d60544a3f33281c0f0300000714202c38444f5963707d89939ea7aea49c918c817a726e686765646363646567686e737a818c919ca5afa89e93897c6f63574d42362a1e12050000000000010c161f2a343c464e565e616b6f757b7f8285888a8c8d8f8f9090919191919292929292999ba3acafa396897c706356493d3023160a0000000000000013202c3946535f6c7986929facada093867a6d636363636363636363636363636364646668676d71757c828d929da4a49f938c7f726b6053493f33271b0b0000000007121d273039404546474747474747474747474747474d5a6773808d9aa69b8e8174685b4e474747474747474747474747474645403930271d1207000013202c3946535f6c7986929facada093867a6d64646464646464646464646464646464646362605d555855534d46443f383029231d150d0500000000000000000013202c3946535f6c7986929facada093867a6d605f5f5f5f5f5f5f5f5f5f5f5f5f5c60616265686d737b838f949fa7afa3999183796d60544b4034281c100400000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d2013070000000a16212c38444f59616d7a849198a2aaaaa299928d85817d7b7a79797b7d81858b92979d928a7e818e9ba7a99d9083766a5d5043372a1d1000000915202a333c4247484c4c4c4c4c4c4c4c4c4c4c5763707d8a96a3b0a3978a7d7064574c4c4c4c4c4c4c4c4c4c4a48443e352c21160b000004101c27323d47505a626d73808c929da59f958f82786d655b504a545c666d79839096a0a49c918b7e716c61594f463c332a20170d040000000000000000121f2b3845525e6b7885919eabafa296897c6f6356493c3023160900000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0aa9e9184776b5e5144382b1e11000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d6666666666666666666666666666666666666666666666666666666666666666605d554b4135291d1104000000000000000000000000040610181f272f353b41464b5153555d606467686d7174777b7f83888d92989fa4a39f9590847b6e675d51443a3024190d0100000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000714212e3a4754616d7a8794a0adaea194877b6e6154483b2e211508000000000000000000000005121f2b3744505b65707d8a939ea9a79d928c7f746d67605b5456555556545b60686d7984919da6aea2988c7f72665b5044382b1f120600000916222f3c4854606b7783909da5afa89d928c7f746d68615e56585756565758565e61686d747f8c939da9afa59c8f8276695e53463a2d211407000000000000040d18222a343c444c52596063696e7276797b7d7f81828383848484848585858585868b909ba7afa396897c706356493d3023160a0000000000000013202c3946535f6c7986929facada093867970707070707070707070707070707071717274767a7d82878f949da4a099938c80746d63594f41382d22170b000000000c18232e39424b515354545454545454545454545454545a6773808d9aa69b8e8174685b545454545454545454545454545453514b43392e23180c000013202c3946535f6c7986929facada0938679717171717171717171717171717171717170706f6d676865615f5753504a423d342f271f170e05000000000000000013202c3946535f6c7986929facada093867a6d605352525252525252525252524a50535456565e61696e78828f95a0acaba0958b7f72665c5145382c1f130600000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d2013070000030f1b27323c4855606b75818e96a1aaaaa2989287807a75716e6d676d6e7074797f858f949e9185818e9ba8aa9d9084776a5d5144372a1e110000030e18212a31373a3b3f3f3f3f3f3f3f3f3f3f4a5763707d8a96a3b0a3978a7d7064574a3f3f3f3f3f3f3f3f3f3d3c38332c231a10050000000b16212b353e48515b636e74808e939ea69f948e81776c605b514b545d676d7a849196a1a39f92877e706b60584e453b322920160d0300000000000000121f2b3845525e6b7884919eabafa296897c6f6356493c3023160900000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4b0aa9d9184776a5e5144372b1e11000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada09386797272727272727272727272727272727272727272727272727272727272727272726d675d5145392c201306000000000000000000000000071019222a313940454d52555c6064676d7074777a7d8184888c90959a9fa2a39f98928c837b6e695e554b4032281e13080000000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000714212e3a4754616d7a8794a0adaea194877b6e6154483b2e21150800000000000000000000000613202d394653606c7883909da6aca0958d80736d605c55504a4a4848494a50565d676f7d89949facaa9e9185786c605346392d2013060004101c2834404b5463707d8995a0acaca0968d80736d605d56524d4b4a4a4a4a4b4c52565d606d74818e97a2adab9f94877b6e6154483b2e211507000000000000050e171e252a323a41464f54575e6165666d6f717374757676777777787878787879797e8b98a4afa396897c706356493d3023160a0000000000000013202c3946535f6c7986929facb0a396897d7c7c7c7c7c7c7c7c7c7c7c7c7c7c7d7d7e7f8183868a8e93999f9f9d9590877f746e645b51473d2f261b110600000004101c2834404b545c606161616161616161616161616161616773808d9aa69b8e817468616161616161616161616161616161605c554b4034281c10040013202c3946535f6c7986929facb1a4978b7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7d7d7c7b7a7875726e6964605c544f454039312920170e050000000000000013202c3946535f6c7986929facada093867a6d605347454545454545454545453f444647494c52575f666d7a83919da6b0a79e9184796d6053463a2d20130900000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000007131f2c38444f5963707d89939ea8aea29892867d746d686462605d606164676d727a828e93979185929facaa9e9184776b5e5144382b1e11000000060f1820262b2e2f3232323232323232323d4a5763707d8a96a3b0a3978a7d7064574a3d3232323232323232302f2c28211a110800000000050f19232c363f49525c606c78818f949fa69e938d80746d635a504b555e686e7b849197a2a39992867d706a5f574d443b32281f150c03000000000000111e2b3844515e6b7784919eaab0a396897d7063564a3d3023170a00000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a99d9083766a5d5043372a1d10000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facb2a6998c7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f796d6054473a2d2114070000000000000000000000061019232b343c434b51565e61676d71757a7d8084868a8d9196989d9fa7aba399928e867f796e695e574d43392f20160c020000000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000714212e3a4754616d7a8794a0acaca194877b6e6154483b2e2115080000000000000000000005111e2a36424d5763707d8a95a0aca69d9083786d605b514b443f3d3c3b3c3f444c55606b7683909c9f9e9d97897c6f6256493c2f2316090006131f2c3845515c6675818e9ba7b1a99e9184796d605b524c46413f3e3d3d3e3f41464c525b606d7a85929fabb0a6988c7f7265594c3f2f24180d0100000000020c1720293036393a3e3f44484d5354545c606264666768696a6a6a6b6b6b6b6c6c6c717e8b98a4afa396897c706356493d3023160a0000000000000013202c3946535f6c7986929facb9a5998f8989898989898989898989898989898a8a8b8c8e9092989b9e9c9995908a837d726d645c53493f352b1d140a0000000006131f2c3845515c666d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e73808d9aa69b8e81746e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6d675c5145382c1f13060013202c3946535f6c7986929facb9a69a908b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89888784827f7b76716d666059514b433a322920160c0300000000000013202c3946535f6c7986929facada093867a6d6053473a38383838383838382e34383a3a3c41464d545d686f7c89949eaaada1968a7d7064574a3d31251a0e02000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700000915222f3b4854606b7683909da5afa69f92867d706b605d565554515355555d60686d78818e94989298a2aeab9e9184786b5e5145382b1e1200000000060e151a1e21222525252525252525303d4a5763707d8a96a3b0a3978a7d7064574a3d31252525252525252423201c16100800000000000007111a242d374044505b666d79828f95a0a59d928c7f726c625a504c565e696e7c859298a2a39892867c6f695f564d443a31271e150b020000000000111e2a3744515d6a7784909daab0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000c1825323f4b5865727e8b98a5b1a99c8f8276695c504336291d10000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facb9a89c918c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c877b6e6154483b2e21150800000000000000000000030c18222b353d464e555d60686e73797e82868a8d90939a9a9ea0a8a9abb1ac9f9287817b736d665e574d453b31271d0e04000000000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000714212e3a4754616d7a87949f9f9f9f94877b6e6154483b2e211508000000000000000000000714202d3a46525e6976828f9ca7ab9f94897d70665c50454039332d2f2f2d333a434f5964717e8b989291908f8c7f7366594c403326190d000713202d3a4653606d7985929facada1978a7e71675d5145413a36303130303130363a4145525d68737f8c99a9b3a89c8f827569554b4035291d10040000000008131e29323a4146474b4c4d4e4f51524a50535557595a5c5c5d5d5e5e5e5e5f5f5f65717e8b98a4afa396897c706356493d3023160a0000000000000013202c3946535f6c7986929facb9aba199969696969696969696969696969696969797999b9d9f9e96918f8c88837e78706b625b534a41372e23190b02000000000713202d3a4653606d797a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a808d9aa79b8e817a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a796d6053463a2d2013070013202c3946535f6c7986929facb9aca29a97979797979797979797979797979797979797969596918f8b88837e78706b605c554c443a32281e150a00000000000013202c3946535f6c7986929facada093867a6d6053473a2d2c2c2c2c2c2c2c23282b2d2e30363b424c56606b75828f9cabb2a89b8e817568574d42362a1e1205000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700030f1c28333f4a54636f7c89959fabab9f948b7e716a6059524c48474546484b51565e666d788290989fa2aab4ab9e9185786b5e5245382b1f12000000000003090e1214151919191919191924303d4a5763707d8a96a3b0a3978a7d7064574a3d3124191919191919171614100b05000000000000000008121b2528333f4a545c676d79839096a0a49c918b7e716c61594f4d575f6a6f7d869299a3a29891857b6e685e564c433930261d140a0000000000101d2a3643505d697683909ca9b1a5988b7e7265584b3f3225180700000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3a89b8f8275685c4f4235291c0f000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facb9ada39c999999999999999999999999999999999999999999999999999999999999999994877b6e6154483b2e211508000000000000000000000b151e2a343d474f585f676d737b80858a8f92989a9d9fa4a39f9fa4aba4a7a79a8d807b756f6a605c544a42382e23170c03000000000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000714212e3a4754616d7a87939393939393877b6e6154483b2e211508000000000000000205070814212e3b4754616e7b87939facaa9c9083766b60544a3f342f282222222228313d4855616e7b878685848483817f7265584b3f3225180c00091623303c4956636f7c8998a2a5a69e9285796d60554b40352f2a2524232324252a2f35414c56626f7c8897a1adab9e918578675d5145392c201306000000010d1925303a444c525457595a5b5c5d5e5b5953484a4c4e4f5050515151515252525965727f8c98a5afa396897c706356493d3023160a0000000000000013202c3946535f6c7986929facb9b3aba5a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a4a4a5a7a99e948f84827f7b76716c656059514941382f251c110700000000000a1723303d4a5663707d87878787878787878787878787878787878d929da99e938e87878787878787878787878787878787877e7164574a3e3124170b0013202c3946535f6c7986929facb9b4aca6a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3a3a8a19e9b9894908a847d746d675e564c443a30261c1106000000000013202c3946535f6c7986929facada093867a6d6053473a2d201f1f1f1f1f1f171c1f2021252a303a434f5964707d8a99a3afab9e928578695e53463a2d211407000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d2013070006121f2b3844505b6674818e9ba7b1a79c8f82766c62584f45413b3a393a3b40454c545c666e7b86929facb4b7ab9e9184786b5e5145382b1e1200000000000000020608080c0c0c0c0c0c1724303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170c0c0c0c0c0a0907040000000000000000000000091317222d38424b555d676d7a849197a1a39f92877e706b60584e4e58606a707d87929aa4a19791847a6e685d554b42382f261b1106000000000f1c2835424f5b6875818e9ba8b3a6998c807366594d402f23180c00000000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7b4a79a8e8174675b4e4134281b0e000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facb9b5ada8a6a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a194877b6e6154483b2e21150800000000000000000007121c27303c464f59606a6f7980868d92979c9fa3a8a09e9a9992939995989b9f9d928d87827c736d665c544a3f34281e150a000000000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000714212e3a4754616d7a86868686868686867b6e6154483b2e211508000000000002080e1114141d2935404b5565727f8c99a4aea2988a7e7164594f42382e231d17191917212d3a46535f69767b7a7978777675726d62564a3d3124180b000c1926333f4c5966727f8c969798999a8d8174665c5143392f241e1917171717191e24303a4653606c7985929eabada197867a6d6053473a2d20140700000005111d2a36414c565e6164656768696a6b68655d534840414243434444444545454d596673808c99a6afa295897c6f6256493c2f2316090000000000000013202c3946535f6c7986929facb9afa7a2a09f9f9f9f9f9f9f9f9f9f9f9f9fa0a1a2a4a6aaa89c8f827e7a736e6964605b534f473f372f261d130a0000000000000a1723303d4a5663707d89949494949494949494949494949494949a9da4aea59e9b949494949494949494949494949494948a7d7164574a3e3124170b0013202c3946535f6c7986929facb9afa7a2a09f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa0a0a1a2a5a8aba8a69f9c95918981796d685e564c42382e23170c030000000013202c3946535f6c7986929facada093867a6d6053473a2d201412121212060b10121314191e28313d4754606d7a86929facada297877b6e6154483b2e211508000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000613202d394653606c7985929eabaca095897c6f635a50463d35302d2c2d2f353a424a545e6973808d9aa4afb7aa9e9184776b5e5144382b1e11000000000000000000000000000000000a1724303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a000000000000000000000000000000000000000006111c262f39434c555e686e7b859197a2a39992867d6f6a5f574d4e58616b717e88939fa4a09690837a6d675d544a41382d22170b060000000d1a2734404d5a6773808d9aa6b3a89b8e817568554b4034291c100400000000000000000000000000000000000000000005121e2a36424d576976838f9ca9b2a5988c7f7265594c3f3226190c000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facb9afa7a2a09f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f94877b6e6154483b2e2115080000000000000000000c18232e39424e58606b6f7c848c92989fa2a7a09d9996918d8a868687888b8e92989f9a948f8780786d665c50443e30261c11060000000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000713202d3946525e6876797979797979797976695e52463a2d20140700000000050d14191e2021252c3845515d6776838f9cabac9f9285796d6053463d3026252525252525252a36424d575f696e6d676b6a696865625b51463a2e221509000e1b2835414e5b68748188898a8b8d8e8b7e7164544b4031271d130e080a0a080e131f2b3744505b657683909da9b3a994887b6e6155483b2e2215080000000713202d3946525e686d71727374767778756f65594d3d323536373737383835404b556774818e9aa7b2a995887b6e6255483b2f2215080000000000000013202c3946535f6c7986929facb9a79d95939393939393939393939393939393949597999d9f9e948f8a85807b726d605c544a42392e2318140b010000000000000a1723303d4a5663707d8996a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a7a9aeb6afaaa8a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1978a7d7164574a3e3124170b0013202c3946535f6c7986929facb9a79d959393939393939393939393939393939393949496989b9fa2a9aba7a09d938e837a6d685e544a3f342820150a0000000013202c3946535f6c7986929facada093867a6d6053473a2d2014070505050000030607080c16202c3945515d677783909daab3a9968a7d7063574a3d3024170a000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000916232f3c4956626f7c8997a2adaa9d9083776b6054483f34292421202024293039424d57616e7b87939facb7aa9d9184776a5e5144372b1e11000000000000000000000000000000000a1724303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a0000000000000000000000000000000000000000000a141d27303a434c565f696f7c859298a3a39892857c6f695e564c4f59616c727f8b929ca5a0959082796d665c53493f332722170c0000000c1925323f4c5865727f8b98abb5aa9d908477675c5145382c1f13060000000000000000000000000000000000000000000714212d3a46535f697885929fabb4aa968a7d7063574a3d3024170a000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facb9a79d95939393939393939393939393939393939393939393939393939393939393939393877b6e6154483b2e211508000000000000000004101c2834404a545f6a6f7d8691969fa2a69e9c95908c8884807d7a797a7c7e81858c92989e99938c81786d605a5042382e23170c0000000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f0005111d2a36414c565e6c6c6c6c6c6c6c6c6c6c5e574d42362a1e1205000000050e171f252a2d2e32323a4753606d7986929faca89b8e8275675c51453832323232323232323230313b454d575e61605d555d5c5b585651493f34291d1206000714212d3a4754606d7a7b7c7d7f8081827b6e6155483b2e22150b0100000000030f1b27333f49536975828f9ca8aea295887b6f6255483c2f2215090000000714212e3a4754616d7a7e7f8081828485817568584e43372e2c2823282c2f3945515d677783909daaada196877a6d6054473a2d2114070000000000000013202c3946535f6c7986929facb9a2958b86868686868686868686868686868787888a8d90959a9f9c98928d867e756d665c544a40342820160a000000000000000a1723303d4a5663707d89969f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa6a8aeb6afa9a79f9f9f9f9f9f9f9f9f9f9f9f9f9f9f978a7d7164574a3e3124170b0013202c3946535f6c7986929facb9a2958b86868686868686868686868686868686868788898c8e92979da0a8aca59d9590837a6d665c50443c31261a0f0300000013202c3946535f6c7986929facada093867a6d6053473a2d20140700000000000000000004111d2935414c556975828f9ca8b1a4988b7e7165584b3e3225180b000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000c1925323f4c5865727f8b98a9b3ab998c7f7266594f43362d2219141313181e27303b46525e697683909da9b6aa9d9083776a5d5044372a1d11000000000000000000000000000000000a1724303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a000000000000000000000000000000000000000000020b151e28313a444d575f6a6f7d869299a3a29791847b6e685e554b505a626d73808d939da59f948f82786d655b50443e34281d11050000091623303c4956636f7c8999a4afac9f9286796d6053473a2d22170b0000000000000000000000000000000000000000000815222e3b4855616e7b8897a2adaea298887b6e6155483b2e221508000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facb9a2958b868686868686868686868686868686868686868686868686868686868686868686867b6e6154483b2e211508000000000000000006121f2c3844515c666f7c859298a0a8a19e948f89847f7b7774706d6c6d6f7174797f869195a09f938e81746c61544a3f34281c100300000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f00010d1925303a444c525f60606060606060605f524d453b30251a0e020000020d1720293036393b3f3f3f495663707c8998a3aeaa988b7e7265554b403f3f3f3f3f3f3f3f3f3f3d3c383b454d535453514b51504f4b4a463f372d23180d01000613202c3945515d676d6e7071727374756e695f53463a2d2114030101000205080f17222d424f5b6875828e9ba8b5ab95887b6e6255483b2f2215080000000815212e3b4854616e7b878c8d8e8f909184786a6054473f3a38342e34383a404b55606d7a86929facab9e918578675d5145392c2013060000000000000013202c3946535f6c7986929facada0938679797979797979797979797979797a7a7b7e8083888d9299a19f98928b81786d665c51443d32271b0f030000000000000a1723303d4a5663707d89939393939393939393939393939393939a9da4aea59d9b939393939393939393939393939393938a7d7164574a3e3124170b0013202c3946535f6c7986929facada0938679797979797979797979797979797979797a7b7c7f81858b91969fa4aca79f959082786d60584e43372b1f140900000013202c3946535f6c7986929facada093867a6d6053473a2d201407000000000000000000010d19242f414e5b6874818e9ba7b2a5988c7f7265594c3f3226190c000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000e1b2834414e5b6774818e9aa7afa399897c6f6356493d32231b100806070c151e2a36424d576774808d9aa7b3a99c8f8276695c4f4336291c10000000000000000000000000000000000a1724303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000030c161f29323b454e58606b707e87929fa3a19691847a6d675d5145515b636e74818e939ea69e948e81776c605a5045392d21150800000714202d3a4753606d7a86939facaea399897d706353493f33271b0f030000000000000000000000000000000000000004111d2935414c5565717e8b98a9b3ac9f9285786d6053463a2d201307000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867979797979797979797979797979797979797979797979797979797979797979797976695e52463a2d20140700000000000000000713202d3a4653606d78839197a2a8a097928a827c77726e6967636060616265676d727b839196a19d938a7d70665c5044382c1f120600000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000008131e28323a41465353535353535353534846423b33291f140900000008141f29323b4146474c4c4c4c5966727f8c99aaaea398887b6f62554c4c4c4c4c4c4c4c4c4c4c4c4948443d3b4246484745404443423f3d3a342d251b1106000004111d2935414c555d6062636465666869615f574d42362a1e120d0d0e090e121419212b37434e58697683909ca9aea399877a6d6154473a2e2114070000000714212d3a46535e697884919a9b9c9d96897c6f625a504a464440434044464b515c67717e8b98a3aeaa9b8f827568554b4135291d11040000000000000013202c3946535f6c7986929facada093867a6d6c6c6c6c6c6c6c6c6c6c666c6d6e6f7173777b80879196a1a29f938e81786d60584e43382b20150a0000000000000a1723303d4a5663707d86868686868686868686868686868686868d929da89d938e86868686868686868686868686868686867e7164574a3e3124170b0013202c3946535f6c7986929facada093867a6d6c6c6c6c6c6c6c6c6c6c6c6c6c666d6d6e6f7275797e848d939aa4afa79f948d80736a5f53473b31261a0e02000013202c3946535f6c7986929facada093867a6d6053473a2d20140700000000000000000000081b2734414e5a6774818d9aa7b2a6998c7f7366594c403326190d000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700101d293643505c6976838f9ca9ac9f92867a6d6053473a2d201407000000030c1a25303f4b5865727e8b98a5b1a89b8e8275685b4f4235281c0f000000000000000000000000000000000a1724303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000040d172029333c464f59616c717e8b919ca4a0969083796d60534749525c606d78818f949fa69e938d80736c6156493d3024170a00000613202c3945515d677784909daab4ab9a8d8073655b5044372b1f140a000000000000000000000000000000000000010c13202c3945515d6775828e9ba8b5a89c8f8275665c5044382b1f1206000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5e574d42362a1e12050000000000000006131f2b37434e5865727f8c95a0a9a09691857d766f6b66625f575753535455555d60696e7a84919ea59e9184786d6053463a2d20130800000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f000006111c2630383f444649494949494949494644403930271c12070000020e1925303b444d5254585858585b6875828e9ba8ac9f9286796d605858585858585858585858585856544f473d363a3b3a39352f363532312e29231b1309000000010d19242f3a434c5154555657585a5b5c55534d453b31261a1a1a1a1b1b1a1e21252a333b4754606a7884919eabac9f9286796c605346392d20130600000005121e2a36424d576774818e9aa6a9a89b8e81756c605c5453514a504a5153555d606d7983919daaaea2988b7e7165584b3e2f24180d010000000000000013202c3946535f6c7986929facada093867a6d606060606060606060605b606061626466696e747c849196a1a59e938d80736a6054473c31261a0f0200000000000916232f3c4855616b707979797979797979797979797979797979808d9aa69b8e817979797979797979797979797979797979716c6155493c3023170a0013202c3946535f6c7986929facada093867a6d606060606060606060606060605c6061616365676d71798088939fa5afa69f92877c6f62574d42362a1e1205000013202c3946535f6c7986929facada093867a6d6053473a2d20140700000000000000000004101c2834404a546875828e9ba8b2a5988c7f7265594c3f3226190c000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700111e2b3744515e6a7784919daaab9e918578675d5145392c1f130600000000091724313e4a5764717d8a97a4b0a79a8d8174675a4e4134271b0e000000000000000000000000000000000a1724303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a000000000000000000000000000000000000000000000000050e17212a343d474f59626c727f8c929da89f958e8175685b4e4244505c666d79828f95a0a59d928b7e7164584b3e3125180b000004101d2935404b556773808d9aa9b3ab9e9184786c6053463c2f261b1106000000000000000000000000000000000007131d28333f4a54606d7a86929facb1a7988b7f7265544a3f34281c1003000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d60606060606060606060606060606060606060606060606060606060606060605f524d453b30251a0e02000000000000000815222e3b47545f6a7784919ea7a39891847b706b63605955534d4a474647484b51575e68707d8a96a1a1968a7e7164574b3e2f24190d01000000000000000000000000000000000003101d2a3643505d697683908f8275685c4f4235291c0f00000c17232e38424a5053555555555555555553514a42392e23180c000005111e2a36414d565e6165656565656a7784909daaaa9d9083776665656565656565656565656565656360594f44382d2e2d2c292429282524221d181109010000000008131e28313a41454748494a4c4d4e4f4846423b332923272727272728252a2d30363c454e58626f7c8896a1adab9c908376655b5044372b1f1205000000020e1a25313c4855626f7c88949faaaa9e938a7e726d6662605c545d545c6062676d75808d95a0aca99f92867a6d6154473a2e211407000000000000000013202c3946535f6c7986929facada093867a6d6053535353535353534a505354545557575f616a6f7b84919ea7a59f92877c6f62584e43372b1f120600000000000714202c38444f5961636c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c73808d9aa69b8e81746c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c64615a5045392d2114080013202c3946535f6c7986929facada093867a6d6053535353535353535353534a5153545556555d60676d747f8c939daaaea3998e8275695f53463a2d211407000013202c3946535f6c7986929facada093867a6d6053473a2d2014070606000104060708090b141f2c3844515c667683909ca9b1a4988b7e7165584b3e3225180b000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700121f2b3845525e6b7885919eabaa9d9084776a554b4035291d1004000000000b1824313e4b5764717e8a97a4b1a5998c7f7266594c3f3326190c000000000000000000000000000000000a1724303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000060f18222b353e47505a636d74808d9aa7a79d9083766a5d50433f4a545c676d7a84909daaa4998c807366594d4033261a0d0000010d18242f3d495663707c8997a1adaca196897d7063584e41382d22170f06000000000000000000000000000000071118242f3844505b66717e8b98a2aeaca095887b6e6155483b2e23170b00000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d60535353535353535353535353535353535353535353535353535353535353534846423b33291f140900000000000000000916222f3c4955626f7c8896a0ac9f92867c6e696159544f4847423d3a393a3c40454d56606c7884919ea89b8f827568554c4135291d1104000000000000000000000000000000000408101d2a3643505d697683908f8275685c4f4235291c0f0003101c28343f4a545c606262626262626262605c544a4034281c1004000714202d3946525e686e7272727272727985929faca89b8e8275727272727272727272727272727272706b6054483c3126201f1d181d1c181815120d06000000000000010c161f282f35393a3b3d3e3f4041423b3a36312c2f3034343434343531363a3b41464e57606a74808d9aa8aea3998c7f726653493f33271b0f03000000000915212e3b47535f6a76828f98a2aea59f92877f78726f6d666a696a666d6f7379818d929da7aca2978d8074685d5246392d201307000000000000000013202c3946535f6c7986929facada093867a6d6053474646464646463f44464747484b4d53585f69707d8a959faba3998f82766a5f53473a2e211408000000000004101c27333d474f55566060606060606060606060606060606773808d9aa69b8e817468606060606060606060606060606060575550483e33281c11040013202c3946535f6c7986929facada093867a6d6053474646464646464646464044464748494b51555d606d74818e98a2aeab9f93877b6e6155483b2f24180d010013202c3946535f6c7986929facada093867a6d6053473a2d2014131313070d10131414151a1d27303a4653606d7985929fabb2a896897c706356493d3023160a000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700121f2c3945525f6c7885929faba99c908376695d50432f24180c00000000000c1825323f4b5865727e8b98a5b5ab978a7e7164574a3e3124170b000000000000000000000000000000000a1724303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000007101a232d373f44505c666d7983909da9a59d9083766a5d5043434c565e696f7c85929faca3998c807366594d4033261a0d0000000713202d3a4653606d7985929eacb2a89c8f82756a5f53493f332721180f0802000000000000000000000003091119232935404b55606c7884919daab3a99d908477695f53463a2d1c110600000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d60534746464646464646464646464646464646464646464646464646464646463b3a36302921170d0200000000000000000b1825323e4b5865717e8b98a8a79a8d81746a5f574f48443d3a37312d2d2e2f353b44505b6574818e9ba79e928578675d5145392c2013060000000000000000000000000000050c1114171d2a3643505d697683908f8275685c4f4235291c0f0006121f2c3844505c666d6f6f6f6f6f6f6f6f6d665c5144382c1f1206000814212e3b4754616e7a7f7f7f7f7f7f7f8c98a2aea99c8f827f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7d7063574e42372b1e13100c070f0c0b0906010000000000000000040d161e24292c2d2f3031323335362e2d2a32383b3d404040404141424246484c525860696f7c87929faca99f92867b6e6155483b2d22170b000000000006121f2b37434e58626f7c86929fa4aca399928b837f7b797777767777797c80858e939da4aea49a92857a6d61564c4135291d1105000000000000000013202c3946535f6c7986929facada093867a6d6053473a393939392d3338393a3b3c3e42464e57616c7683909da9ab9f94887b6e6255483b2f2215060000000000000b16212c353d44484a53535353535353535353535353535a6773808d9aa69b8e8174685b53535353535353535353535353534a49453e362c22170c000013202c3946535f6c7986929facada093867a6d6053473a393939393939392e34383a3a3b3c40454b515b616d7a86929facafa4998c7f7366554b4035291d10040013202c3946535f6c7986929facada093867a6d6053473a2d202020202020181d20202122252a2f39434d57636f7c8998a2aeaca196877b6e6154473b2e211408000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700121f2c3945525f6c7885929faba99c908376695d50432f24180d01000000000c1926333f4c5966727f8c99a5afa399887c6f6255493c2f221609000000000000000000000000000000000a1724303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a000000000000000000000000000000000000000000000000060f19222c363f49525c606d78828f959fa69d938c807366594d424b555e686e7b859198a2a49a92867d706356493d3023160a00000006121f2c3844505c6673808d9aa4afaa9e94887c6f655b50443d332a2219140e09060400000100000406090e141a232b353d45515d67717e8a95a0acada2978b7e7265574d42362a1e0a0000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d6053473a393939393939393939393939393939393939393939393939393939392e2d2a251f170f050000000000000000000d192633404c5966737f8c99a6a3968a7d7063584e453e38322e2b262020212429333f49536673808d99a6a197877a6d6054473a2d211407000000000000000000000000000810171c2123242a3643505d697683908f8275685c4f4235291c0f000713202d3a4653606d787c7c7c7c7c7c7c7c786d6053463a2d201307000714202d3a4753606d7a868b8b8b8b8b8c919caab4ab9f948f8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b84776a5f53473a2e2114080000020000000000000000000000000000040c13191d202122232425272829222b353d4448494d4d4d4d4e4e4f4d5354565e616a6f7b849199a3aba1978d8174695f53463a2d1b11060000000000030f1b26323c47535f6a717e8b939aa2aaa39f95918c8886848483838485898c92979ea5aaa39f93887d70685e52443a3024190d01000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d2d2d2d22282b2d2d2e2f31363c45505a65727f8c98a5b0a6998c7f7366594c402d22170b00000000000005101a232c33383c3d464646464646464646464646464d5a6773808d9aa69b8e8174685b4e464646464646464646464646463e3c39332c241a1005000013202c3946535f6c7986929facada093867a6d6053473a2d2d2d2d2d2d2d23282c2d2e2e2f35394046525e6873808d99a9b3ab9d908377675d5145392c2013060013202c3946535f6c7986929facada093867a6d6053473a2d2d2d2d2d2d2d24292c2d2e2f30363b424b555f6974818e9aaab4ab9e918478695e52463a2d201407000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700121f2b3845525e6b7885919eabaa9d9084776a554b4035291d1004000000030f1b27333f49536773808d9aa6ac9f92867a6d6053473a2d201407000000000000000000000000000000000a1724303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000050e18212b343e48515b636e74818e949ea79e948e81746e63574b4a545d676d7a849197a1a49f93887e716b6054483b2f22160900000003101c28343f4a54616e7b87939fabb0a69c9083776c60584e453c342a251e1a1312100c070e070c1013131a1f262a353d47505a606d7984919ea7b1a99f9285796d6053473b31261a0e0000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d6053473a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d21201e1a140d05000000000000000000000d1a2633404d596673808c99a6a295887c6f6255493c332c27211e1d2024292d333b434e586774818d9aa7a994887b6e6155483b2e22150800000000000000000000000008121a22282d3031323643505d697683908f8275685c4f4235291c0f000714212e3a4754616d7a87888888888888877b6e6154483b2e211508000613202c3945515d6775828f98989898999ca3adbcb0a69f9c98989898989898989898989898989896887b6e6255483b3025190e02000000000000000000000000000000000001080d111314151617191a1b1c27323d474f54565a5a5a5a5a5b5c575e6164686d747c859196a0aaa39992857a6e61574d42362a1e0a000000000000000a15202b37434e58616c727f8892989fa3a7a09d99999291909090919298999ea2a9a69f98928b7f726c61564c4132281e130800000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d202020171c1f20212122262a333e4955626f7c8895a2afa99c8f82766953493f33271b0f0300000000000008111a21272c2f30393939393939393939393939404d5a6773808d9aa69b8e8174685b4e4139393939393939393939393931302d28221a120800000013202c3946535f6c7986929facada093867a6d6053473a2d202020202020181c1f20212224292f35414c56626f7c8897a2adac9f9286796d6053473a2d2014070013202c3946535f6c7986929facada093867a6d6053473a393939393939392f35393a3b3b3d42464d545c676e7b87929facb1a79a8d817467574d42362a1e1105000b1825323e4b5865717e8b98a4aca295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700111e2b3744515e6a7784919daaab9e918578675d5145392c20130600000005121f2b3744505b6576838f9ca9aa9d908477675c5145382c1f1306000000000000000000000000000000000a1724303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000040d17202a333d47505a626d73808c939da69f958f82786d605b5244505c666d79839096a0a59c928b7f726c61594f44382c201307000000000c17232e3846535f6975828e99a3afab9f948b7f726a60574e463e36302a25201f1c181b1a1b181c1f20262b31363f474f59616c74808d96a1adada2978d8073675d5145392a1f14090000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d6053473a2d2020202020202020202020202020202020202020202020202020201514120e090200000000000000000000000c1925323f4c5865727f8b98a9a396897c706356493d332b262324292c2f35383f444d56606a7683909da9a399877a6e6154473b2e211408000000000000000000000008121a242c33393c3e3f3e43505d697683908f8275685c4f4235291c0f000714212e3a4754616d7a87949595959594877b6e6154483b2e2115080004101d2935404b5565717e8b99a49f9fa5a7adb5bbb2aaa4a19f9f9f9f9f9f9f9f9f9f9f9f9f9fa8998c7f7266564d41362a1e11050000000000000000000000000000000000000001040607080a0b0c0d13202c38444f596063676767676768686a696e71757a81879197a0a8a19892877d6f685e52453b31261a0e00000000000000040f1a26313c46505a636d727e868e92999da0a8aba39f9e9d9c9d9e9fa2aaaaa29f9b948f867e726d62594f443a3020160c0200000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d2014130b0f12131414151a212e3b4754616e7a8794a1adab9e928578655b5044372b1f1205000000000000000810161c2023232d2d2d2d2d2d2d2d2d2d2d34404d5a6773808d9aa69b8e8174685b4e41352d2d2d2d2d2d2d2d2d2d2d2423211c1710080000000013202c3946535f6c7986929facada093867a6d6053473a2d2014131313130c1012131415181d25303a4653606c7985929fabafa399897c6f6256493c2f2316090013202c3946535f6c7986929facada093867a6d60534746464646464646464640454747484a4d52575e666d79829099a3afab9f95897c6f6356493c30251a0e02000b1825323e4b5865717e8b989f9f9f95897c6f6256493c2f23160900000d1a2733404d5a6673808d999f9f9f9386796d6053463a2d20130700101d293643505c6976838f9ca9ac9f92867a6d6053473a2d20140a0000000613202d394653606c7985929fabac9b8e817468554b4034291c1004000000000000000000000000000000000a1724303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a000000000000000000000000000000000000000000030c161f29323c464f59616c727f8b929ca5a0969083796d665c5049525c606d78828f959fa69e938d80736d625a50473d32271b10030000000006111c2a36424d57626e7b87929fa8b0a69f92877c6f695f585046413b36312d2c282327272723282c2d31373b42465159606b717e8a929da8b1a79f92857a6d61554b4035291d10040000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d6053473a2d2014131313131313131313131313131313131313131313131313130807050200000000000000000000000000091623303c4956636f7c8997a1a5988b7e7265594f453d3731302f35393a40454950565e686f7c89959fac9f9286796d6053463a2d2013070000000000000000000008121a242c363e45494a4c4a46505d697683908f8275685c4f4235291c0f000714212e3a4754616d7a8794a0a2a2a194877b6e6154483b2e21150800010d18242f3a4754616d7a86939393939a9da5afb5aaa0989593939393939393939393939393939393908376685e5246392d2014070000000000000000000000000000000000000000000000000000000916222f3b4854606b707373737374747576787b7e82868e9299a1a39f9791867e716b60564d4133291f140900000000000000000a15202a343e48515b636c717b81878c919597999c9d9e9e9f9f9f9e9d9b9998928e89827b716c625b51473e32281e0e040000000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d20140c0c0c0c0c0c090e13202d3a4653606d798693a0acac9f9286796c605346392d2013060000000000000000050b10141617202020202020202020202734404d5a6773808d9aa69b8e8174685b4e41352820202020202020202020171714110c05000000000013202c3946535f6c7986929facada093867a6d6053473a2d2014070606000004060707070c131f2b3844505b667683909ca9b5ab978a7e7164574b3e3124180b0013202c3946535f6c7986929facada093867a6d6053535353535353535353534b5153545557575e61696e78818e949fabafa59d9083776b6054483b2f1f140900000b1825323e4b5865717e8b9393939393897c6f6256493c2f23160900000d1a2733404d5a6673808d939393939386796d6053463a2d201307000e1b2834414e5b6774818e9aa7afa399897c706356493d30261c110a080a111c28343f4a54626f7c8898a2aea49a8a7e7164574b3e2f23180c00000000000000000000000000000000000a1724303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a0000000000000000000000000000000000000000020b151e28313b444e58606b707e87929fa4a19791847a6d675d544a515b636e74818e949ea79e948e81776c605b51483e352b21160b0000000000000e1a26313b47535f6974808d96a0abaea39991857b6e6a615a524c46423c3a38342e3434342e34383a3c42474d535b626b707d86929fa4aeaaa0958b7f72685e5243392f24180d010000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d6053473a2d20140d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b0a080500000000000000000000000713202d3a4653606d7985929ea99c8f82766b60574f47433e3d3d4045474b51535b60686e7a84919ea7a99d908376665c5145382c1f130600000000000000000008121a242c363e48505557585651505d697683908f8275685c4f4235291c0f000714212e3a4754616d7a8794a0adaea194877b6e6154483b2e21150800000713202d3946525e687682868686868e929da9b0a4988e888686868686868686868686868686868686887b6e6154473b2e2114080000000000000000000000000000000000000000000000000000000a1623303d495663707d808080808181828385878b8f92999fa09e99928d857c716c61594f443b3021180d030000000000000000030e18222d363f49515a61696e747b8084888b8d8f90919292929291908e8c8985817c766e69615a51493f352c20160c000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d20191919191919191a1a1c222d3a4754606d7a8793a0adafa399877a6d6054473a2d211407000000000000000000000407090a1313131313131313131a2734404d5a6773808d9aa69b8e8174685b4e4135281b1313131313131313130b0a08040000000000000013202c3946535f6c7986929facada093867a6d6053473a2d201407000000000000000000030f1c28333f4a546875828f9ba8b2a5988b7f7265584c3f3225190c0013202c3946535f6c7986929facada093867a6d606060606060606060606060555d6061626466696e737b828e939ea6b0a79e938a7d7063594f44382c200d0200000b1825323e4b5865717e868686868686867c6f6256493c2f23160b0301071a2733404d5a66738086868686868686786d6053463a2d201307000c1825323f4b5865727e8b98a9b2ab998c7f7266594f42382e231a1615141c232c3844505c6673808d9aaaac9f93877a6d6154473a2e21140700000000000000000000000000000000000a1724303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000a141d27303a434d565f6a6f7d869299a3a29892857b6e685e554b505a626d73808c939da69f958f82786d655b50493f362c23190f0400000000000009141f2b37424d57606d79849199a4afaba19791847c706c615e56534d494644404141414141404546494d53575f616d727d869298a2aeaca2989083786c60564c4131281d1207000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d6053473a2d201a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a171714110c0500000000000000000006121f2b3844505c6673808c96a19f94897d70696059534e4b49494b5153555d60656c717a839096a0aca2978c7f7265544b4034281c1004000000000000000008121a242c363e48505a616465625b515d697683908f8275685c4f4235291c0f000714212e3a4754616d7a8794a0adaea194877b6e6154483b2e211508000005111e2a36414c5666707679797979818e9aa7aea195887c79797979797979797979797979797979797976685e5246392d2014070000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c8d8d8d8d8e8f909298979c9c9a9896918d86807a6f6a615a50473d32291f0f060000000000000000000006101b242e373f4850575e61696e73777b7e80828484858686858583827f7d79756f6b625f5750483f372d231a0e04000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d252525252525252626262b2d333c4855616e7b8894a1aeaea399867a6d6053473a2d201407000000000000000000000000000006060606060606060d1a2734404d5a6773808d9aa69b8e8174685b4e4135281b0e0606060606060606000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d201407000000000000000000000b17222d414e5b6774818e9aa7b2a5998c7f7266594c3f3326190c0013202c3946535f6c7986929facada093867a6d6c6c6c6c6c6c6c6c6c6c6c6c6c676d6e6e7073767b80858f949ea5afa8a0958e81756b6155473d32271b0f0000000b1724313d4a56626c71797979797979796f6a6054473b2e231c150c0b121826323f4b58636e737979797979797976665c5044382c1f1206000916222f3c4955626f7c8897a1adaa9d9184776b60544a3f342b26232222262e35414c56606d7985919eabaa9d908376685e5246392d20130700000000000000000000000000000000000a1724303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a0000000000000000000000000000000000000006111c262f39434c565e696e7c859298a3a39992867c6f695f564c4f59616c727f8b929ca5a0969083796d665c53493f372d241a110700000000000000030e1a26313c45515d676f7d87939fa4aea9a19691867e756e68615e575653514a4e4e4d4e4e4b515356575f62696e767f879298a2aaafa49a92867c6f665b50443a301f160c01000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d6053473a2d27272727272727272727272727272727272727272727272727272727272423211c171008000000000000000003101c28343f4a54606d7a849199a49e91847b6f6b625f58585656555d6064676d71787e859095a0a8a49e92857a6d6154473a2e23180c000000000000000008121a242c363e48505a616c71726d625b5d697683908f8275685c4f4235291c0f000714212e3a4754616d7a8794a0acaca194877b6e6154483b2e2115080000010d1925303a44545e66696c6c6c75818e9ba8ada194877a6e6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b5e564d41362a1e11050000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c999a9a9a9b9b9d9fa29f94908d8b8884807b746d68605850483e352b20170d00000000000000000000000915202b353f474e524d52575f62666a6e71737577787879797978777573706d67636059534d46423c332a1f140900000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a323232323232323233333137383f444f5964717e8b97a4b1ac9f928679675d5145392c1f1306000000000000000000000000000000000000000000010d1a2734404d5a6773808d9aa69b8e8174685b4e4135281b0e0200000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d20140700000000000000000000061b2834414e5b6774818e9aa7b2a6998c7f7366594c403326190d0013202c3946535f6c7986929facada09386797979797979797979797979797979797a7a7b7d8082868c92979fa6afa79f969183796d60594f44352b21160b0000000915212e3a45505a62656c6c6c6c6c6c6c6260584e443d342e271e18151d2329333c47525c63666c6c6c6c6c6c6c6c5c544a3f34281c1003000613202d394653606c7884919eabaca095897d70665c50443f37312f2e2f30383f46525e68717e8b97a1ada3988b7e7265564c41362a1e110500000000000000000000000000000000000a1724303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a000000000000000000000000000000000000091217222d38424b555d686e7b849197a2a39f92877d706a60574d4e58606b707e87929fa4a19791847a6d675d544a41382d251b120800000000000000000009151f2935404b55606b727f8b929da4ada9a198928a817a746e696562605c545b5a5a5a5b545c606266696e747b828b9299a2aaaea39f93887e706a5f544a3f32291e0d0400000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d6053473a34343434343434343434343434343434343434343434343434343434343431302d28221a120800000000000000000b17232e3845525d68707d87939aa19691847d746f6a6764636366676d70757a7e838b9297a0a7a49c928b7e71685d5246392d1d12070000000000000008121a242c363e48505a616c717e7f726d6257697683908f8275685c4f4235291c0f000714212e3a4754616d7a87949f9f9f9f94877b6e6154483b2e211508000008131e28323a4146545a5d60606875828f9ba8ada093877a6d606060606060606060606060606060606054524d443b3025190e020000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a5a6a7a7a8a9aba99c9083807e7c77736e69615e564e463e362c23190e0500000000000000000000010e1a26313d4751595e5f6060605e575f626466696a6b6b6c6c6c6b6a686663605d6060606055534d453c31261a0e02000000000000000000000013202c3946535f6c7986929facada093867a6d6053473f3f3f3f3f3f3f3f3f3f404142464a5057606b75828f9ca8b5aa9d9184776a554b4035291d1004000000000000000000000000000000000000000000010d1a2734404d5a6773808d9aa69b8e8174685b4e4135281b0e0200000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d20140700000000000000000205101c2834404b556875828f9ba8b2a5988b7f7265584c3f3225190c0013202c3946535f6c7986929facb9a2958b868686868686868686868686868686868687888a8c8f92999fa2a9aba39f9590847b6e675d51473e3323190f0400000005111d29343f4850565860606060606060605e56544f444039302a211f272f343e454d53555d60606060606060605f504a42382e23170c000005121f2b3744505b6574808d9aa6b0a89d9083786d605a5047433d3c3b3c3d424a505b616d7a85929ea9ab9f92867a6d6154473a3025190d0100000000000000000000000000000000000a1724303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a000000000000000000000000000000000007101b2428333f4a545c676d7a839096a1a49c918b7e716b61584e4d565f6a6f7d869299a3a29891857b6e685e554b42382f261b130900000000000000000000030d18242f3a434f59626d74808d929ca3adaaa29f938e86807b76726f6d6669686767676869666d6f72777b81868f949fa3ababa39f918c7f726c61584e42382d20170d0000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d605347404040404040404040404040404040404040404040404040404040404040403e3c39332c241a10050000000000000006111c2935414c56606b717e8892989f969188817c777471707073767a7d81858b91959ea1a9a29f928d80736c61564c4135291d0b0000000000000008121a242c363e48505a616c717e878b7f72695e697683908f8275685c4f4235291c0f000714212e3a4754616d7a87939393939393877b6e6154483b2e21150800010d1925303a444c52545757575c6875828f9ba8aca09386796d60575757575757575757575757575755544e46413b32291f1408000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c999f9fa0a1a2a4a6aa9e9185817e7a746e69605c554d443d342c241a1107000000000000000000000004111d2a36424e59636a6c6c6c6c6b636059585a5c5d5e5f5f5f5f5e5d5b575f626a6c6c6c6c6c5f574d42372b1e1205000000000000000000000013202c3946535f6c7986929facada093867a6d60534c4c4c4c4c4c4c4c4c4c4c4d4e4d53545b6069707d88939facb3a99b8e8174685b4e412f24180c00000000000000000000000000000000000000000000010d1a2734404d5a6773808d9aa69b8e8174685b4e4135281b0e0200000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d20140c0c0c0c0c0c0c0c090e1116202c3845515c677683909ca9b6ac978b7e7164584b3e3125180b0013202c3946535f6c7986929facb9a79d959393939393939393939393939393939393949597999c9fa3abaca49f99928d837b6e695e554c41352c21110700000000010c18222d363f454a4b5359636a6c6c6c6c6b636059514a423c332a2a3139404550575f626a6c6c6c6c6c5f574d53443f3830261c11060000030f1b27333f4953626f7c88949eabab9f958c7f726c625a534e4a4948484a4e545c606d75818e97a1ada3998d8074685d524639291e13080000000000000000000002070a0c0d0908060a1724303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a00000000000000000000000000000000040f19222d363e44505b666d79828f95a0a59d928c7f726c62594f4c565e696e7c859298a2a39892867c6f695e564c433930261d140a01000000000000000000000007131d28313d47515b606c77808c919ea1a9aea59e98928d87837f7c79777674747474747677797c7f83888e92999fa6aea8a199928b7f736d635a50463c2f261c0e050000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d60534d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4a49453e362c22170c00000000000000000d19242f3a444f59626c717e868f949c9a938e8883807e7c7c7f83868a8e92989da0a7a39f97928a80736e645a50443a3024190d00000000000008121a242c363e48505a616c717e879292867b6e61697683908f8275685c4f4235291c0f000714212e3a4754616d7a86868686868686867b6e6154483b2e2115080005111d2a36414c565e61646464646875828e9ba8aca09386796d6464646464646464646464646464646260584e43372b20170d02000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c939393939495979a9d9f97918e8b85817b736d675e564d453b30271d1207000000000000000000000006121f2c3845525e6a757979797978706b605c544d5151525353524b515a61696e777979797976695f53463a2d211407000000000000000000000013202c3946535f6c7986929facada093867a6d60585858585858585858585859595a575f61666c717b84919aa4afada2978a7e7164574b3e3124180700000000000000000000000000000000000000000000010d1a2734404d5a6773808d9aa69b8e8174685b4e4135281b0e0200000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d201919191919191919191a191e2028323a4653606d7986929facafa49a897c6f6356493c302316090013202c3946535f6c7986929facb9afa7a2a09f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa0a1a1a3a6a8a6a8a09e9a938f8780796e695e574d433a2f231a1000000000000006111b242d343a3d3e525e6a757979797978706b605c544d453f36333c434b515a61696e777979797976695f53463a342e261e150a000000000b17222d3847535f6a75828f99a3afa79f92877e716c625f5857565555575860666d737f8c939ea9a89f92867b6e61564c413529170d02000000000000000000070d131619191515120f1724303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a000000000000000000000000000000000a16212b343e48515b606c78818e949fa69e938d80746d635a504b555d686e7b849197a2a49992867d706a5f574d443a31281e150b02000000000000000000000000010c161f2b353f44505b656c747f8a92979ea6acaaa29f9a93908c898684828181808181828486898c90959a9fa3ababa49f9691877e736d635b51473e342a1d140a000000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d605a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a575550483e33281c11050000000000000008131e28323d47505a626c717b82898f92999b95908d8b89898c8f92999b9fa2a9a29e99928e857e736e645c52483e32281e13080000000000050e1a242c363e48505a616c717e879292867d70695e697683908f8275685c4f4235291c0f000713202d3946525e6876797979797979797976695e52463a2d201407000713202d3946525e686d717171717174818e9ba7ada093877a717171717171717171717171717171716f6a6054473c31261a0e02000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f868686868687888a8d90959a9e9b98928d8680796e695f574d43392e23180c03000000000000000000000613202c3946535f6c7987868686847d736d665f5751464146454d555c606c717b83868686867b6e6155483b2e221508000000000000000000000013202c3946535f6c7986929facada093867a6d65656565656565656565656566666769696e72787e859196a1acb1a79f9285796d6053473a2d20140700000000000000000000000000000000000000000000010d1a2734404d5a6773808d9a9a9a8e8174685b4e4135281b0e0200000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d2525252525252525252627252a2d323a444e5863707d8998a2aeac9f93867a6d6154473a2e2114070013202c3946535f6c7986929facb9afa7a2a09f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa39f9f9e9d9b999796918c87827c736d675e574d453b31281e11080000000000000009121b22292e3946535f6c7987868686847d736d665f575146413e454d555c606c717b83868686867b6e6155483b2e231c150c030000000006111b2b37434e58626f7c87929fa6aea39992877e766f6a666462616263666a6f78808c919ca5aaa0968c8073695e53443a302419050000000000000000010a12191e23252622211f1b1724303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a000000000000000000000000000000030f1b27323d47505a636d74808d939ea69f948e81786c605b514a545c676d7a839096a1a49f93877e716b60584e453b32281f160c030000000000000000000000000000040d192327333f49535b606d737d858f949da0a7acaca49f9c989892918f8e8d8d8d8e8f919298999d9fa7acaca69f99938d847d716c635b51493f352c22180b02000000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada093867a6d6767676767676767676767676767676767676767676767676767676767676767676764615a5045392d21140800000000000000010c16202b353f48505a61696e767d8287929fa09d9a979696999c9fa3a9a29f9b97928d86817a716c635c524a40362d20160c0200000000020d17202c363e48505a616c717e879292867d706b6057697683908f8275685c4f4235291c0f0005111d2a36414c565e6c6c6c6c6c6c6c6c6c6c5e574d42362a1e1205000714212e3a4754616d7a7e7d7d7d7d7d828f9ca9b1a4988b7f7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7c6f62574d42372b1e1205000000000000000000000000000000000000000000000000000000000c1825323e4b57636d72797979797a7a7b7e8083888d9399a09f99928c837b6e695f554b4034281f140900000000000000000000000b1825323e4b5865717e8b9296918780786e69625b524c4550575f676d747e869095948d8074695f53463a2d211407000000000000000000000013202c3946535f6c7986929facada09386797272727272727272727272727272737476787b7f848a9297a1a8b2a9a0958c7f72675d5145382c1f130600000000000000000000000000000000000000000000010d1a2734404d5a6773808d8d8d8d8d8174685b4e4135281b0e0200000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a32323232323232323232333330363a3e444c565f6a75818e9baab4aa9d918477685d5246392d2013070013202c3946535f6c7986929facb9a79d959393939393939393939393939393939399929291908f8d8a8784807b756f6a605c554d453b33291f160c0000000000000000000911181d25323e4b5865717e8b9296918780786e69625b524c4550575f676d747e869095948d8074695f53463a2d21110a030000000000000f1b26313c47535f6a73808c949fa7aba399928b827c7773706f6e6f7073777c838d929ca3aba2989184796d60574d4232281e130800000000000000000a131c242a2f32332f2e2b262024303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a00000000000000000000000000000007131f2c38434f59616c727f8c929da5a0959082796d665b5044505b666d79828f95a0a59c928b7f726c61594f463c332920160d0400000000000000000000000000000000071017222d384149505b636b707b828990959c9fa4acaca9aaa39f9d9c9b9a9a9a9b9c9d9fa3aaaaababa39f9b948f878079706b625a514940372e231a100600000000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facada09386797373737373737373737373737373737373737373737373737373737373737373737373716c6155493c3023170a0000000000000000040d19232d363f49515a61696e757b818e9aa7aaa7a4a3a3aba39f9c9997928e8a85807b746d68615a524a40382e241b0e04000000000008141f29323e48505a616c707e879291857c6f6b646464697683908f8275685c4f4235291c0f00010d1925303a444c525f60606060606060605f524d453b30251a0e02000714212d3a4754606d7a868a8a8a8a8a8f949fabb3a79b918b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8377695f53463a2d211408000000000000000000000000000000000000000000000000000001020a16222f3a46515b63666c6c6c676d6e6f7173777c81879195a0a39f9590847b6e675c51453b30251a0e02000000000000000000000b1724313d4a56626d73808c9399938d837b726d615e56515a61696e79818a9298958f82786d60574d42372b1e1205000000000000000000000013202c3946535f6c7986929facb2a5988b7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f80818384888b91959fa2a9afa8a1979083796d60554b4035291d100400000000000000000000000000000000000000000000000a1724303d4a5763707d80808080807e7164574a3e3124170b0000000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d6053473f3f3f3f3f3f3f3f3f3f3f3f404142464750565d686f7c87939facb0a69a8d807367564c4135291d11050013202c3946535f6c7986929facb9a2958b86868686868686868686868686868686868685858382807e7b77736e69625f58514b433b332921170d0400000000000000000000060c1724313d4a56626d73808c9399938d837b726d615e56515a61696e79818a9298958f82786d60574d42372b1e1200000000000000000a15202b37434e58606d78828f959fa6aba39f948f8883807d7c7b7b7d7f838990959ca4aba39992867c6f675d51453b3120160c020000000000000007121c252e353b3e403c3b37322a24303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a0000000000000000000000000000000915222f3b4854606b717e88939fa4a19690837a6d675c544a4653606c78818e949fa69d938c80736d625a50473d342a21170e0500000000000000000000000000000000000006111b262f383f44515961696e757d83898f939a9c9fa2aaa7a8aaa9a7a7a7a7a7a9a9a8a6a9a29e9b99928e88827c746d676059504840372e251c11080000000000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facb3a79a8d8080808080808080808080808080808080808080808080808080808080808080808080807e7164574a3e3124170b00000000000000000915202a333f48515b636c717b81878e939da9acaba49f9d999992908c8985817d79746e69615e56504840382e261c12090000000000020e1925303b44505a616c707e879291847c717171717171717683908f8275685c4f4235291c0f000008131e28323a41465353535353535353534846423b33291f140900000613202c3945525d6876828f979797979c9fa6b0b7aca39b9897979797979797979797979797979795887b6e6155483b3025190e0200000000000000000000000000000000000000000407090a0d0e0f10121e2a353f495157596060555d60616264676a6f747c839095a0a7a0969083796d60574d42362a1e1205000000000000000000000915212e3a45505a636e74818e939f9590867e756d68605c606c717b838e939f969083796d665c50453c31261a0e02000000000000000000000013202c3946535f6c7986929facb9a79b918b8b8b8b8b8b8b8b8b8b8b8b8b8b8c8c8d8f9196989da0a7adaba59e9691857b6e675c5143392f24180c0000000000000000000000000000000000000000000000000916232f3c4855616b707373737373716c6155493d3023170a0000000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d60534c4c4c4c4c4c4c4c4c4c4c4c4c4d4e4d52545a61686d7a83909aa4afac9f94887c6f6255493c3024190d010013202c3946535f6c7986929facada093867979797979797979797979797979797979797878777573716e6966625f57534e454039302920170f050000000000000000000000000915212e3a45505a636e74818e939f9590867e756d68605c606c717b838e939f969083796d665c50453c31261a0e0200000000000000030f1b26313c44505c666d7a8390949fa4aca69f9c95908c8a8988888a8c90959d9fa7a8a19992877e716a5f554b4033291f0e0400000000000000020d19242e3740464b4c4847433c3429303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a000000000000000000000000000000091623303c4956636f7c86929a93939791847b6e685d554b424d5a6673808d93939393948e81746e635b51483e352b22180f0500000000000000000000000000000000000000000a141d262d3340474f575e616b70777d82878b8f9298989a9b9d9e9e9f9f9f9e9d9d9b999797928e8a86817c766f6a605d554f473e362e251c130a000000000000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f02000000000000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facb9a99d928d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8174675b4e4134281b0e01000000000000020e1a26313c45505a636d727e868e939a9da5a39f9c9993908c898683807c7975706d66615e57524c443e362e261c140a00000000000005111e2a36414d56616c707e879292867f7e7d7d7d7d7d7d7d7e83918f8275685c4f4235291c0f0000020c1620283036394646464646464646463b3a36302921170d02000004111d2935414c5665727e8b9aa49f9fa1a3a9b1bbb5aca7a49f9f9f9f9f9f9f9f9f9f9f9f9f9fa7988c7f7265564c41362a1e1105000200000000000000000000000000000000050b101416171a1b1c1d1e1f232e373f464b4c53534b5153545557585f626a6f7a839097a1a8a0958d8074695e52463a2d2014090000000000000000000005111d29343f48525b606d78818f959f98928b827a706b676d747e8690959d9891847b6e675d544a3f332a1f140900000000000000000000000013202c3946535f6c7986929facb9ada39b989898989898989898989898989899999a9c9ea1a8aaacaaa69f9c938e847c6f695f554b4031271d12070000000000000000000000000000000000000000000000000714202c38444f596163676767676764615a5045392d2114080000000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d6058585858585858585858585858595a5a565e61656c707a829095a0acafa49a8f82766a5f53473b2e1e1308000013202c3946535f6c7986929facada093867a6d6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6a686664615e5755534d47433c342e271e170e050000000000000000000000000005111d29343f48525b606d78818f959f98928b827a706b676d747e8690959d9891847b6e675d544a3f332a1f14090000000000000000000a152028343f4a545d686d7a828d939a9fa6aba7a09d999795949596999d9fa7aba39f9691877e716c61584e43392f21170d000000000000000007131e2a35404952575955534e463f35303d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a0000000000000000000000000000000c1925323f4c5865727f868686868686857c6f695e564c4343505c69768286868686868682786d605c52493f362c23191006000000000000000000000000000000000000000000020b141b2227353e454d525960636b70757b7e8285888b8d8f9091929292929191908e8c8a8885817e7a746f6a626058514b433d352d241c130a01000000000000000000000b1825313e4b5864717e8b97a4b1a89b8e8175685b4e4235281b0f06060606060000000000000000010e1b2734414e5a6774818d9aa7b1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facb9aea49d9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a8e8174675b4e4134281b0e0100000000000006121e2b37424e57626d727f8a92989fa4a29f99928f8b8683807d797673706d6664605c54534d46413a322c241c140a020000000000000714202d3946525e68707e87929999928c8a8a8a8a8a8a8a8a8a91958f8275685c4f4235291c0f000000050e161e252a2d2e39393939393939392e2d2a251f170f05000000010d19242f3b4754616e7b879393939394979fa9bcaea49c9993939393939393939393939393939393908376685e5246392d20140c070f0b0a080500000000000000000000000810161c202324262728292a2b2c202e353a3e3f464640454747484b4e535860686d7a85929ea9a79f92877b6e6154483b31261a0e02000000000000000000010c18222d364044505c666d79829095a09f938f857d746f79818a9298a09992867c6f695e554b42382e21180e0300000000000000000000000013202c3946535f6c7986929facacacada7a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a6a7a9a9a7aca49f9d99948f89817a6f6a5f574d43392e1f150b0100000000000000000000000000000000000000000000000004101c28333e474f55575a5a5a5a5a575550483e33281d11050000000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d656565656565656565656565656566666769696e72777d8590949fa7b1a79f93877c6f62584e43372b1f0c02000013202c3946535f6c7986929facada093867a6d6060606060606060606060606060605f5f5e5d5c5a5754524d4847423c373128231d150c050000000000000000000000000000010c18222d364044505c666d79829095a09f938f857d746f79818a9298a09992867c6f695e554b42382e21180e03000000000000000000030c17232e38424c565d686d78808790949b9fa2aaa8a6a3a2a1a2a3a6a8a9a29f99928d847d716c615a50463c31271d0f0500000000000000000a16232f3b46525b6366625f585146413a3d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a0000000000000000000000000000000b1824313e4a56626d72797979797979786f6a5f574d443a414e5a667076797979797979756d665c504a40372d241a11070000000000000000000000000000000000000000000000020a1117232c333b42464f54596063696e7276797c7e808283848585868585848382807d7b7975716d68625f58544e45403a312b231b120a0100000000000000000000000b1825313e4b5864717e8b97a4aca89b8e8175685b4e4235281b0f13131313130c06060300000000010e1b2734414e5a6774818d9aa7aca4978b7e7164584b3e3125180b0013202c3946535f6c7986929facacacaea9a7a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a69a8e8174675b4e4134281b0e010000000000000814212e3a47535f6a717e8b919fa2a69f98928d87827e7a7673706d676663605c5453514b46423b363029201c17110a020000000000000814212e3b4754616e7b859299a3a39f9793939393939393939393938f8275685c4f4235291c0f00000000050c13191d20212d2d2d2d2d2d2d2d21201e1a140d0500000000000814202d3a46525e69768386868686878d97aab4a89c928c8686868686868686868686868686868686887a6e6154473b2e211c181c1b171714110c05000000000000000008111a21282c2f30333435363738392d2c282f3233392f35393a3b3c3e43474e565e68717e8b97a1ada3998d807367574d42362a1e12050000000000000000000006111b2428343f4a545d676d7a839196a19e979188807b838e929fa29f93877d706a5f574d433a30261c0f060000000000000000000000000013202c3946535f6c7986929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa49f9f9f9e9d9c9a999a93908d88827d756d685f584e453c30271d0d0300000000000000000000000000000000000000000000000000000b16212c353e44484a4d4d4d4d4d4a49453e362c22170c000000000000000000000000000000000000000013202c3946535f6c7986929facada093867972727272727272727272727272727272737475787b7f838a91979fa6b0a79f958d80746a6054463c32261b0f00000013202c3946535f6c7986929facada093867a6d605353535353535353535353535353535252504f4d4b4846423b3a37312b262018120b030000000000000000000000000000000006111b2428343f4a545d676d7a839196a19e979188807b838e929fa29f93877d706a5f574d433a30261c0f06000000000000000000000006111c26303a434c565d666d737c83898e9298999b9d9e9f9f9f9e9d9b9997928d87817a6f6b615a50483e342a1f150b0000000000000000000c1925323e4b57636d736f6a625b524c443d4a5763707d8a96a3b0a3978a7d7064574a3d3124170a0000000000000000000000000000000915222e3a46515b62656c6c6c6c6c6c6c625f584e453b323e49545e66696c6c6c6c6c6c69605c544a3f382e251b1208000000000000000000000000000000000000000000000000000006111a202930363d44484f54565e6165666d6f7174757778787979787877767573716f6d6664605d56534e47433d352f281f191109000000000000000000000000000b1825313e4b5864717e8b979f9f9f9b8e8175685b4e4235281b1320202020201913120f0b060000010e1b2734414e5a6774818d9a9f9f9f978b7e7164584b3e3125180b0013202c3946535f6c7986929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9a8e8174675b4e4134281b0e01000000000005111e2a36424d57626e7b86929fa3a59e949086807b75716d686663605d555653504a464540393631302e2d2b28231c140c0400000000000714202d3946525e68717e87929999928a8686868686868686868686868175685c4f4235291c0f000000000002080d11131420202020202020201514120e090200000000000005111e2a36424d56667176797979797b8798a3aea6998c8079797979797979797979797979797979797976685e5246392d2c292329282423211d17100800000000000005101a232c33383c3d404142434445453a38342e27262d24292c2d2e2f31373d444c56606c7885919eabab9e918478695f53463a2d2114070000000000000000000000091217232e38424b555d686e7b849197a2a19a938d8890959da59d928b7f726b61584e453b31281e140a000000000000000000000000000013202c3946535f6c7986929393939393939393939393939393939393939a93929291908f8e8c898683807b76706b615e564e463c332a1e150b00000000000000000000000000000000000000000000000000000005101a232c33383c3d40404040403e3d39332c241a1005000000000000000000000000000000000000000013202c3946535f6c7986929facb2a5988b7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f80818285878b90959ea1a9aea69f959083796d60584e43342a20150a00000013202c3946535f6c7986929facada093867a6d6053474646464646464646464646464645454442403e3b3a36302e2b261f1b150c0700000000000000000000000000000000000000091217232e38424b555d686e7b849197a2a19a938d8890959da59d928b7f726b61584e453b31281e140a000000000000000000000000000a151e28313a444c545c606a6f767c8185898c8e909192929292918f8c8985807b746d68605950483e362c22180d030000000000000000000d192633404c5966737f7c726d615d564f444a5763707d8a96a3b0a3978a7d7064574a3d3124170a00000000000000000000000000000006121e29343f495156586060606060605f55534e463c332938424c545a5c6060606060605c53504a42382e261c130900000000000000000000000000000000000000000000000000000000080e171f252a33383d44484d5254545c60626567686a6b6b6c6c6c6b6a6a68666462605c5454524c47433c383229241d160d0700000000000000000000000000000b1825313e4b5864717e8b93939393938e8175685b4e4235281f202c2d2d2d2c26201f1c17110a02000e1b2734414e5a6774818d93939393938b7e7164584b3e3125180b0013202c3946535f6c79869293939393939393939393939393939393939393939393939393939393939393939393939393939393938e8174675b4e4134281b0e0100000000000714202d3a46525e6975828e98a2a89e938e827b736e6964615e565653514b4946443f3a3e4041403e3d3b3a38342e261e160d040000000005111e2a36414d56616c717e879392867e797979797979797979797979756f65594d4134281b0e00000000000000010507071313131313131313080705020000000000000000020e1925303b44555f666a6c6c6c6c7985929faca89b8e81756c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b5e564c413b3a38342f363531302d28221a120800000000000b16212c353e44484a4d4e4f505152524644403930271c181d20202122262b323a44505b6674818e9aa7ada196887b6e6155483b2e22150800000000000000000000000006111c263039434c565e696f7c859299a3a49f9a959da0a79e948d80746d62594f463c33291f160c02000000000000000000000000000013202c3946535f6c79878686868686868686868686868686868686868686868685858483817f7d7a77736e6a636059524c443c342a21180c030000000000000000000000000000000000000000000000000000000008111a21282c2f30343434343431302d28221a120800000000000000000000000000000000000000000013202c3946535f6c7986929facb9a79b918b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8c8d8d8f9197989da0a7adaaa39f948f837a6d675c51463d3222180e0400000013202c3946535f6c7986929facada093867a6d6053473a3939393939393939393939393938373533312e2d2a25211e1a150f0a0400000000000000000000000000000000000000000006111c263039434c565e696f7c859299a3a49f9a959da0a79e948d80746d62594f463c33291f160c0200000000000000000000000000030c161f28323a424a515860626b6f75797c7f828385858685858482807c79746e6a615e564f473e362c241a1006000000000000000000020f1c2835424f5b687581867f756d686059504a5763707d8a96a3b0a3978a7d7064574a3d3124170a000000000000000000000000000000010d18232d373f464a4c535353535353524847433c342a21303a42494e505353535353534f46443f3830261c130a010000000000000000000000000000000000000000000000000000000000050d141a21272c33383b4246474a545c6a6c6c6c6c6c66605b5f5e5e5d5b59575553504a4745413a37312b272018130c040000000000000000000000000000000b1825313e4b5864717e868686868686868175685b4e4235282b383939393939332d2b28221c140b060e1b2734414e5a677480868686868686867e7164584b3e3125180b0013202c3946535f6c7987868686868686868686868686868686868686868686868686868686868686868686868686868686868686868174675b4e4134281b0e0100000000000814212e3b4754616e7b87939faaa0968e81786e69615e5754524c494745403d3a3840464b4c4e4c4b494846443f3830281f160c01000000020e1925303b44505a616c717e879392877e716c6c6c6c6c6c6c6c6c6c68655d54493d3125190c000000000000000000000000000000000000000000000000000000000000000009141f2932434d555b5d60605b667783909daaaa9d908377675c60606060606060606060606060606054524c4446484745404443423e3d39332c241a100500000004101c28333e474f5557595a5b5c5d5e5f53514a42392e231810131414151b2028333f4a5464717e8b97a4b2a8978a7e7164574b3e3124180b000000000000000000000000000a141e27313a444d575f6a707d879299a49f9f9f9fa9a0958f82786d605b51473e342a21170d04000000000000000000000000000000121f2c3845525e6a757979797979797979797979797979797979797979797979797877767472706d6866625f58544f46413a322a22180f060000000000000000000000000000000000000000000000000000000000000810161c20232427272727272423211d1710080000000000000000000000000000000000000000000013202c3946535f6c7986929facb9ada39b9898989898989898989898989898989899999a9c9ea1a9aaacaba39f98928c827a6d685e554b40342b2110060000000013202c3946535f6c7986929facada093867a6d6053473a2d2d2d2d2d2d2d2d2d2d2d2c2c2b2a29272421201e1a14120e09030000000000000000000000000000000000000000000000000a141e27313a444d575f6a707d879299a49f9f9f9fa9a0958f82786d605b51473e342a21170d04000000000000000000000000000000040d162028303940444e54596063666d707275767879797978777573706d66625f57524c443d342c241a120800000000000000000000020f1c2835424f5b6875828e8b827a6f6b605c545763707d8a96a3b0a3978a7d7064574a3d3124170a0000000000000000000000000000000006111b252d343a3e3f464646464646453c3a37312a221e2830383e4143464646464646423a38342e261e140a010000000000000000000000000000000000000000000000000000000000000002090e161c21272c30363a44505c66757979797979726c665f5751504f4d4a4846443f3a39352f2b26201b160d0701000000000000000000000000000000000a1724303d4956626c7179797979797979756f65594d402e34384546464646463f3938332d261d180f091a2733404c58646e7479797979797979716c6256493d3024170a00121f2c3845525e6a757979797979797979797979797979797979797979797979797979797979797979797979797979797979797979746f64594c4033271a0d0100000000000b1825313e4b5864717e8b99a4aa9d9184796d665f57524d4746413d3a38352f3040495157595b5958565453504a423a31281e13080000000008141f29323e48505a616c717e889392877e716c615a6060606060605c59544b42372c2115090000000000000000000000000000000000000000000000000000000000000000020d1720313b434a4e50534a546774818e9aa7ac9f9286796d6053535353535353535353535353535347464a51535453514b504f4e4a49453e362c22170c0000000714202c38444f596163666768696a6b6c605c544a4034281c100607080a0e17222d3d4a5763707d8a96a3b0a5988b7f7265584c3f3225190c00000000000000000000000000020c151f28323b454e58606b717e8793939393939393969083796d665c50493f352c22190f0500000000000000000000000000000000111d2a36424e59636a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6a69676663615e5655534e48443d363028201810060000000000000000000000000000000000000000000000000000000000000000050b101416171a1a1a1a1a171714110c05000000000000000000000000000000000000000000000013202c3946535f6c7986929facacacada7a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a6a7a8aaa8a6a7a09d99928e867f786d685e564c43392e22190f000000000013202c3946535f6c7986929facaca093867a6d6053473a2d20202020202020202020201f1f1d1c1a181514120e0906020000000000000000000000000000000000000000000000000000020c151f28323b454e58606b717e8793939393939393969083796d665c50493f352c22190f050000000000000000000000000000000000040d161e272e343d43474f54545c606366686a6b6c6c6c6b6a686663605c54534e46413a322b221a12080000000000000000000000020f1c2835424f5b6875828e938f847d736d665e5763707d8a96a3b0a3978a7d7064574a3d3124170a000000000000000000000000000000000009131b23292e3132393939393939392f2e2b262018161e262d323536393939393939362d2b28231c140c0200000000000000000000000000000000000000000000000000000000000000000000050b10161c1f252d3a4653606d7987868686867f786e69625b524d443e3c3a38342e2c29241e1b150f0a040000000000000000000000000000000000000815212d3945505a62646c6c6c6c6c6c6c68655d53483d383f445253535353534c46443f382f2a2119141824303c48535c64676c6c6c6c6c6c6c64625a5045392d21150800111d2a36424e59636a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c67645d53483c3024180b0000000000010d1a2734404d5a6773808d9aaba4988b7e71675c544d46423b3935302d2c292e3842515b63666866646361605c544c433a2f24190d01000000020d17202c363e48505a626c717e889392877e716c61574d535353534f4d49423930261b1004000000000000000000000000000000000000000000000000000000000000000000050e1f2831383e4243464b5865717e8b98a8aea399897c7063564946464646464646464646464646404a545c6061605c555d5c5b575550483e33281d110500000916232f3c4855616b70737475767778786d665c5144382c1f12060000000616232f3c4956626f7c8995a2afa6998c807366594d4033261a0d0000000000000000000000000000030d162029333c464f59616c727f8686868686868686847b6e675d544a3f372d231a100700000000000000000000000000000000000e1a26313d4751595e5f6060606060606060606060606060606060606060605f5f5e5d5c5b595654524c4847433c38332a251e160e0600000000000000000000000000000000000000000000000000000000000000000000000407090a0d0d0d0d0d0b0a08050000000000000000000000000000000000000000000000000013202c3946535f6c7986929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa39f9f9e9d9b999795908c86817b736d665e564c443a30271d1007000000000013202c3946535f6c7986929f9f9f9f93867a6d6053473a2d20141313131313131313131212110f0d0b08070502000000000000000000000000000000000000000000000000000000000000030d162029333c464f59616c727f8686868686868686847b6e675d544a3f372d231a100700000000000000000000000000000000000000040c151c232832373d43484b515356595b5d5e5f5f5f5f5e5c595653514b47423c35302820191008000000000000000000000000020f1c2835424f5b6875828e9b96918780786e696163707d8a96a3b0a3978a7d7064574a3d3124170a0000000000000000000000000000000000010911181e2224252d2d2d2d2d2d2c22211f1a150e0c141b212628292d2d2d2d2d2d29201f1c17110a0200000000000000000000000000000000000000000000000000000000000000000000000000050b10141f2b3844505c66717e879399928c827b726d615e565046413a322924201d19130f0a04000000000000000000000000000000000000000005111d29343e48505658606060606060605b59534b4138424a505e5f6060605f5953504a423b332a251f17202b36414a53585a60606060606060585650483e34291d1105000e1a26313d4751595e5f606060606060606060606060606060606060606060606060606060606060606060606060606060606060605b59534a41362b2014080000000000020e1b2835414e5b6874818e9ba7a194887b6e61554b423b36302d292523282c343f4a54636d73747371706e6d665d564c4135291d110400000000050e1a242c363e48505a626c717f889392877e71695f534646464642413d3730271e140900000000000000000000000000000000000000000000000000000000000000000000000d161f272d3236373b4855616e7b8896a0acab998d807366594f4338393939393939393939393844515c666d6e6d676b6a696864615a5045392d21140800000a1724303d4a5763707d80818283848586786d6053463a2d20160d0909070c1724303d4a5763707d8a96a3b0a69a8d8073675a4d4034271a0d010000000000000000000000000000040e17212a343d47505a626d727979797979797979786e695e554b42382e251b11080000000000000000000000000000000000000915202b353f474e525353535353535353535353535353535353535353535353525251504e4c4a4746413b3a37312c272119130c05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929393939393939393939393939393939393939393939399929291908f8d8a87847f7b756e69605c544c443a32291e150b00000000000013202c3946535f6c7986929393939393867a6d6053473a2d20140706060606060606060605040200000000000000000000000000000000000000000000000000000000000000000000000000040e17212a343d47505a626d727979797979797979786e695e554b42382e251b1108000000000000000000000000000000000000000000030b121820272b323839404546494c4f505252535252514f4d4946454039373129251e160e0700000000000000000000000000020f1c2835424f5b6875828e9ba199928c827b706c63707d8a96a3b0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000060d121518192020202020201f1515120f0a03030a1015191c1d2020202020201c1312100b06000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54616c717e87939a9490867f766e69615a524c443e352f281f19100700000000000000000000000000000000000000000000000c17222d363e45494b535353535353534e4d4841343f4a545c6a6c6c6c6c6c66605b544d453f3630292019252f3841484c4e535353535353534b49453e362d22170c00000915202b353f474e525353535353535353535353534a545c6a6c6c6c6c6c66605b544d5353535353535353535353535353535353534e4c4841382f251a0f030000000000020e1b2835414e5b6874818e9ba7a194877a6e6154473e39352f3333332e34383d44505c66737f817f7e7c7b786d685d5245392c201306000000000008121b242d363f48505a626d727f8b9192867b6e6155483b39393534312c261e150c020000000000000000000000000000000000000000000000000000000000000000000000040d151c2226292d3a46535f697784919eaaaa9d9184776b6054483d31282d2d2d2d2d2d2d2d3a4653606d787b7a7978777675716c6155493d3023170a00010e1a2734414d5a6774808c8d8e8f9091887c6f6255483e31281f1a171617181d27333f495364717e8b97a4b1a6998c807366594d4033261a0d00000000000000000000000000000000050f18222b353e48515b62656c6c6c6c6c6c6c6c6b615e574d433a30261c130900000000000000000000000000000000000000040f19242d353d4245464646464646464646464646464646464646464646464646454443413f3d3a3936302e2b26201c160d080200000000000000000000000000000000000000000000000000000000000000000000020608080b0e1011121313121211100d0b08070502000000000000000000000000000000000000000013202c3946535f6c79878686868686868686868686868686868686868686868686868685858382807d7a77736e69615f57504a423a322920170c0300000000000013202c3946535f6c798786868686868686796d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f18222b353e48515b62656c6c6c6c6c6c6c6c6b615e574d433a30261c1309000000000000000000000000000000000000000000000000070c151b21272c2e34383a3d3f424345464646454442403d3a38342e2b262019130c040000000000000000000000000000020f1c2835424f5b6875818e969ea39f9490857d746d707d8a96a3b0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000106090b0c13131313131312090806030000000005090d0f101313131313130f07060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e3842505a616c717e88939a98928b827b716c615e564f45413a312b22190f040000000000000000000000000000000000000000000006111b242d34393d3e4646464646464642403d373844505c66757979797979726c665f575146423b3229251e262f363c4041464646464646463e3d39342d241b11060000040f19242d353d4245464646464646464646464644505c66757979797979726c665f5751464246464646464646464646464646464641403c362f261d1308000000000000000d1a2733404d5a6673808d99aca295897c6f62585047454140403f40404045464f57606d78858e8c8b8987867a6d6054473a2d21140700000000000009121b242d363f48505a626d727f8b8c7f72695f53463a2d2d292825211b140c0300000000000000000000000000000000000000000000000000000000000000000000000000030a11161a1e2a36424d576773808d9aa7aca096897c6f63594f433a3129242322222429333f4a5463707d878685848382817e7164574a3e3124170b00000b1825323e4b5865717e8b989b9c9d988b7f7265594f433a312a2524232323282f3744505b6574818e9aa7b5ab988b7e7265584b3f3225180c0000000000000000000000000000000000061019232c363f4951565860606060606060605e54524d453b31281e140a01000000000000000000000000000000000000000008121b242b3136383939393939393939393939393939393939393939393939393837363433302e2d2a25211f1a15100b050000000000000000000000000000000000000000000000000000000000000000000205090e121415181b1d1e1f20201f1f1e1c1a181514120e0905020000000000000000000000000000000000121f2c3845525e6a7579797979797979797979797979797979797979797979797979797878777573716e6866615e57534d443f38302820170e0500000000000000121f2c3845525e6a75797979797979797976675c5145382c1f1306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061019232c363f4951565860606060606060605e54524d453b31281e140a0100000000000000000000000000000000000000000000000000040a0f161b1d23282c2d303335373839393938373533302d2c28231d1a150d080200000000000000000000000000000000091623303c4956636f7d848e939fa29f97928a8079707d8a96a3b0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303e48505a626c717f88939f9f948f857e756d686159514b433d342b21160a000000000000000000000000000000000000000000000009121b22292d3031393939393939393534312d3a4653606d7987868686867f786e69625b524d443e35302820252b3033343939393939393931302d29221b12090000000008121b242b313638393939393939393939393a4653606d7987868686867f786e69625b524d443e353039393939393939393939393433302b251d140b01000000000000000b1824313e4b5764717e8a9aa4a69a8d80736a615a54524c4d4d4c4c4d4b515359606a717e8b979997968f8376685d5245392c2013060000000000000009121b242d363f48515b626d727f80736d63574d42362a1e1c1b191510090200000000000000000000000000000000000000000000000000000000000000000000000000000000050a0e1a26313c4855626f7c88959faba89b8f82756b60554b433b352f2f2f2f2f353b44505b6673808c989291908f8b7e7164584b3e3125180b00000815222e3b4855616e7b8896a0a9aa9d9083776b61554b433c36313030302e3439404b55606c7884919eaaafa499897d7063564a3d3023170a00000000000000000000000000000000000007111a242d373f464a4c5353535353535353524846423b33291f160c020000000000000000000000000000000000000000000009121920262a2c2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2c2b2a2928262321201d1914120f090300000000000000000000000000000000000000000000000000000000000000000002080e11151a1e21222528292b2c2c2c2c2b2b29272522211e1a14120e0902000000000000000000000000000000111d2a36424e59636a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6a686664615e5654534d46423c342e261e160e050000000000000000111d2a36424e59636a6c6c6c6c6c6c6c6c6c5c554b4034291c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111a242d373f464a4c5353535353535353524846423b33291f160c0200000000000000000000000000000000000000000000000000000000040a0f12181c1f202326282a2b2c2c2c2c2b292623201f1c18120e09030000000000000000000000000000000000000915222f3b4854606b6f7a818a92989fa29e928d837b7d8a96a3b0a3978a7d7064574a3d3124170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004080a0a131313131310100d0a050000000000000000000000000000000000000000000000000000000000000a141e2c363e48505a626d727f8b919b9e97928a817a706b605d554e463d32271b0f0300000000000000000000000000000000000000000000000911171d2124252d2d2d2d2d2d2d28271f2b3844505c66717e879399928c827b726d615e565046413a3229241d2427272d2d2d2d2d2d2d2524211d17110900000000000009121920262a2c2c2d2d2d2d2d2d2d2d2b3844505c66717e879399928c827b726d615e565046413a3229242d2d2d2d2d2d2d2d282724201a130b0200000000000000000814212e3b4754616e7b87939fac9f92867c706c64605d565a5959595a555c60636b707c85929fa9a1968b7e7265564c4135291d1104000000000000000009121b242d363f49515b626d72736e635b51453b31261a0e0e0c090400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915212e3a47535f6a7683909da7aa9e93897c6f675d554c45413d3c3b3c3c40454d57606c7884919e9f9e9d95877a6e6154473b2e21140800000814212d3a47535f697784919daaaca0958a7d70675d554d46423e3d3c3d3e40454b515c67707d8a96a0acac9f93867a6d6054473a2d2114070000000000000000000000000000000000000008121b252d343a3e3f4646464646464646453b3a36302921170d04000000000000000000000000000000000000000000000000080f151a1d1f20202020202020202020202020202020202020202020201f1f1e1d1b19171413110d08060200000000000000000000000000000000000000000000000000000000000000000002080d14191e20262b2e2f323436383939393938373634322e2d2b26201e1a140e0902000000000000000000000000000e1a26313d4751595e5f6060606060606060606060606060606060606060606060605f5f5e5d5c5a5754524c4846423b373128231c140c040000000000000000000e1a26313d4751595e5f606060606060605f514b43392f23180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121b252d343a3e3f4646464646464646453b3a36302921170d040000000000000000000000000000000000000000000000000000000000000000070c10131316191c1d1f1f201f1f1e1c1a161313100c070000000000000000000000000000000000000000000713202c38444f5960686d757e8590949fa39d959086818e9ba8b0a3978a7d7064574a3d3124170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b1014161720202020201d1c1a16110a0300000000000000000000000000000000000000000000000000000000020c1a242d363f48505a626d727f8b919ba29f938e857d746d6760584e43382c1f1307000000000000000000000000000000000000000000000000060c11151718202020202020201b1b1c28343f4a54616c717e87939a9490867f766e69615a524c443e352f281f191b20202020202020181715110c060000000000000000080f151a1d1f20202020202020201c28343f4a54616c717e87939a9490867f766e69615a524c443e352f281f1920202020201b1a18140f08010000000000000000000714202d3946525e6876828f9aa4a39892857d76716d6868676666666668676d70757d859197a2a49e9184796d6053463a2f24190d0100000000000000000009121b242d373f49515b626566635c52493f33291f140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e5864707d8a95a0aca59d9183796d675e56514b4a494848494b51575f69717e8b96a1aca89d908377685e5246392d201407000006121e2b37424d5766737f8c98a2aea79e9184796d675f57534d4b4a494a4b4b51555d606d7983909da8b2a99d908376685d5245392c201307000000000000000000000000000000000000000009131b23292e31323939393939393939382e2d2a251f170f05000000000000000000000000000000000000000000000000000004090e11121313131313131313131313131313131313131313131313131211100e0c0a070705010000000000000000000000000000000000000000000000000000000000000000000000040c13191f252a2d31373a3b3e41434445464645454443403e3b3a37312d2a251f1a140d050000000000000000000000000915202b353f474e5253535353535353535353535353535353535353535353535353535252504f4d4a4746413b3a36312b261f17110a02000000000000000000000915202b353f474e5253535353535353535345403931271d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131b23292e31323939393939393939382e2d2a251f170f0500000000000000000000000000000000000000000000000000000000000000000000000406070a0c0f101213131312110f0d0a0706040000000000000000000000000000000000000000000000030f1b27323d474f565d606c717b828c9299a0a098928e939eaab0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810171c2023242d2d2d2d2d2a2926221c150d040000000000000000000000000000000000000000000000000000000008121b242d363f48515b626d727f8c919ca39e97918a81796f6a6054483b2e221509000000000000000000000000000000000000000000000000000005080a0b131313131313130f0b17232e3842505a616c717e88939a98928b827b716c615e564f45413a312b22190f1313131313130b0a0805000000000000000000000004090e1112131313131313130b17232e3842505a616c717e88939a98928b827b716c615e564f45413a312b22190f1313130e0d0b0803000000000000000000000005111e2a36414d56626f7c87939fa5a297928a837d7a777573737273737476797d82889197a1a59d928a7e71675c514538281e1308000000000000000000000009121b252d373f495156585a57524a40372d21180d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26313c4653606c7883909aa4aca0958f82796e68605d555756555556555d60696e7b85929fa8aca1968a7e7164564d41362a1e11050000020e1a26313c4754616d7a86929fa8aca1969082796e69615e575857565657545c60676d75818e95a0acada2978b7f7265564c4135291d11040000000000000000000000000000000000000000010911181e2224252d2d2d2d2d2d2d2d2b21201e1a140d0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e161e25293036393c4247484b4e50515253535252514f4d4b4846423c3a36302a251f170f080000000000000000000000040f19242d353d4245464646464646464646464646464646464646464646464646464645454442403e3b3936302d2a251f1a140b06000000000000000000000000040f19242d353d424546464646464646464638342f271f150b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010911181e2224252d2d2d2d2d2d2d2d2b21201e1a140d05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212b353d444c525a61696e787f8791969da29f9b9ea5afb0a3978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a22282d303139393939393736322d271f160d030000000000000000000000000000000000000000000000000000000009121b242d363f49515b626d727f8c9193939393938e847c6f6256493c2f231609000000000000000000000000000000000000000000000000000000000000060606060606060006111c26303e48505a626c717f88939f9f948f857e756d686159514b433d342b21160a000606060600000000000000000000000000000000000104060606060606060006111c26303e48505a626c717f88939f9f948f857e756d686159514b433d342b21160a000601010000000000000000000000000000020e1925303b4754606a73808d939fa4a29f94908a86848280807f7f80818385898f939aa1a49f938d80746c61554b403428160c0100000000000000000000000009121b252d373f464a4c4d4b4740382e251c0f0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151f2b3744505b656f7c88939fa7a89e948f837a736d6765636262626365676d727b849197a2ada59e9184786d6053463b3025190e020000000915202d3946525e6873808c95a0aaa89f9490837b736e6967646363636465666d7179818e939da7b0a69e92857a6d6054473a2f24190d0100000000000000000000000000000000000000000000060d1216181920202020202020201f1514120e09020000000000000000000000000000000000000000000000000000000000000000000104060606060606060601000000000000000000040607090c0e0f11121213131211100e0b0808060200000000000000000000000000000000000000000000000000020a121a202830353b4146474e5355585b5c5e5f5f5f5f5e5e5c5a5855534d4846423b363029211a120a020000000000000000000008121b242b31363839393939393939393939393939393939393939393939393939393938373533312e2d2a25211e1a140e0903000000000000000000000000000008121b242b3136383939393939393939392c29231d150d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d1216181920202020202020201f1514120e090200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003070909131313131313130b0a08040000000000000000000000000000000000040f19232b323a414550575e666c727c848d929ea1a9aaafb7b0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101a232c33393c3d464646464643423e3831281f150a000000000000000000000000000000000000000000000000000000000009121b242d373f49515b636d737f86868686868686868174675a4e4134271b0e0100000000000000000000000000000000000000000000000000000000000000000000000000000a141e2c363e48505a626d727f8b919b9e97928a817a706b605d554e463d32271b0f0300000000000000000000000000000000000000000000000000000000000000000a141e2c363e48505a626d727f8b919b9e97928a817a706b605d554e463d32271b0f0300000000000000000000000000000000000008141f2b37434e58606d78818d939a9fa69f9c9992908f8d8c8c8c8d8e9092989c9fa49f99938c81786d605a5043392e231804000000000000000000000000000009131b252d343a3e3f403f3b352e261c130a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27333f4953606b74808d959fa8a69e959086807a7672706f6e6f6f7274797f869196a1a9a79d938a7e71665c504438291f14080000000005111d2935414c56606d79849198a2aaa69f959086807b767371706f70717275797e848e939da5afa89f948b7f72675d5145392c1e13080000000000000000000000000000000000000000000000000106090b0c1313131313131313120807050200000000000000000000000000000000000000000000000000000000000000000004090e1112131313131313130e0d0b0703000104070c10131316191b1c1e1f1f20201f1e1d1b181514120f0a0400000000000000000000000000000000000000000000020b141c242c323a41464d5254575f626567696b6c6c6c6c6b6a696765615f5754524d46423b332c241c140a020000000000000000000009121920262a2c2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2c2b2a29272421201e1914120e0903000000000000000000000000000000000009121920262a2c2c2d2d2d2d2d2d2d2d1f1c18120b030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090b0c13131313131313131208070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f13151620202020202020171714110c0500000000000000000000000000000000071119202830353e454d545b606a6f79808a92979ea6aeb4aca3978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222c363e44494a5353535353504e4a433a31271c1105000000000000000000000000000000000000000000000000000000000009121b252d373f49515b636d737979797979797979746e64584c4033271a0d010000000000000000000000000000000000000000000000000000000000000000000000000000020c1a242d363f48505a626d727f8b919ba29f938e857d746d6760584e43382c1f13070000000000000000000000000000000000000000000000000000000000000000020c1a242d363f48505a626d727f8b919ba29f938e857d746d6760584e43382c1f1307000000000000000000000000000000000000020f1b27323d44505c666d78808890959b9fa2a39f9d9b9a999999999b9d9fa2a29e9b948f877f776d665c50483e30271d120700000000000000000000000000000109131b23292e313233322f2a241c140a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d38414f59606d788390959fa7a79f98928c86827f7d7c7b7b7c7e81858b9298a1a8a69f958e81746c61544a3f3428170d0200000000010d1925303a45515c676f7c869298a1a9a79f98928d8783807e7d7c7d7e7f82858b91969ea5afa7a0969082786c60554b4135291d0c010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f151a1d1f202020202020201a1a17130e070d1113181c1f20232527292a2b2c2c2c2c2b2a282522211f1a15100c0701000000000000000000000000000000000000010b141d262e363e444c52565e61666a6e717476777879797878777673716e6966615e57524d453e362e261c140a0000000000000000000000080f151a1d1f20202020202020202020202020202020202020202020202020201f1f1d1c1a171414110e0805020000000000000000000000000000000000000000080f151a1d1f20202020202020202013100c0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f161b1f22232d2d2d2d2d2d2d2423211c17100800000000000000000000000000000000070e161e2429333b424a505860676d747d858f949fa29f9f9f978a7d7064574a3d3124170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c28333e4850555760606060605d5b554d43382d22160a00000000000000000000000000000000000000000000000000000000000009131b252d373f49515b63666c6c6c6c6c6c6c6c67645c53483c3024180b0000000000000000000000000000000000000000000000000000000000000000000000000000000008121b242d363f48515b626d727f8c919ca39e97918a81796f6a6054483b2e22150900000000000000000000000000000000000000000000000000000000000000000008121b242d363f48515b626d727f8c919ca39e97918a81796f6a6054483b2e221509000000000000000000000000000000000000000a152028343f4a545c666c737c83898e9298989b9c9e9e9f9f9f9e9e9d9a9897928e89827c736c655c544a3f362c1e150b00000000000000000000000000000000010911181e2225252726231f19120a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b262f3d45515c666d7a8390959fa4aaa29f98928f8c8a898888898b8e92979fa2aaa59e949083796d605a5042382e23170500000000000008131e2934404b555f6a707d8692979fa6aaa39f9993908d8b8a89898a8c8f92979da0a8aca59e9590847a6d665b50433a2f24180d00000000000000000000000000000000000000000000000000000000000000020608080b0e1011121313121211100d0b080705020000000000000000000000000000000000000000000009121920262a2c2c2d2d2d2d2d2d2726231f1913181d2023282c2d2f323436373839393938383734322f2e2b261f1c18120b03000000000000000000000000000000000009131d262f38404850565e61686e73777b7e81838485868685858482807e7b77736e69615e57504840382e261c1309000000000000000000000004090e111213131313131313131313131313131313131313131313131313131212110f0d0b0807050200000000000000000000000000000000000000000000000004090e1112131313131313131313060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000407090a131313131313130a09070400000000000000000007101921272c2f303939393939393931302d28221a120800000000000000000000000000000000040c131921292f383f444e555d606b707a828b9298939393938a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814202d3944505a61646c6c6c6c6c6a665f554a3e32261a0d0000000000000000000000000000000000000000000000000000000000000109131b252e37404951575960606060606060605a58534a41362b201408000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b242d363f49515b626d727f8c9193939393938e847c6f6256493c2f2316090000000000000000000000000000000000000000000000000000000000000000000009121b242d363f49515b626d727f8c9193939393938e847c6f6256493c2f23160900000000000000000000000000000000000000040b17232e38424a545b606b6f767d8185898c8e9091929293929291908e8c8985817c766f6a605b534a42382e241a0c03000000000000000000000000000000000000070d121618191a1917130e0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d2834404b545e686d7a838d939a9fa7aaa29f9c989695959596989b9fa2a9a8a09e938e827a6d675d51483e30261c1106000000000000020c18232f39434e58606b707d858f949ea0a8aba49f9c9a9796969697989b9ea1a9aca7a09d938e837b6e685e544a3f31281d1307000000000000000000000000000000000000000000000000000000000205090e121415181b1d1e1f20201f1f1e1c1a181514120e09050200000000000000000000000000000000000008121b242b313638393939393939393433302b241d24292c2e34383a3c3f41424445454646454443413e3b3a37312c29231d150d0700000000000000000000000000000007101b252f38404a525a61686d747b8084888b8e8f919292929291918f8d8b8884807b746e69615a524a40382e251b0f0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b1014161720202020202020171614100b05000000000000040f19232b32383b3c464646464646463e3c39332c241a10050000000000000000000000000000000002080f171d262d333c434b515961686d757e858686868686867d7064574a3d3124170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303c4955616c7079797979797671665b4e4236291c1000000000000000000000000000000000000000000000000000000000000000010a131c252e3740464b4c53535353535353534e4c4841382f251a0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b242d373f49515b636d737f86868686868686868174675a4e4134271b0e010000000000000000000000000000000000000000000000000000000000000000000009121b242d373f49515b636d737f86868686868686868174675a4e4134271b0e010000000000000000000000000000000000000006111c263038424a505960636b7075797c7f81838485858685858483817f7c79746f6b6260585049413830261c120900000000000000000000000000000000000000000106090b0c0d0c0a0702000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b18232e39424c565e686d79808790959b9fa2aaa8a5a3a2a1a2a2a5a7aba49f9c96918981796d685d554b40362c1e150a000000000000000007121d27313c464f59606a6f7b828a91969c9fa3aba8a6a4a3a2a3a4a5a8a8aaa29f9b95908981796e695e564c42382d1f160c01000000000000000000000000000000000000000000000000000002080e11151a1e21222528292b2c2c2c2c2b2b29272522211e1a14120e0902000000000000000000000000000000040f19242d353d424546464646464646413f3c362f282f35393a404546494c4e4f51525253535251504e4b4847433c38342f271f19100a01000000000000000000000000030c19222d37404a525c636c717a81868c9196989a9c9e9f9f9f9f9e9d9c9a9895918d86817b716c645c524a40372d21180e030000000000000000000000020507081313131313131313131313131313131313131313131313131313131313131211100c09060503000000000000000000000000000000000000000000000000000000000000020507080b0e111112131312110f0c0908060300000000000000000406070b0f1213131211100e0c0b0906010000000000000000000000000000000000000000000000010406070a0d10111213131312100e0b070705010000000000000000000000000000000000000000000810161c2023232d2d2d2d2d2d2d2323201c16100800000000000a16212b353d434849535353535353534a49453e362c22170c000000000000000000000000000000000000050b141c2228313940454f565e616d7279797979797979706c6155493c3023160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d868686868683766a5d5043372a1d100000000000000000000000000000000000000000000000000000000000000000010a131c252e353b3e40464646464646464641403c362f261d1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b252d373f49515b636d737979797979797979746e64584c4033271a0d01000000000000000000000000000000000000000000000000000000000000000000000009121b252d373f49515b636d737979797979797979746e64584c4033271a0d0100000000000000000000000000000000000000000a141e262f383f444f54596063666d6f72747677787979797877767472706d66636059544e443f382f261e140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27303a444c565e676d747c83898e9298999b9d9e9f9f9f9e9d9c9999938f8a847d756d675d564c433a2f241a0c030000000000000000010b151f2a343d474f5860696e767e848a8f9299999b9d9e9f9f9f9f9e9d9b9998928e89837d756d675e564d443a2f261c0d040000000000000000000000000000000000000000000000000002080d14191e20262b2e2f323436383939393938373634322e2d2b26201e1a140e0902000000000000000000000000000915202b353f474e52535353535353534d4c474038313a4045474b515356585a5c5d5e5f5f5f5f5e5d5b5855534e47454039312b221b130a0000000000000000000000000a151e2b343f49525c646e737e858d92999da0a8a9a29f9d9c9b9c9d9fa2aaa7a09d99928e857e736e645c52493f332a1f140900000000000000000002080e1114142020202020202020202020202020202020202020202020202020202020201f1e1c191613120f0b06000000000000000000000000000000000000000000000000000003090e121415181b1d1e1f201f1f1d1b191515120f0a0401000000070c101313181c1e1f201f1e1d1b181815120d06000000000000000000000000000000000000000001070d111314171a1c1e1e1f201f1e1d1b181413110d080200000000000000000000000000000000000008111a21272c2f3039393939393939302f2c27211a1108000000030f1b27323d474f545660606060606060575550483e33281c1104000000000000000000000000000000000000020a11171f272f353e444c525b62656c6c6c6c6c6c6c64615a5044392d20140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a9393939083766a5d5043372a1d10000000000000000000000000000000000000000000000000000000000000000000010a131c232a2f323339393939393939393433302b251d140b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131b252d373f49515b63666c6c6c6c6c6c6c6c67645c53483c3024180b0000000000000000000000000000000000000000000000000000000000000000000000000009131b252d373f49515b63666c6c6c6c6c6c6c6c67645c53483c3024180b000000000000000000000000000000000000000000020c141d262d333d43484f54545c60636568696b6b6c6c6c6b6b6a676563605c54544f47433d332d261d140c020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e28323a444c555c606b6f767c8185898c8e909192929291908f8d8a86827d79706b605d554c443a31281d120800000000000000000000030d18222b353d464e575e616c71787d82868a8c8f90919293929291908e8c8985817d77706b605d554d443b32281d140a00000000000000000000000000000000000000000000000000040c13191f252a2d31373a3b3e41434445464645454443403e3b3a37312d2a251f1a140d050000000000000000000000000e1a26313d4751595e5f6060606060605a58524a403a434b5153545c60626567696a6b6c6c6c6b6b6a6765625f5853514b433d342d251b12090000000000000000000006111c26303d46515b646e74808a92979fa3a9a19e999792908f8f8f909298989d9fa7a39f97928a80736e635b51453b31261a0e0400000000000000050d14191e20212d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2c2b292623201f1b17110c0600000000000000000000000000000000000000000000040a0f141a1e212125282a2b2c2c2c2b2a282622211f1b15110d08030b12181c1f2025292b2c2c2c2b2a272524221d1811090100000000000000000000000000000000040a0f13181d20202326292a2b2c2c2c2b2a272521201e1913100b0500000000000000000000000000000005101a232c33383c3d464646464646463d3c38332c231a1005000007131f2c38434f5960636c6c6c6c6c6c6c64615a5045392d2114080000000000000000000000000000000000000000060d151d2429323a41465156585f606060606060575550483e33281c100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a979f9d9083766a5d5043372a1d1000000000000000000000000000000000000000000000000000000000000000000000010a12191e2325262d2d2d2d2d2d2d2d272724201a130b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000109131b252e37404951575960606060606060605a58534a41362b201408000000000000000000000000000000000000000000000000000000000000000000000000000109131b252e37404951575960606060606060605a58534a41362b20140800000000000000000000000000000000000000000000020b141c222832383d44484a515356595b5d5e5f5f605f5f5e5d5b595653504a48443d383227221b140b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c162028323a434b515960636b6f75797d7f828385858685858482807d7a76716d666059514b433a32281f160c000000000000000000000000061019232b343d454d525a61666c70757a7d80828385858686858483817f7c7975706b636059514b433b322920160b02000000000000000000000000000000000000000000000000080e161e25293036393c4247484b4e50515253535252514f4d4b4846423c3a36302a251f170f080000000000000000000000111d2a36424e59636a6c6c6c6c6c6c6c67645c5247404b555d6064666d6f727475777878797978777674716e6a64605c554e463f372d251b11070000000000000000000c17232e38424f59626d74808d929ea1a9a39f97918c8885838282838385888b90959ea1a8a29f928d80736d62574d42362a20160a000000000000050e171e252a2d2e39393939393939393939393939393939393939393939393939393939393938373633302d2b27221b17110a0300000000000000000000000000000000000000060c161b1f252a2d2e31343738393939383735322f2e2b26201d19130c151d23282c2d32353839393838363432312e29231b1309000000000000000000000000000002080d151b1d24292c2d3033363738393939383634312e2d2a251e1c160f0a04000000000000000000000000000b16212c353d44484a535353535353534a48443d352c21160b00000915222f3b4854606b6f79797979797979716c6155493c3023170a000000000000000000000000000000000000000000030b1218202930363f454a4b525353535353534a49443e362c22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a39d9083766a5d5043372a1d10000000000000000000000000000000000000000000000000000000000000000000000000070d1216191920202020202020201b1a18140f0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131c252e3740464b4c53535353535353534e4c4841382f251a0f030000000000000000000000000000000000000000000000000000000000000000000000000000010a131c252e3740464b4c53535353535353534e4c4841382f251a0f030000000000000000000000000000000000000000000000020a111721272c333839404446494c4e5051525253525251504e4c4946443f3838322b272017110a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e162028313940454f54596063676d707375777879797978777673716e6864605c544f454039312820160d0400000000000000000000000000071119222b333b424650545b6064676d707375777879797978787675726f6d67636059544f45403a312920170e050000000000000000000000000000000000000000000000020a121a202830353b4146474e5355585b5c5e5f5f5f5f5e5e5c5a5855534d4846423b363029211a120a02000000000000000000121f2c3845525e6a7579797979797979746e64584c45515d676d7176797c7f81828485858686858483817e7b77716d67605851493f372d23190b020000000000000003101c28343f4a54606b727f8c929ca4aaa299928c84807b787675757677797b7f838a91969fa6a49c928b7f72695f53463d32271b0f0300000000020d1720293036393b4646464646464646464646464646464646464646464646464646464646464544433f3c3937332d28231c150c0500000000000000000000000000000000030a111720272b31363a3b3e4144444546464544423f3c3b37322c29241e191e272e34383a3e42454646454443413f3d3a342d251b1106000000000000000000000000050d131920262b2f35393a3d404344454646464543413e3a3936302c28211b150e06000000000000000000000004101c27333d474f55566060606060606056554f473d33271c100400091623303c4956636f7d868686868686867e7164574a3e3124170b0000000000000000000000000000000000000000000001070e171e252a343a3d3f464646464646463d3c39332c231a10050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a39d9083766a5d5043372a1d100000000000000000000000000000000000000000000000000000000000000000000000000002060a0c0d13131313131313130e0d0b0803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131c252e353b3e40464646464646464641403c362f261d130800000000000000000000000000000000000000000000000000000000000000000000000000000000010a131c252e353b3e40464646464646464641403c362f261d13080000000000000000000000000000000000000000000000000000060b161b21272c2e34383a3c3f41434445464646454443413f3d3a38342e2c27211b160b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e161f272f343d43484f54555c606366686a6b6c6c6c6b6a696664615e5653514a423d352f271f160d04000000000000000000000000000000071019202930363e424a5053555d606366686a6b6c6c6c6c6b6a686663605c55554f48443d352f281f170e050000000000000000000000000000000000000000000000020b141c242c323a41464d5254575f626567696b6c6c6c6c6b6a696765615f5754524d46423b332c241c140a02000000000000000013202c3946535f6c79878686868686868074675a4d4753606d797e8286898b8d8f90919292929291908e8b88837e796f6a625b51493f352b1d140a0000000000000006121f2c3844505c666f7c87929fa4aba29892878079736f6a6a696869656c6e72777d848f949fa6a49f92867b6e61584e43382b1f13060000000008141e29323b41465353535353535353535353535353535353535353535353535353535353535352514f4c4946443f38342e261e170f070000000000000000000000000000030c151c232832373b4246484b4e505152535252504e4c4847433c39352f28222b30394045464b4f5152535251504e4b4a463f372d23180d0100000000000000000000080e171e252a31373a4045474a4d4f515152535251504e4b4746413a38332b2620181009000000000000000000000714202c38444f5961636c6c6c6c6c6c6c6361594f44382c20140700091623303c4956636f7c8993939393938a7d7164574a3e3124170b000000000000000000000000000000000000000000000000050d131923292e31323939393939393931302d28221a1108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a39d9083766a5d5043372a1d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131c232a2f323339393939393939393433302b251d140b010000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131c232a2f323339393939393939393433302b251d140b01000000000000000000000000000000000000000000000000000000040a0f161c1c23282c2d3032353638383939393838373432302d2c28231c1b160f0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d151d232932383d44484b515356595b5d5e5f5f5f5e5d5c5a5754524d464440393029241d150d040000000000000000000000000000000000070e171f252a2f383f44464b515457595c5d5e5f605f5f5e5d5b595653514b48443d383329241d160d050000000000000000000000000000000000000000000000010b141d262e363e444c52565e61666a6e717476777879797878777673716e6966615e57524d453e362e261c140a000000000000000013202c3946535f6c798692939393938d8074675a4d4f5c6875828b8f9298989a9c9d9e9f9f9f9e9e9d9a9895908b847c726d625b51473d2f261c1106000000000003101c28343f4a54606d78839099a3afa39992867d736d67625f585c5c535b6061656c707a828f949fa9a2988f82766a6054473b2e221508000000020e1925303b444c525f60606060606060606060606060606060606060606060606060606060605f5f5e5c5956535049443f38302921191007000000000000000000000000030d151e262e343d43474d5354585b5d5e5f5f5f5e5d5b5955534e4745413a3129343c424b5153585c5e5f5f5f5e5d5a585651493f34291d120600000000000000000008111a202930363c43474b515356595c5d5e5f5f5f5e5d5a5854524c48443e37312a221b120a0100000000000000000916232f3c4855616b7079797979797979706b6155483c2f23160900091623303c4956636f7c89969f9f9f978a7d7164574a3e3124170b0000000000000000000000000000000000000000000000000002080d181d2224252c2d2d2d2d2d2d2423201c17100800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a39d9083766a5d5043372a1d100000000000000000000000000000000000000000000000000000000000060a0e1011121313131212100e0b0707050100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a12191e2325262d2d2d2d2d2d2d2d272724201a130b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a12191e2325262d2d2d2d2d2d2d2d272724201a130b02000000000000000000000000000000000000000000000000000000000000050b1012181c1f202326282a2b2c2c2d2c2c2b2a282623201f1c17110f0b040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b121821272c3238394045464a4c4f505252535252514f4d4a4746413b38342e271e18120b0300000000000000000000000000000000000000050d141a1d262d33383a4145474a4d4f50525253535251504e4c494645403938332c272118130c0400000000000000000000000000000000000000000000000009131d262f38404850565e61686e73777b7e81838485868685858482807e7b77736e69615e57504840382e261c13090000000000000013202c3946535f6c7986929f9f9f9a8d8074675a4d4f5c6975828f9c9fa3aaa7a7a4a2a1a1a0a1a3a6a7a79f9d9691877f726d62594f42382d22170b000000000006121f2c3844505c66727f8b95a0aba89f92877d706b605d55534e4f4f495053555a61686d79829097a1a49f94897c6f6256493c2f23160900000005111e2a36414c565e6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6a696663605b53504a423b332b23190f0600000000000000000000010b151f2730383f444e54575e6164676a6b6c6c6c6b6a6865625f5854524c433f353c464e545c6065686b6c6c6b6b696765625b51463a2e221509000000000000000008121a232c323a41464e53555d606366696a6b6c6c6c6b696764615e56554f47433c342d241c130a01000000000000000a1723303d4a5663707d868686868686867d7063564a3d3023170a00091623303c4956636f7c8996a2aca4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000060c111517181f202020202020171614100b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a39d9083766a5d5043372a1d10000000000000000000000000000000000000000000000000000000040b11161a1d1e1f2020201f1e1d1b181413110d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d1216191920202020202020201b1a18140f080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d1216191920202020202020201b1a18140f080100000000000000000000000000000000000000000000000000000000000000000000070c10121316191b1d1e1f1f201f1f1e1d1b19161312100c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c161b21272c2e34383a3d40424445464646454443403e3b3936302c28231c150c070100000000000000000000000000000000000000000002090b141c22282b2f35393a3d40424445464646454543423f3c3a38342e2c27211c160d070100000000000000000000000000000000000000000000000007101b252f38404a525a61686d747b8084888b8e8f919292929291918f8d8b8884807b746e69615a524a40382e251b0f0600000000000013202c3946535f6c7986929faca79a8d8074675a4d4f5c6976828f9caaa29f9c9a97969594939496999ea0a8a8a099928b7f726b60544a3f33281c0f03000000000713202d3a4653606d7984919ea7ada1968d80736b6059514b474342423f44464850565d676d7a85929b9993908c8275685c4f4235291c0f0200000714202d3946525e6876797979797979797979797979797979797979797979797979797979797979787776726f6c65605c544d453d352b22180d0300000000000000000007121d273139424a50586062696e71747777787979787775726f6a66605d56504540454e5860666d717578797978777674726d62564a3d3124180b0000000000000008111a242c353e444c52585f62676d7073767778797979787674716d68636159534e463f362e251c1309000000000000000a1723303d4a5663707d899393939393897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000105090b0c131313131313130a0a080400000000000000000000000000000000000000000000000000000002050708080808080808080808080808080808080808080808080808080a1724313d4a5764707d8a97a39d9083766a5d5043372a1d100000000000000000000000000000000000000000000000000000050e161c2227292a2c2c2d2c2c2b29282521201d19130f0a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002060a0c0d13131313131313130e0d0b08030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002060a0c0d13131313131313130e0d0b08030000000000000000000000000000000000000000000000000000000000000000000000000000040607090c0e1011121313131211100e0c0a07060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f161b1d23282c2d303335373839393938373633312e2d2a251f1c18120b0300000000000000000000000000000000000000000000000000020a11171c1f24292c2d30333537383939393938373533302d2c28231d1c16100b0500000000000000000000000000000000000000000000000000030c19222d37404a525c636c717a81868c9196989a9c9e9f9f9f9f9e9d9c9a9895918d86817b716c645c524a40372d21180e03000000000013202c3946535f6c7986929faca79a8d8074675a4d4f5c6976828f9c9a9892908d8b8988878787898c91969fa2aaa39f93877d70665b5044382b1f120700000004101d2935404b5564717d8a96a1acaa9e9184796d60594f45403937312d3337393e444c555e68717e8b8e8a86837f7c6f6255483c2f2215090000000814212e3b4754616e7a8686868686868686868686868686868686868686868686868686868686868584827f7c78716d665e574f473d342a1f150b0100000000000000020c18242f39434b545c606a6f757b7e8183848586858583817f7c78726d68625a514b4d57606a6f797e82848586858483817f7265584b3f3225180c000000000000050f1a232c363e474f565e616a6f747a7d808284848586858483817e7a76706b625f58514840372e251b11070000000000000a1723303d4a5663707d89969f9f9f96897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090e11141415151515151515151515151515151515151515151515151515151724313d4a5764707d8a97a39d9083766a5d5043372a1d1000000000000000000000000000000000000000000000000000040e1720272e3336373939393939383634312e2d2a251e1a150e060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b0f12181c1f202326282a2b2c2c2c2b2a29272421201e1914100c070000000000000000000000000000000000000000000000000000000000060b0f13181d20212426292a2b2c2d2c2c2b2a282623201f1c1812100b050000000000000000000000000000000000000000000000000000000a151e2b343f49525c646e737e858d92999da0a8a9a29f9d9c9b9c9d9fa2aaa7a09d99928e857e736e645c52493f332a1f1409000000000013202c3946535f6c7986929faca79a8d8074675a4d505c6976838f918d898583807e7c7b7a7a7b7d7f848b9298a2aba4999083786c605346392e23180c0000000613202c3945515d6775828f9ba8aea3988b7e71675d51473d352f2b2622272b2d323a434c56606d7883817e7a76736f6a5f53473b2e2115080000000814212e3b4754616e7a87939393939393939393939393939393939393939393939393939393999292918f8c89837e786e6960594f463c31271d1207000000000000000a141e2935404b555d666d747c82878b8e909192929291908e8c88847f7a716d605d55535f696f7c848b8f9192929291908d86796c605346392d20130000000000020d17212c353e48505961686d757c8186898c8f909192929291908d8b86827d766f6a625b524940372d23190d0300000000000a1723303d4a5663707d8996a3aca396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000000000000000000000000000000000000010507080b0e10111213131211100e0b0807050100000000000000000000000000000000000000000000000000000000050d14191e202121212121212121212121212121212121212121212121212121212124313d4a5764707d8a97a39d9083766a5d5043372a1d10000000000000000000000000000000000000000000000000000b16202932393f434445464646454543413e3a3936302b2620180f0900000000000000000000000000000000000000000000000000000004090e1112131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313130b0a0804000000000000000000000004090e1112131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313130b0a0804000000000000000000000000000000000000000000040613131313131313131312110e090400000000000000000000000000000000000000000000000000000000020507080b0e111112131312110f0c0908060300000000000000000406070b0f1213131211100e0c0b0906010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c10131317191c1d1f1f201f1f1e1c1a171414110e080400000000000000000000000000000000000000000000000000000000000000000003070d111314171a1c1d1f1f20201f1e1d1b19161313100c07000000000000000000000000000000000000000000000000000000000006111c26303d46515b646e74808a92979fa3a9a19e999792908f8f8f909298989d9fa7a39f97928a80736e635b51453b31261a0e040000000013202c3946535f6c7986929faca79a8d8074675a4d505c6976838a85807c797674716f6e6e6d6e7073787e869299a3aba0958a7e7164544b4034281c100400000714202d3a4753606d7a86929facac9f92867a6d60554b403529241d1a171b1f2028313a44515c666d7775716d6866625f584e43372b1f12060000000814212e3b4754616e7a87949f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa39f9e9d9c9995908b837b6f6b60584e43392f23180c02000000000006111c26303845515d676d7880898f93999a9d9e9f9f9f9e9d9b9896918c857e756d675d58626e7b8691969b9e9f9f9e9e9c9386796c605346392d2013000000000009141f29333d47505a616b707a82888e9298999c9d9e9f9f9f9e9c9a99938f8a837c726d635c52493f352b1f150b01000000000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000000000000000000000000000000000003080d111414171a1c1e1f20201f1e1d1a171414110d080300000000000000000000000000000000000000000000000000050e171f252a2d2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e313d4a5764707d8a97a39d9083766a5d5043372a1d1000000000000000000000000000000000000000000000000006111c27323b434a4f51525353535251504e4b4746413a37312a221b120900000000000000000000000000000000000000000000000000080f151a1d1f20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020171714110c050000000000000000080f151a1d1f20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020171714110c050000000000000000000000000000000001070c10132020202020202020201f1d1a150f080000000000000000000000000000000000000000000000000003090e121415181b1d1e1f201f1f1d1b191515120f0a0401000000070c101313181c1e1f201f1e1d1b181815120d060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406070a0d0f11121313131211100d0b0807050200000000000000000000000000000000000000000000000000000000000000000000000000010406070a0d0f11121313131212100f0c09070604000000000000000000000000000000000000000000000000000000000000000c17232e38424f59626d74808d929ea1a9a39f97918c8885838282838385888b90959ea1a8a29f928d80736d62574d42362a20160a0000000013202c3946535f6c7986929faca79a8d8074675a4d4e5a6774807d7974706d666764636261606163656c727d87929faca79b8f8275665c5145382c1f130600000a1723303d4a5663707d8998a3aea89b8e8275675d51433a2f23181d1d1d1d1d161f2834404a545c606a6864615e5655534e463c32261b0f030000000814212e3b4754616e7a8794a1acacb4aeaca6a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a6a8aaa9a7a09d9590857d6f6a5f554b4034291e130800000000000b17232e3842505a606d79828d929b9fa4ababa39f9d9c9b9c9d9fa19e97928b82796d685f6a76828f98a1a8aaa39f9995949386796c605346392d201300000000020e1a25303b454f59616c717d858f939a9fa3aaa9aaa8a7a6a7a9a9aba49f9c9490867f736e635b51473d31271d1207000000000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000000000000000000000000000000060b1014191e20212427292b2c2c2c2c2b2a272421201e19140f0b0600000000000000000000000000000000000000000000020d17202930363a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3d4a5764707d8a97a39d9083766a5d5043372a1d100000000000000000000000000000000000000000000000000a16222e39434d555b5d5f5f605f5f5e5c5b5854524c47433c342d241b1108000000000000000000000000000000000000000000000009121920262a2c2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2423211c17100800000000000009121920262a2c2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2423211c1710080000000000000000000000000000030b12181c1f2d2d2d2d2d2d2d2d2c2c2a262019120900000000000000000000000000000000000000000000040a0f141a1e212125282a2b2c2c2c2b2a282622211f1b15110d08030b12181c1f2025292b2c2c2c2b2a272524221d181109010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54606b727f8c929ca4aaa299928c84807b787675757677797b7f838a91969fa6a49c928b7f72695f53463d32271b0f0300000013202c3946535f6c7986929faca79a8d8074675a4d4c58646e74716d6663605c54585655545454535b606b74818d9aa9ac9f9285796d6053463a2d20130700000d1a2733404d5a6673808d99aab4aa978b7e7164554c4131282a2a2a2a2a2a2a2a2a232e39424a51535d5b5754524c4847433c342a20150a000000000814212e3b4754616e7a8794a7afb4aba39f9a9898989898989898989898989898989898989898999b9ea1a9aca79f9792857c6e675c51453a3025190d0100000003101c28343f4a54616c74818e949da4aca7a09d9992908f8f8f9192999a9e9f948f837a6d666f7c88949faaaea398928c88878886796c605346392d20130000000005121e2a36424d57606b717e8791979ea5acaba9a19e9b9a9a9b9d9fa4abaca69f98928b80736d62594f43392f23180c000000000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000000000000000000000000020a11171c1f252a2d2e3134363839393938373634312e2d2a251f1b17110a02000000000000000000000000000000000000000009141f29323b4246474848484848484848484848484848484848484848484848484848484848484a5764707d8a97a39d9083766a5d5043372a1d100000000000000000000000000000000000000000000000020e1a27333f4a555f676a6c6c6c6c6c6b696764615e56534e463e362d23190b0200000000000000000000000000000000000000000008121b242b3136383939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393931302d28221a12080000000008121b242b3136383939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393931302d28221a1208000000000000000000000000030d151d23292c3939393939393939393836312b241b12080000000000000000000000000000000000000000060c161b1f252a2d2e31343738393939383735322f2e2b26201d19130c151d23282c2d32353839393838363432312e29231b13090000000000000000000000000000000000020507080b0e111112131312110f0c0908060300000000000000000406070b0f1213131211100e0c0b09060100000000000000000000000000000000000000050a0d0f101313100f0d0a050000000000000000000000000000000000000000000000000000000000000000060a0e1011121313131212100e0b0707050100000000000000000000000000000000000000000000000006121f2c3844505c666f7c87929fa4aba29892878079736f6a6a696869656c6e72777d848f949fa6a49f92867b6e61584e43382b1f130600000013202c3946535f6c7986929faca79a8d8074675a4d47525c646764605c5453514b4b4948474748495059626e7b8897a1ada298887c6f6255493c2f2216090004101c2834404b546976828f9ca9aea398887b6f6255483c2f3737373737373737373737373039404446514e4b4746413c3b37322a261f180f060000000814212e3b4754616e7a87959fa3aba399928d8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8c8c8f92979ea1a9a9a2979184796d60564c41362a1d110500000006121f2b3844505c66717e8b939ea6aea59d95908a86838282838486898d92979f959083786d73808d99a6b0a89f9286807c7a7b7d7063574a3d3024170a000000030e18212d3a46525e69707d879299a1a9ada79f9d97928f8d8d8e9093999fa2aaaaa39f928b7f726b60554b4034291c12070000000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000000000000000000000001070c141c23282b3036393b3e414344454646454443413e3b3936302b27221b140b07000000000000000000000000000000000000020e1925303b444d5254545454545454545454545454545454545454545454545454545454545454545764707d8a97a39d9083766a5d5043372a1d10000000000000000000000000000000000000000000000003101d2936434f5b6771777879797978787674716d68625f5850483e352b1d140a0000000000000000000000000000000000000000040f19242d353d4245464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646463e3c39332c241a10050000040f19242d353d4245464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646463e3c39332c241a100500000000000000000000010b151f272f343846464646464646464645423d352d24190f040000000000000000000000000000000000030a111720272b31363a3b3e4144444546464544423f3c3b37322c29241e191e272e34383a3e42454646454443413f3d3a342d251b1106000000000000000000000000000003090e121415181b1d1e1f201f1f1d1b191515120f0a0401000000070c101313181c1e1f201f1e1d1b181815120d0600000000000000000000000000000000030a11161a1c1d20201d1c1a16110a0300000000000000000000000000000000000000000000000000000000040b11161a1d1e1f2020201f1e1d1b181413110d080200000000000000000000000000000000000000000003101c28343f4a54606d78839099a3afa39992867d736d67625f585c5c535b6061656c707a828f949fa9a2988f82766a6054473b2e22150800000013202c3946535f6c7986929faca79a8d8074675a4d414a52585a5753504a4645403e3c3b3b3a3b3f47535f6a7885929eabaa968a7d7063574a3d3024170a0006131f2c3845515c667884919eabac9f9286796d6053464444444444444444444444444444444444444444444444444444443b3a36312a21180e0300000714202d3a4753606d79838c9299a29f9286807f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f8082858a91969fa7a9a0968c7f73685e5246392d2013080000000713202d3a4653606d7884919ea5afa69d938e837d797776757677797c80858c9298958e81747683909ca9aca0958a7e736f6e6e706b6155483c2f2316090000000915202c38444f59616e7b869299a3abada49c959089858281808183878c9298a0a8aea49f93877d6f675c5145392e23180c0000000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000000000000000000030b12181e262e34383b4146474a4d4f515253535251504d4a4746413b37332d261d18120b030000000000000000000000000000000005111e2a36424d565e61616161616161616161616161616161616161616161616161616161616161616164707d8a97a39d9083766a5d5043372a1d10000000000000000000000000000000000000000000000004111e2a3744515d6a778385868686858483817e7a756e6a615a50473d2f261b1106000000000000000000000000000000000000000915202b353f474e52535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353534a49453e362c22170c00000915202b353f474e52535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353534a49453e362c22170c0000000000000000000007121d2731394045535353535353535353524e473f352b20150900000000000000000000000000000000030c151c232832373b4246484b4e505152535252504e4c4847433c39352f28222b30394045464b4f5152535251504e4b4a463f372d23180d010000000000000000000000040a0f141a1e212125282a2b2c2c2c2b2a282622211f1b15110d08030b12181c1f2025292b2c2c2c2b2a272524221d1811090100000000000000000000000000040d151c2226292a2d2d2a2926221c150d040000000000000000000000000000000000000000000000000000050e161c2227292a2c2c2d2c2c2b29282521201d19130f0a030000000000000000000000000000000000000006121f2c3844505c66727f8b95a0aba89f92877d706b605d55534e4f4f495053555a61686d79829097a1a49f94897c6f6256493c2f23160900000013202c3946535f6c7986929faca79a8d8074675a4d4141474c4e4a46443f3a38342e302f2e2d2d37434e586a7784909daaa4978b7e7164584b3e3125180b000713202d3a4653606d7986939facaa9d908477665c50505050505050505050505050505050505050505050505050505050504846423b332a1f140900000613202c3945515d676d787f879297a29992867e727272727272727272727272727272727272727375797e8490959fa9a89f92867a6d6154473a2f24190d0100000b1824313e4b5764717e8a96a0acac9f948e8179716d67696869676d70747a7f869095938a7e7885929fabaa9d9184776c6261616361594f44382c2014070000020f1a26313c4855616b75828f98a2abada39b928c837d7975747374767a7f869196a0a8afa4999184796d60544a4034281c100400000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000000000000000000050d151d242930383f44464c5254575a5c5e5f5f5f5f5e5d5a5754524c46443f382f28231c150c030000000000000000000000000000000714202d3a46525e696e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e707d8a97a39d9083766a5d5043372a1d10000000000000000000000000000000000000000000000006121f2c3945525f6c78859292999292918f8e8b87827c716c61594f41382d22170b000000000000000000000000000000000000000e1a26313d4751595e5f606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060575550483e33281c1104000e1a26313d4751595e5f606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060575550483e33281c11040000000000000000000c18232f39434b515f606060606060605f5e5951473d31261a0e010000000000000000000000000000030d151e262e343d43474d5354585b5d5e5f5f5f5e5d5b5955534e4745413a3129343c424b5153585c5e5f5f5f5e5d5a585651493f34291d120600000000000000000000060c161b1f252a2d2e31343738393939383735322f2e2b26201d19130c151d23282c2d32353839393838363432312e29231b1309000000000000000000000000030d161f272d32353639393635322d271f160d03000000000000000000000000000000000000000000000000040e1720272e3336373939393939383634312e2d2a251e1a150e060000000000000000000000000000000000000713202d3a4653606d7984919ea7ada1968d80736b6059514b474342423f44464850565d676d7a85929b9993908c8275685c4f4235291c0f02000013202c3946535f6c7986929faca79a8d8074675a4d41363c3f413e3a38342e2c2823232221212c3844505c667784919daaa5988b7f7265584b3f3225180c000815212e3b4854616e7b879aa4afa99c90837669545d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d55534d453b31261a0e020004101d2935404b555d666d727d859298a29892877f716b6565656565656565656565656565656566666d717a839097a1ada2988b7f7265564c4135291d11040005121e2a36424d576875818e9ba8afa49a8f82786d66605d555c555c6063676d727b838f9391857b8797a2ada79a8d8074675a545557554f473e33281c1004000006121f2b37434e5863707d8a939eaaafa59b918b8078706c66676768686d737b849196a0acaba0968c7f72665c5144382c1f120600000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000000000050e161f272f353e424a5053565e616467696b6c6c6c6b6a696764615e56535049413d342e271e150c0300000000000000000000000000000814212e3b4754616e7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7f8b98a49d9083766a5d5043372a1d10000000000000000000000000000000000000000000000006121f2c3945525f6c7885929493939496999a99938e867e716b6053493f33271b0f03000000000000000000000000000000000000111d2a36424e59636a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c64615a5045392d21140800111d2a36424e59636a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c64615a5045392d211408000000000000000004101c2934404b555c6c6c6c6c6c6c6c6c6c6a63594e42362a1d110400000000000000000000000000010b151f2730383f444e54575e6164676a6b6c6c6c6b6a6865625f5854524c433f353c464e545c6065686b6c6c6b6b696765625b51463a2e2215090000000000000000030a111720272b31363a3b3e4144444546464544423f3c3b37322c29241e191e272e34383a3e42454646454443413f3d3a342d251b110600000000000000000000000a151f2831383e4243464643423e3831281f150a0000000000000000000000000000000000000000000000000b16202932393f434445464646454543413e3a3936302b2620180f090000000000000000000000000000000004101d2935404b5564717d8a96a1acaa9e9184796d60594f45403937312d3337393e444c555e68717e8b8e8a86837f7c6f6255483c2f22150900000013202c3946535f6c7986929faca79a8d8074675a4d4134303334312d2c28231f1c18161e2429363e4653606d7985929facab978a7e7164574b3e3124180b000916232f3c4956626f7c8995acb6a89c8f82756a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a615f574d42362a1e120500010d18242f39434b545c606b707d86929fa29992877d70675d5858585858585858585858585859545c60686d7a85919ea9aa9c908376685d5245392c201306000714202d3a46525e697885919eabac9f93877c6f665c54514b4f4b5153555d60696e79818f949083909da9b3a4988b7e7165584b484a48443e352c21160b0000000814212e3a47535f6a7683909ca5afa99e938b7f736c65605b545a565e61696e7a84919aa4afa89e9285796d6053463a2d22170b00000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000000000000040d162028313940454f545c6064686e7174767778797978777674716e6863605b534e44403930271e150c0300000000000000000000000000111e2a3744515d6a7784878787878787878787878787878787878787878787878787878787878787878787878b919ba99d9083766a5d5043372a1d10000000000000000000000000000000000000000000000006121f2c3945525f6c78858887868787898d92979f9892887d70655b5044372b1f1205000000000000000000000000000000000000121f2c3845525e6a7579797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979716c6155493c3023170a00121f2c3845525e6a7579797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979716c6155493c3023170a000000000000000006131f2c3845515c67767979797979797979756a5e5245382c1f12060000000000000000000000000007121d273139424a50586062696e71747777787979787775726f6a66605d56504540454e5860666d717578797978777674726d62564a3d3124180b00000000000000030c151c232832373b4246484b4e505152535252504e4c4847433c39352f28222b30394045464b4f5152535251504e4b4a463f372d23180d0100000000000000000005111c27313a434a4e505353504e4a433a31271c11050000000000000000000000000000000000000000000006111c27323b434a4f51525353535251504e4b4746413a37312a221b12090000000000000000000000000000000613202c3945515d6775828f9ba8aea3988b7e71675d51473d352f2b2622272b2d323a434c56606d7883817e7a76736f6a5f53473b2e21150800000013202c3946535f6c7986929faca79a8d8074675a4d413427262724201f1c1713141920282f353f48515b63707d8998a2aea399897c6f6356493c30231609000a1623303d495663707c8996a3afa89b8e8177777777777777777777777777777777777777777777777777777777777777776e695f53463a2d211407000007121d283139424a5059606b717e8b949fa39991857a6d60564c4c4c4c4c4c4c4c4c4c4c4c4c4a51565e68717e8b97a1a69f94877a6d6054473a2d211407000815212e3b4854616e7b8797a1adaa9d9083776a5f544b4540424045474b51575f676d78828f9590959fabb0a3968a7d7063574a3d3d3c38332c231a10050000000815222f3b4855626e7b88949fabada2978e81746d605b53504a4d4c52575e68707d87939facada1978a7d716453493f33271b0f03000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000000000000010c161f28323a434b515961666d71767a7e808284858686858483807d7a76706c656058514a423930271e150a00000000000000000000000000111e2a3744515d6a778490949494949494949494949494949494949494949494949494949494949494949494989ba3a99d9083766a5d5043372a1d100000000000000000000000000000000000000000000000000916232f3c4956626f7c7b7a7a7a7b7d808590959f9a9184786c605346392d20130600000000000000000000000000000000000013202c3946535f6c79878686868686868686868686868686868686868686868686868686868686868686868686868686868686868686867e7164574a3e3124170b0013202c3946535f6c79878686868686868686868686868686868686868686868686868686868686868686868686868686868686868686867e7164574a3e3124170b00000000000000000714202d3a4753606d798686868686868687796c5f5346392c201306000000000000000000000000020c18242f39434b545c606a6f757b7e8183848586858583817f7c78726d68625a514b4d57606a6f797e82848586858483817f7265584b3f3225180c000000000000030d151e262e343d43474d5354585b5d5e5f5f5f5e5d5b5955534e4745413a3129343c424b5153585c5e5f5f5f5e5d5a585651493f34291d12060000000000000000000a16222d38434c545a5d60605d5a544c43382d22160a000000000000000000000000000000000000000000000a16222e39434d555b5d5f5f605f5f5e5c5b5854524c47433c342d241b110800000000000000000000000000000714202d3a4753606d7a86929facac9f92867a6d60554b403529241d1a171b1f2028313a44515c666d7775716d6866625f584e43372b1f120600000013202c3946535f6c7986929faca79a8d8074675a4d4134271a1b171312100e171f252a323a4145515a626d76828f9caaac9f9286796d6053473a2d201407000a1724303d4a5763707d8a96a3b0ab9e928583838383838383838383838383838383838383838383838383838383838383837b6e6155483b2e2215080000010c161f2830383f444f59626c76828f9ca7a1978d8073685e52463f3f3f3f3f3f3f3f3f3f3f40444c56606d7985929a999896897c6f6356493c30231609000916222f3c4955626f7c8895a9b3a79a8d817467584e4239352f34383a40454d555c666d7a85919d9fa7b1afa396897c706356493d302f2c28211a110800000005121e2a36424d576774808d9aa6b0ac9f92857a6d615b5049443f4041464d56606b75828f9baab3a99b8e8175655b5044372b1f1205000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000000000008131e28313a444c555d606b70787e82868a8d8f919292929291908d8a87827d786f6a605c544a423930261c1106000000000000000000000000111e2a3744515d6a7784909da1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a4a7aca99d9083766a5d5043372a1d100000000000000000000000000000000000000000000000000815222e3b4754606a6f6e6d6d6d6e70737a83909da096897c6f6356493c3023160900000000000000000000000000000000000013202c3946535f6c798692939393939393939393939393939393939393939393939393939393939393939393939393939393939393938a7e7164574a3e3124170b0013202c3946535f6c798692939393939393939393939393939393939393939393939393939393939393939393939393939393939393938a7e7164574a3e3124170b00000000000000000714202d3a4753606d7a8693939393939286796c5f5346392c2013060000000000000000000000000a141e2935404b555d666d747c82878b8e909192929291908e8c88847f7a716d605d55535f696f7c848b8f9192929291908d86796c605346392d20130000000000010b151f2730383f444e54575e6164676a6b6c6c6c6b6a6865625f5854524c433f353c464e545c6065686b6c6c6b6b696765625b51463a2e2215090000000000000000010d1a26323e4a545e66696c6c69665e544a3e32261a0d010000000000000000000000000000000000000000020e1a27333f4a555f676a6c6c6c6c6c6b696764615e56534e463e362d23190b02000000000000000000000000000a1723303d4a5663707d8998a3aea89b8e8275675d51433a2f23181d1d1d1d1d161f2834404a545c606a6864615e5655534e463c32261b0f0300000013202c3946535f6c7986929faca79a8d8074675a4d4134271a0e0b070b1218202930363e444c525b626c727f8b949faba89c8f8376675d5145392c1f1306000a1724313d4a5764707d8a97a3b0ada1979290909090909090909090909090909090909090909090909090909090909090887b6e6255483b2f221508000000040d161e262e343d47505a63707c8995a0a99f92867a6d6154473b3032323232323232322e343a45515c6674818e8e8c8b89887f7265584c3f3225190c000a1723303d4a5663707d8996a3b0a6998c7f7366594c402f2924292c2f353b434b545d68707d8a959fabb7afa396897c706356493d3023201c161008000000000714212d3a46535f697884919eabafa49a8c7f73685e52443f383330363b444f5963707d8a98a2aeab9f9285796c605346392d201306000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000000050e19242f3a434c565e676d747d848a8f93999a9c9e9f9f9f9e9d9c9a9a938f8a837c736d665c544a42382e23170b020000000000000000000000111e2a3744515d6a7784909d9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9d9083766a5d5043372a1d1000000000000000000000000000000000000000000000000006131f2b38434e586062616160606163686f7c8899a4988b7e7265584b3f3225180c00000000000000000000000000000000000013202c3946535f6c7986929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f978a7d7164574a3e3124170b0013202c3946535f6c7986929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f978a7d7164574a3e3124170b00000000000000000714202d3a4753606d7a86939f9f9f9f9286796c5f5346392c201306000000000000000000000006111c26303845515d676d7880898f93999a9d9e9f9f9f9e9d9b9896918c857e756d675d58626e7b8691969b9e9f9f9e9e9c9386796c605346392d2013000000000007121d273139424a50586062696e71747777787979787775726f6a66605d56504540454e5860666d717578797978777674726d62564a3d3124180b0000000000000000030f1c2935424e5a66707679797670665a4e4235291c0f03000000000000000000000000000000000000000003101d2936434f5b6771777879797978787674716d68625f5850483e352b1d140a000000000000000000000000000d1a2733404d5a6673808d99aab4aa978b7e7164554c4131282a2a2a2a2a2a2a2a2a232e39424a51535d5b5754524c4847433c342a20150a0000000013202c3946535f6c7986929faca79a8d8074675a4d4134271a0e030c151c2328323b41464f565d606d727e87929fa6ada1968b7e7165554b4035291d1004000a1724313d4a5764707d8a97a3b0b3a9a19e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d94887b6e6155483b2e22150800000000040c141c2328353f4854606b7783909daaa3988c7f7266574d42362a25252525252525232834404b5464717e8281807e7d7c796d6053473a2d201407000a1724313d4a5764707d8a97a3b0a5988c7f7265594c3f2e23181c1f24293139424c56616c7683909da9b3afa396897c706356493d302316100b0500000000000815222e3b4855616e7b8896a1aca69f93877b6e61564c41332d28252a323d4653606c7985929fabada297887b6e6155483b2e221508000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000000020d17202935414c555e686d79818a91969c9fa4aba5aba49f9fa4aca5aca49f9c95908780786d665c544a3f34281d140a0000000000000000000000111e2a3744515d6a77839093939393939393939393939393939393939393939393939393939393939393939393939393939083766a5d5043372a1d10000000000000000000000000000000000000000000000000030f1b27323d464e5456555453545456606c7986939f998c807366594d4033261a0d00000000000000000000000000000000000013202c3946535f6c7986929facacacaea9a7a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a4978a7d7164574a3e3124170b0013202c3946535f6c7986929facacacaea9a7a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a4978a7d7164574a3e3124170b00000000000000000714202d3a4753606d7a8693a0acac9f9286796c5f5346392c20130600000000000000000000000b17232e3842505a606d79828d929b9fa4ababa39f9d9c9b9c9d9fa19e97928b82796d685f6a76828f98a1a8aaa39f9995949386796c605346392d201300000000020c18242f39434b545c606a6f757b7e8183848586858583817f7c78726d68625a514b4d57606a6f797e82848586858483817f7265584b3f3225180c000000000000000003101d2a3643505d69768286868276695d5043362a1d1003000000000000000000000000000000000000000004111e2a3744515d6a778385868686858483817e7a756e6a615a50473d2f261b1106000000000000000000000004101c2834404b546976828f9ca9aea398887b6f6255483c2f3737373737373737373737373039404446514e4b4746413c3b37322a261f180f0600000013202c3946535f6c7986929faca79a8d8074675a4d4134271a0e0c151e272e343e444d525961686d757f879299a3afa59e9184796d6053463a2f24180c00000a1723303d4a5663707d8996a3b0b8b0aba99f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa9aaaaaaaaaa94877a6e6154473b2e2114080000000000020a1117232c38444f596673808c99a6aa9d918477695e52463a2d2019191919191918232e394955616c7176747371706f6d675d5145392c201306000a1723303d4a5663707d8996abb5a6998d807366544a403428211e1a181f27303a44505a64707d8a97a2adafa396897c706356493d3023160a000000000000000b1825313e4b5864717e8b939a979a9c908376695e52443a30221b19202b3844505b6676838f9ca9b3a9978a7d7064574a3d3124170a000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000008141e29323b45515d676d7a838e939ea0a8a7a09d99959993939a96999ea0a8a7a099928c81786d665c50443d2f261c110600000000000000000000111e2a3744515d6a77838686868686868686868686868686868686868686868686868686868686868686868686868686868683766a5d5043372a1d10000000000000000000000000000000000000000000000000000a162027333f49535b606060606062666e7b8799a4988c7f7265594c3f3226190c00000000000000000000000000000000000013202c3946535f6c7986929facb9aea49d9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a978a7d7164574a3e3124170b0013202c3946535f6c7986929facb9aea49d9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a978a7d7164574a3e3124170b00000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000003101c28343f4a54616c74818e949da4aca7a09d9992908f8f8f9192999a9e9f948f837a6d666f7c88949faaaea398928c88878886796c605346392d2013000000000a141e2935404b555d666d747c82878b8e909192929291908e8c88847f7a716d605d55535f696f7c848b8f9192929291908d86796c605346392d2013000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000000000006121f2c3945525f6c78859292999292918f8e8b87827c716c61594f41382d22170b000000000000000000000006131f2c3845515c667884919eabac9f9286796d6053464444444444444444444444444444444444444444444444444444443b3a36312a21180e03000013202c3946535f6c7986929faca79a8d8074675a4d4134271a0b151e273039404450565e616b707a818b9299a3aba79e938b7e71665c5145382c1d12070000091623303c4956636f7c8996a2afb0a69f9c9393939393939393939393939393939393939393939393939c9ea6b0aea398877a6d6054473a2d2114070000000000000006101b27323d4956636f7c8996a9aca095877b6e6154483b2e21150c0c0c0c07121d2d3944505a6164696766656362605d554b4035291d1104000915222f3c4855626f7b8899a3afa89b8f8275665c51443a322d2b2627272628323e4653606d7985929fabafa396897c706356493d3023160a000000000000000c1925323f4c5865727f8486898b8d8f8c807366574d4232281e110f1c28333f4a546774808d9aa7b2a5988b7f7265584c3f3225190c000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000000010d1925303b44515b606d798390959ea5a9a19e95908c8987868687898c91969ea1a9a39f938f81786d60584e42382d22170b00000000000000000000101d2936424f5b677177797979797979797979797979797979797979797979797979797979797979797979797979797979797671665b4e4236291c100000000000000000000000000000000000000000000000000005121f2b3744505b656c6d6c6c6d6f7278818e9ba095897c6f6356493c3023160900000000000000000000000000000000000013202c3946535f6c7986929facb9a99d928d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8a7e7164574a3e3124170b0013202c3946535f6c7986929facb9a99d928d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8a7e7164574a3e3124170b00000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000006121f2b3844505c66717e8b939ea6aea59d95908a86838282838486898d92979f959083786d73808d99a6b0a89f9286807c7a7b7d7063574a3d3024170a00000006111c26303845515d676d7880898f93999a9d9e9f9f9f9e9d9b9896918c857e756d675d58626e7b8691969b9e9f9f9e9e9c9386796c605346392d2013000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000000000006121f2c3945525f6c7885929493939496999a99938e867e716b6053493f33271b0f03000000000000000000000713202d3a4653606d7986939facaa9d908477665c50505050505050505050505050505050505050505050505050505050504846423b332a1f1409000013202c3946535f6c7986929faca79a8d8074675a4d4134271a121d273039424a515a62686e757d848e939fa3aba8a0958f81756c61544b4034281c0b0100000815222f3b4855626e7b8895a9b3ab9f948f8686868686868686868686868686868686868686868686868f949eaaac9f928579675d5145392c20130600000000000000000b14212d3a4754606d7a8797a1ada7978b7e7164584b3e3125180b00000000101c28333e485055575c5b5958565553514b433a2f24180d01000714202d3a4753606d7a86929facab9e9285796d60564c443d3a373134333332323845515c6675828f9ca8afa396897c706356493d3023160a000000000000000b1824313e4a56626d72787a7c7e8082847d7063574a3d3024160c0b17222d404c5966737f8c99a6b2a6998d8073665a4d4033271a0d000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000005111e2a36414c56626d75828f959fa7a8a097928a837f7c7a79797a7c7f848a9297a0a8a59e938d80736a60544a3f33281c0f030000000000000000000e1a27333f4a555f676a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a665f554a3e32261a0d000000000000000000000000000000000000000000000001080d13202d394653606c777979797a7b7e838e939e989083786c605346392d20130600000000000000000000000000000000000013202c3946535f6c7986929facb3a79a8d80808080808080808080808080808080808080808080808080808080808080808080808080807c6f6255483c2f2215090013202c3946535f6c7986929facb3a79a8d80808080808080808080808080808080808080808080808080808080808080808080808080807c6f6255483c2f22150900000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000713202d3a4653606d7884919ea5afa69d938e837d797776757677797c80858c9298958e81747683909ca9aca0958a7e736f6e6e706b6155483c2f2316090000000b17232e3842505a606d79828d929b9fa4ababa39f9d9c9b9c9d9fa19e97928b82796d685f6a76828f98a1a8aaa39f9995949386796c605346392d2013000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000000000006121f2c3945525f6c78858887868787898d92979f9892887d70655b5044372b1f1205000000000000000000000815212e3b4854616e7b879aa4afa99c90837669545d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d55534d453b31261a0e020013202c3946535f6c7986929faca79a8d8074675a4d4134271a18232e39434b545c606c717b818a91969ea5afa69f959083796d605a5042392e23180c0000000714212d3a4754606d7a8797a2ada99c8f82797979797979797979797979797979797979797979797979828f9ca9ab9e9184786b554b4135291d110400000000000000030613202c3945515d677885919eaba6998d8073665a4d4033271a0d0c0c0c0c0b17222c363e44494a4f4e4d4b4a484745403a31281d1307000006131f2c3945515d677783909dabada1978a7e71685e564f484742424140403f3f3f404b546673808c99a6afa396897c706356493d3023160a000000000000000916222e3a46515b6265676d6f71737578706b6155483c2f231604061925323f4c5865727f8b98a5b2a79a8d8074675a4d4134271a0e000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000714202d3946525e68727f8b949ea7a9a09591857e77726f6d686c6d6f72787e859196a0a9a59f93877c6f665b5044382b1f13080000000000000000000a16222e39434d555b5d606060606060606060606060606060606060606060606060606060606060606060606060606060605d5b554d43382d22160a00000000000000000000000000000000000000000003090e13191d202d394653606c7984868687888b90959a9590867c6f665b5044382b1f120802000000000000000000000000000000000013202c3946535f6c7986929facada0938679737373737373737373737373737373737373737373737373737373737373737373737373736f6a5f53473a2e2115080013202c3946535f6c7986929facada0938679737373737373737373737373737373737373737373737373737373737373737373737373736f6a5f53473a2e21150800000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000b1824313e4b5764717e8a96a0acac9f948e8179716d67696869676d70747a7f869095938a7e7885929fabaa9d9184776c6261616361594f44382c201407000003101c28343f4a54616c74818e949da4aca7a09d9992908f8f8f9192999a9e9f948f837a6d666f7c88949faaaea398928c88878886796c605346392d2013000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000000000000000916232f3c4956626f7c7b7a7a7a7b7d808590959f9a9184786c605346392d201306000000000000000000000916232f3c4956626f7c8995acb6a89c8f82756a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a615f574d42362a1e12050013202c3946535f6c7986929faca79a8d8074675a4d41342716202834404b555c666d747e858e939ea1a8aca49f9490837b6e675d51483e30271d12070000000613202c3945515d677885929eabaa9d9184776c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c667784919eaaa99c8f8376695c50432f24180d010000000000040a0f13151d2935414b556a7783909daaa89b8f8275685c4f4235291c191919191919191a242c33393c3e4341403e3d3c3a39352f281f160c01000004101d2935404b5566737f8c99a3aea99e91847a6d68615955534d4f4e4d4c4c4c4b4b4c5865727f8b98a5afa396897c706356493d3023160a0000000000000006121e29343f495156555d60626467696b6361594f44382c2014070b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000005111d2935414c56616e7a85929fa6ada19791837b716c6662605d606163656c717b849197a1ada4999184786c6053463a3025190d01000000000000000006111c27313b434a4f5153535353535353535353535353535353535353535353535353535353535353535353535353535353504e4a433a31271c110500000000000000000000000000000000000000030a0f151a1e24292c2e3844505b6673808c9993999292908d89837c6f6a5f544a3f33281c19130d080100000000000000000000000000000013202c3946535f6c7986929facada093867a6d676767676767676767676767676767676767676767676767676767676767676767676767625f584e43372b1f12060013202c3946535f6c7986929facada093867a6d676767676767676767676767676767676767676767676767676767676767676767676767625f584e43372b1f120600000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000005121e2a36424d576875818e9ba8afa49a8f82786d66605d555c555c6063676d727b838f9391857b8797a2ada79a8d8074675a545557554f473e33281c1004000006121f2b3844505c66717e8b939ea6aea59d95908a86838282838486898d92979f959083786d73808d99a6b0a89f9286807c7a7b7d7063574a3d3024170a000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000000000000000815222e3b4754606a6f6e6d6d6d6e70737a83909da096897c6f6356493c30231609000000000000000000000a1623303d495663707c8996a3afa89b8e8177777777777777777777777777777777777777777777777777777777777777776e695f53463a2d2114070013202c3946535f6c7986929faca79a8d8074675a4d4134271e28323a45515c676d78818b92979ea5ada8a19a938d827a6e695e554c41362d1e150b0000000004111d2935414c55697683909ca9ab9f928578695f606060606060606060606060606060606060606d7986929faca79a8d8174675a4e4134271b070000000000070f161b1f2223242f43505d697683909ca9a99c908376695d5043362a2525252525252525252520282d303136343332302f2d2c29241d160d04000000000c18242f3b4854616e7b86929fa8ada19690827a706b65615f575c5a5a5959585858585865717e8b98a4afa396897c706356493d3023160a00000000000000010d18232d373f464a4b515356585a5c5e57554f473e33281c10040b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000713202d3946525e6874808d98a2aea69e92857b6e69615a5654525354535b60696e7b85929ea8aba0958a7d7063564c41362a1d11050000000000000000000b151f2931393f42444646464646464646464646464646464646464646464646464646464646464646464646464646464643423e3831281f150a00000000000000000000000000000000000000060b151a1f262b2f35393a40444a54616e7b87939f92878583817d786f6a5f584e4238342e29241e19130c04000000000000000000000000000013202c3946535f6c7986929facada093867a6d605a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a55534e463c31261b0f030013202c3946535f6c7986929facada093867a6d605a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a55534e463c31261b0f0300000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000714202d3a46525e697885919eabac9f93877c6f665c54514b4f4b5153555d60696e79818f949083909da9b3a4988b7e7165584b484a48443e352c21160b0000000713202d3a4653606d7884919ea5afa69d938e837d797776757677797c80858c9298958e81747683909ca9aca0958a7e736f6e6e706b6155483c2f231609000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000000000000000006131f2b38434e586062616160606163686f7c8899a4988b7e7265584b3f3225180c000000000000000000000a1724303d4a5763707d8a96a3b0ab9e928583838383838383838383838383838383838383838383838383838383838383837b6e6155483b2e2215080013202c3946535f6c7986929faca79a8d8074675a4d41342724303a44515b606d79828e939fa2a9ada59d96918880786d685e564d433a2f241b0c0300000000010d19242f414d5a6774808d9aabaea298887b6e61555353535353535353535353535353535355626f7c8899a3afa9988b7e7265584b3f3225180c0000000007101921272c2f303236434f5c6976828f9ca9aa9d9083776a5d50443732323232323232323232322d2c28232429282625232220201d18130c0400000000000714202d3a46525e6974808d96a1a9a89f9590847d77726e696a6867666665656565646465717e8b98a4afa396897c706356493d3023160a000000000000000006111b252d343a3a404547494b4d4f514a48443e352c21170b000b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000714212e3a4754616d7a86929faaab9f948a7d70695e575049474546474950565e69717e8b96a0aca79c8f8275685e5246392d201307000000000000000000040d171f272e333637393939393939393939393939393939393939393939393939393939393939393939393939393939393736322d271f160d030000000000000000000000000000000000020a111720262b31373a4145474a5153555e6976828f9b8f82787774706c655f58504a46443f38353029241e160d070000000000000000000000000013202c3946535f6c7986929facada093867a6d60534d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4847433c342a20150a000013202c3946535f6c7986929facada093867a6d60534d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4847433c342a20150a0000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000815212e3b4854616e7b8797a1adaa9d9083776a5f544b4540424045474b51575f676d78828f9590959fabb0a3968a7d7063574a3d3d3c38332c231a10050000000b1824313e4b5764717e8a96a0acac9f948e8179716d67696869676d70747a7f869095938a7e7885929fabaa9d9184776c6261616361594f44382c201407000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000000000000030f1b27323d464e5456555453545456606c7986939f998c807366594d4033261a0d000000000000000000000a1724313d4a5764707d8a97a3b0ada1979290909090909090909090909090909090909090909090909090909090909090887b6e6255483b2f2215080013202c3946535f6c7986929faca79a8d8074675a4d4134272935414c56626d75818e949da5ada9a19e938e847d736d665d564d443b31281e1209000000000000081724313e4a5764717d8a99a3afaa988b7e7165574d42464646464646464646464646424d5765727f8c98abada297887b6f6255483c2f221509000000040f19222b32383b3c3f3f434f5c6976828f9ca9aa9d9184776a5e51443f3f3f3f3f3f3f3f3f3f3f3f3a38342e271e151a1817151413110d070100000000000005121e2a36424d57606d79849197a1a9a79f969189837f7b78767574737372727271717171717e8b98a4afa396897c706356493d3023160a00000000000000000009131b23292e2f35393a3c3e4042453d3c38332c231a1005000b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000005121e2a36424d5765727f8c98a2aea99c8f82766c61574d453e3a39393a3f444d57616c7784919eaaa99f93867a6d6154473a2e21140700000000000000000000050d151c2227292a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2a2926221c150d040000000000000000000000000000000000060c141c232831373c42474c5154545c60626466717e8a9792877b6e6a69676462605b5453504a45413a352f281f18120b03000000000000000000000013202c3946535f6c7986929facada093867a6d6053474040404040404040404040404040404040404040404040404040404040404040403c3a37312a22180e04000013202c3946535f6c7986929facada093867a6d6053474040404040404040404040404040404040404040404040404040404040404040403c3a37312a22180e040000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000916222f3c4955626f7c8895a9b3a79a8d817467584e4239352f34383a40454d555c666d7a85919d9fa7b1afa396897c706356493d302f2c28211a110800000005121e2a36424d576875818e9ba8afa49a8f82786d66605d555c555c6063676d727b838f9391857b8797a2ada79a8d8074675a545557554f473e33281c1004000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000000000000000a162027333f49535b606060606062666e7b8799a4988c7f7265594c3f3226190c000000000000000000000a1724313d4a5764707d8a97a3b0b3a9a19e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d94887b6e6155483b2e2215080013202c3946535f6c7986929faca79a8d8074675a4d4134272d3946525d68727e8b939ea6afa69f979189817a706b605c544c443b32291f160c000000000000000714212e3a4754616d7a86929faca89b8e8275695e53463d313939393939393939303946525e6976828f9ca9ab9e9285786c605346392d2013060000000a16212b343d4348494c4c4c4f5c6976828f9ca9aa9d9184776a5e514c4c4c4c4c4c4c4c4c4c4c4c4c4645403930271d12070a09070604010000000000000000020e1a25303b45515d676f7c8591979ea5a8a09e95908b8885838281807f7f7f7e7e7e7e7d7d808d9aa7afa396897c706356493d3023160a000000000000000000010911181e1d24292c2d2f31343638302f2c28211a110800000b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000714202d3a46525e697783909daaada197897d7063594f453b332d2c2d2d333b45505a66737f8c999d9c9c998a7d7063574a3d3024170a0000000000000000000000040b11161a1d1e202020202020202020202020202020202020202020202020202020202020202020202020202020201d1c1a16110a030000000000000000000000000000000000070f181e262e343c43474d53555d6064666d6f717375798592998c8078777673716e6c6663605c54524c45413a3128231d150c040000000000000000000013202c3946535f6c7986929facada093867a6d6053473a34343434343434343434343434343434343434343434343434343434343434342f2e2b262018100600000013202c3946535f6c7986929facada093867a6d6053473a34343434343434343434343434343434343434343434343434343434343434342f2e2b2620181006000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000a1723303d4a5663707d8996a3b0a6998c7f7366594c402f2924292c2f353b434b545d68707d8a959fabb7afa396897c706356493d3023201c161008000000000714202d3a46525e697885919eabac9f93877c6f665c54514b4f4b5153555d60696e79818f949083909da9b3a4988b7e7165584b484a48443e352c21160b00000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000000000000000005121f2b3744505b656c6d6c6c6d6f7278818e9ba095897c6f6356493c30231609000000000000000000000a1723303d4a5663707d8996a3b0b8b0aba99f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa9aaaaaaaaaa94877a6e6154473b2e2114080013202c3946535f6c7986929faca79a8d8074675a4d4134272e3a4754616d7a85929fa5afa59e948f857d746d676059514a423a322920170d04000000000000000713202d3946525d6876828f9ca9ac9f92867b6e61584e433b322c292424292c3139424d57616e7b86929faca89b8e8174655b5044372b1f12050000030f1b27323d474f5456585858585c6976828f9ca9aa9d9184776a5e585858585858585858585858585853514b42392e23180c00000000000000000000000000000009141f2935414b555f6a6f7c858f939c9fa4a79f9d989892908f8d8d8c8c8b8b8b8b8a8a8a8d929da9afa396897c706356493d3023160a0000000000000000000000060d1213181d2020232527292b2423201c1710080000000b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000815212e3b4854616e7b87959fabab9e9184786c6053463e33292120202227333e4956626f7c899191908f8e8d8073665a4d4033271a0d00000000000000000000000000060a0e10111313131313131313131313131313131313131313131313131313131313131313131313131313131310100d0a05000000000000000000000000000000000000081019212a30383f444e53575f62676d7175797c7e80828390979c928c848382807e7b7974706d66605d56524c433d342e271e160e0500000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d2727272727272727272727272727272727272727272727272727272727272722211f1b150e060000000013202c3946535f6c7986929facada093867a6d6053473a2d2727272727272727272727272727272727272727272727272727272727272722211f1b150e0600000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000a1724313d4a5764707d8a97a3b0a5988c7f7265594c3f2e23181c1f24293139424c56616c7683909da9b3afa396897c706356493d302316100b0500000000000815212e3b4854616e7b8797a1adaa9d9083776a5f544b4540424045474b51575f676d78828f9590959fabb0a3968a7d7063574a3d3d3c38332c231a100500000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000000000000000613202d394653606c777979797a7b7e838e939e989083786c605346392d20130600000000000000000000091623303c4956636f7c8996a2afb0a69f9c9393939393939393939393939393939393939393939393939c9ea6b0aea398877a6d6054473a2d2114070013202c3946535f6c7986929faca79a8d8074675a4d41342935404b5565727f8c97a2ada59e938e827a706b605d554f444039302820170e05000000000000000005111d2935414c5664717e8b96a1ada3998d80746a60564d443e39352f2f35383c434b545e6973808d99a3aca096897d706353493f33271b0f03000007131f2c38434f59606365656565656976828f9ca9aa9d9184776a656565656565656565656565656565605c544b4034281c10040000000000000000000000000000020d18242f3a434e585f6a6f7a82898f93999c9fa2aaa29f9d9b9a999998989898979797979a9da4aeafa396897c706356493d3023160a0000000000000000000000000101070d11131416181a1c1e171614100b05000000000b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000b1824313e4b5764717e8a97a7b1a79a8d8174665b5044382c2017131317202d3a4753606d79868584838281807e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a222b333c424a50585f62696e747a7e8185888b8d8f9095a0a49c9691908f8d8a8885817d79736d68605d564f454039302820160e05000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d201a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1515120f0a04000000000013202c3946535f6c7986929facada093867a6d6053473a2d201a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1515120f0a040000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000a1723303d4a5663707d8996abb5a6998d807366544a403428211e1a181f27303a44505a64707d8a97a2adafa396897c706356493d3023160a000000000000000916222f3c4955626f7c8895a9b3a79a8d817467584e4239352f34383a40454d555c666d7a85919d9fa7b1afa396897c706356493d302f2c28211a11080000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000000000000020a13202d394653606c7984868687888b90959a9590867c6f665b5044382b1f1206000000000000000000000815222f3b4855626e7b8895a9b3ab9f948f8686868686868686868686868686868686868686868686868f949eaaac9f928579675d5145392c2013060013202c3946535f6c7986929faca79a8d8074675a4d41342c3945515d677783909da9ac9e938e81786d686159514c433d342e271e160e05000000000000000000010d1924303a4653606d7984919ea7ab9f92877c6f685e564f47454141414045474e555c666e7b86929faba89e9184786c605346392d22170b0000000915222f3b4854606b6f72727272727276828f9ca9aa9d918477727272727272727272727272727272726d665c5145382c1f130600000000000000000000000000000007131d28313c464e585f686d757c82878b8f929897999a9b9c9d9d9d9e9e9e9e9f9f9f9fa3abacb5afa396897c706356493d3023160a00000000000000000000000000000001040607090b0d0f120a0a07040000000000000b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00010e1b2734414e5a6774818d9aa7b4aa978a7e7164544a3f33281a0e0606131f2c3845515c676d79787776757474716c6155493d3023170a0000000000000000000000000000000000000000000000000002050708080808080808060503000000000000000000000000000000000000000000000000000000000000000000000000000000000007111a232b343d454d545c606a6e757b81868a8e929897999c9da0a7aea8a19e9d9c9a9797928e8985807a736d686059514b423a322820170e050000000000000013202c3946535f6c7986929facada093867a6d6053473a2d20140d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d090806030000000000000013202c3946535f6c7986929facada093867a6d6053473a2d20140d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0908060300000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000915222f3c4855626f7b8899a3afa89b8f8275665c51443a322d2b2627272628323e4653606d7985929fabafa396897c706356493d3023160a000000000000000a1723303d4a5663707d8996a3b0a6998c7f7366594c402f2924292c2f353b434b545d68707d8a959fabb7afa396897c706356493d3023201c161008000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000000000001070c141c232b3844505b6673808c9993999292908d89837c6f6a5f544a3f33281c0f03000000000000000000000714212d3a4754606d7a8797a2ada99c8f82797979797979797979797979797979797979797979797979828f9ca9ab9e9184786b554b4135291d11040013202c3946535f6c7986929faca79a8d8074675a4d41342d3a4753606d7a86929faca49a8f81776d665e564f45413a3128231c150c04000000000000000000000008131f2c3845515c67727f8b95a0aba39991847a6e68615954514c4e4e4b5153575f676d78839098a2aca0968b7f72665b5044382b1b1106000000091623303c4956636f7d7f7f7f7f7f7f7f83919daaab9e91857f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f796d6053463a2d201307000000000000000000000000000000010c161f2a343c464e565e616b6f757b7f8285888a8c8d8f8f9090919191919292929292999ba3acafa396897c706356493d3023160a000000000000000000000000000000000000000000010305000000000000000000000b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0004111d2935414c566a7683909da9aea298887b6e6155483b2d2217080004101c2934404b555c606c6b6a6969686764615a5045392d211408000000000000000000000000000000000000000000000003090e12141515151515151513120f0b060000000000000000000000000000000000000000000000000000000000000000000000000000050f19232b353d464e575f666d727c81878e92999b9fa2aaa6a8aaa9a8a7a7a8a9aaa9a6a9a29e9a97928d85807a706b605c544c443a322920170c0300000000000013202c3946535f6c7986929facada093867a6d6053473a2d20140701010101010101010101010101010101010101010101010101010101000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d201407010101010101010101010101010101010101010101010101010101010000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000714202d3a4753606d7a86929facab9e9285796d60564c443d3a373134333332323845515c6675828f9ca8afa396897c706356493d3023160a000000000000000a1724313d4a5764707d8a97a3b0a5988c7f7265594c3f2e23181c1f24293139424c56616c7683909da9b3afa396897c706356493d302316100b0500000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000000030b12181e262e34383f4a54616e7b87939f92878583817d786f6a5f584e42382d2218120b030000000000000000000613202c3945515d677885929eabaa9d9184776c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c667784919eaaa99c8f8376695c50432f24180d010013202c3946535f6c7986929faca79a8d8074675a4d41342f3c4855626f7b8899a3ac9f93877b6e655c544c443d352f281f18120b0300000000000000000000000004101c2834404b55606d78839099a3aba09690837a706b64605d555b5b555d60636a6e79818e959faaa49a9184796d60544a3f33281c0a000000000d1a2734404d5a6773808b8b8b8b8b8b8b9195a0acada197918b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b877a6d6054473a2d21140700000000000000000000000000000000040d18222a343c444c52596063696e7276797b7d7f81828383848484848585858585868b909ba7afa396897c706356493d3023160a000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000713202c3945525d687885929fabac9f9285796c605346392d20130600000c18232f39434b51535f5e5e5d5c5b5a575550483e33281d110500000000000000000000000000000000000000000000050d141a1e2121212121212121201f1b17110a020000000000000000000000000000000000000000000000000000000000000000000000030d17212b353d474f5860696e787f868e93999fa3ababaca8a9a29e9d9b9b9a9b9c9d9fa3aaa9aba9a19e98928c857d736d665d564c443a32291e150a00000000000013202c3946535f6c7986929facada093867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000006131f2c3945515d677783909dabada1978a7e71685e564f484742424140403f3f3f404b546673808c99a6afa396897c706356493d3023160a000000000000000a1723303d4a5663707d8996abb5a6998d807366544a403428211e1a181f27303a44505a64707d8a97a2adafa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000000050d151d242930383f44464c535e6976828f9b8f82787774706c655f584e443f382f28231c150c03000000000000000004111d2935414c55697683909ca9ab9f928578695f606060606060606060606060606060606060606d7986929faca79a8d8174675a4e4134271b07000013202c3946535f6c7986929faca79a8d8074675a4d4134303c4956636f7c8996abaa9e918477695e534a423a3229241e160d070000000000000000000000000000000c18232e3944515c666f7c87929fa4a8a09590847d76716d6769676869676d70757b838e939ea7a59f93887d70665c5142382d22170b000000000d1a2734404d5a6773808d9898989898989da0a7b1b3a9a19e98989898989898989898989898989893877a6d6054473a2d21140700000000000000000000000000000000050e171e252a323a41464f54575e6165666d6f717374757676777777787878787879797e8b98a4afa396897c706356493d3023160a000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000714212d3a4754606d7a8797a2adaa9d918477655b5044372b1f1205000007121d273139404547525251504f4e4d4b49453e362c22170c00000000000000000000000000000000000000000000050f171f252a2d2e2e2e2e2e2e2e2d2b27221b140b02000000000000000000000000000000000000000000000000000000000000000000010b151f29333d474f59606a6f7b838c92999fa4abadaaa29f9b979792908f8e8e8e8f909298989d9fa7acaaa29f97918880786d685e564c443a30261c1106000000000013202c3946535f6c7986929facada093867a6d6053473a2d20140c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c07060401000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d20140c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c070604010000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000004101d2935404b5566737f8c99a3aea99e91847a6d68615955534d4f4e4d4c4c4c4b4b4c5865727f8b98a5afa396897c706356493d3023160a000000000000000915222f3c4855626f7b8899a3afa89b8f8275665c51443a322d2b2627272628323e4653606d7985929fabafa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000000050e161f272f353e424a5053565e6164717e8a9792877b6e696764615e56535049413d342e271e150c0300000000000000010d19242f414d5a6774808d9aabaea298887b6e61555353535353535353535353535353535355626f7c8899a3afa9988b7e7265584b3f3225180c000013202c3946535f6c7986929faca79a8d8074675a4d41342f3c4955626f7c8895a7ab9e9184786a5f544a423930281f160d040000000000000000000000000000000007121d2834404a54606a727f8c929ca4a7a096918a827d7a7775747475767a7d818790959ea5a59e938d80736b60544b402f261c1106000000000d1a2734404d5a6773808d9a9f9f9f9f9fa9aab0b8bab2acaa9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f93877a6d6054473a2d211407000000000000000000000000000000020c1720293036393a3e3f44484d5354545c606264666768696a6a6a6b6b6b6b6c6c6c717e8b98a4afa396897c706356493d3023160a000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000815222f3b4855626e7b8895a9b3a99c8f82766953493f33271b0f030000010b151f272f34383a464544434241413e3d39332c241a1006000000000000000000000000000000000000000000030c17212931363a3b3b3b3b3b3b3b3937332d261d140a00000000000000000000000000000000000000000000000000000000000000000007121d27313b454f59606b707c8590959fa3abaea9a19e98928e8a87858382818181828386888b90959b9fa4aca9a19a938d837a6d685e564c42382e23170d040000000013202c3946535f6c7986929facada093867a6d6053473a2d2019191919191919191919191919191919191919191919191919191413110d070100000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d2019191919191919191919191919191919191919191919191919191413110d0701000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000c18242f3b4854616e7b86929fa8ada19690827a706b65615f575c5a5a5959585858585865717e8b98a4afa396897c706356493d3023160a000000000000000714202d3a4753606d7a86929facab9e9285796d60564c443d3a373134333332323845515c6675828f9ca8afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000040d162028313940454f545c6064686e7174798592998c80777674716e6863605b534e44403930271e150c0300000000000000081724313e4a5764717d8a99a3afaa988b7e7165574d42464646464646464646464646424d5765727f8c98abada297887b6f6255483c2f221509000013202c3946535f6c7986929faca79a8d8074675a4d41342e3a4754616d7a8795a0aca196887c6f665c544b423a31281f160d03000000000000000000000000000000000c18232e39424e58626d73808c929ea1a8a19e948f8a8683828181828386898e93999fa7a39f938f81786d60594f42392e1d140a00000000000d1a2734404d5a6773808d9393939393939c9fa6b0b2a8a09393939393939393939393939393939393877a6d6054473a2d21140700000000000000000000000000000008131e29323a4146474b4c4d4e4f51524a50535557595a5c5c5d5d5e5e5e5e5f5f5f65717e8b98a4afa396897c706356493d3023160a000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00091623303c4956636f7c8996a2afa89b8e8175685b4e422d22170b00000000030d151d23292c2d3938373636353431302d28221a1208000000000000000000000000000000000000000000000a151e29333b42464848484848484846443f382f261b110600000000000000000000000000000000000000000000000000000000000000000c18242f39434d57606b707d8692979fa7aeaba39f96918b86817e7b7876757474757677797c7f83888e939a9fa7aca49f9590837a6d685e544a3f34281f160c0100000013202c3946535f6c7986929facada093867a6d6053473a2d26262626262626262626262626262626262626262626262626262621201d18130c04000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d26262626262626262626262626262626262626262626262626262621201d18130c040000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000714202d3a46525e6974808d96a1a9a89f9590847d77726e696a6867666665656565646465717e8b98a4afa396897c706356493d3023160a0000000000000006131f2c3945515d677783909dabada1978a7e71685e564f484742424140403f3f3f404b546673808c99a6afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000010c161f28323a434b515961666d71767a7e80828f979c928c8483807d7a76706c656058514a423930271e150a000000000000000714212e3a4754616d7a86929faca89b8e8275695e53463d313939393939393939303946525e6976828f9ca9ab9e9285786c605346392d201306000013202c3946535f6c7986929faca79a8d8074675a4d41342d3946525e687784919da8a89c9082786d665c544b433a31281f150b0100000000000000000000000000000007121c27303d46515b646e73808a92979fa3a69f9c9992908f8e8e8f9092989b9fa4a69f99928c81786d665c50473d30271d0b0200000000000d1a2734404d5a677380868686868686868f949faaaca0968986868686868686868686868686868686867a6d6054473a2d2114070000000000000000000000000000010d1925303a444c525457595a5b5c5d5e5b5953484a4c4e4f5050515151515252525965727f8c98a5afa396897c706356493d3023160a000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000a1724303d4a5763707d8a96a3b0a79a8d8174675a4e4134271b060000000000030b12181c1f202c2b2b2a2928272423211d1710080000000000000000000000000000000000000000000006111c26303b454d535454545454545453504941382d22170b0000000000000000000000000000000000000000000000000000000000000004101d2935404b555e69707d879298a2a9b1a8a099928c847f7a75716e696a6868676869666d6f72767b818790959da4afa79f9590837a6d665c50443e31281d130700000013202c3946535f6c7986929facada093867a6d6053473a333333333333333333333333333333333333333333333333333333332d2c29241d160d040000000000000013202c3946535f6c7986929facada093867a6d6053473a333333333333333333333333333333333333333333333333333333332d2c29241d160d0400000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000005121e2a36424d57606d79849197a1a9a79f969189837f7b78767574737372727271717171717e8b98a4afa396897c706356493d3023160a0000000000000004101d2935404b5566737f8c99a3aea99e91847a6d68615955534d4f4e4d4c4c4c4b4b4c5865727f8b98a5afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000008131e28313a444c555d606b70787e82868a8d8f949fa49c9691908d8a87827d786f6a605c544a423930261c11060000000000000713202d3946525d6876828f9ca9ac9f92867b6e61584e433b322c292424292c3139424d57616e7b86929faca89b8e8174655b5044372b1f1205000013202c3946535f6c7986929faca79a8d8074675a4d41342935414c5666727f8c96a1ab9f948e81786d665d554c433a31271d1207000000000000000000000000000000000b151e2b343f49525c646e737e858e92999ea1a8a39f9d9c9a9b9c9d9fa3a9a29f9b948f877f776d665c544a3f352c1e150b0000000000000d1926333f4c58646e7379797979797979828f9ca9aa9d9184797979797979797979797979797979797976685d5245392c201307000000000000000000000000000005111d2a36414c565e6164656768696a6b68655d534840414243434444444545454d596673808c99a6afa295897c6f6256493c2f231609000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000a1724313d4a5764707d8a97a3b0a79a8d8074675a4d4134271a0e01000000000001070c1013141f1f1e1d1c1b1a181714110c0600000000000000000000000000000000000000000000000c17232e38424d575e61616161616161605b53493f33271b0f03000000000000000000000000000000000000000000000000000000000005101a232c3945515d676e7b859299a2aab1a79f9691878079726d6764615e575c5b5b5b545c6062656a6e747c838d929fa3aba7a0959082786d60594f433a2f24180d02000013202c3946535f6c7986929facada093867a6d6053473f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3a39352f281f160c0100000000000013202c3946535f6c7986929facada093867a6d6053473f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3a39352f281f160c01000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000020e1a25303b45515d676f7c8591979ea5a8a09e95908b8885838281807f7f7f7e7e7e7e7d7d808d9aa7afa396897c706356493d3023160a00000000000000000c18242f3b4854616e7b86929fa8ada19690827a706b65615f575c5a5a5959585858585865717e8b98a4afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000050e19242f3a434c565e676d747d848a8f93999a9c9fa6aca8a09e9c9a9a938f8a837c736d665c544a42382e23170b02000000000005111d2935414c5664717e8b96a1ada3998d80746a60564d443e39352f2f35383c434b545e6973808d99a3aca096897d706353493f33271b0f03000013202c3946535f6c7986929faca79a8d8074675a4d413425303a4754606d79849199a4a69e938e81786d675d564c43392f24180d03000000000000000000000000000000030c19222d37404a525c636c717a81868d9196989b9c9e9f9f9f9f9e9d9b9997928e89827c736c655c544b42382e231a0c030000000000000b17232f3b47525c64676c6c6c6c6c6c76828f9ca9aa9d9184776c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5d564c4135291d110400000000000000000000000000000713202d3946525e686d71727374767778756f65594d3d323536373737383835404b556774818e9aa7b2a995887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000b1724313e4a5764717d8a97a4b0a69a8d8073675a4d4034271a0d010000000000000000040607131211100f0e0e0b0a080500000000000000000000000000000000000000000000000003101c28343f4a545e696e6e6e6e6e6e6e6c655b5044372b1f120500000000000000000000000000000000000000000000000000000000000b16212b37434e58606d79839097a1abb1a79f9590847c736d67605d5554524d4f4e4e4e4a505355585f626a6f78808a9299a3aba79f948d80736b61554b4035291f1409000013202c3946535f6c7986929facada093867a6d60534c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4745413a31281d130700000000000013202c3946535f6c7986929facada093867a6d60534c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4745413a31281d1307000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000009141f2935414b555f6a6f7c858f939c9fa4a79f9d989892908f8d8d8c8c8b8b8b8b8a8a8a8d929da9afa396897c706356493d3023160a00000000000000000714202d3a46525e6974808d96a1a9a89f9590847d77726e696a6867666665656565646465717e8b98a4afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000020d17202935414c555e686d79818a91969c9fa4aba5aba49f9fa4aca5aca49f9c95908780786d665c544a3f34281d140a0000000000010d1924303a4653606d7984919ea7ab9f92877c6f685e564f47454141414045474e555c666e7b86929faba89e9184786c605346392d22170b00000013202c3946535f6c7986929faca79a8d8074675a4d4134272c3945515d67707d87939fa3a59e938f82796d685d554b4035291f150b0100000000000000000000000000000007101b252e38404a525a61686d747b8084888b8e90919292929291908e8c8985817c766f6a605b534b423930261c11080000000000000007131f2b36404a52585a60606060606976828f9ca9aa9d9184776a6060606060606060606060606060605f524c443a2f24190d0100000000000000000000000000000714212e3a4754616d7a7e7f8081828485817568584e43372e2c2823282c2f3945515d677783909daaada196877a6d6054473a2d211407000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000a1724313d4a5764707d8a97a3b0a79a8d8074675a4d4134271a0e010000000000000105090b0b121111100f0e0d0908060300000000000000000000000000000000000000000000000006121f2c3844505c66767b7b7b7b7b7b7b776c605346392d2013060000000000000000000000000000000000000000000000000000000004101c27333a47535f6a74808d95a0a9b2a89f9590837a6f6a605c55514b484642424141423f4446494e53585f666d737e879299a4afa69f93887d70675d51453b30251a0e020013202c3946535f6c7986929facada093867a6d605959595959595959595959595959595959595959595959595959595959595954514b433a2f24180d01000000000013202c3946535f6c7986929facada093867a6d605959595959595959595959595959595959595959595959595959595959595954514b433a2f24180d010000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000020d18242f3a434e585f6a6f7a82898f93999c9fa2aaa29f9d9b9a999998989898979797979a9da4aeafa396897c706356493d3023160a000000000000000005121e2a36424d57606d79849197a1a9a79f969189837f7b78767574737372727271717171717e8b98a4afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000008141e29323b45515d676d7a838e939ea0a8a7a09d99959993939a96999ea0a8a7a099928c81786d665c50443d2f261c1106000000000008131f2c3845515c67727f8b95a0aba39991847a6e68615954514c4e4e4b5153575f676d78839098a2aca0968b7f72665b5044382b1b110600000013202c3946535f6c7986929faca79a8d8074675a4d4134272935414b55606b727f8c919fa3a59e948f837a6d675d51453e31271d12070000000000000000000000000000000009131c262e38404850565e61696e73787c7e818384858686858583817f7c79746f6a625f585049413930271e150a0000000000000000020e19242e3840474c4d535353535c6976828f9ca9aa9d9184776a5e53535353535353535353535353535345413a32281e13080000000000000000000000000000000815212e3b4854616e7b878c8d8e8f909184786a6054473f3a38342e34383a404b55606d7a86929facab9e918578675d5145392c201306000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000a1724303d4a5763707d8a96a3b0a79a8d8074675a4d4134271a0e010000000000060c111517181f1e1d1c1b1a191615130f0a04000000000000000000000000000000000000000000000713202d3a4653606d7986878787878786796d6053473a2d201407000000000000000000000000000000000000000000000000000000000714202c38444f59626e7c87929fa7b1aaa1969083796d685f58514b45413b3a363035342e34383a3c43474e545c606c717e87939fa5afa49a9185796d60574d42362a1e11050013202c3946535f6c7986929facada093867a6d6666666666666666666666666666666666666666666666666666666666666666605d554b4135291d1104000000000013202c3946535f6c7986929facada093867a6d6666666666666666666666666666666666666666666666666666666666666666605d554b4135291d11040000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000007131d28313c464e585f686d757c82878b8f929897999a9b9c9d9d9d9e9e9e9e9f9f9f9fa3abacb5afa396897c706356493d3023160a0000000000000000020e1a25303b45515d676f7c8591979ea5a8a09e95908b8885838281807f7f7f7e7e7e7e7d7d808d9aa7afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000010d1925303b44515b606d798390959ea5a9a19e95908c8987868687898c91969ea1a9a39f938f81786d60584e42382d22170b000000000004101c2834404b55606d78839099a3aba09690837a706b64605d555b5b555d60636a6e79818e959faaa49a9184796d60544a3f33281c0a0000000013202c3946535f6c7986929faca79a8d8074675a4d413427242f3a434f59626d727f8b9299a2a69f959083796d605a5043392f24180c000000000000000000000000000000000915202b353f474e524c52575e61666a6f7274767878797978787675726f6d66626058534e4846423c332a1f140900000000000000000008121c262e363b3f404646464f5c6976828f9ca9aa9d9184776a5e51464646464646464646464646464639352f2820160c010000000000000000000000000000000714212d3a46535e697884919a9b9c9d96897c6f625a504a464440434044464b515c67717e8b98a3aeaa9b8f827568554b4135291d1104000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000a1623303d495663707c8996a3afa79a8e8174675b4e4134281b0700000000000911181d2124252c2b2a2928272622211f1b150e060000000000000000000000000000000000000000000713202d3a4653606d79869394949493867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000916232f3c4855616b76828f99a3afaea39891847a6d675e564e454039352f2d2a25282823282c2d31373c424a505a616c727f8b939ea8aca1978c8073695e52463a2d2014070013202c3946535f6c7986929facada09386797272727272727272727272727272727272727272727272727272727272727272726d675d5145392c201306000000000013202c3946535f6c7986929facada09386797272727272727272727272727272727272727272727272727272727272727272726d675d5145392c2013060000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000010c161f2a343c464e565e616b6f757b7f8285888a8c8d8f8f9090919191919292929292999ba3acafa396897c706356493d3023160a00000000000000000009141f2935414b555f6a6f7c858f939c9fa4a79f9d989892908f8d8d8c8c8b8b8b8b8a8a8a8d929da9afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000005111e2a36414c56626d75828f959fa7a8a097928a837f7c7a79797a7c7f848a9297a0a8a59e938d80736a60544a3f33281c0f0300000000000c18232e3944515c666f7c87929fa4a8a09590847d76716d6769676869676d70757b838e939ea7a59f93887d70665c5142382d22170b0000000013202c3946535f6c7986929faca79a8d8074675a4d4134271d28313d47515b636d727e879298a2a79f958e81756c61554b4035291d10040000000000000000000000000000010e1a26313d4751595e5f6060605e585f626568696b6c6c6c6c6b6a686663605c546060606055534d453c31261a0e020000000000000000010a141c242b2f33343939434f5c6976828f9ca9aa9d9184776a5e5144393939393939393939393939392c29241e160d040000000000000000000000000000000005121e2a36424d576774818e9aa6a9a89b8e81756c605c5453514a504a5153555d606d7983919daaaea2988b7e7165584b3e2f24180d01000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000815222f3b4855626e7b8895a9b3a89b8f8275685c4f422e23180c0000000009121b22292e3132393837363534332f2e2b262018100600000000000000000000000000000000000000000713202d3a4653606d798693a0a1a093867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000005121e2a36424d5763707d89949fabb2a89f92867c6f685e554c443c342e2924201e1a1b1b171c1f20262b30383f44505a626d75818e96a0aca79f92867b6e6154473b2e2114080013202c3946535f6c7986929facb2a6998c7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f796d6054473a2d211407000000000013202c3946535f6c7986929facb2a6998c7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f796d6054473a2d2114070000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000040d18222a343c444c52596063696e7276797b7d7f81828383848484848585858585868b909ba7afa396897c706356493d3023160a000000000000000000020d18242f3a434e585f6a6f7a82898f93999c9fa2aaa29f9d9b9a999998989898979797979a9da4aeafa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000714202d3946525e68727f8b949ea7a9a09591857e77726f6d686c6d6f72787e859196a0a9a59f93877c6f665b5044382b1f1308000000000007121d2834404a54606a727f8c929ca4a7a096918a827d7a7775747475767a7d818790959ea5a59e938d80736b60544b402f261c11060000000013202c3946535f6c7986929faca79a8d8074675a4d413427161f2c353f49515b636c717d869299a3a79e938a7e71675d5145382c1f1307000000000000000000000000000004111d2a36424e59636a6c6c6c6c6b636059585b5d5e5f5f5f5f5e5d5b59575f626a6c6c6c6c6c5f574d42372b1e1205000000000000000000020a12191f2326272d36434f5c6976828f9ca9aa9d9184776a5e5144372d2d2d2d2d2d2d2d2d2d2d2d201d19130c040000000000000000000000000000000000020e1a25313c4855626f7c88949faaaa9e938a7e726d6662605c545d545c6062676d75808d95a0aca99f92867a6d6154473a2e21140700000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000a1723303d4a5663707d8996a3b0a396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000714212e3a4754616d7a8797a2ada99c90837669544a4034281c1004000006111b242d343a3d3e454444434241403c3b37322a22180e04000000000000000000000000000000000000000713202d3a4653606d798693a0aca093867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000714212d3a46535e6975828f9ca6b0aca0968c7f736a60564c433a3228231d1814120e09060c1012131a1e262e343e48515b606d7984919ea09d95908a807366594d4033261a0d0013202c3946535f6c7986929facb9a89c918c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c877b6e6154483b2e211508000000000013202c3946535f6c7986929facb9a89c918c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c877b6e6154483b2e2115080000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000050e171e252a323a41464f54575e6165666d6f717374757676777777787878787879797e8b98a4afa396897c706356493d3023160a0000000000000000000007131d28313c464e585f686d757c82878b8f929897999a9b9c9d9d9d9e9e9e9e9f9f9f9fa3abacb5afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000005111d2935414c56616e7a85929fa6ada19791837b716c6662605d606163656c717b849197a1ada4999184786c6053463a3025190d0100000000000c18232e39424e58626d73808c929ea1a8a19e948f8a8683828181828386898e93999fa7a39f938f81786d60594f42392e1d140a0000000000131f2c3946525f6c7985929faca79a8e8174675b4e4134281b1a232d373f49515a626b707d87929fa6a59e9184796d6053473a2f24180d010000000000000000000000000006121f2c3845525e6a757979797978706b605c544d5152535352524b515a61696e777979797976695f53463a2d2114070000000000000000000001080e1317191c2936434f5c6976828f9ca9aa9d9184776a5e5144372b202020202020202020201413110d0805030000000000000000000000000000000000000915212e3b47535f6a76828f98a2aea59f92877f78726f6d666a696a666d6f7379818d929da7aca2978d8074685d5246392d20130700000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000a1723303d4a5663707d8996a3aca396897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000713202d3946525d687885929fabaa9e918477665c5144382c1f120600010c18222d363f454a4b5251504f4e4d4c4947433c342a20150a000000000000000000000000000000000000000713202d3a4653606d798693a0a7a093867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000815212e3b4854616e7b87939facb2a89d9184796d60584e443a31292018120d0705020000000306090c151c2328363f45515d676f7d899395908a837e776c605346392d2013060013202c3946535f6c7986929facb9ada39c999999999999999999999999999999999999999999999999999999999999999994877b6e6154483b2e211508000000000013202c3946535f6c7986929facb9ada39c999999999999999999999999999999999999999999999999999999999999999994877b6e6154483b2e2115080000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000020c1720293036393a3e3f44484d5354545c606264666768696a6a6a6b6b6b6b6c6c6c717e8b98a4afa396897c706356493d3023160a00000000000000000000010c161f2a343c464e565e616b6f757b7f8285888a8c8d8f8f9090919191919292929292999ba3acafa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000713202d3946525e6874808d98a2aea69e92857b6e69615a5654525354535b60696e7b85929ea8aba0958a7d7063564c41362a1d1105000000000007121c27303d46515b646e73808a92979fa3a69f9c9992908f8e8e8f9092989b9fa4a69f99928c81786d665c50473d30271d0b020000000000121f2c3945525f6c7885929faba89b8e8275685b4f42302519111b252e373f485059606b717e8b949faba1968b7e7165554b4135291d1104000000000000000000000000000613202c3946535f6c7987868686847d736d665f5751464146454d555c606c717b83868686867b6e6155483b2e22150800000000000000000000000002070b101c2936434f5c6976828f9ca9aa9d9184776a5e5144372b1e13131313130b101316171e1a1613120f0b060300000000000000000000000000000006121f2b37434e58626f7c86929fa4aca399928b837f7b797777767777797c80858e939da4aea49a92857a6d61564c4135291d110500000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000a1723303d4a5663707d89969f9f9f96897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0005111d2935414c566a7683909da9ac9f9286796d6053463a2d2013070005111d29343f485056585f5e5d5c5b5a5955534e463c32261b0f030000000000000000000000000000000000000713202d3a4653606d7986939a9a9a93867a6d6053473a2d201407000000000000000000000000000000000000000000000000000005121e2a36424d576673808d99a4afaca0968a7e71665c51463c32281f170e0700000000000000000000030a1117242935414b55606b75818e8a837d78706c655b5044372b1f12050013202c3946535f6c7986929facb9b5ada8a6a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a194877b6e6154483b2e211508000000000013202c3946535f6c7986929facb9b5ada8a6a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a194877b6e6154483b2e2115080000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000008131e29323a4146474b4c4d4e4f51524a50535557595a5c5c5d5d5e5e5e5e5f5f5f65717e8b98a4afa396897c706356493d3023160a0000000000000000000000040d18222a343c444c52596063696e7276797b7d7f81828383848484848585858585868b909ba7afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000714212e3a4754616d7a86929faaab9f948a7d70695e575049474546474950565e69717e8b96a0aca79c8f8275685e5246392d2013070000000000000b151e2b343f49525c646e737e858e92999ea1a8a39f9d9c9a9b9c9d9fa3a9a29f9b948f877f776d665c544a3f352c1e150b000000000000121e2b3845515e6b7884919eaba99c8f827669564c41362a1e11131c252e363e474f59626d76828f9caaa99c908376675d5145392c20130600000000000000000000000000000b1825323e4b5865717e8b9296918780786e69625b524c4550575f676d747e869095948d8074695f53463a2d211407000000000000000000000000000003101c2936434f5c6976828f9ca9aa9d9184776a5e5144372b1e110600080f161c2022232b2723201f1b17120f0b0600000000000000000000000000030f1b26323c47535f6a717e8b939aa2aaa39f95918c8886848483838485898c92979ea5aaa39f93887d70685e52443a3024190d0100000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000a1723303d4a5663707d899393939393897d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00010d192430414e5b6774818e9aa7afa399887b6f6255483c2e23180c060615212e3a45505a62656c6b6a69686766625f584e43372b1f13060000000000000000040607080808080808080813202d3a4653606d79868d8d8d8d8d86796d6053473a2d20140808080808080808070604000000000000000000000000000000000714212d3a46535f697784919eabb5ab9d9184786c60544b40342b20160d0500000000000000000000000000061218242f3a434f59616e7b837e78716c65605b53493f33271b0f030013202c3946535f6c7986929facb9afa7a2a09f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f94877b6e6154483b2e211508000000000013202c3946535f6c7986929facb9afa7a2a09f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f94877b6e6154483b2e2115080000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000010d1925303a444c525457595a5b5c5d5e5b5953484a4c4e4f5050515151515252525965727f8c98a5afa396897c706356493d3023160a0000000000000000000000050e171e252a323a41464f54575e6165666d6f717374757676777777787878787879797e8b98a4afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000005121e2a36424d5765727f8c98a2aea99c8f82766c61574d453e3a39393a3f444d57616c7784919eaaa99f93867a6d6154473a2e211407000000000000030c19222d37404a525c636c717a81868d9196989b9c9e9f9f9f9f9e9d9b9997928e89827c736c655c544b42382e231a0c03000000000000101d2a3643505d697683909ca9ab9e918478685e5246392d20140a131c242d353d47505a63707d8998a3ac9f92867a6d6054473a2d21140700000000000000000000000000000b1724313d4a56626d73808c9399938d837b726d615e56515a61696e79818a9298958f82786d60574d42372b1e1205000000000000000000000000000003101c2936434f5c6976828f9ca9aa9d9184776a5e5144372b1e070008111921272c2f3038342f2d2b27221f1c17110a020000000000000000000000000a15202b37434e58616c727f8892989fa3a7a09d99999291909090919298999ea2a9a69f98928b7f726c61564c4132281e13080000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000a1723303d4a5663707d868686868686867d7063564a3d3023170a00091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000081825313e4b5864717e8b97a7b1ab988b7e7165554b4034281d1413131624313d4a56626c71787777767574736f6a5f53473b2e211508000000000001070c101314151515151515151515202d394653606c7880808080808080786d6053463a2d201515151515151515151413100c0701000000000000000000000000000815222e3b4855616e7b8896a0acafa3998c7f72665b5042392e22190e0500000000000000000000000000000007131d28313d46535f696e77716c65605b53504941382d22170b000013202c3946535f6c7986929facb9a79d95939393939393939393939393939393939393939393939393939393939393939393877b6e6154483b2e211508000000000013202c3946535f6c7986929facb9a79d95939393939393939393939393939393939393939393939393939393939393939393877b6e6154483b2e2115080000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000005111d2a36414c565e6164656768696a6b68655d534840414243434444444545454d596673808c99a6afa295897c6f6256493c2f23160900000000000000000000020c1720293036393a3e3f44484d5354545c606264666768696a6a6a6b6b6b6b6c6c6c717e8b98a4afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000714202d3a46525e697783909daaada197897d7063594f453b332d2c2d2d333b45505a66737f8c999d9c9c998a7d7063574a3d3024170a0000000000000007101b252e38404a525a61686d747b8084888b8e90919292929291908e8c8985817c766f6a605b534b423930261c1108000000000000000f1b2835424e5b6875818e9ba8ada196877a6e6154473b30251b1413121b232b353f4653606d7986929faca399897c6f6256493c2f23160900000000000000000000000000000915212e3a45505a636e74818e939f9590867e756d68605c606c717b838e939f969083796d665c50453c31261a0e02000000000000000000000000000003101c2936434f5c6976828f9ca9aa9d9184776a5e51442f24180d050f19232b33383c3d45403c3937332d2b28221c140b050000000000000000000000040f1a26313c46505a636d727e868e92999da0a8aba39f9e9d9c9d9e9fa2aaaaa29f9b948f867e726d62594f443a3020160c020000000000000000000000000000000000000000000000000000000000000000000000010b1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000916232f3c4855616b7079797979797979706b6155483c2f23160900091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000815212e3b4854616e7b87959faba89b8e8175675c5145392e2521201f202935404b5565717e8584838281807f7c6f6255493c2f22160900000000030b12181d1f20212121212121212121212b3844505b666c747474747474746d665c5044382c21212121212121212121201f1d18120b030000000000000000000000000c1825323f4b5865727e8b98a8b2ac9f92867a6e61544a3f30271d100700000000000000000000000000000000010c161f2a36424d575f616a64605b535049443f382f261b1106000013202c3946535f6c7986929facb9a2958b868686868686868686868686868686868686868686868686868686868686868686867b6e6154483b2e211508000000000013202c3946535f6c7986929facb9a2958b868686868686868686868686868686868686868686868686868686868686868686867b6e6154483b2e2115080000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000713202d3946525e686d71727374767778756f65594d3d323536373737383835404b556774818e9aa7b2a995887b6e6255483b2f2215080000000000000000000008131e29323a4146474b4c4d4e4f51524a50535557595a5c5c5d5d5e5e5e5e5f5f5f65717e8b98a4afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000815212e3b4854616e7b87959fabab9e9184786c6053463e33292120202227333e4956626f7c899191908f8e8d8073665a4d4033271a0d000000000000000009131c262e38404850565e61696e73787c7e818384858686858583817f7c79746f6a625f585049413930271e150a00000000000000000c1926323f4c5965727f8c98a9b2a8978a7d7064564d42362b2621201f1f20232c3845515c667784919eaaab978a7d7164574a3e3124170b000000000000000000000000000005111d29343f48525b606d78818f959f98928b827a706b676d747e8690959d9891847b6e675d544a3f332a1f1409000000000000000000000000000000020f1c2935424f5c6875828f9ba8ab9e9184786b554b4035291d110b16212b353d44484a514d4946443f3938332d261d170e0500000000000000000000000a15202a343e48515b636c717b81878c919597999c9d9e9e9f9f9f9e9d9b9998928e89827b716c625b51473e32281e0e04000000000000000000000000000000000000000000000000000000000000000105090b0b0d0d1825313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000714202c38444f5961636c6c6c6c6c6c6c6361594f44382c20140700091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000714202d3a46525e697783909daaab9f9285796d60544b4036312d2c2c2d323a45515d6775818e91908f8e8d897c6f6356493c30231609000000030d151d24292c2d2e2e2e2e2e2e2e2e2e2e2e333f4a545b6067676767676767605c544a3f342e2e2e2e2e2e2e2e2e2e2e2d2c29241d150d030000000000000000000004101d2935404b556875828f9ba8b5a99c908376685e5242382d1e150b000000000000000000000000000000000000040d1a26313b454d53555d57535049443f38332d261d140a00000013202c3946535f6c7986929facada093867979797979797979797979797979797979797979797979797979797979797979797976695e52463a2d201407000000000013202c3946535f6c7986929facada093867979797979797979797979797979797979797979797979797979797979797979797976695e52463a2d2014070000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000714212e3a4754616d7a7e7f8081828485817568584e43372e2c2823282c2f3945515d677783909daaada196877a6d6054473a2d211407000000000000000000010d1925303a444c525457595a5b5c5d5e5b5953484a4c4e4f5050515151515252525965727f8c98a5afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000b1824313e4b5764717e8a97a7b1a79a8d8174665b5044382c2017131317202d3a4753606d79868584838281807e7164574b3e3124180b0000000000000000010a141c262e363e444c52575e61666a6f7274767878797978787675726f6d66626058534e443f382f271e150c030000000000000000091623303c4956636f7c8997a2ada89b8f8275695e52463f37312e2d2c2c2d2e343b45515d677885919eaba4978b7e7164584b3e3125180b0000000000000000000000000000010c18222d364044505c666d79829095a09f938f857d746f79818a9298a09992867c6f695e554b42382e21180e03000000000000000000000000000000020f1b2835424e5b6875818e9ba8ab9f928578675d5145392c2017161c27333d474f54565e5a5653504946443f382f2920170d0200000000000000000000030e18222d363f49515a61696e747b8084888b8d8f90919292929291908e8c8985817c766e69615a51493f352c20160c00000000000000000000000000000000000000000000000000000000000000060c111517181a1a1a25313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e0004101c27333d474f55566060606060606056554f473d33271c100400091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000005121e2a36424d5765727f8c98a2aea2988b7e71665c5146423b3a39383a3d444d57606d7a85929e9d9c9b9285796d6053463a2d2013070000010b151f272f35383a3b3b3b3b3b3b3b3b3b3b3b3b3b424a50535a5a5a5a5a5a5a53504a423b3b3b3b3b3b3b3b3b3b3b3b3b3a39352f271f150b0100000000000000000006131f2c3845515d677884919eabb6ac998c7f7266564c412f261c0c030000000000000000000000000000000000000009141f29333b424648504a46443f38332d27221b140b0200000013202c3946535f6c7986929facada093867a6d6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5e574d42362a1e1205000000000013202c3946535f6c7986929facada093867a6d6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5e574d42362a1e12050000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000815212e3b4854616e7b878c8d8e8f909184786a6054473f3a38342e34383a404b55606d7a86929facab9e918578675d5145392c20130600000000000000000005111d2a36414c565e6164656768696a6b68655d534840414243434444444545454d596673808c99a6afa295897c6f6256493c2f231609000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000010e1b2734414e5a6774818d9aa7b4aa978a7e7164544a3f33281a0e0606131f2c3845515c676d79787776757474716c6155493d3023170a000000000000000000020a131c242c323a41464d5254585f626568696b6c6c6c6c6b6a686663605c54544e47433c332d261d150c030000000000000000000713202d3a4653606d7985929fabac9f92877b6e615a5147433c3b3a38383a3b40444d56606d7a86939facaa978a7d7164574a3e3124170b00000000000000000000000000000006111b2428343f4a545d676d7a839196a19e979188807b838e929fa29f93877d706a5f574d433a30261c0f0600000000000000000000000000000000010d1a2734404d5a6773808d9aa6ac9f93867a6d6053473a2e262323262c38444f5960636b6762605b5353504a423b33291f1409000000000000000000000006101b242e373f4850575e61696e73777b7e80828484858686858583827f7d79756f6b625f5750483f372d231a0e040000000000000000000000000000000000000000000000000000000000000911181d21242527272727313e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e00000b16212c353d44484a535353535353534a48443d352c21160b0000091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000020e1a25303b4754616d7a86929fa9aa9e9184796d605b534d4847454546484f565e69727f8c98a2aaa69b8e8275665c5044382c1f1206000007121d27313940454748484848484848484848484848484848484d4d4d4d4d4d4d48484848484848484848484848484848484745403931271d12070000000000000000000714202d3a4753606d7a86939facafa49a897c6f6356493c3023140a0000000000000000000000000000000000000000030d17212931363a3b443e3937332d27221b17110a020000000013202c3946535f6c7986929facada093867a6d60606060606060606060606060606060606060606060606060606060606060605f524d453b30251a0e02000000000013202c3946535f6c7986929facada093867a6d60606060606060606060606060606060606060606060606060606060606060605f524d453b30251a0e020000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000714212d3a46535e697884919a9b9c9d96897c6f625a504a464440434044464b515c67717e8b98a3aeaa9b8f827568554b4135291d11040000000000000000000713202d3946525e686d71727374767778756f65594d3d323536373737383835404b556774818e9aa7b2a995887b6e6255483b2f221508000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000004111d2935414c566a7683909da9aea298887b6e6155483b2d2217080004101c2934404b555c606c6b6a6969686764615a5045392d21140800000000000000000000010a121a202830363b4246484e5361696b6c6c6c68605c545d5b595653514a47433d373127221b140b030000000000000000000006121f2c3844505c6674818e9ba6afa3998e81756c625b534e494746444446484a51575e68727e8b99a4aea398897c6f6256493c2f23160900000000000000000000000000000000091217232e38424b555d686e7b849197a2a19a938d8890959da59d928b7f726b61584e453b31281e140a0000000000000000000000000000000000000c1825323f4b5865727e8b98aaafa49a897c7063544b403631303031363f4854606b7078736f6c6563605b544d453b30251a0e02000000000000000000000009121c252e363e454d52575f62666a6e71737577787879797978777573706d67636059534d453e362d251b110800000000000000000000000000000000000000000000000000000000000009121b22292e313234343434343e4b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000005101a232c33383c3d464646464646463d3c38332c231a10050000091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000914202d3946525d6874808d97a2aca0968d80746d615e575554515153555960686e7b86929faaab9f94897c6f63544a3f34281c100300000c18242f39434b5153545454545454545454545454545454545454545454545454545454545454545454545454545454545453514b43392f24180c0000000000000000000915222f3c4855626f7b889aa4afac9f93867a6d6054473a2d211407000000000000000000000000000000000000000000060f171f262a2d2e37312d2b27221b17110b0600000000000013202c3946535f6c7986929facada093867a6d60535353535353535353535353535353535353535353535353535353535353534846423b33291f140900000000000013202c3946535f6c7986929facada093867a6d60535353535353535353535353535353535353535353535353535353535353534846423b33291f1409000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000005121e2a36424d576774818e9aa6a9a89b8e81756c605c5453514a504a5153555d606d7983919daaaea2988b7e7165584b3e2f24180d010000000000000000000714212e3a4754616d7a7e7f8081828485817568584e43372e2c2823282c2f3945515d677783909daaada196877a6d6054473a2d211407000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000713202c3945525d687885929fabac9f9285796c605346392d20130600000c18232f39434b51535f5e5e5d5c5b5a575550483e33281d1105000000000000000000000000080e161e252a30363a3c505d697378797979746d665e564e4c494644403937322b262017110a02000000000000000000000003101c28343f4a54626f7c89949fabab9e938b7e726d625f5856545351505355545c60696e7a85929eabac9f92867a6d6053473a2d201407000000000000000000000000000000000006111c263039434c565e696f7c859299a3a49f9a959da0a79e948d80746d62594f463c33291f160c02000000000000000000000000000000000000091623303c4956636f7c8998a2aeac998c8073665c5146423e3d3c3d4246515b63707d84807c78746f6c665e574d42362a1e11050000000000000000000000000a131c242c333b42464d5355575f626466696a6b6b6c6c6c6b6a686663605d55544f4c4841382f241b130900000000000000000000000000000000000000000000000000000000000006111b242d343a3d3e4040404040404b5864717e8b97a4b1a79a8e8174675b4e4134281b0e000008131e28313a414547494949494949494745413a31281e13080000091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000005111d2935414c56616d7a85929fa5a89d928c7f756e696461605d5c6062656b6f7a839198a2aea3999083766b605442382e23170c000004101d2935404b555d606161616161616161616161616161616161616161616161616161616161616161616161616161616161605d554b4035291d100400000000000000000b1724313e4a5764717d8a97acb6aa9e918477675d5145392c20130600000000000000000000000000000000000000000000060d141a1e21222a24201f1b17110b06000000000000000013202c3946535f6c7986929facada093867a6d60534746464646464646464646464646464646464646464646464646464646463b3a36302921170d0200000000000013202c3946535f6c7986929facada093867a6d60534746464646464646464646464646464646464646464646464646464646463b3a36302921170d02000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000020e1a25313c4855626f7c88949faaaa9e938a7e726d6662605c545d545c6062676d75808d95a0aca99f92867a6d6154473a2e211407000000000000000000000815212e3b4854616e7b878c8d8e8f909184786a6054473f3a38342e34383a404b55606d7a86929facab9e918578675d5145392c201306000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000714212d3a4754606d7a8797a2adaa9d918477655b5044372b1f1205000007121d273139404547525251504f4e4d4b49453e362c22170c0000000000000000000000000000050c13191f252a3845525f6b788586868681786d685f584f473f38342e2b27201b150b0600000000000000000000000000000c17232e384754606a76828f99a3aea59f92877f756f6a666261605c5c606164666d727b839097a1ada59c8f8275675d5145392c1f13060000000000000000000000000000000000000a141e27313a444d575f6a707d879299a49f9f9f9fa9a0958f82786d605b51473e342a21170d04000000000000000000000000000000000000000714202d3a4753606d7985929facab9e9185796d605a534d4b4a494a4d535b626d76828f8d8984807c786e695e52463a2d201407000000000000000000000000020e1925303b444c525f6060606060605d5c5d5e5f5f5f5f5e5d5b6060606060605a58534a41362b2014080000000000000000000000000000000000000000000000000000000000010c18222d363f454a4b4d4d4d4d4d4d4d5864717e8b97a4b1a79a8e8174675b4e4134281b0e00010d19242f3a434c52545656565656565654524c433a2f24190d0100091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000010d1924303a46525e68727e8b939ea7a49c918c827b75716e6d67666d6f71767d849195a0aaa69f92877c6f63594f4330261c1106000006131f2c3845515d676d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6d675d5145392c1f130600000000000000000c1926323f4c5965727f8c98a5b2a99c8f837669554b4135291d1104000000000000000000000000000000000000000000000003090e1214151d1713120f0b060000000000000000000013202c3946535f6c7986929facada093867a6d6053473a393939393939393939393939393939393939393939393939393939392e2d2a251f170f050000000000000013202c3946535f6c7986929facada093867a6d6053473a393939393939393939393939393939393939393939393939393939392e2d2a251f170f0500000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000915212e3b47535f6a76828f98a2aea59f92877f78726f6d666a696a666d6f7379818d929da7aca2978d8074685d5246392d201307000000000000000000000714212d3a46535e697884919a9b9c9d96897c6f625a504a464440434044464b515c67717e8b98a3aeaa9b8f827568554b4135291d1104000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000815222f3b4855626e7b8895a9b3a99c8f82766953493f33271b0f030000010b151f272f34383a464544434241413e3d39332c241a100600000000000000000000000000000002080d141a26323f4c5965727f8c93938e827a6f6a615951444039302820180f0a0300000000000000000000000000000006111c2b38434e58626f7c87929fa5afa399928b817c76726f6e6d66666d6e7074797f859095a0a9a89e93897d7063554b4035291d1004000000000000000000000000000000000000020c151f28323b454e58606b717e8793939393939393969083796d665c50493f352c22190f05000000000000000000000000000000000000000006131f2c3845515c6775828f9ba7ada1978c80736c615f5757565657575f616d727f8b949a96918d89857b6e6154473b2e21140800000000000000000000000005111e2a36414c565e6c6c6c6c6c6c6c6a675f555253534f5960636c6c6c6c6c6c67645c53483c3024180b000000000000000000000000000000000000000000000000000000000005111d29343f485056585a5a5a5a5a5a5a5a64717e8b97a4b1a79a8e8174675b4e4134281b0e0004111d2935414c565d6062626262626262605d564c4135291d110400091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b0000000008131e2a36414c56626d75818e959fa6a49c948f86827e7b7a7979797b7e83899196a0a7a59e948c7f736b6054473d321e150a0000000714202d3a4753606d797b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b796d6053473a2d20140700000000000000000d192633404c5966737f8c99a6b2a89b8e8175685b4e422f24180d010000000000000000000000000000000000000000000000000002050708110b06050300000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d21201e1a140d05000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d21201e1a140d050000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000006121f2b37434e58626f7c86929fa4aca399928b837f7b797777767777797c80858e939da4aea49a92857a6d61564c4135291d11050000000000000000000005121e2a36424d576774818e9aa6a9a89b8e81756c605c5453514a504a5153555d606d7983919daaaea2988b7e7165584b3e2f24180d01000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000091623303c4956636f7c8996a2afa89b8e8175685b4e422d22170b00000000030d151d23292c2d3938373636353431302d28221a120800000000000000000000000000000000000003091825313e4a56626d75818f969490847c706b625b514a423a322a21191106000000000000000000000000000000000f1b27323d47535f6a727f8c939da5aba39f938e87827f7c7a797879797b7d81858b9297a0a7a8a0968f82756b605443392f24180c0000000000000000000000000000000000000000030d162029333c464f59616c727f8686868686868686847b6e675d544a3f372d231a100700000000000000000000000000000000000000000004101c2934404b5563707d8a95a0aca99f93887e746e69666463636366696e757f87939fa6a19e9a908377695e52463a2d2014070000000000000000000000000714202d3946525e68767979797979797771675b4f464854606b70797979797979746e64584c4033271a0d01000000000000000000000000000000000000000000000000000000000915212e3a45505a6265676767676767676767717e8b97a4b1a79a8e8174675b4e4134281b0e000613202c3945525d686d6f6f6f6f6f6f6f6d685d5245392c20130600091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b00000000020d1925303a44515b606d798390949da5a69e98928f8b8887858586888b90949ea1a8a39f938e82786d60594f43352b210c030000000a1723303d4a5663707d87878787878787878787878787878787878787878787878787878787878787878787878787878787877e7164574a3e3124170b00000000000000000d1a2734404d5a6773808d9aa6b3a79a8d8074675a4d4134271a07000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d2020202020202020202020202020202020202020202020202020201514120e090200000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d2020202020202020202020202020202020202020202020202020201514120e0902000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000030f1b26323c47535f6a717e8b939aa2aaa39f95918c8886848483838485898c92979ea5aaa39f93887d70685e52443a3024190d0100000000000000000000020e1a25313c4855626f7c88949faaaa9e938a7e726d6662605c545d545c6062676d75808d95a0aca99f92867a6d6154473a2e21140700000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000a1724303d4a5763707d8a96a3b0a79a8d8174675a4e4134271b060000000000030b12181c1f202c2b2b2a2928272423211d17100800000000000000000000000000000000000000000916222e3a46515b606d7a8491989691867d726d605c544c443c332b2317110a0200000000000000000000000000000a16202b37434e58606c77818e939fa2aaa59e9a938f8c898786858586888a8d92979ea1a9a59e9691847a6d61594f4431271d1207000000000000000000000000000000000000000000040e17212a343d47505a626d727979797979797979786e695e554b42382e251b110800000000000000000000000000000000000000000000000c18232f394653606c7883909aa4afa49a938b817b767371706f7072767b818b9399a4afa99f948a7e7164574d42362a1e11050000000000000000000000000814212e3b4754616e7a86868686868683776a5d5144495663707d8686868686868074675a4e4134271b0e01000000000000000000000000000000000000000000000000000000000b1724313d4a56626d71737373737373737373737e8b97a4b1a79a8e8174675b4e4134281b0e000714212d3a4754606d7a7c7c7c7c7c7c7c7a6d6054473a2d21140700091623303c4956636f7c8996a2afa4978a7d7164574a3e3124170b000000000008131e28323f45515d676d7a828e939da0a7a39f9b97949892929895989c9fa6a7a099928d81786d665c50463d3223190f000000000a1723303d4a5663707d899494949494949494949494949494949494949494949494949494949494949494949494949494948a7d7164574a3e3124170b00000000000000000e1b2734414e5a6774818d9aa7b3a69a8d8073675a4d4034271a0d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d20141313131313131313131313131313131313131313131313131308070502000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d201413131313131313131313131313131313131313131313131313080705020000000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000a15202b37434e58616c727f8892989fa3a7a09d99999291909090919298999ea2a9a69f98928b7f726c61564c4132281e13080000000000000000000000000915212e3b47535f6a76828f98a2aea59f92877f78726f6d666a696a666d6f7379818d929da7aca2978d8074685d5246392d20130700000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000a1724313d4a5764707d8a97a3b0a79a8d8074675a4d4134271a0e01000000000001070c1013141f1f1e1d1c1b1a181714110c0600000000000000000000000000000000000000000006121e29353f45525d686f7c86929f9892877f746d665d564d453d3528231c140c0300000000000000000000000000040f1b26323c44505b656d78818b92989fa4aca49f9c9995949892929894979a9ea1a9a7a09d938f847b6e685d52473d331f150b0100000000000000000000000000000000000000000000050f18222b353e48515b62656c6c6c6c6c6c6c6c6b615e574d433a30261c130900000000000000000000000000000000000000000000000007121f2b3844505b66707d88939fa5aca49f938e8783807e7d7c7d7f82878e939fa4aba9a1978f82766c6155453b30251a0e020000000000000000000000000814212e3b4754616e7a87939393939084776a5d5144495663707c89939393938d8174675a4e4134271b0e01000000000000000000000000000000000000000000000000000000000b1825323e4b5865717f80808080808080808080828f9ca9b4a79a8e8174675b4e4134281b0e000a1723303d4a5663707d898989898989897d7063564a3d3023170a00091623303c4956636f7c8996a2aca4978a7d7164574a3e3124170b0000000000020c16202935404b555d686d78818991959c9fa3aba4aaa29f9fa2aaa4aba49f9c95908780786d665c544a3f342b211007000000000a1723303d4a5663707d8996a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1978a7d7164574a3e3124170b00000000000000000e1b2835414e5b6874818e9ba7b3a6998c807366594d4033261a0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d20140d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b0a080500000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d20140d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b0a0805000000000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000040f1a26313c46505a636d727e868e92999da0a8aba39f9e9d9c9d9e9fa2aaaaa29f9b948f867e726d62594f443a3020160c0200000000000000000000000006121f2b37434e58626f7c86929fa4aca399928b837f7b797777767777797c80858e939da4aea49a92857a6d61564c4135291d110500000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000b1724313e4a5764717d8a97a4b0a69a8d8073675a4d4034271a0d010000000000000000040607131211100f0e0e0b0a08050000000000000000000000000000000000000000000000010d18232935414c565f6a727e8b939e99938c81786d685f574f473f342e261e150c03000000000000000000000000000a152027333f49535c666d747f868e939a9ea1a8a7a5a2aaa29f9fa2aaa3a7aaa29f9b959089827a6e695e564c41352b210d03000000000000000000000000000000000000000000000000061019232c363f4951565860606060606060605e54524d453b31281e140a01000000000000000000000000000000000000000000000000030f1c28333f4a54606b73808d939da4aca59d99938f8c8a89898a8c8f93999ea5aea79f9791857b6e615a504533291f1409000000000000000000000000000814212e3b4754616e7a87949f9f9d9084776a5d5144495663707c89969f9f9a8d8174675a4e4134271b0e0100000000000000000000000000000000000000000000000000000003101d293643505c6976828d8d8d8d8d8d8d8d8d8d8f949eaab4a79a8e8174675b4e4134281b0e000a1723303d4a5663707d899595959595897d7063564a3d3023170a00091623303c4956636f7c89969f9f9f978a7d7164574a3e3124170b000000000000050e18242f3a434c565d666d747d848a8f92999a9c9e9e9f9f9e9d9c9a99938f8a837c736c665c544a42382e22190f00000000000a1723303d4a5663707d89969f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f978a7d7164574a3e3124170b00000000000000000e1b2835414e5b6874818e9ba7b3a6998d8073665a4d4033271a0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d201a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a171714110c050000000000000013202c3946535f6c7986929facada093867a6d6053473a2d201a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a171714110c0500000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000a15202a343e48515b636c717b81878c919597999c9d9e9e9f9f9f9e9d9b9998928e89827b716c625b51473e32281e0e0400000000000000000000000000030f1b26323c47535f6a717e8b939aa2aaa39f95918c8886848483838485898c92979ea5aaa39f93887d70685e52443a3024190d0100000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000a1724313d4a5764707d8a97a3b0a79a8d8074675a4d4134271a0e010000000000000105090b0b121111100f0e0d09080603000000000000000000000000000000000000000000000000070d19242f3a434e58626d75818e95a09f928e827a6e69605951443f3830271e150b00000000000000000000000000040b17222d38414a545c606d727b81878d9196989a9c9d9e9f9f9f9e9d9d9b9898928e8a837d756d685e574d443a3023190f000000000000000000000000000000000000000000000000000007111a242d373f464a4c5353535353535353524846423b33291f160c0200000000000000000000000000000000000000000000000000000b17222d38424f59606c78818d929ea0a8aba49f9c9997969696999c9fa4abaaa29f9590857c6f695e53483e3420170d02000000000000000000000000000814212e3b4754616e7a8794a1aa9d9084776a5d5144495663707c8996a3a79a8d8174675a4e4134271b0e0100000000000000000000000000000000000000000000000000000003101d293643505c6976838f9a9a9a9a9a9a9a9a9a9c9ea6b0b4a79a8e8174675b4e4134281b0e000a1723303d4a5663707d8996a2a2a296897d7063564a3d3023170a00091623303c4956636f7c8993939393938a7d7164574a3e3124170b0000000000000007131d28313a444c545c606b70787e82868a8d8f9192929291918f8d8a86827d786f6a605b544a423930261c100700000000000a1723303d4a5663707d899393939393939393939393939393939393939393939393939393939393939393939393939393938a7d7164574a3e3124170b00000000000000000e1b2734414e5a6774818d9aa7b3a69a8d8073675a4d4034271a0d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a2d27272727272727272727272727272727272727272727272727272727272423211c17100800000000000013202c3946535f6c7986929facada093867a6d6053473a2d27272727272727272727272727272727272727272727272727272727272423211c171008000000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000030e18222d363f49515a61696e747b8084888b8d8f90919292929291908e8c8985817c766e69615a51493f352c20160c0000000000000000000000000000000a15202b37434e58616c727f8892989fa3a7a09d99999291909090919298999ea2a9a69f98928b7f726c61564c4132281e13080000000000000000000000000000000203101d2a3643505d69768390908376695d5043362a1d100302000000000000000a1724303d4a5763707d8a96a3b0a79a8d8074675a4d4134271a0e010000000000060c111517181f1e1d1c1b1a191615130f0a04000000000000000000000000000000000000000000000008131e28313c46515b606d79839198a29d948f847b706b625b504a423930271d12070000000000000000000000000006111b262f38424a505b62696e757b8084888b8d8f90929292929191908e8b8985817d78706b605d564d453b32281e110700000000000000000000000000000000000000000000000000000008121b252d343a3e3f4646464646464646453b3a36302921170d0400000000000000000000000000000000000000000000000000000006111c262f3d44505b666d78808a91969d9fa7a7a9a6a4a3a2a3a5a9a7a8a09e98928c837b6f6a5f574d42362c220e0500000000000000000000000000000814212e3b4754616e7a8794a1a99d9084776a5d5144495663707c8996a3a79a8d8174675a4e4134271b0e0100000000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca6a6a6a6a6a6a6a6a9aab0acaca79a8e8174675b4e4134281b0e000a1723303d4a5663707d8996a3aca396897d7063564a3d3023170a00091623303c4956636f7d868686868686867e7164574a3e3124170b00000000000000010c161f28323a424b515960666c71767a7d808284858686858483807d7a75706c666058504a423930271e140a0000000000000a1723303d4a5663707d86868686868686868686868686868686868686868686868686868686868686868686868686868686867e7164574a3e3124170b00000000000000000d1a2734404d5a6773808d9aa6b3a79a8d8174675a4e4134271b09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d6053473a34343434343434343434343434343434343434343434343434343434343431302d28221a1208000000000013202c3946535f6c7986929facada093867a6d6053473a34343434343434343434343434343434343434343434343434343434343431302d28221a12080000000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000006101b242e373f4850575e61696e73777b7e80828484858686858583827f7d79756f6b625f5750483f372d231a0e04000000000000000000000000000000040f1a26313c46505a636d727e868e92999da0a8aba39f9e9d9c9d9e9fa2aaaaa29f9b948f867e726d62594f443a3020160c0200000000000000000000000000050a0f12101d2a3643505d69768390908376695d5043362a1d10120f0a0500000000000a1623303d495663707c8996a3afa79a8e8174675b4e4134281b0700000000000911181d2124252c2b2a2928272622211f1b150e0600000000000000000000000000000000000000000000010c161f2a343f45515d676e7c86929fa59f9691857d726d605c544b42392e23180c00000000000000000000000000000a141d2630383f4451575f61696e73787b7e80828485858685858483817f7c7a75706d666059524c443b332920160c000000000000000000000000000000000000000000000000000000000009131b23292e31323939393939393939382e2d2a251f170f0500000000000000000000000000000000000000000000000000000000000a141d28333f4a545c666d747d848b9095979a9c9e9f9f9f9f9e9d9a9896918c857f786e695f584e453b31241a100000000000000000000000000000000814212e3b4754616e7a87949c9c9c9084776a5d5144495663707c89969c9c9a8d8174675a4e4134271b0e0100000000000000000000000000000000000000000000000000000003101d293643505c6976838f9c9f9f9f9f9f9f9f9f9f9f9f9f9f9f9a8e8174675b4e4134281b0e000a1723303d4a5663707d89969f9f9f96897d7063564a3d3023170a000915222f3b4854606b6f79797979797979716c6155493c3023170a0000000000000000040d162028303940454f545b6064686e7174767778797978777673716e6863605b544e443f382f271e150c020000000000000916232f3c4855616b707979797979797979797979797979797979797979797979797979797979797979797979797979797979716c6155493c3023170a00000000000000000d192633404c5966737f8c99a6b2a89b8f8275685c4f4230251a0e020000000000000000000000000000000000000000000000000000010203000000000000000000000000000000000013202c3946535f6c7986929facada093867a6d605347404040404040404040404040404040404040404040404040404040404040403e3c39332c241a10050000000013202c3946535f6c7986929facada093867a6d605347404040404040404040404040404040404040404040404040404040404040403e3c39332c241a100500000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000009121c252e363e454d52575f62666a6e71737577787879797978777573706d67636059534d453e362d251b110800000000000000000000000000000000000a15202a343e48515b636c717b81878c919597999c9d9e9e9f9f9f9e9d9b9998928e89827b716c625b51473e32281e0e04000000000000000000000000010910161b1e20202a3643505d69768390908376695d5043362a20201e1b161009010000000815222f3b4855626e7b8895a9b3a89b8f8275685c4f422e23180c0000000009121b22292e3132393837363534332f2e2b262018100600000000000000000000000000000000000000000000040d18222935404b555f6a717e8a939da7a09792877f746d665c544b4034281c100400000000000000000000000000020b151e262e343f454d53575f6266696e71747677787979797877767472706d6763605c544f45413a322921170e040000000000000000000000000000000000000000000000000000000000010911181e2224252d2d2d2d2d2d2d2d2b21201e1a140d05000000000000000000000000000000000000000000000000000000000000020b17222d38424a545c606b70797e83878b8d8f919292929291908e8b88847f7a736d665f574e463c33291f12090000000000000000000000000000000814212e3b4754616e7a878f8f8f8f8f84776a5d5144495663707c898f8f8f8f8d8174675a4e4134271b0e0100000000000000000000000000000000000000000000000000000003101d293643505c6976838f939393939393939393939393939393938e8174675b4e4134281b0e000a1723303d4a5663707d899393939393897d7063564a3d3023170a0007131f2c38434f5960636c6c6c6c6c6c6c64615a5045392d211408000000000000000000040d161e272e343d424a5053565e616467696b6b6c6c6b6a696764615e5653504a423c332d261d150c03000000000000000714202c38444f5961636c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c64615a5045392d21140800000000000000000b1825313e4b5864717e8b97a4b1a99d9083766a574d42362a1e1105000000000000000000000000000000000000000000000003080c0e0e0f0b0707040100000000000000000000000013202c3946535f6c7986929facada093867a6d60534d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4a49453e362c22170c0000000013202c3946535f6c7986929facada093867a6d60534d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4a49453e362c22170c00000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000a131c242c333b42464d5355575f626466696a6b6b6c6c6c6b6a686663605d55544f47423c332d241b1309000000000000000000000000000000000000030e18222d363f49515a61696e747b8084888b8d8f90919292929291908e8c8985817c766e69615a51493f352c20160c000000000000000000000000010a131b21272b2d2d2d3643505d69768390908376695d5043362d2d2d2b27211b130a0100000714212e3a4754616d7a8797a2ada99c90837669544a4034281c1004000006111b242d343a3d3e454444434241403c3b37322a22180e0400000000000000000000000000000000000000000000071018242f39434e58616c74818e95a0a9a299928b80786d665c5145382c1f13060000000000000000000000000000030c151c2328333c42464d5355575f626567696a6b6c6c6c6b6a6a686563605d5553504a423d35302820170f050000000000000000000000000000000000000000000000000000000000000000060d1216181920202020202020201f1514120e0902000000000000000000000000000000000000000000000000000000000000000006111c262f38424a505961666d71767b7e818384858686858483817f7b77736d68605c544d453c342a21170d000000000000000000000000000000000714212d3a4754606d7a8283838383838174675b4e414855626f7c8283838383827f7265584c3f3225190c0000000000000000000000000000000000000000000000000000000003101d293643505c6976828686868686868686868686868686868686868174675b4e4134281b0e000a1723303d4a5663707d868686868686867d7063564a3d3023170a00030f1b27323d474f545660606060606060575550483e33281c110400000000000000000000040c151d23282f383f44464c5254575a5c5e5f5f5f5e5e5c5a5754524c46443f382f28221c140b03000000000000000004101c27333d474f55566060606060606060606060606060606060606060606060606060606060606060606060606060606060575550483e33281c110400000000000000000a1723303d4a5663707d8996aab4ab9f928578695e52463a2d20140700000000000000000000000000000000000000000001090f14181a1b1c181413110d08050100000000000000000013202c3946535f6c7986929facada093867a6d605a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a575550483e33281c110500000013202c3946535f6c7986929facada093867a6d605a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a575550483e33281c1105000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000010a121a212930363c4247484e5355596063676a6b6c6b6a666260585653514b48433d37312a211b1209010000000000000000000000000000000000000006101b242e373f4850575e61696e73777b7e80828484858686858583827f7d79756f6b625f5750483f372d231a0e0400000000000000000000000009131c252c33373939393943505d69768390908376695d50433939393937332c251c130900000713202d3946525d687885929fabaa9e918477665c5144382c1f120600010c18222d363f454a4b5251504f4e4d4c4947433c342a20150a000000000000000000000000000000000000000000000007121d28313c46505a606d7983909893939393928d82796d6053463a2d201307000000000000000000000000000000030a1117212a31373c4247484d5355585a5c5d5f5f5f5f5e5e5d5b585653514b46443f383029241e160e05000000000000000000000000000000000000000000000000000000000000000000000106090b0c1313131313131313120807050200000000000000000000000000000000000000000000000000000000000000000000000a141d2630383f444f545c6064696e7174767778797978787674726f6a66605d56514a423c332a22180f05000000000000000000000000000000000713202c3945525d686d767676767676746f64584c4047535f6a6f767676767676726d62564a3e3125180b00000000000000000000000000000000000000000000000000000000020f1c2835414e5a667076797979797979797979797979797979797979746f64594c4033271a0d000916232f3c4855616b7079797979797979706b6155483c2f23160900000a16212b353d434849535353535353534a49453e362c22170c000000000000000000000000030b12181d262d33383b4146474a4d4f515253535251504d4a4746413b38332d261d17110a02000000000000000000000b16212c353d44484a53535353535353535353535353535353535353535353535353535353535353535353535353535353534a49453e362c22170c0000000000000000000815222e3b4855616e7b8898a2aeada297877b6e6154473b2e21140a0000000000000000000000000000000000000000030b131a20242728292521201d1913110d08020000000000000013202c3946535f6c7986929facada093867a6d6767676767676767676767676767676767676767676767676767676767676767676764615a5045392d21140800000013202c3946535f6c7986929facada093867a6d6767676767676767676767676767676767676767676767676767676767676767676764615a5045392d211408000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000000080f171f252a31373e4850585f626b6f737778797877736f6a615f574f473d38322b2620180f090000000000000000000000000000000000000000000009121c252e363e454d52575f62666a6e71737577787879797978777573706d67636059534d453e362d251b110800000000000000000000000005101b252e373e434646464646505d69768390908376695d504646464646433e372e251b10050005111d2935414c566a7683909da9ac9f9286796d6053463a2d2013070005111d29343f485056585f5e5d5c5b5a5955534e463c32261b0f0300000000000000000000000000000000000000000000010c161f2a343e45515c676e7b8586868686868686867a6e6154473b2e2114080000000000000000000000000000000000060f181f262b31373a3c4247484b4d4f51525253525251504e4c494745403a38342e261e19130c0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141e262e343e424a5153575e616467696b6c6c6c6c6b6a6765625f5854524c444039302a21181006000000000000000000000000000000000004111d2935414c565d6069696969696967645c53483c434e585f6269696969696965625b51463a2e22160900000000000000000000000000000000000000000000000000000000000d1926323e49545e66696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c67645d53483c3024180b000714202c38444f5961636c6c6c6c6c6c6c6361594f44382c2014070000040f19232b32383b3c464646464646463e3c39332c241a10050000000000000000000000000000070b141c22282b3036393b3e414344454646454443403e3b3936302b28221c140b0600000000000000000000000005101a232c33383c3d46464646464646464646464646463f44464f4f4f4f4f4f4f46444046464646464646464646464646463e3c39332c241a10050000000000000000000613202d394653606c7985929facb3a9968a7d7063574a3d31261b0f01000000000000000000000000000000000000000b151d252b30343536312d2c2924201d19130c0701000000000013202c3946535f6c7986929facada09386797373737373737373737373737373737373737373737373737373737373737373737373716c6155493c3023170a00000013202c3946535f6c7986929facada09386797373737373737373737373737373737373737373737373737373737373737373737373716c6155493c3023170a000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000000050d15202a333e47505a616a6f767c808385868583807c756e6960594f473d32291f150e060000000000000000000000000000000000000000000000000a131c242c333b42464d5355575f626466696a6b6b6c6c6c6b6a686663605d55544f47423c332d241b1309000000000000000000000000000a16212c3740494f5353535353535d69768390908376695d5353535353534f4940372c21160a00010d192430414e5b6774818e9aa7afa399887b6f6255483c2e23180c060615212e3a45505a62656c6b6a69686766625f584e43372b1f13060000000000000000000000000000000000000000000000040d18222934404b555f696e78797979797979797976685e5246392d201407000000000000000000000000000000000000060e141a1f262b2e31373a3b3e41434445464646454443413f3d3a39352f2b28231c140c0802000000000000000000000000000000000000000000000000030608090f1112131313110f0c0707050100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c141c232830394044464d5254585a5c5e5f5f5f5f5e5d5b5855534e4745413a342e271e180f06000000000000000000000000000000000000010d1924303a444c52545c5c5c5c5c5c5b58534a41363c464e53555c5c5c5c5c5c585651493f34291e120600000000000000000000000000000000000000000000000000000000000915212d38424c545a5c6060606060606060606060606060606060605b59534a41362b2014080004101c27333d474f55566060606060606056554f473d33271c100400000007101921272c2f303939393939393931302d28221a120800000000000000000000000000000000020a11171c1f252a2d2e3134363838393938373634312e2d2a251f1c17110a02000000000000000000000000000008111a21272c2f3039393939393939393939392d38424a50535c5c5c5c5c5c5c53514a42392e393939393939393939393931302d28221a12080000000000000000000006121f2b3844505b667683909ca9b3a79a8d807467584e43372b1e1308000000000000000000000000000000000000060f1d272f373c4041423e3a39352f2d29251e18120b030000000013202c3946535f6c7986929facb3a79a8d8080808080808080808080808080808080808080808080808080808080808080808080807e7164574a3e3124170b00000013202c3946535f6c7986929facb3a79a8d8080808080808080808080808080808080808080808080808080808080808080808080807e7164574a3e3124170b000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000000020e1a26313c454f59616c707c82898d90929291908d88827b706b60594f443b3025190e02000000000000000000000000000000000000000000000000010a121a212930363c4247484e5355585a5c5d5e5f5a61646c6c6c6c66635c5248433d37312a211b120901000000000000000000000000000f1b27333e49525a5f60606060606069768390908376696060606060605f5a52493e33271b0f0000081825313e4b5864717e8b97a7b1ab988b7e7165554b4034281d1413131624313d4a56626c71787777767574736f6a5f53473b2e211508000000000000000000000000000000000000000000000000060f18232f39434d575f616c6c6c6c6c6c6c6c6c6c5e564c41362a1e11050000000000000000000000000000000000000003090e151a1e21262b2e2f32343637383939393837373532302d2c29241f1c17110a02000000000000000000000000000000000000000000000000030a0f1215151c1e1f1f201f1e1c181413110d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171e272e34383b4246484b4e50515253535251504e4c4847433c39353028231c150c06000000000000000000000000000000000000000008131e28323a4145475050505050504e4c4841382f343c4347485050505050504c4a463f372d23180d01000000000000000000000000000000000000000000000000000000000005101b26303a42494e505353535353535353535353535353535353534e4c4841382f251a0f0300000b16212c353d44484a535353535353534a48443d352c21160b0000000000070f161b1f22232d2d2d2d2d2d2d2423211c17100800000000000000000000000000000000000000060b0f14191e20212427292b2c2c2c2b2b29272421201e19140f0b0600000000000000000000000000000000000810161c2023232d2d2d2d2d2d2d2d2d2d28333f4a545b6068686868686868605c544a4034282d2d2d2d2d2d2d2d2d2d2423211c1710080000000000000000000000030f1c28333f4a546774808d9aaab4aa9d9184776a5f53473a2f24190b0200000000000000000000000000000000030e18212f3941484d4e4f4b4745413a39353029241d150d0300000013202c3946535f6c7986929facb9a99d928d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8174675b4e4134281b0e01000013202c3946535f6c7986929facb9a99d928d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8174675b4e4134281b0e010000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000000000006121e2b37424d57616c707e868f949a9c9998999c99938f857d706b60564d42362a1f14080000000000000000000000000000000000000000000000000000080f171f252a31373a3c4247484b4d4f4a505b636c7079797979736e63574b3f322b2620180f09000000000000000000000000000000121e2b37434f5a646c6c6c6c6c6c6c6c7683909083766c6c6c6c6c6c6c6c645a4f43372b1e1200000815212e3b4854616e7b87959faba89b8e8175675c5145392e2521201f202935404b5565717e8584838281807f7c6f6255493c2f2216090000000000000000000000000000000000000000000000000007121d27313c454d53555f60606060606060605f524c443b3025190e0200000000000000000000000000000000000000000003090e12151a1e21222527292a2c2c2c2c2b2b2a282523201f1d1812100b0600000000000000000000000000000000000000000000000000060e151b1f2122282a2b2c2c2c2b292521201d19130d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c151c23282c30363a3b3e414344454646454543413f3c3a37312c29241e18120b03000000000000000000000000000000000000000000020c1620283035393a43434343434341403c362f262a32373b3c4343434343433f3e3a342d251b1107000000000000000000000000000000000000000000000000000000000000000a141e2830383e414346464646464646464646464646464646464641403c362f261d130800000005101a232c33383c3d464646464646463d3c38332c231a1005000000000000040a0f13151620202020202020171714110c050000000000000000000000000000000000000000000003080d111414171a1c1e1f20201f1e1d1a171414110e08030000000000000000000000000000000000000000050b101416172020202020202020201f2b3844505b666c757575757575756d665c5144382c1f202020202020202020171714110c05000000000000000000000000000b17222d3d4a5763707d8a98a2aeaca095887c6f62564c4135291d140a000000000000000000000000000000000915202a33414b53595b5c5854524c4746413a352f271f150b01000013202c3946535f6c7986929facb9aea49d9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a8e8174675b4e4134281b0e01000013202c3946535f6c7986929facb9aea49d9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a8e8174675b4e4134281b0e010000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000000000814212e3a47535f69707e87929899938f8c8b8c90949e9792877d6f695e52463b3025190e020000000000000000000000000000000000000000000000000000050d141a1f262b2e31373a3b3e444c545c606d727e868686868073665a4d4033271a150e060000000000000000000000000000000013202d3946535f6c767979797979797979839090837979797979797979766c5f5346392d201300000714202d3a46525e697783909daaab9f9285796d60544b4036312d2c2c2d323a45515d6775818e91908f8e8d897c6f6356493c3023160900000000000000000000000000000000000000000000000000010b151f2a333c4246485253535353535353535346413b32291e14080000000000000000000000000000000000000000000000000206090e121415181a1c1e1f1f201f1f1e1d1b19161413100c0703000000000000000000000000000000000000000000000000000006101820262b2e2f3537383939393835322e2d2a251e19130c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181c1f252a2d2e3134363839393939383734322f2e2b26201d19130c07000000000000000000000000000000000000000000000000040e161e24292c2d3636363636363433302b251d20262b2e2f36363636363632312e29231b13090000000000000000000000000000000000000000000000000000000000000000030c161e262d3235363939393939393939393939393939393939393433302b251d140b010000000008111a21272c2f3039393939393939302f2c27211a110800000000000000000003070909131313131313130b0a08040000000000000000000000000000000000000000000000000000010507080b0e10111213131211100d0b080705020000000000000000000000000000000000000000000000000407090a131313131313131313202d394653606c7881828282828281796d6053463a2d201313131313131313130b0a08040000000000000000000000000000000614202d3a4753606d7985929facb1a79a8d8073685d52453b2f261b1106000000000000000000000000000006101a26313c45535d64686964605d5654524c45403931271d1207000013202c3946535f6c7986929facacacaea9a7a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a69a8e8174675b4e4134281b0e01000013202c3946535f6c7986929facacacaea9a7a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a69a8e8174675b4e4134281b0e010000000000000000020714202d3a4753606d7a8693a0acac9f9286796c5f5346392c2013070502000000000000000000000000000000000006121f2b37434e58626e7b869299959187827f7f80838991969992857b6e61564d41362a1e110500000000000000000000000000000000000000000000000000000002090e151a1e21262b343d454d565d666d747f87929892857b6e6154473b2e21140903000000000000000000000000000000000013202d394653606c798686868686868686909494908686868686868686796c605346392d2013000005121e2a36424d5765727f8c98a2aea2988b7e71665c5146423b3a39383a3d444d57606d7a85929e9d9c9b9285796d6053463a2d2013070000000000000000000000000000000000000000000000000000030d18212a31373a3b4546464646464646463b3936302920170d02000000000000000000000000000000000000000000000000000000020608080b0e1011121313131211100e0c0a07060400000000000000000000000000000000000000000000000000000000030e18222a31373a3c42444546464644423f3a39363029241e160e0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c10141a1e20212527292b2c2c2c2c2b2a282522211f1b15110d08020000000000000000000000000000000000000000000000000000040c13191d2021292929292929282724201a13151b1f21222929292929292525221e18110901000000000000000000000000000000000000000000000000000000000000000000040c141b212628292d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d282724201a130b020000000000000810161c2023232d2d2d2d2d2d2d2323201c161008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060606060606060713202d3a4653606d79868f8f8f8f8f867a6d6053473a2d201407060606060606060000000000000000000000000000000000000006131f2c3845515c6775828f9ba8b2ab9f92857a6d60574d41382d2217110a020000000000000000000001081018222b37424e57646f7475716d6865615e56514b43392f24180c000013202c3946535f6c7986929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9a8e8174675b4e4134281b0e01000013202c3946535f6c7986929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9a8e8174675b4e4134281b0e0100000000000003090e1214202d3a4753606d7a86939f9f9f9f9286796c5f5346392c201514120e09030000000000000000000000000000000815212e3a47535f6a75828f989691837c76737273767d849197978e8174685e5246392d2014070000000000000000000000000000000000000000000000000000000000050c151d2328363e464f575f686d78818c939993877d70695e52463a2d20140700000000000000000000000000000000000013202d394653606c7986939393939393939c9f9f9c9393939393939386796c605346392d20130000020e1a25303b4754616d7a86929fa9aa9e9184796d605b534d4847454546484f565e69727f8c98a2aaa69b8e8275665c5044382c1f1206000000000000000000000000000000000000000000000000000000060f181f262b2d2e3939393939393939392e2d2a251e170e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202a343c4347484f5152525352514f4b4746413a35302820191108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004090e121415181b1d1e1f20201f1e1d1b191515120f0a0401000000000000000000000000000000000000000000000000000000000002080d1113141d1d1d1d1d1d1b1a18140f080a0f1215151d1d1d1d1d1d191816120d07000000000000000000000000000000000000000000000000000000000000000000000000030a1015191c1d2020202020202020202020202020202020201b1a18140f08010000000000000000050b1014161720202020202020171614100b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a0d0f101313100f0d0a0500000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7986939b9b9b93867a6d6053473a2d201407000000000000000000000000000000000000000000000000000004101c2934404b5563707d8a96a1acaea2988c7f73695e53493f3327221b140b090603000001000205080d1319222a343c47535f6a7481827e7a76716d68605d554b4035291d10040013202c3946535f6c79869293939393939393939393939393939393939393939393939393939393939393939393939393939393938e8174675b4e4134281b0e01000013202c3946535f6c79869293939393939393939393939393939393939393939393939393939393939393939393939393939393938e8174675b4e4134281b0e010000000000050d141a1e21212d3a4753606d7a8693939393939286796c5f5346392d2d21211e1a140d0500000000000000000000000000000915222f3c4855626f7b88949e91847a6f6a6665666b6f7b85929e93877b6e6154473b2e21140800000000000000000000000000000000000000000000000000000000060e161e272e344048505960696e7a828e939f948c7f736b60574d42362a1e110500000000000000000000000000000000000013202d394653606c7986939f9f9f9f9f9fa9ababa99f9f9f9f9f9f9386796c605346392d20130000000914202d3946525d6874808d97a2aca0968d80746d615e575554515153555960686e7b86929faaab9f94897c6f63544a3f34281c100300000000000000000000000000000000000000000000000000000000060e141a1e21222c2d2d2d2d2d2d2d2d21201e19140d05000000000000000000000000000000000000000000000000000000000000000000000406070a0d0f11121313131212100e0c090606030000000000000000000000000000000000000000000000030f1b26313c464e53555b5d5e5f5f5f5e5c5854524c46413a322b231a1208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080b0e10111213131212100e0c0908060300000000000000000000000000000000000000000000000000000000000000000000010407071010101010100e0d0b08030000030608091010101010100c0b09060100000000000000000000000000000000000000000000000000000000000000000000000000000005090d0f101313131313131313131313131313131313130e0d0b08030000000000000000000000000407090a131313131313130a090704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a11161a1c1d20201d1c1a16110a030000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0a8a093867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000c18232f394653606c7884919ea8b2aa9f92867b6e655b50443e332d261d1a1312100b060e090e1214191e2429343c46505a626e7b878f8b86827e7a766d675d5145392c1f13060013202c3946535f6c7987868686868686868686868686868686868686868686868686868686868686868686868686868686868686868174675b4e4134281b0e01000013202c3946535f6c7987868686868686868686868686868686868686868686868686868686868686868686868686868686868686868174675b4e4134281b0e0100000000050f171f252a2d2e393a4753606d798686868686868687796c5f53463939392e2d2a251f170f05000000000000000000000000000d192633404c5966737f8c99968a7d70685f5858596069717e8b98998b7e7165584b3e3225180b000000000000000000000000000000000000000000000000000000070f18202830394045525a616b6f7b838f949d968f82776c60594f453b30251a0e0200000000000000000000000000000000000013202d394653606c7986939facacacacacb6b7b7b6acacacacac9f9386796c605346392d201300000005111d2935414c56616d7a85929fa5a89d928c7f756e696461605d5c6062656b6f7a839198a2aea3999083766b605442382e23170c00000000000000000000000000000000000000000000000000000000000003090e1214151f20202020202020201414110e0802000000000000000000000000000000000000000000000000000000000000000001070c10131416191c1d1f1f20201f1e1d1b191613120f0b0600000000000000000000000000000000000000000006121f2b37434e585f62686a6b6c6c6c6b6865615e56524c443d352c241a110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d151c2226292a2d2d2a2926221c150d0400000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0aca093867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000007121f2b3844505b66727f8b96a1acaea2988f82776c605a50443f382f2b26201f1c171b1a1b1a1e2124292f353e464e58626c75828f9999928f8b8682796d6053473a2d20140700121f2c3845525e6a757979797979797979797979797979797979797979797979797979797979797979797979797979797979797979746f64594c4033271a0d010000121f2c3845525e6a757979797979797979797979797979797979797979797979797979797979797979797979797979797979797979746f64594c4033271a0d01000000030d17212931363a3b464645515c67767979797979797979756a5e52464646463b3a36312921170d030000000000000000000000020f1c2935424f5c6875828f9b9184786b61564e4c4f57606d7a86929a8e8174675b4e4134281b0e0100000000000000000000000000000000000000000000000000071019212a323a434b515b636c717d8591959f9991847a6d655b50473d33291f14090000000000000000000000000000000000000013202d394653606c7986939facb9b9b9b9c3c4c4c3b9b9b9b9ac9f9386796c605346392d2013000000010d1924303a46525e68727e8b939ea7a49c918c827b75716e6d67666d6f71767d849195a0aaa69f92877c6f63594f4330261c1106000000000000000000000000000000000000000000000000000000000000000002050708121313131313131313080705020000000000000000000000000000000000000000000000000000000000000000040a0f12181c1f202326282a2b2c2c2c2c2b2a282523201f1c17110f0a030000000000000000000000000000000000000815212e3a47535f6a6f7577787979797775726d68615d564f473e362c231a1006000000000000000000000000000000000000000000000000000000000000000000000000000000020507080b0e111112131312110f0c0908060300000000000000000406070b0f1213131211100e0c0b09060100000000000000000000000000000000000000000000000000020507080b0d0f1112131313131211100e0b08080602000000000000000000000000000000000000000000000000000000000000000000050a0d0f101313100f0d0a0500000000000000000000000000000000000000000000000000000000050a0d0f101313100f0d0a050000000000000000000000000000000000000000000000000000000000050a0d0f101313100f0d0a0500000000000000000000000000000000000000000000000000030d161f272d32353639393635322d271f160d03000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7986939f9f9f93867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000030f1c28333f4a54606d7984919ea6b0aa9e948c7f726c615a5049413c37312d2b2823272728252a2d2f353a41454f585f6a717e8b939ea39f9c998f8275675d5145392c1f130600111d2a36424e59636a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c67645d53483c3024180b000000111d2a36424e59636a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c67645d53483c3024180b0000000009141f29333b4246485353534b555c6c6c6c6c6c6c6c6c6c6a635953535353534846423b33291f1409000000000000000000000004101d2a3743505d6a7683909c8f827669594f443f45515d677784919c8f8275695c4f4236291c0f03000000000000000000000000000000000000000000000000040f19222b333c444c555c606d737e869297a09f92877c6f685d53493f352b20170d020000000000000000000000000000000000000013202d394653606c7986939facb9c6c6c6cfd0d0cfc6c6c6b9ac9f9386796c605346392d20130000000008131e2a36414c56626d75818e959fa6a49c948f86827e7b7a7979797b7e83899196a0a7a59e948c7f736b6054473d321e150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f161b1d23292c2d303335373839393939383635322f2d2b28221c1b150e0903000000000000000000000000000000000915222f3c4855626f7c81848585868584827e7a746d68605950483e352c22180d0300000000000000000000000000000000000000000000000000000000000000000000000003090e121415181b1d1e1f201f1f1d1b191515120f0a0401000000070c101313181c1e1f201f1e1d1b181815120d060000000000000000000000000000000000000000000205090e121415181a1c1e1f1f20201f1f1e1c1a181514120e09060300000000000000000000000000000000000000000000000000000000030a11161a1c1d20201d1c1a16110a03000000000000000000000000000000000000000000000000030a11161a1c1d20201d1c1a16110a0300000000000000000000000000000000000000000000000000030a11161a1c1d20201d1c1a16110a0300000000000000000000000000000000000000000000000a151f2831383e4243464643423e3831281f150a000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d79869393939393867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000b17222d3845515c67717e8b949ea9b0a69f92877e716c605b534d47423c3a38342e34343531363a3b41454c5159616a6f7c86929fa5aea99f93877c6f62554b4035291d1004000e1a26313d4751595e5f606060606060606060606060606060606060606060606060606060606060606060606060606060606060605b59534a41362b2014080000000e1a26313d4751595e5f606060606060606060606060606060606060606060606060606060606060606060606060606060606060605b59534a41362b201408000000020e1a25313b454d535f6060606060605d606060606060605f5e5c6060606060605f534d453b31251a0e020000000000000000000004101d2a3743505d6a7683909c8f827669594f454045515d677784909c8f8275695c4f4236291c0f030000000000000000000000000000000000000000000000000a16212b343d454d565e676d757f8a9298a19e938b7f726a60564c41382d23190e05000000000000000000000000000000000000000013202d394653606c7986939facb9c6d2d2dcdddddcd2d2c6b9ac9f9386796c605346392d201300000000020d1925303a44515b606d798390949da5a69e98928f8b8887858586888b90949ea1a8a39f938e82786d60594f43352b210c0300000000000000000000000000000000000000000000000000010406070a0d0f11121313131212100f0d0a070704010000000000000000000000000000000000000000000000000000000000000000060b151b21272c2f34383a3d40424445464646454543413f3c3938332d2b26201a150b060000000000000000000000000000000a1724313d4a5764707d8a9091929292918f8b86807a706b615a50473e342a1f150b01000000000000000000000000000000000000000000000000000000000000000000040a0f141a1e212125282a2b2c2c2c2b2a282622211f1b15110d08030b12181c1f2025292b2c2c2c2b2a272524221d18110901000000000000000000000000000000000003090e12141a1e21212527292a2b2c2c2c2c2c2a29272522211e1a15120f0a0400000000000000000000000000000000000000000000000000040d151c2226292a2d2d2a2926221c150d0400000000000000000000000000000000000000000000040d151c2226292a2d2d2a2926221c150d040000000000000000000000000000000000000000000000040d151c2226292a2d2d2a2926221c150d0400000000000000000000000000000000000000000005111c27313a434a4e505353504e4a433a31271c11050000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7886868686868686796d6053473a2d2014070000000000000000000000000000000000000000000000000000000006111c2834404b55616c75828f97a2abafa39992877e726c655f57534d4946443f41414141424246484c52555d606b707c859298a2aeada2978f82756a5f5343392f24180c00000915202b353f474e52535353535353535353535353535353535353534d545b60666c6c6c6c6c6a5c544a53535353535353535353534e4c4841382f251a0f030000000915202b353f474e52535353535353534d575e6c6c6c6c6c6c6c6a665f55535353545e66696c6c6c6c6c6c6c5e574d5353535353534e4c4841382f251a0f0300000005121e2a36424d575e6c6c6c6c6c6c6c6a665f55535353545e66696c6c6c6c6c6c6c5e574d42362a1e120500000000000000000000020f1c2935424f5c6875828f9b9184786b61574f4d5058606d7a86929a8e8174675b4e4134281b0e010000000000000000000000000000000000000000000000030f1b27323d464e575f686d79818c929fa3a0958e81756d62584e443a2f261b110800000000000000000000000000000000000000000013202d394653606c7986939facb9c6d2dfe9eaeae9dfd2c6b9ac9f9386796c605346392d2013000000000008131e28323f45515d676d7a828e939da0a7a39f9b97949892929895989c9fa6a7a099928d81786d665c50463d3223190f00000000000000000000000000000000000000000000000004080d111314171a1c1d1f1f20201f1f1d1c1a171413110d080400000000000000000000000000000000000000000000000000000000020a111720262b323839404547494c4f50525253535251504e4c4946443f3837312b262017110a02000000000000000000000000000a1724313d4a5764707d8a979e9f9f9f9e9b98928d847d716c61594f463c31271d12070000000000000000000000000000000000000000000000000000000000000000060c161b1f252a2d2e31343738393939383735322f2e2b26201d19130c151d23282c2d32353839393838363432312e29231b130900000000000000000000000000000003090e141a1e21252a2d2e31343637383939393938373634322f2e2b26211f1b150f0a0400000000000000000000000000000000000000000000030d161f272d32353639393635322d271f160d030000000000000000000000000000000000000000030d161f272d32353639393635322d271f160d03000000000000000000000000000000000000000000030d161f272d32353639393635322d271f160d0300000000000000000000000000000000000000000a16222d38434c545a5d60605d5a544c43382d22160a00000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844505c66767979797979797976675c5145382c1f130600000000000000000000000000000000000000000000000000000000000c18232e3943505a616e7b859299a3afaba39992877f776e69615f575553504a4e4e4d4e4f4d5354565d60676d747d859297a1aaaea49e92857b6e61584e4331271d12070000040f19242d353d424546464646464646464646464646464646424651575f666c72797979797975665c50444646464646464646464641403c362f261d130800000000040f19242d353d424546464646464646535e69767979797979797771665b4f464e5a66707679797979797976695e5346464646464641403c362f261d1308000000000714212d3a46535e69767979797979797771665b4f464e5a66707679797979797976695e53463a2d21140700000000000000000000000d192633404c5966737f8c99968a7d706960595a5a616a727e8b98998b7e7265584b3f3225180c00000000000000000000000000000000000000000000000007131f2c38434e5860696e7a828e939ca4a2989183796d605b51463d32281d140a0000000000000000000000000000000000000000000013202d394653606c7986939facb9c6d2dfecf6f6ecdfd2c6b9ac9f9386796c605346392d20130000000000020c16202935404b555d686d78818991959c9fa3aba4aaa29f9fa2aaa4aba49f9c95908780786d665c544a3f342b21100700000000000000000000000000000000000000000000070c1013191d20212426292a2b2c2c2c2c2b2a28262421201d1913100c0701000000000000000000000000000000000000000000000000040b141c222832373d43484b515356595b5d5e5f5f5f5f5e5d5b585653504a47433c373127221b140b030000000000000000000000000a1724313d4a5764707d8a979e9ea2a9a9aaa39f9691877e716b61584e43392f23180c030000000000000000000000000000000000000000000000000000000000030a111720272b31363a3b3e4144444546464544423f3c3b37322c29241e191e272e34383a3e42454646454443413f3d3a342d251b110600000000000000000000000000060b151a1f262a2d31363a3b3e4042444546464646454443413e3b3a37312e2b26201b150c070000000000000000000000000000000000000000000a151f2831383e4243464643423e3831281f150a00000000000000000000000000000000000000000a151f2831383e4243464643423e3831281f150a0000000000000000000000000000000000000000000a151f2831383e4243464643423e3831281f150a00000000000000000000000000000000000000010d1a26323e4a545e66696c6c69665e544a3e32261a0d01000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a545c6c6c6c6c6c6c6c6c6c5c554b4034291c1004000000000000000000000000000000000000000000000000000000000007121d27303e46525e69707d87929fa4acaba399938c827b746e696562605c545b5a5a5b5c575e6164686d737a808a9297a1a9afa59d928a7e70695e52463c321f150b0100000008121b242b31363839393939393939393939393930353e444d525b62696e787f8686868687796d6053463a3939393939393939393433302b251d140b01000000000008121b242b31363839393939393b4854616e7b86868686868683776a5d50444f5c6976828686868686867b6e6154483b393939393433302b251d140b01000000000815212e3b4854616e7b86868686868683776a5d50444f5c6976828686868686867b6e6154483b2e21150800000000000000000000000916222f3c4955626f7c88949e91847b706b6766676c717c85929f93877b6e6154473b2e2114080000000000000000000000000000000000000000000000000915222e3b4854606a6f7b8490949ea5a49f92867c6e675d51493f342b20160b020000000000000000000000000000000000000000000013202d394653606c7986939facb9c6d2dfececececdfd2c6b9ac9f9386796c605346392d2013000000000000050e18242f3a434c565d666d747d848a8f92999a9c9e9e9f9f9e9d9c9a99938f8a837c736c665c544a42382e22190f000000000000000000000000000000000000000000060b12181c1f24292c2d31333537383939393938373533302d2c29241f1c18120c0700000000000000000000000000000000000000000000040d161d262d333c43474f54555c606366686a6b6c6c6c6c6b69686562605b54534e47423c332d261d150d0300000000000000000000000a1724313d4a5764707d8a92919297979c9fa6a9a19992877d706a5f554b4034291f140900000000000000000000000000000000000000000000000000000000030c151c232832373b4246484b4e505152535252504e4c4847433c39352f28222b30394045464b4f5152535251504e4b4a463f372d23180d0100000000000000000000020a11171f262b31363a3b4246484b4d4f51525253535252514f4d4b4847423c3a37312b262018120b0300000000000000000000000000000000000005111c27313a434a4e505353504e4a433a31271c110500000000000000000000000000000000000005111c27313a434a4e505353504e4a433a31271c11050000000000000000000000000000000000000005111c27313a434a4e505353504e4a433a31271c1105000000000000000000000000000000000000030f1c2935424e5a66707679797670665a4e4235291c0f030000000000000000000000000000000000000000000000000000000000000000000000000c17232e38424a505f606060606060605f514b43392f23180c000000000000000000000000000000000000000000000000000000000000000b151e2a36424d56606b717f8b939aa3ababa49f948f86817b76726f6d6668686767686869696e71757a7f858d929ea2a9afa59e938d80746c61574d42342a200d03000000000009121920262a2c2c2d2d2d2d2d2d2d2d2429323a414650565e616d727b828c929992877e71665c5044382b2d2d2d2d2d2d2d2d282724201a130b020000000000000009121920262a2c2c2d2d2d2e3b4854616e7b87939393939083776a5d50444f5c6976828f93939393877b6e6154483b2e2d2d2d282724201a130b0200000000000815212e3b4854616e7b87939393939083776a5d50444f5c6976828f93939393877b6e6154483b2e21150800000000000000000000000815212e3b47535f6a76828f989691847d77747374777e859297978e8174695e52463a2d2014070000000000000000000000000000000000000000000000000916232f3c4956626f7c85919693939393928a7e716a5f554b40372d22190e04000000000000000000000000000000000000000000000013202d394653606c7986939facb9c6d2dfdfdfdfdfdfd2c6b9ac9f9386796c605346392d20130000000000000007131d28313a444c545c606b70787e82868a8d8f9192929291918f8d8a86827d786f6a605b544a423930261c100700000000000000000000000000000000000000020a11171c23282c2f35393a3d4042444546464645454342403d3a39352f2c29231d18120b0300000000000000000000000000000000000000030c161f282f383f444e54596063676d707375777879797978787674726f6c66625f58534d443f382f271f150d03000000000000000000000a1724313d4a5764707d87858585868a8f949fa2aaa39992867c6f675c51453b31261a0e030000000000000000000000000000000000000000000000000000030d151e262e343d43474d5354585b5d5e5f5f5f5e5d5b5955534e4745413a3129343c424b5153585c5e5f5f5f5e5d5a585651493f34291d1206000000000000000000040c141c232831373b4246484d5354585a5c5d5e5f5f5f5f5f5d5c5a5855534d4847433c373228231d150c0500000000000000000000000000000000000a16222d38434c545a5d60605d5a544c43382d22160a0000000000000000000000000000000000000a16222d38434c545a5d60605d5a544c43382d22160a000000000000000000000000000000000000000a16222d38434c545a5d60605d5a544c43382d22160a00000000000000000000000000000000000003101d2a3643505d69768286868276695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000000000006111c2630383f4453535353535353535345403931271d120700000000000000000000000000000000000000000000000000000000000000030c1925303b444f59626d727f889299a1a8afa69f99928e88837f7c797775747474747576787b7e82868c92979da4adaba39f938e81786d605a50453b3022180e00000000000000080f151a1d1f202020202020191f282f353e444c525a61696e767f8690949a93877e716c61544a3f34281c202020202020201b1a18140f0801000000000000000000080f151a1d1f202020212e3b4854616e7b87949f9f9d9083776a5d50444f5c6976828f9c9f9f94877b6e6154483b2e2120201b1a18140f08010000000000000815212e3b4854616e7b87949f9f9d9083776a5d50444f5c6976828f9c9f9f94877b6e6154483b2e211508000000000000000000000006131f2b37434e58626f7c86929a96918984818081848a92979892857a6e61564d42362a1e11050000000000000000000000000000000000000000000000000d1a2633404d59667380868686868686868680746c61574e43392f251b100700000000000000000000000000000000000000000000000013202d394653606c7986939facb9c6d2d2d2d2d2d2d2d2c6b9ac9f9386796c605346392d201300000000000000010c161f28323a424b515960666c71767a7d808284858686858483807d7a75706c666058504a423930271e140a00000000000000000000000000000000000000050b141c22282e34383a4145474a4d4f50525253535252504f4d4a4745413a38342f28231d150c070000000000000000000000000000000000000b151e283139424a50585f626b6f75797d7f828385858686858483817f7c79746f6a625f575049413931271f150b010000000000000000000714202d3a4753606d79797878787a7d828a9298a1a9a2989083796d60574d42362a20150a00000000000000000000000000000000000000000000000000010b151f2730383f444e54575e6164676a6b6c6c6c6b6a6865625f5854524c433f353c464e545c6065686b6c6c6b6b696765625b51463a2e2215090000000000000000050e161e262e343c42474d5355575e616467696a6b6c6c6c6c6b6a696765625f5755534e47433c342e271e170e05000000000000000000000000000000010d1a26323e4a545e66696c6c69665e544a3e32261a0d0100000000000000000000000000000000010d1a26323e4a545e66696c6c69665e544a3e32261a0d010000000000000000000000000000000000010d1a26323e4a545e66696c6c69665e544a3e32261a0d01000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000000000000000000000000000000000000000000000a151e262e343846464646464646464638342f271f150b01000000000000000000000000000000000000000000000000000000000000000009141f29323d47505a626d727e8791969ea5acaba39f9a95908c8885848281818081828385878b8f92989fa2a9ada8a099928d81786d665c50483e33291f1006000000000000000004090e1112131313130f19222b313a41454f565e616c717b828b92989a93887e716c615a5042382e23170b1313131313130e0d0b080300000000000000000000000004090e1112131315212e3b4854616e7b8794a1aa9d9083776a5d50444f5c6976828f9ca9a194877b6e6154483b2e2115130e0d0b080300000000000000000815212e3b4854616e7b8794a1aa9d9083776a5d50444f5c6976828f9ca9a194877b6e6154483b2e2115080000000000000000000000030f1b26323c47535f6a717e8892989e95908d8d8e91969e9792867d6f685e52443b3025190e020000000000000000000000000000000000000000000000000c1925323f4b57636d737979797979797979746e645a50453c31281d12090000000000000000000000000000000000000000000000000013202d394653606c7986939facb9c6c6c6c6c6c6c6c6c6c6b9ac9f9386796c605346392d20130000000000000000040d162028303940454f545b6064686e7174767778797978777673716e6863605b544e443f382f271e150c02000000000000000000000000000000000000070f171d262d33394044464c525457595c5d5e5f5f5f5f5e5d5b595754524c47454039342e271e1810090000000000000000000000000000000007121d273039434b545b606a6f767c8185898c8e90919292929291908e8b8985817c756e69605b534b433931271d120700000000000000000006131f2c3845515c676d6d676b676d70767e869297a1aaa0958c8073695f53463c31261a0f0300000000000000000000000000000000000000000000000007121d273139424a50586062696e71747777787979787775726f6a66605d56504540454e5860666d717578797978777674726d62564a3d3124180b00000000000000050e17202830383f444d53575f6166696e71737577787979797978777674716e6967625f58544e454039302920170e050000000000000000000000000000030f1c2935424e5a66707679797670665a4e4235291c0f0300000000000000000000000000000000030f1c2935424e5a66707679797670665a4e4235291c0f030000000000000000000000000000000000030f1c2935424e5a66707679797670665a4e4235291c0f03000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000000000000030c151c23282c3939393939393939392c29231d150d03000000000000000000000000000000000000000000000000000000000000000000020d17202b353f48515b626c717d848e939da0a7abaca79f9d989892908f8e8d8d8e8f909298979c9fa3aaada9a29f96918780786c665c544a3f362c21170d00000000000000000000000104060606000a16212b343d434b515961686d757e858f949f9f93887f716c625a50483e30261c110600060606060601010000000000000000000000000000000000010406060815212e3b4854616e7b8794a1a99d9083776a5d50444f5c6976828f9ca9a194877b6e6154483b2e211508010100000000000000000000000815212e3b4854616e7b8794a1a99d9083776a5d50444f5c6976828f9ca9a194877b6e6154483b2e2115080000000000000000000000000a15202b37434e58616c717e868f949a9d9a999a9d99938f857d706b60564d4132291f1409000000000000000000000000000000000000000000000000000a16232f3b47525b63666c6c6c6c6c6c6c6c67645c52483e332a1f160c000000000000000000000000000000000000000000000000000013202d394653606c7986939facb9b9b9b9b9b9b9b9b9b9b9b9ac9f9386796c605346392d2013000000000000000000040d161e272e343d424a5053565e616467696b6b6c6c6b6a696764615e5653504a423c332d261d150c0300000000000000000000000000000000000007101921292f383f444a5153565d606466686a6b6c6c6c6c6b6a686663605d5653514b454039302a221a12090000000000000000000000000000040d18232e39434b555d666c737c83898e9298999b9d9e9f9f9f9f9e9c9b9897918d88827b736c655d554b43392f24180e05000000000000000004101c2934404b555c60605c555d60646c717c859298a3a79f92867b6e61584e43372b1f14090000000000000000000000000000000000000000000000020c18242f39434b545c606a6f757b7e8183848586858583817f7c78726d68625a514b4d57606a6f797e82848586858483817f7265584b3f3225180c000000000000030c172029323a424a50575f62696e73777b7e8082848585868685858482807e7b78736f6a625f58514b423a322920170c030000000000000000000000000003101d2a3643505d69768286868276695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768286868276695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768286868276695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000000000000000000000000000000000000000000000000030a11171c1f2d2d2d2d2d2d2d2d2d1f1c18120b030000000000000000000000000000000000000000000000000000000000000000000000050e19232d363f49515a626b6f7a818990959c9fa6a9aca9aaa29f9d9b9b9a9a9b9b9c9fa2aaa8acaaa9a19e97928c847c736c665b544a42382e241a0f0500000000000000000000000000000000030f1b27323d464e555d606b707a818a92979f9b918b7f726d625a50483e362c1e140a0000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b87949c9c9c9083776a5d50444f5c6976828f9c9c9c94877b6e6154483b2e211508000000000000000000000000000815212e3b4854616e7b87949c9c9c9083776a5d50444f5c6976828f9c9c9c94877b6e6154483b2e211508000000000000000000000000040f1b26313c46505a616c717c82898d90929291908d88827b706b60594f443b3020170d020000000000000000000000000000000000000000000000000007131e2a35404952575960606060606060605a58524a40362c21180d04000000000000000000000000000000000000000000000000000013202d394653606c7986939facacacacacacacacacacacacacac9f9386796c605346392d201300000000000000000000040c151d23282f383f44464c5254575a5c5e5f5f5f5e5e5c5a5754524c46443f382f28221c140b03000000000000000000000000000000000000071119222b333b424a50545c6064686d70737577787979797878767573706d6864605c55514b423c342c241b1209000000000000000000000000010c161f2834404b555d676d78808790949b9fa2a9a29e9c9b9a9a9b9d9fa3a9a19e9a948f877f776d675d554b40352920170d0200000000000000000c18232f39434b515353514b51535a616a6f7c86929fa7a3988e81756a5f53473b30251a0e01000000000000000000000000000000000000000000000a141e2935404b555d666d747c82878b8e909192929291908e8c88847f7a716d605d55535f696f7c848b8f9192929291908d86796c605346392d20130000000000000b151e29323a444c545c60696e757b8084878b8d8f90919292929292908f8d8b8884807c766f6a605c544c443b32291e150b0000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000000000000000000060c101220202020202020202013100c07010000000000000000000000000000000000000000000000000000000000000000000000000008111b242d373f48505960686d757d83898f94989c9fa3aba7a8aaa8a7a7a7a7a8a9a9a7a5a8a09e9a97918c8580796f6b605b544a423830261c1108000000000000000000000000000000000007131f2c38434e5860676d747d858e939fa29b918b7f726d625a50483f362d241a0c020000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b878f8f8f8f8f83776a5d50444f5c6976828f8f8f8f8f877b6e6154483b2e211508000000000000000000000000000815212e3b4854616e7b878f8f8f8f8f83776a5d50444f5c6976828f8f8f8f8f877b6e6154483b2e211508000000000000000000000000000a15202a343e48505a616a6f767c808385868583807c756e6960594f473d32291f0e050000000000000000000000000000000000000000000000000000020d19242e3740474b4d53535353535353534d4c4740382f241a0f0600000000000000000000000000000000000000000000000000000013202d394653606c7986939f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9386796c605346392d20130000000000000000000000030b12181d262d33383b4146474a4d4f515253535251504d4a4746413b38332d261d17110a02000000000000000000000000000000000000060f19232b343d454d545b60666d71767a7d8082838585868685858382807d7a76716d67605c544e463e362d241b1108000000000000000000000008131e28313a45515c676d79828d92999fa6a39f9a97928f8e8d8e8e9092989b9fa3a69e99928c82796d675d51453f32291e1408000000000000000007121d27313940454747454045475058606a727f8c959faa9f93877c6f62574d42362a1d120700000000000000000000000000000000000000000006111c26303845515d676d7880898f93999a9d9e9f9f9f9e9d9b9896918c857e756d675d58626e7b8691969b9e9f9f9e9e9c9386796c605346392d2013000000000007121d27303a444c565d666d737b81878c9196979a9c9d9e9f9f9f9f9e9d9c9a9896918d88827c746d665e564c443b30271d120700000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000000000000000000000003061313131313131313130604000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b252d363f474f565e616b70787d82878b909299989a9c9d9e9f9f9f9e9e9d9c9b999696918d89857f7a736d676059504a42382f261e140a0000000000000000000000000000000000000915222e3b4854606a6f79818a91979ea39c918c7f726d625b51483f362d241b1208000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a8283838383828074675a4e414d5a6673808283838383827a6e6154473b2e211408000000000000000000000000000814212e3b4754616e7a8283838383828074675a4e414d5a6673808283838383827a6e6154473b2e21140800000000000000000000000000030e18222c363e4850585f626b6f737778797876736f6a615e574f473d342b20170d0000000000000000000000000000000000000000000000000000000007121c252e353b3f404646464646464646413f3c362f261d12080000000000000000000000000000000000000000000000000000000013202d394653606c798693939393939393939393939393939393939386796c605346392d201300000000000000000000000000070b141c22282b3036393b3e414344454646454443403e3b3936302b28221c140b0600000000000000000000000000000000000000030c18212b353d464f575e666c71797e82868a8c8f90919292929291908e8c8a86837e79726d665f5850483f362d231a0e05000000000000000000010d19242f3a43505a606d79828f949fa3a7a099928e898583818181828386898e92999fa7a39f948f82796d605b51443b3025190e0200000000000000010b151f272f34383a3a3835393e464e58606c7883909da6a49a8e8175695e5246392f23180c0000000000000000000000000000000000000000000b17232e3842505a606d79828d929b9fa4ababa39f9d9c9b9c9d9fa19e97928b82796d685f6a76828f98a1a8aaa39f9995949386796c605346392d201300000000000c18232e39434c565e686d7880868e93999da0a8aba39f9d9d9c9c9c9d9fa2aaa8a19e9a948f8780786d685e564c42392e23180c03000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131b242d353d444c525960656c70767b7f8386898b8d8f9091929292929190908e8c8a8784807c79726d67605d554f443f382f261d140c020000000000000000000000000000000000000916232f3c4956626f7c848e9393939393918c7f726d625b51493f362d241b120900000000000000000000000000000000000000000000000000000000000000000714202d3946525e686e767676767676746e64584c404b58636e737676767676766e685e5246392d201407000000000000000000000000000714202d3946525e686e767676767676746e64584c404b58636e737676767676766e685e5246392d201407000000000000000000000000000006101a242c363e464e53596063676a6b6c6b6a66625f58534d453d352b22190e0500000000000000000000000000000000000000000000000000000000000a131c242a2f323339393939393939393433302b241d140b000000000000000000000000000000000000000000000000000000000013202d394653606c798686868686868686868686868686868686868686796c605346392d20130000000000000000000000000000020a11171c1f252a2d2e3134363838393938373634312e2d2a251f1c17110a0200000000000000000000000000000000000000000a151e2a333d474f5960696e787e848a8f9299999b9d9e9f9f9f9f9e9d9b9999928f8b857f796f6a615a50483f352b20170d02000000000000000004111d2935414c56616c74818e949ea6a69f959087817c79767474747577797d818790959ea5a69e948e81756d62564c41362a1e14080000000000000000030d151d23292c2d2d2c292c343d44505b666f7c89949eac9f92877b6e61554b4034291c10040000000000000000000000000000000000000003101c28343f4a54616c74818e949da4aca7a09d9992908f8f8f9192999a9e9f948f837a6d666f7c88949faaaea398928c88878886796c605346392d20130000000004101c2834404b555e686d7a828c92999fa4a9a19e99999291908f8f90909298989da0a8a69e99928d837a6e685e544b40342820150a000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000000000000000000010406070a0d10111213131211100d0a070604000000000305050606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000109121b232b323a41464f535b6063696e7276797c7f8182848585868685848483817f7d7b7773706d66605d55514b433d332d261d140b02000000000000000000000000000000000000010e1b2734414e5a67748186868686868686867f736d635b51493f372d241b120900000000000000000000000000000000000000000000000000000000000000000005111e2a36414c565e6169696969696967645c52473c47525c6366696969696969615e564c41362a1e11050000000000000000000000000005111e2a36414c565e6169696969696967645c52473c47525c6366696969696969615e564c41362a1e110500000000000000000000000000000008121a242c343c43474f54565a5d5f5f5e5d5a55534e46423b332b23191007000000000000000000000000000000000000000000000000000000000000010a12191e2325262d2d2d2d2d2d2d2d2726241f19130b02000000000000000000000000000000000000000000000000000000000013202d3946535f6c767979797979797979797979797979797979797979766c5f5346392d201300000000000000000000000000000000060b0f14191e20212427292b2c2c2c2b2b29272421201e19140f0b0600000000000000000000000000000000000000000006111c26303c454f59606b6f7b828b91969c9fa3a9a19e9c9b9a9b9c9d9fa2aaa39f9c97928c847c716c625a50473d32291e130800000000000000000613202c3945525d68717e8a939da6a89f948f837c746f6c6668676768666d70757c838f939ea7a69e938b7f72685e52463b3025190d010000000000000000030b12181c1f20201f1d2228333f4a54606b75828f9ca8a3998d8073675c5145382c1f14090000000000000000000000000000000000000006121f2b3844505c66717e8b939ea6aea59d95908a86838282838486898d92979f959083786d73808d99a6b0a89f9286807c7a7b7d7063574a3d3024170a000000020d17202c3845515c676d7a838f949fa3aaa29f97918c898684838282838485888b91969ea1a9a39f9590837a6e665c51453c31261a0f020000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000000000000000001080d111314171a1d1e1f1f201f1e1c1a171413100c07010c0f11121313131313130909070300000000000000000000000000000000000000000000000000000000000000000000000000000000091019202830363d41495053575e6165676d6f7274757778787979787877767472706e696763605c54514c45403a3128221c140b0200000000000000000000000000000000000000010d1a2733404c58646e747979797979797979736d635b51493f372d251b120900000000000000000000000000000000000000000000000000000000000000000000010d1925303b444c52545c5c5c5c5c5c5a58524a4136404a52585a5c5c5c5c5c5c54524c443b3025190d0100000000000000000000000000010d1925303b444c52545c5c5c5c5c5c5a58524a4136404a52585a5c5c5c5c5c5c54524c443b3025190d010000000000000000000000000000000008121a222a31373d4348494d50525352504d4947433c36312921191107000000000000000000000000000000000000000000000000000000000000000000070d1316191a20202020202020201a1a17130e0801000000000000000000000000000000000000000000000000000000000000121e2b37434f5a646c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c645a4f43372b1e1200000000000000000000000000000000000003080d111414171a1c1e1f20201f1e1d1a171414110e080300000000000000000000000000000000000000000000000c17232e38424d57606b707d8590949ea1a8a29e9997918f8e8e8e8f909298999ea2a9a19e9691867e716c62594f443a3025190d0400000000000004111d2935414c55606d7a85929ea5aca0968f82796e6a62605b545a5b545c60636a6e78818f959faba59f92857a6e61564c41362a1e110500000000000000000001070c10131414131017222d38424f5963707d8995a0ab9e9285796d6053473b31261a0e000000000000000000000000000000000000000713202d3a4653606d7884919ea5afa69d938e837d797776757677797c80858c9298958e81747683909ca9aca0958a7e736f6e6e706b6155483c2f23160900000009141f2b37434e58606d798390959fa6a8a098928b85807c79777675757677797c7f848a92979fa7a79f959083786d60584e43372b1e13080000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000000000003090e13191d20212427292b2b2c2c2c2b292724201f1c18120e181c1e1f2020202020201615130f0a04000000000000000000000000000000000000000000000000000000000000000000000000000000070e161e252a2f383f44464d5354555c60636567696a6b6c6c6c6b6b6a69686663615e575653504a45413a352f281f17110a020000000000000000000000000000000000000000000b1824303c48535c64676c6c6c6c6c6c6c6c66635b51493f372d251b130900000000000000000000000000000000000000000000000000000000000000000000000008141e29323b4146475050505050504e4c4741382f3840474b4d5050505050504746413b32291e140800000000000000000000000000000008141e29323b4146475050505050504e4c4741382f3840474b4d5050505050504746413b32291e140800000000000000000000000000000000000008101820262b32383b3c404445464543403c3b37322a251f170f07000000000000000000000000000000000000000000000000000000000000000000000002070a0c0d13131313131313130e0d0b070300000000000000000000000000000000000000000000000000000000000000000f1b27333e49525a5f60606060606060606060606060606060606060605f5a52493e33271b0f0000000000000000000000000000000000000000010507080b0e10111213131211100d0b0807050200000000000000000000000000000000000000000000000003101c28343f4a545f69707d8692979fa6a49d97928c888583828181828385898c92979fa3a8a09892887e716b60564c41362a20150a0000000000000613202c3945515d6773808d97a1ada69e91847a6d675f5853504a4e4e4b5153585f666d79839099a3ada2978d8174685e5246392d201409000000000000000000000000040607070606111c262f3d4854606b7784919daba2978a7e7164574d42362a1b11060000000000000000000000000000000000000b1824313e4b5764717e8a96a0acac9f948e8179716d67696869676d70747a7f869095938a7e7885929fabaa9d9184776c6261616361594f44382c2014070000020e1925303a47535f6a73808d959fa7aaa09691867f79736f6d676a696969666d6f72787d8590959fa9a79f958d80736a5f53473a3025190d0100000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000000060e141a1e24292c2d3033363738393939383634302d2c29231d1a24282b2c2d2d2d2d2d2d23221f1b160f07000000000000000000000000000000000000000000000000000000000000000000000000000000050c13191d262d33373b4246484b515356585a5c5d5e5f5f5f5f5e5d5d5b595754534d4946443f38352f29241d160d0600000000000000000000000000000000000000000000000814202b36414a53585a60606060606060605957514940372e251b130900000000000000000000000000000000000000000000000000000000000000000000000000020d1720293036393b43434343434341403c362f262e353b3f404343434343433b3936302920170d02000000000000000000000000000000020d1720293036393b43434343434341403c362f262e353b3f404343434343433b3936302920170d0200000000000000000000000000000000000000060e151b21272c2f30343738393837332f2e2b26201a140d0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16212c3740494f535353535353535353535353535353535353535353534f4940372c21160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844505c666e7b859298a2a9a49f928d857f7c78767574747576797c80858c9299a2aaa39a92877d70685e52463c32261b0f0200000000000714212d3a4754606d7a85929fa9aa9e94897d70685d554e46443f41414045464e545c676f7c87929faca99f92867a6e6154473c31261a0e0200000000000000000000000000000000000a141d2c38444f5965727f8c99a3a99c8f8276695f5346382d22170b000000000000000000000000000000000005121e2a36424d576875818e9ba8afa49a8f82786d66605d555c555c6063676d727b838f9391857b8797a2ada79a8d8074675a545557554f473e33281c1004000005111e2a36424d56626f7c87929fa7aea29891847c726d6763605c555c5c545c6062656c707a839097a1ada79f92877c6f62564c41362a1e110500000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000000070f181f262a2f35393a3d404344454646454443403d3a38342f2a252f3437383939393939392f2e2c272119100700000000000000000000000000000000000000000000000000000000000000000000000000000002080b141b22272b31363a3b404547494c4e4f5152525353525151504e4c4a4846423d3a38342e29241e18130c04000000000000000000000000000000000000000000000000030f1a252f3841484c4e53535353535353534c4b4640372e251c1309010000000000000000000000000000000000000000000000000000000000000000000000000000050e171e252a2d2e3636363636363433302b241d242a2f32333636363636362e2d2a251e170e050000000000000000000000000000000000050e171e252a2d2e3636363636363433302b241d242a2f32333636363636362e2d2a251e170e05000000000000000000000000000000000000000000040a0f161b1f2223272a2c2c2b2a2722211f1b150e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005080a0b13131313131313090806030000000000000005101b252e373e4346464646464646464646464646464646464646464646433e372e251b10050000000000000000000000030613131313131313130d0c0a07020000000000000000000000000003060809131313131313130b0b090501000000000000000004111d2935414c56606d78839097a2aaa49a938b807a736f6a6968676869666d6f737a80879298a2aba39992857a6d61584e43372b1e14080000000005111e2a36424d5765727f8b98a2aea99c8f82756b60564c433c38332d2e34383c424b555f6a74818e9ba8aea3988c7f7266574d42372b1e12050000000000000000000000000000000000020b1c27333d4754616d7a86929fac9f93877b6e6153493f33271b0f03000000000000000000000000000000000714202d3a46525e697885919eabac9f93877c6f665c54514b4f4b5153555d60696e79818f949083909da9b3a4988b7e7165584b484a48443e352c21160b0000000714202d3a46525e6975828e99a3afa89f92867c6f6a605c5553514b4f4f4a5053535b60686e7a85919ea7afa3998e8175685e5246392d20130700000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000030b1218212a31363a4145474a4d505152525352514f4d4a4745403936313a4044454646464646463c3b38322b22190f0400000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171b1f252a2d2f34383a3c3f4142444545464645454443413f3d3b3a36312d2c28231c19130d0701000000000000000000000000000000000000000000000000000008131d262f363c40414646464646464646403e3b352e251c130a0100000000000000000000000000000000000000000000000000000000000000000000000000000000050d14191e20212929292929292726241f1a13191f23262729292929292921201e19140d0500000000000000000000000000000000000000050d14191e20212929292929292726241f1a13191f23262729292929292921201e19140d05000000000000000000000000000000000000000000000000040a0f1315161a1d1f201f1d1a1615130f0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c11151718202020202020201615130f0a0400000000000009131c252c33373939393939393939393939393939393939393939393937332c251c130900000000000000000000060c101220202020202020201a1917130e0800000000000000000000040a0f13151620202020202020181715110c06000000000000000713202c3945525d68727f8c95a0a9a69f93887f746d68625f585b5b5b545c6063676d737d869299a4aba2978e81756a5f54473b3025190d010000000714202d3a46525e697683909daaada196897d7063594f433a312b282223282c3039434e58626f7c8895a0acaa9d908477695f53463a2d2114070000000000000000000000000000000000000b13202d3a4653606d7985929eaba49a8c8073655b5044372b1f1207000000000000000000000000000000000815212e3b4854616e7b8797a1adaa9d9083776a5f544b4540424045474b51575f676d78828f9590959fabb0a3968a7d7063574a3d3d3c38332c231a10050000000814212e3b4754616e7b87939fabaca0958a7e716a5f58514b47454042423f44464950565e68707d8a95a0acab9f92867a6d6154473a2e21140700000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000030c151c2328333b42464c5254575a5c5e5e5f5f5f5e5c5a5753514b46423b454c50525353535353534948433d342b21160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f141a1e2123292c2d303234363738393939383837363533302e2d2a25201f1c17110d080100000000000000000000000000000000000000000000000000000000010b141d252b303334393939393939393933322f2a231c130a0100000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d1114141d1d1d1d1d1d1b1a17140e080e1317191a1d1d1d1d1d1d1414110d080200000000000000000000000000000000000000000002080d1114141d1d1d1d1d1d1b1a17140e080e1317191a1d1d1d1d1d1d1414110d0802000000000000000000000000000000000000000000000000000000030709090d11121312100d090806030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000911171d2124252d2d2d2d2d2d2d22211f1b150e060000000000010a131b21272b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b27211b130a010000000000000000030a11171c1f2d2d2d2d2d2d2d2d2726231f19120a0200000000000000070f161b1f22232d2d2d2d2d2d2d2524211d1811090000000000000714212d3a4754606d7a85929fa7ab9f948c7f726d605d56534e4f4e4e4a5053555d606b707d87939faaa99e93887c6f62564c41362a1e11050000000814212e3b4754616e7b87959fabab9e9184786c6053463d31281f1c17181c1f27313c47535f6a7784919daaaca095887b6e6155483b2e221506000000000000000000000000000000000005111d2a36414c5664707d8a97a1adac9e9184786c605346392f24180c000000000000000000000000000000000916222f3c4955626f7c8895a9b3a79a8d817467584e4239352f34383a40454d555c666d7a85919d9fa7b1afa396897c706356493d302f2c28211a1108000000000c1925323f4c5865727f8b99a4afaa9d9184786c60574e45403a38342f2e34383a3f444d56616b7783909daaafa3998b7e7265584b3f2f24180d01000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000b151e272e343f454d53565d606366696a6b6c6c6c6b696763605c55534d444f575c5f60606060606056544e463d32271b0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e1214181c1f20232527292a2b2c2c2c2c2b2a2a28262421211e1a1312100c060000000000000000000000000000000000000000000000000000000000000000020b131a202427272d2d2d2d2d2d2d2d2625231e19120a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010507081010101010100e0d0b08030002070a0c0d1010101010100807050100000000000000000000000000000000000000000000000000010507081010101010100e0d0b08030002070a0c0d101010101010080705010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b22292d3031393939393939392f2e2b26201810060000000000010910161b1e202020202020202020202020202020202020202020201e1b161009010000000000000000030c151c23282c393939393939393933322f2a241c140a00000000000007101920272b2e2f3939393939393932312e29221b12090000000006131f2b37434e5866727f8c97a2ada79c9083786c605b524c47434241413f44464c5159616b73808d98a2aea59b8f8275685e5246392d2014070000000b1824313e4b5764717e8a97a7b1a79a8e8174665b5044382b1f160f0b0c10151f2b37434e586773808d9aa6b1a7988b7e7165584b3e2d22170b00000000000000000000000000000000000713202d3946525e6875828f9ba9b3aca196897c6f63554b4035291d10040000000000000000000000000000000a1723303d4a5663707d8996a3b0a6998c7f7366594c402f2924292c2f353b434b545d68707d8a959fabb7afa396897c706356493d3023201c1610080000000004111d2935414c556975828f9cabb2a9988b7e72655b50453c342e2c292323282b2d333b444f5965727e8b98a9b3ab9b8f827568554b4035291d1004000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000007121c273039404451575f61686d7073767778797978777673706d67615e57505761686b6c6c6c6c6c6c6260584e43382c1f13070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205070c10131416191b1c1e1f1f20201f1e1e1d1b19171514120e090603000000000000000000000000000000000000000000000000000000000000000000000001080f14181a1b2020202020202020191916120d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030608090f1112131313110f0c070705010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b242d34393d3e464646464646463c3b37322a22180e04000000000000050a0f1213131313131313131313131313131313131313131313120f0a05000000000000000000000a151e262e34384646464646464646403f3b362e261c120800000000040f19222b32383b3c464646464646463e3d3a342d241b11060000000815222e3b4754606a7784919ea9aca095897d70655b5045413a3732342e34383a41454f59606d7a85929fabac9f92867a6e6154473b2e23180c0000010e1b2834414e5b6774818e9aa7b4aa978a7e7164544a3f3328190d040000040d1b26323d4a5764707d8a97aab4a79b8e81746853493f33271b0f03000000000000000000000000000000000714212e3a4754616d7a86929facb9b2a89a8e8174675d5145382c1f14080000000000000000000000000000000a1724313d4a5764707d8a97a3b0a5988c7f7265594c3f2e23181c1f24293139424c56616c7683909da9b3afa396897c706356493d302316100b0500000000000613202c3945515d677885929eabada196887b6e6153493f3328231f1c18171c1f2227323e4855626e7b8897a2adab9e918578675d5145392c201306000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000c18232e39424a515b63696e747a7d808384858586858482807d79746e69605b536873787979797979796f6a6054483b2e22150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607090c0e0f1112121313121211100e0c0a080705020000000000000000000000000000000000000000000000000000000000000000000000000000000003080b0d0e13131313131313130d0c0a0602000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002050708121313131313130a090704000000000000000000000000000000000000000000000000000000060b0e1011131313131313131313131313131313130b0a080400000000000000000000000000030a0f1215151c1e1f1f201f1e1c181413110d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17222d363e45494b535353535353534947433c342a20150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2630383f4453535353535353534d4b4740382e24190e020000000a16202b343d434749535353535353534b4a453f362d22180c0100000916222f3c4955626f7c8896a0acaa9d9084776b6053493f35302b262823282c2f353e45525d6874818d9aaaafa3998b7f7265544b4034281c10040005111e2a36414c566a7683909da9aea298887b6e6155483b2d221708000000000a15212e3b4854616e7b8798a2aeaa9d908377655b5044372b1f120500000000000000000000000000000006131f2b37434e5865727f8c99a3aeb7b8ab9f9285796d6053473b3025190e0200000000000000000000000000000a1723303d4a5663707d8996abb5a6998d807366544a403428211e1a181f27303a44505a64707d8a97a2adafa396897c706356493d3023160a000000000000000714212d3a4754606d7a8797a1adab9e918578695f5341382d211813100c0b101217202d394653606c7985929fabada196867a6d6053473a2d201407000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000004101c2834404a545c606d727b81868a8d8f9191929292918f8d8a85807b726c655c6b78858686868686867c6f6256493c2f2316090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e1214151f202020202020171614100b050000000000000000000000000000000000000000000000040b12171b1d1e20202020202020202020202020202020171714110c0500000000000000000000060e151b1f2122282a2b2c2c2c2b292521201d19130d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d29343e485056586060606060606055534e463c32261b0f0300000000000000000000000000000000000307090a0e111213131211100e0b090706030000000000000000000c17232e38424a505f606060606060605a58524a40362a1f13070000030f1b27323d464e545660606060606060585650483f34291d110500000d192633404c5966737f8c99a8b2ab998c807366594f41382d241e1b1b171c1f242935414c5663707c8998a2aeab9c8f8276665c5145382c1f1306000713202d3946525e687885929fabac9f9285796c605346392d201306000000000714212d3a46535e697985929facac9f9285796c605346392d2013060000000000000000000000000000000815222e3b4754606a7783909dabacababaea2988a7e7164564c41362a1e110500000000000000000000000000000915222f3c4855626f7b8899a3afa89b8f8275665c51443a322d2b2627272628323e4653606d7985929fabafa396897c706356493d3023160a000000000000000915222f3c4855626f7b8895a9b3a99c8f827669574d422f261b0f070400000306121f2b3744505b657683909da9b2a995887b6e6255483b2f221508000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000030e18212c3844515c666d757f878d9298999c9d9e9f9f9f9e9c9a98928d867f776d666679869293939393887b6e6255483b2f22150800000000000000000000000000000000000000000000000000000003080c0e0e131313131313130f0e0c09040000000000000000000000000000000000000000000000000000000000000003070b0d0e131313131313130e0e0c08030000000000000000000000000000030608090f1112131313110f0c0707050100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000407090a131313131313120807050200000000000000000000060d141a1e21222c2d2d2d2d2d2c2423201c161008000000000000000000000000000000000000000000050e161d23272a2b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2423211c171008000000000000000006101820262b2e2f3537383939393835322e2d2a251e19130c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212d3945505a62646c6c6c6c6c6c6c625f584e43372b1f1306000000000000000000000000000000040b101316161a1d1f201f1e1e1d1a18151312100b0600000000000003101c28343f4a545c6c6c6c6c6c6c6c6c66635c52473b2f23170a000006131f2b38434e5860626c6c6c6c6c6c6c65625a50453a2e2115090005111d2935414c566976828f9ca9afa399897c6f6356493d2f261b130f0a0c101319242f3a4653606d7985929facac9f9285796d6053463a2d201307000714212e3a4754616d7a8798a2aeaa9d918477665b5044382b1f12060000000005121e2a36424d576a7784919daaaea298877a6e6154473b2e211408000000000000000000000000000004101c2834404b55626f7c8895a0a8a19e9fa2aa9c8f8275685e5246392d20150a00000000000000000000000000000714202d3a4753606d7a86929facab9e9285796d60564c443d3a373134333332323845515c6675828f9ca8afa396897c706356493d3023160a000000000000000916232f3c4956626f7c8995a2afa89b8e8275685b4f423128140a0000000000030f1b27333f49536976828f9ca9afa295897c6f6256493c2f231609000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000915202c38434f59606d78818c92999fa2aaa9a8aaa29f9e9e9e9fa29f98928c81786d6d798699a39f9f94877a6e6154473b2e2114080000000000000000000000000000000000000000000000000001090f14181a1b202020202020201c1b191510090200000000000000000000000000000000000000000000000000000001080e1317191a202020202020201b1a18140f090100000000000000000000030a0f1215151c1e1f1f201f1e1c181413110d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b101416172020202020201f1514120e090300000000000000060f181f262a2d2e38393939393939302f2c28211a110800000000000000000000000000000000000000040e1720282e3336373939393939393939393939393939393931302d28221a1208000000000000030e18222a31373a3c42444546464644423f3a39363029241e160e070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4956626c7179797979797979766a5f53473b2e2115080000000000000000000000000002090e161b202223272a2c2c2c2b2a29272522201f1c17110a020000000006121f2c3844505c667679797979797979736e63584b3f3226190c00000815222e3b4754606a6f79797979797979716c62564a3d3124170b000713202d3946525e687885929eabac9f92867a6d6053473a2d20140a0200000308131f2c3844505c667683909ca9aea298887c6f6255493c2f221609000915222f3c4855626f7b8895aab4a99c8f837669544a3f33281c0f0300000000020e1a2531434f5c6976828f9ca9b4aa95887b6f6255483c2f221509000000000000000000000000000006131f2c3845515c6774808d9aa7a196919298a29f92867a6e6154473c31261b0f000000000000000000000000000006131f2c3945515d677783909dabada1978a7e71685e564f484742424140403f3f3f404b546673808c99a6afa396897c706356493d3023160a00000000000000091623303c4956636f7c8996a2afa79a8d8174675a4e4134271b080000000000000b17222d424e5b6875818e9ba8afa296897c6f6356493c30231609000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000020e1a26313b4854606b74808d939fa3ababa49f9b979892919192939a989d9f938f82786d7a8794abb4a094877a6d6154473a2e211407000000000000000000000000000000000000000000000000030b131a202427282d2d2d2d2d2d2d292825211b140c0300000000000000000000000000000000000000000000000000020b12191f2326272d2d2d2d2d2d2d282724201a130b030000000000000000060e151b1f2122282a2b2c2c2c2b292521201d19130d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810161c2023242c2d2d2d2d2d2c22211e1a140d060000000000030d18212931363a3b454646464646463d3c38332c231a10070000000000000000000000000000000000000b16202932393f4344464646464646464646464646464646463e3c39332c241a100500000000000a15202a343c4347484f5152525352514f4b4746413a3530282019110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e868686868686867c6f6255493c2f221609000000000000000000000000050d141a21272c2f30343738393938373634312f2d2b28231c140c020000000713202d3a4653606d78868686868686868073665a4d4033271a0d00000916232f3c4956626f7c868686868686867e7165584b3e3225180b000714212e3a4754616d7a8797a1adaa9e918477675d5145382c1f13020000000003101c28343f4a546774818e9aa7b4aa978b7e7164584b3e3125180b000a1723303d4a5663707d8996a3b0a89b8e8275685b4f422d22170b000000000000091c2835424f5b6875828e9ba8b0a396897d7063564a3d3023170a00000000000000000000000000000713202d3a4653606d7985929fab9e918485929fa3998c7f7265584e43372b1c11060000000000000000000000000004101d2935404b5566737f8c99a3aea99e91847a6d68615955534d4f4e4d4c4c4c4b4b4c5865727f8b98a5afa396897c706356493d3023160a000000000000000815222f3b4855626e7b8895aab4a79a8e8174675b4e412f24190d010000000000061b2835424e5b6875818e9ba8b4aa95887b6f6255483c2f221509000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000006121e2b37424e57636f7c87939fa5afa9a199938f8a878584848586888c90959e948d80747b8794a1ada093877a6d6054473a2d2114070000000000000000000000000000000000000000000000010b151d252b303435393939393939393534312c261e150c000000000000000000000000000000000000000000000000000b141d242b303334393939393939393534302b251d150b0100000000000006101820262b2e2f3537383939393835322e2d2a251e19130c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a21282c2f30393939393939382e2d2a261f180f060000000009141f29333b424648525353535353534a48443e352c22190f060000000000000000000000000000000006121d28323b444b4f51535353535353535353535353535353534a49453e362c22170c00000000030f1b26313c464e53555b5d5e5f5f5f5e5c5854524c46413a322b231a1208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b9393939393887c6f6255493c2f2216090000000000000000000000060f171f252a32383b3d4144454646454443413e3c3a38342e261e140a0000000713202d3a4653606d798693939393938d8073665a4d4033271a0d00000916232f3c4956626f7c8993939393938b7e7165584b3e3225180b000915222f3c4855626f7c8895a9b3a99c8f837669554b4035291d100400000000000c17232e3f4c5966727f8c99a5b2a6998c807366594d4033261a0d000a1724313d4a5764707d8a97a3b0a79a8e8174675b4e4134281b060000000000010e1b2834414e5b6774818e9aa7b0a3978a7d7064574a3d3124170a0000000000000000000000000005111e2a36424d5764717e8a97a2a99a8d80818e9baa9d9083776a5f5347382e23170b00000000000000000000000000000c18242f3b4854616e7b86929fa8ada19690827a706b65615f575c5a5a5959585858585865717e8b98a4afa396897c706356493d3023160a000000000000000814212e3b4754616e7a8798a2aea89b8f827568564c4135291d11070400010407101d2935404b556976828f9ca9aea398877a6e6154473b2e211408000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000814212e3a47535f6a76828f9aa4afaba1979287827d7a79787778797b7f838a9196928a7e7b8895a1ada093867a6d6053473a2d201407000000000000000000000000000000000000000000000009131d272f373c40414646464646464642413d3730271e0e050000000000000000000000000000000000000000000000030d1d262e363c3f414646464646464641403c372f271d13090000000000030e18222a31373a3c42444546464644423f3a39363029241e160e0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101a232c33383c3d464646464646453b3a36312921180d030000020e1a26313b454d53555f60606060605f57554f473e342b21180d040000000000000000000000000000000b17232e39444d565b5e60606060606060606060606060606060575550483e33281c110400000006121f2b37434e585f62686a6b6c6c6c6b6865615e56524c443d352c241a11080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b979f9f9f95887c6f6255493c2f22160900000000000000000000060f18212930363d4448494d505253525151504d4b4846443f3830261c110600000713202d3a4653606d7986939f9f9f998d8073665a4d4033271a0d00000916232f3c4956626f7c89959f9f9f988b7e7165584b3e3225180b000a1723303d4a5663707d8996a3b0a89b8e8275685b4f422f24180c000000000000061825323e4b5865717e8b98a4b1a79a8e8174675b4e4134281b0e000b1824313e4b5764717e8a97a4b1a79a8d8174675a4e4134271b0e0100000000010e1b2734414e5a6774818d9aa7b0a4978a7d7164574a3e3124170b000000000000000000000000000714202d3a46525e6976828f9ca9a297897d7d8a98a2a095887c6f62544a3f34281c1003000000000000000000000000000714202d3a46525e6974808d96a1a9a89f9590847d77726e696a6867666665656565646465717e8b98a4afa396897c706356493d3023160a000000000000000613202d394653606c7985929faba99d908376685d5245392c221813100c0d101318202c3945515d677783909daaac9f9286796d6053463a2d201307000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000815222f3b4855626e7b88949facaea39992857d75716e686b6b666d6e72767d84909492857d8996a3aca09386796d6053463a2d20130700000000000000000000000000000000000000000000030f1a252f3941484d4e535353535353534f4d4942393020170d02000000000000000000000000000000000000000000010b151f2e3840474c4d535353535353534e4d4841392f251a0f03000000000a15202a343c4347484f5152525352514f4b4746413a3530282019110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f19222c353e44484a535353535353524846423b33291f1409000005121e2a36424d575f616b6c6c6c6c6c6c6361594f463d332a1f160b0200000000000000000000000000000e1b27333f4b565f676a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c64615a5045392d2114080000000815212e3a47535f6a6f7577787979797775726d68615d564f473e362c231a100600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4aca295887c6f6255493c2f221609000000000000000000020c18212a333b42464f54565a5d5f5f5f5e5d5c5a585553504a42382e23170b00000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2aca4988b7e7165584b3e3225180b000b1724313e4a5764717d8a97a4b0a79a8e8174675b4e4134281b070000000000000b1724313e4a5764717d8a97a4b0a89c8f8275695c4f4236291c0f000b1825313e4b5864717e8b97a4b1a79a8d8074675a4d4134271a0e0100000000010e1a2734414d5a6774808d9aa7b1a4978b7e7164584b3e3125180b000000000000000000000000000814212e3b4754616e7b87939fab9e9285797985929fa79a8d8073665c5044382b1f13070000000000000000000000000005121e2a36424d57606d79849197a1a9a79f969189837f7b78767574737372727271717171717e8b98a4afa396897c706356493d3023160a0000000000000006121f2b3844505b6676828f9cabac9f92867a6d6054473e3429241f1c18181d202328323b4753606d7a86929faca99c908376665c5144382c1f1206000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000d192633404c5966737f8c99a6b0ac9f92877c6f6b64615e56545c6062656c707a8290949083909daaaca09386796d6053463a2d201307000000000000000000000000000000000000000000000814202b37414b53595b606060606060605c59544b4232291f140900000000000000000000000000000000000000000007121d2731404a52585a606060606060605b59534b41372b201408000000030f1b26313c464e53555b5d5e5f5f5f5e5c5854524c46413a322b231a12080000000000000000000000000000000000000000000000000000000000000000000000000000000000040d18212b343e474f55575f60606060605f55534d453b31261a0e02000714212d3a46535f696e78797979797979706b61584e453b31281d140a0000000000000000000000000000101d2a36434f5b67717779797979797979797979797979797979716c6155493c3023170a0000000915222f3c4855626f7c81848585868584827e7a746d68605950483e352c22180d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4afa295887c6f6255493c2f2216090000000000000000000a141e2a333b454d52596063676a6b6c6c6b6a69676462605c544a3f34281c1003000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000b1824313e4b5764717e8a97a4b1a79a8d8074675a4d4134271a0e0100000000000a1724313d4a5764707d8a97a3b0a99c8f8376695c504336291d10000b1824313e4b5764717e8a97a4b1a79a8d8174675a4e4134271b0e0100000000010e1b2734414e5a6774818d9aa7b1a4978a7e7164574b3e3124180b00000000000000000000000007131f2c38434f5966727f8c99a4aa9b8e817475818e9baa9e9184796d6053463a2f24180d01000000000000000000000000020e1a25303b45515d676f7c8591979ea5a8a09e95908b8885838281807f7f7f7e7e7e7e7d7d808d9aa7afa396897c706356493d3023160a00000000000000030f1c28333f4a5466727f8c99a3aea3998a7d71645a50463d352f2c292324292c2e343b444f5963707d8a99a3aea6998d807366544a4034281c1004000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000005111e2a36424d576976838f9ca9b1a79a8d80736a605954524c4a5053555a61676d798290959095a0abaca09386796d6053463a2d201307000000000000000000000000000000000000000000000c1824303c48535d64686c6c6c6c6c6c6c68655d54443b3025190e0000000000000000000000000000000000000000000c18232f3943525c64676c6c6c6c6c6c6c68645d53483c3024180c00000006121f2b37434e585f62686a6b6c6c6c6b6865615e56524c443d352c241a1108000000000000000000000000000000000000000000000000000000000000000000000000000000020b16202a333d474f5961636c6c6c6c6c6c6b615f574d42362a1e1205000815222e3b4855616e7b858686868686867d706a60574d433a2f261b110600000000000000000000000000111e2b3744515e6a7784868686868686868686868686868686867e7164574a3e3124170b0000000a1724313d4a5764707d8a9091929292918f8b86807a706b615a50473e342a1f150b010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4afa295887c6f6255493c2f221609000000000000000006111c26303b454d575e616b70747778797978777674716f6d665c5044382b1f1206000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000b1824313e4b5764717e8a97a4b1a79a8d8074675a4d4134271a0e0100000000000a1724313d4a5764707d8a97a3b0a99d9083766a5d5043372a1d10000a1724313d4a5764707d8a97a3b0a79a8e8174675b4e4134281b0e0100000000010e1b2834414e5b6774818e9aa7b0a3978a7d7064574a3d3124170a0000000000000000000000000915222f3b4854606b7784919eaba2988a7d70707d8a98a2a197897d7063554b4135291d11040000000000000000000000000009141f2935414b555f6a6f7c858f939c9fa4a79f9d989892908f8d8d8c8c8b8b8b8b8a8a8a8d929da9afa396897c706356493d3023160a00000000000000000b17222d3b4754616e7b86929faaab9d9083766c61584e45403a38342f2f35393a40454d56606b75828f9babab9f94887b6f6255483c2e23180c00000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000714202d3a46525e697885929fabaca095877b6e61584f4746413f44464850555d676e7b85929da0a7b1aca09386796d6053463a2d201307000000000000000000000000000000000000000000000e1a2734404d59646f7479797979797979756f65564d42362a1c11060000000000000000000000000000000000000004101c2934404b55646e7479797979797979746f64594d4034271a0e0000000815212e3a47535f6a6f7577787979797775726d68615d564f473e362c231a100600000000000000000000000000000000000000000000000000000000000000000000000000000a141d28323c454f59616b70797979797979786e695f53463a2d211407000714212d3a46535f696f7c86929a939992867d6f695f554c41382d22170d04000000000000000000000000111e2b3744515e6a77849193939393939393939393939393938a7e7164574a3e3124170b0000000a1724313d4a5764707d8a979e9f9f9f9e9b98928d847d716c61594f463c31271d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4afa295887c6f6255493c2f22160900000000000000000b17232e38424d575f696e767c8083858685848483807e7c786d6053463a2d201307000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000b1724313e4a5764717d8a97a4b0a79a8d8174675a4e4134271b070000000000000b1724313e4a5764717d8a97a4b0a99d9083766a5d5043372a1d10000a1723303d4a5663707d8996a3b0a89b8e8175685b4e4235281b090000000000020f1b2835424e5b6875818e9ba8b0a3968a7d7063574a3d3024170a000000000000000000000004101d2935404b55636f7c8996a0ab9f9285796d6d7985929fa99b8e8175675d5145392c20140900000000000000000000000000020d18242f3a434e585f6a6f7a82898f93999c9fa2aaa29f9d9b9a999998989898979797979a9da4aeafa396897c706356493d3023160a00000000000000000614202d3946525e6874818e98a2ab9f958a7e716a6058514b47454042434045474b51575f696f7c89939eaaa4998f82766a5f53473a2e1c120700000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000814212e3b4754616e7b8798a2aeaa9d908377695e53463d393634383a3e434c555e69717e8b97a1adb9aca09386796d6053463a2d201307000000000000000000000000000000000000000000000e1b2835414e5b687481868686868686868175695e5246382d22170b0000000000000000000000000000000000000006131f2c3845515c677480868686868686868174685b4e4135281b0e0000000915222f3c4855626f7c81848585868584827e7a746d68605950483e352c22180d0300000000000000000000000000000000000000000000000000000000000000000000000006111c262f3a444d57606b707d868686868686857b6e6155483b2e2215080005121e2a36424d57606a707e88939fa29892857b6e675d53493f33271f160c010000000000000000000000111e2b3744515e6a7784919d9f9f9f9f9f9f9f9f9f9f9f9f978a7d7164574a3e3124170b0000000a1724313d4a5764707d8a979e9ea2a9a9aaa39f9691877e716b61584e43392f23180c0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000204050606060504020b1825313e4b5864717e8b97a4afa295887c6f6255493c2f2216090000000000000003101c28343f4a545f696e7b82898d9092929291908f8d8b887e7164584b3e3125180b000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000a1724303d4a5763707d8a96a3b0a89b8e8175685b4e422e23180c0000000000000b1825313e4b5864717e8b97a4b1a99c8f8376695c504336291d10000916222f3c4955626f7c8895aab4a99c8f8276695c4f4330251a0e0200000000030f1c2936424f5c6975828f9ca8b5ab95897c6f6256493c2f23160900000000000000000000000613202c3945515d6774818e9aa8aa9b8e8175676775818e9baa9f92867a6d6054473b31251a0e020000000000000000000000000007131d28313c464e585f686d757c82878b8f929897999a9b9c9d9d9d9e9e9e9e9f9f9f9fa3abacb5afa396897c706356493d3023160a000000000000000005111e2a36414d56616e7b85929fa4a79f92867c6f6a605d5553514b4f4f4b5153545c60696e7b84919ea6a69f93877c6f63584e43372b1f0b0000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000091623303c4956636f7c8996aab4a79a8e817467574d42342d2a282b2d313a434d57606d7985929eabb8aca09386796d6053463a2d201307000000000000000000000000000000000000000000000916232f3c4956626f7c89959393939392867b6e61544a3f33281c0f030000000000000000000000000000000000000714202d3a4753606d7985929393939395897c6f6356493c302316090000000a1724313d4a5764707d8a9091929292918f8b86807a706b615a50473e342a1f150b0100000000000000000000000000000000000000000000000000000000000000000000040d17222d38424c565f696f7d869299939a92867c6f695f53463a2d21140700020e1a26313b454e58616c73808c949ea1979183796d655b50443d31281d13070000000000000000000000111e2b3744515e6a7784919daab0a69e9b98989898989898978a7d7164574a3e3124170b0000000a1724313d4a5764707d8a92919297979c9fa6a9a19992877d706a5f554b4034291f1409000000000000000000000000000000000000000000000000000000000000000000000000000000020608080c0f111213131312110f0c1825313e4b5864717e8b97a4afa295887c6f6255493c2f2216090000000000000006121f2b3844505c666e7b848f949a9d9e9f9f9e9d9c9a978b7e7164584b3e3125180b000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000916222f3c4955626f7c8895a9b3a99c8f827669544a4034281c100400000000000c1926333f4c5966727f8c99a5b2a89c8f8275695c4f4236291c0f000814212e3b4754616e7b8798a3aeaa9d9084776a574d42362a1e12050000000005111d2935414c566a7783909daaafa399877b6e6154483b2e21150800000000000000000000000714202d3a4753606d7a85929faca3988a7d716464707d8a98a2a2988b7e7165574d42362a1e120500000000000000000000000000010c161f2a343c464e565e616b6f757b7f8285888a8c8d8f8f9090919191919292929292999ba3acafa396897c706356493d3023160a0000000000000000020e1925303b46535e69717e8b929da4a29891847c726d6763605c555c5c555d6063666d727b839096a1a69f948d80736b6054463c31261a0f0000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000a1724313d4a5764707d8a97a3b0a5988c7f7265594c3f31261e1c1f2028313b45515c6673808d99aab4aca09386796d6053463a2d201307000000000000000000000000000000000000000000000915222e3b4854606a7783909daa9fa3998c7f73665b5044382b1f1409000000000000000000000000000000000006121f2b37434e5864717e8a97a29f9f9d9083776b6054483b2f2215090000000a1724313d4a5764707d8a979e9f9f9f9e9b98928d847d716c61594f463c31271d1207000000000000000000000000000000000000000000000000000000000000000000010c161f28333f4a545d686e7b859298a29f93887e706a60574d42362a1e1205000009141f29333d46505a606c77828f96a1a0958f82776c60594f433a2f24180c0300000000000000000000111e2b3744515e6a7784919daaaa9e938f8b8b8b8b8b8b8b8b8a7d7164574a3e3124170b0000000a1724313d4a5764707d87858585868a8f949fa2aaa39992867c6f675c51453b31261a0e0300000000000000000000000000000000000000000000000000000000000000000000000003090e121415191b1d1f1f201f1f1d1b191825313e4b5864717e8b97a4afa295887c6f6255493c2f221609000000000000000713202d3a4653606d788390969fa6aaababa5a1a0a0a1978b7e7164584b3e3125180b000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000814212e3b4754616e7a8797a2adaa9d918477665c5144382c1f120600000000000e1b2734414e5a6774818d9aa7b4a89b8e8175685b4e4235281b0f000713202d3a4653606d7986929facab9f928578695e52463a2d201407000000000713202d3946525d687885929eabac9f9286796d6053463a2d2013070000000000000000000005121e2a36424d5764717e8b98a2ac9f92867a6d60606d7985929faa9c8f8376695e53463a2d21160a0000000000000000000000000000040d18222a343c444c52596063696e7276797b7d7f81828383848484848585858585868b909ba7afa396897c706356493d3023160a00000000000000000008141f2a36424d57626c74808d929fa2a19691877f79736f6d676969696a676d6f73797f869095a0a49f949082796d60594f43342a20150a0000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000b1824313e4b5764717e8a97a4b0a4978a7d7164574a3e3124171012161f2834404b54626f7c8998a3aeaca09386796d6053463a2d2013070000000000000000000000000000000000000000000007131f2c38434e5865727e8b98a2aeab9e9184786c6053463b30251a0e00000000000000000000000000000000000814212e3a47535f6a7683909ca9aea2988b7f7265594f43382c1f13070000000a1724313d4a5764707d8a979e9ea2a9a9aaa39f9691877e716b61584e43392f23180c03000000000000000000000000000000000000000000000000000000000000000008131e28313a44505b666d7a849197a29e948c80736c61584e453b31261a0e020000030d18212b343e44505b656d7a849199a49e948c7f726b60554b4135291e150b00000000000000000000111e2b3744515e6a7784919daaa89b8f817f7f7f7f7f7f7f7f7f7b6e6155483b2e2215080000000714202d3a4753606d79797878787a7d828a9298a1a9a2989083796d60574d42362a20150a00000000000000000000000000000000000000000000000000000000000000000000060b0f151a1e212225282a2c2c2d2c2b2a28262225313e4b5864717e8b97a4afa295887c6f6255493c2f22160900000000000004101c2834404b5564717e8a959fa8b0a9a19e9894939394968b7e7164584b3e3125180b000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000714202d3946525e687885929fabac9f9286796d6053463a2d20130a0400000006121f2b37434e586976828f9ca9b4a79a8e8174675b4e4134281b0e0006121f2b3844505c667784909daaaea298877b6e6154483b2e21150a000000000714212e3a4754616d7a8797a1adaa9e918477665c5145382c1f1306000000000000000000000714212d3a46535f6976838f9caaaa9b8f8275675d5d6775828e9baa9f93877b6e6154483d32271b0f0000000000000000000000000000050e171e252a323a41464f54575e6165666d6f717374757676777777787878787879797e8b98a4afa396897c706356493d3023160a000000000000000000020e1a25313b45505a646e74808b92989fa199928c85807c797776757676777a7c80858b9298a09f9a938d82796d675d51473d3222180e030000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000b1825313e4b5864717e8b97a4b0a396897d7063564a3d3023170a060d18232e3a4653606d7986929facaca09386796d6053463a2d20130700000000000000000000000000000000000000000000030f1b27323d4754606d7a85929facaca1968a7d7063574d42362a1c110600000000000000000000000000000004101c2934404b55626e7b88949fabac9f92867a6d6054473d32271b0f030000000a1724313d4a5764707d8a92919297979c9fa6a9a19992877d706a5f554b4034291f140900000000000000000000000000000000000000000000000000000000000000030d19242f3a434f59606c78828f96a0a1968f82776c605a50463d33291f140900000000060f192227333f49535e68707d87939fa69f92877d6f675d51453d30271d1207000000000000000000111e2b3744515e6a7784919daaa5998c7f7272727272727272726e695f53463a2d21140700000006131f2c3845515c676d6d676b676d70767e869297a1aaa0958c8073695f53463c31261a0f0300000000000000000000000000000000000000000000000000000000000000020a11171b1f262b2e2f32353738393939383735322f2e313e4b5864717e8b97a4afa295887c6f6255493c2f22160900000000000006131f2c3845515c6776828f9ca7b1aaa197928b88868687898b7e7164584b3e3125180b000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0005111e2a36414c56697683909ca9aea399897c6f6256493d32271b13100c090e1117212e3a47535f6a7885929eabb3a6998d8073665a4d4033271a0d0003101c28343f4a546875818e9ba8b3aa978a7d7064574a3d32271b0d04000001081623303d495663707c8996a9b3a89c8f827569544b4034281c1004000000000000000000030f1c28333f4a54616e7b87939faca2988a7e7164555564717e8a98a3a49a8c7f7366584e43372b1d1207000000000000000000000000020c1720293036393a3e3f44484d5354545c606264666768696a6a6a6b6b6b6b6c6c6c717e8b98a4afa396897c706356493d3023160a0000000000000000000009141f29333f48525c646e747e868e92999c9f97928d898684838282838486898d92979f9c99948f8780796d675d554b40342b211006000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000b1825323e4b5865717e8b98a4afa296897c6f6356493c302316090007131f2c3845515c667683909da9aca09386796d6053463a2d20130700000000000000000000000000000000000000000000000a16202c3945515d6774818e9aa7b1a89b8f8275695e5246382e23170b00000000000000000000000000000006131f2c3845515c6774808d9aa6b0a79b8e8174685d5245392b21160a000000000a1724313d4a5764707d87858585868a8f949fa2aaa39992867c6f675c51453b31261a0e030000000000000000000000000000000000000000000000000000000000010b151f2935414c56606b737f8c949ea49991847a6d655b50483e342b21180d030000000000071017222d38414c56606b74808d96a0a3999184796d60594f42392e23180c020000000000000000111e2b3744515e6a7784919daaa5998c7f726665656565656565615f574d42362a1e120500000004101c2934404b555c60605c555d60646c717c859298a3a79f92867b6e61584e43372b1f1409000000000000000000000000000000000000000000000000000000000000060b141b22272b31373a3b3f4244454646464544423f3b3a373e4b5864717e8b97a4afa295887c6f6255493c2f2216090000000000000713202d3a4653606d7986929facaea39892857f7b79797b7c7f7c6f6256493c2f231609000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00010d192530404d5a6673808d99a9b2ab998c7f7266584e43372b251f1c181b1a1b2228343f4a54626f7c8897a2adb1a4978b7e7164584b3e3125180b00000b17232e3f4b5865727e8b98a8b2a69a8d807367584e43372b1f15100c090e131e2a36414c5666727f8c99a5b3aa998c7f7366594c402e23180c0000000000000000000006121f2b3844505b6673808c9aa4ac9f92867a6d605454606d7a86929fac9d9184776a605447392e23180c00000000000000000000000008131e29323a4146474b4c4d4e4f51524a50535557595a5c5c5d5d5e5e5e5e5f5f5f65717e8b98a4afa396897c706356493d3023160a00000000000000000000030d17212d36414a525c646c717b81868c8f92979e99999291908f8f90919299999e9892908c88827d746d675d554b43392f22190f00000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f2316090004101c2834404b546875828f9ba8aca09386796d6053463a2d201307000000000000000000000000000000000000000000000004111d2935414b55626f7c88959fabac9f92877b6e61544a3f34281c100300000000000000000000000000000714202d3a4753606d7985929eabaca095897c6f63564c413529190f04000000000714202d3a4753606d79797878787a7d828a9298a1a9a2989083796d60574d42362a20150a000000000000000000000000000000000000000000000000000000000007121d27313945525d68707d87939fa69f93877d6f685e53493f362c22190f060000000000000006111b262f3a444f59606d7984919ea5a0968e81746b60544b4034281e13080000000000000000111e2b3744515e6a7784919daaa5998c7f72665958585858585855534d453b31261a0e02000000000c18232f39434b515353514b51535a616a6f7c86929fa7a3988e81756a5f53473b30251a0e0100000000000000000000000000000000000000000000000000000000080f181d262d33373c4247484c4e505252535252504e4c4847433e4b5864717e8b97a4afa295887c6f6255493c2f2216090000000000000916232f3c4956626f7c8999a3aeac9f92867c726e6d6d6e70726f6a6054473b2e221508000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000081623303c4956636f7c8997a1adaa9d9083776a6054473f36302c282328252a2d333c44505c6673808c99a9b3b3a996897c6f6356493c3023160900000615222f3c4855626f7b8896a0acaa9d9184776a6054473c31271f1c181b1a1e242d3946525e6876838f9ca9aea298897c706356493d30231607000000000000000000000613202d394653606c7884919eaca99b8e8175675d51515d6775828f9caba096897c6f62544b4034281c100400000000000000000000010d1925303a444c525457595a5b5c5d5e5b5953484a4c4e4f5050515151515252525965727f8c98a5afa396897c706356493d3023160a0000000000000000000000050f1b242f38414a525a62696e747b7f8285929faba39f9d9c9c9c9d9d9fa3ab9f928682807b766f6b605d554b433a31271d100700000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000c18232e414e5b6874818e9ba7aca09386796d6053463a2d2013070000000000000000000000000000000000000000000000010d18242f3a47535f6a7683909da9afa3998c7f73665c5044382b1f14090a0a0a0a0a0a0a0a0a0a0a0a0a0a121f2b37434e5864717e8b97a2adaa9d9083776b6054443a2f241907000000000006131f2c3845515c676d6d676b676d70767e869297a1aaa0958c8073695f53463c31261a0f03000000000000000000000000000000000000000000000000000000000c18232f39434f59606d7a849199a4a0968d80736b60564c41382d231a10070000000000000000000a141d28323d45515d67707d89939ea89d93897d70665c51453a3025190d0200000000000000111e2b3744515e6a7784919daaa5998c7f7266594c4c4c4c4c4c4846423b332a1f1409000000000007121d27313940454747454045475058606a727f8c959faa9f93877c6f62574d42362a1d120700000000000000000000000000000000000000000000000000000008111a212a2f383f44464d5355585b5d5f5f605f5e5d5b5955534e464b5864717e8b97a4afa295887c6f6255493c2f2216090000000000000a1724313d4a5764707d8a97abb5a79a8e81746a6160606163656260584e43372b1f1306000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000713202d3a4653606d7984919eaaab9f95897c6f625b5146413a38342e343136383f444d57606d7984919eabb7ada297877a6d6154473a2e21140700000815212e3a47535f6a7784919eabaca095887c6f62584e4339312c282327262b2f35414c56616d7a86929facab9f9285796d6053463a2d20130700000000000000000004111d2935414c5663707d8996a1aca1978a7d7063554b4b5564717e8b99a3a89a8d8174665c5145382c1f13080000000000000000000005111d2a36414c565e6164656768696a6b68655d534840414243434444444545454d596673808c99a6afa295897c6f6256493c2f231609000000000000000000000000091217232e38424a535b606a6f767c8084919eaaa7a4a2a1a0a0a1a2a4a7a99c8f837f7b756e6a625b514b433a31281f150b0000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f2316090000071a2734404d5a6773808d9aa6aca09386796d6053463a2d20130700000000000000000000000000000000000000000000000007131d2b37434e5864717e8b97a2adab9e9184786d6053463b31251a16161616161616161616161616161616212e3a47535f6a7683909ca9aea2988b7f7265594f4332281e1308000000000004101c2934404b555c60605c555d60646c717c859298a3a79f92867b6e61584e43372b1f140900000000000000000000000000000000000000000000000000000004101c2934404b55606b74818e96a1a59d9184796d60594f443a2f261b110800000000000000000000020b16202935404b55606b75818e98a2a59d9184796d60564c41362a1f140800000000000000111e2b3744515e6a7784919daaa5998c7f7266594c3f3f3f3f3f3b3a36312a21180e030000000000010b151f272f34383a3a3835393e464e58606c7883909da6a49a8e8175695e5246392f23180c000000000000000000000000000000000000000000000000000008111a232c333c41495053575f6265686a6b6c6c6c6b6a6865625f5853505864717e8b97a4afa295887c6f6255493c2f2216090000000000000b1825313e4b5864717e8b97a4b1a4978a7e716458535354565856544e463d32271b0f03000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000006121f2b3844505c6673808d98a2aea79c8f82766d625b524c46454041414242464950575f69727e8b96a1adb8ab9e928578685e5246392d201307000006121f2b37434e586673808d99a3afa89b8e81756a5f554b433c38342e3431373a4145525d68737f8c99a3afa79b8e8175675c5145382c1f13060000000000000000000613202c3945525d6875818e9ba8ab9e9285796d6053464754616d7a86929fab9e9285796d6053463a3025190d010000000000000000000713202d3946525e686d71727374767778756f65594d3d323536373737383835404b556774818e9aa7b2a995887b6e6255483b2f2215080000000000000000000000020c162028343f4a545c656c737c82888c9196a09f9a97959493939495979a9e9f948f8b86817b726d645d534a40352c1f150b0100000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000000000000000000000000000000000000000000000000010f1b26323c4753606d7985929fabada1968a7d7063574d42362a23232323232323232323232323232323232934404b55626e7b88949fabac9f92867a6d6054473d3221160c010000000000000c18232f39434b515353514b51535a616a6f7c86929fa7a3988e81756a5f53473b30251a0e0100000000000000000000000000000000000000000000000000020d17212c3845515c67707d89939da89e93897d6f675c51473d32281d140a000000000000000000000000050e18242f39434f59616e7b86929fa9a0968c7f72685e52463b3025190e01000000000000111e2b3744515e6a7784919daaa5998c7f7266594c3f333232322e2d2a261f180f0600000000000000030d151d23292c2d2d2c292c343d44505b666f7c89949eac9f92877b6e61554b4034291c1004000000000000000000000000000000000000000000000000060f1a232c353e454d535b6064696e72757778797979787775726e6a64605c5464717e8b97a4afa295887c6f6255493c2f2216090000000000000c1825323f4b5865727e8b98a5afa295897c6f6256494648494c4947433d342b20150a00000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000003101c28343f4a54616e7b86929fa8ab9f948b7f726d615e5653514b4e4e4f4d53535b60696e7b85929fa8b2b5a89c8f827569564c4135291d11050000030f1a26313c4854616e7b87929faaac9f92877c6f675d554e46454041414142474c515b606d7a85929eabaca095897d7063554b4034281c10040000000000000000000714212d3a4754606d7a86929faca89a8d8174665c514446525d6876828f9caba2978a7d7064564c4135291d11050000000000000000000714212e3a4754616d7a7e7f8081828485817568584e43372e2c2823282c2f3945515d677783909daaada196877a6d6054473a2d211407000000000000000000000008131e28323a44505c666d777f878f94999e9f97928e8b8887868687888b8d92979e9c99928e867f746f645c52473e31271d120700000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000000000000000000000000000000000000000000000000000a151f2c3845515d6774808d9aa6b0a89c8f8275695e5346382e3030303030303030303030303030303030303845515c6774808d9aa6b0a79b8e8174685d5245392c2013040000000000000007121d27313940454747454045475058606a727f8c959faa9f93877c6f62574d42362a1d12070000000000000000000000000000000000000000000000000009141f2a36414c56606d7984919ea5a2988e81756b60554b40352b20160b020000000000000000000000000007121d27313d46525e6973808d97a2a89f92857a6d61564d41362a1e1308000000000000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326252522211e1a140e06000000000000000000030b12181c1f20201f1d2228333f4a54606b75828f9ca8a3998d8073675c5145382c1f14090000000000000000000000000000000000000000000000030e18212c353e474f575f656c71767b7f8183858586858583817f7b77716d665f64717e8b97a4afa295887c6f6255493c2f2216090000000000000c1925323f4c5865727f8b98a5aea195887b6e6255483b3b3d3f3c3b37322b22190f0400000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000000b17232e3846525e6973808d96a0aaa69f93877f746d6863605c545b5b5c575e61656c717b849198a2aebab3a9988c7f7265594c3f3025190d010000000a15212d3a46535e6975818e98a3aea3999083796d675f5853514b4e4e4e4d53555d606d74818e97a1ada69d9083776b605443392e23180c00000000000000000006121f2b37434e5865727e8b98a2aca096897c6f63544a40414c5665727e8b99a4a99b8f8275685e5246392d2015090000000000000000000815212e3b4854616e7b878c8d8e8f909184786a6054473f3a38342e34383a404b55606d7a86929facab9e918578675d5145392c20130600000000000000000000010d1924303a44505a606d78818c93999fa098928c85817e7b7a797a7a7b7e81858b92979f9f99928b81746e63594f43392f24180c00000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d2013070000000000000000000000000000000000000000000000000004101d2935404b55626e7b88949fabac9f93877b6e61544a3f3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4753606d7985929eabaca095897c6f63564c4135291d110400000000000000010b151f272f34383a3a3835393e464e58606c7883909da6a49a8e8175695e5246392f23180c000000000000000000000000000000000000000000000000020e1a25303946525e68737f8c96a0a99f92867a6e61594f43392f23190e040000000000000000000000000000010b151f2a36424d57606d7a85929eaaa2978d8074685e52463a2f24190d010000000000111e2b3744515e6a7784919daaa5998c7f7266594c3f332619191514120e0903000000000000000000000001070c10131414131017222d38424f5963707d8995a0ab9e9285796d6053473b31261a0e000000000000000000000000000000000000000000000009141f2a333e474f5961696e787e83888b8e909292939291908e8c88847e786e6a64717e8b97a4afa295887c6f6255493c2f2216090000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e30322f2e2b27201910070000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000006111c2a36424d56606d79849198a2aba499938b807a736f6d666968676869696e71787e859196a1aab3b9ada297887c6f6255493c2f2216080000000005121e2a36424d57616e7b86929fa6aba0958f82796f6a63605c555b5a5b575f62676d747f8c939ea9a99f948a7d7064594f4430271d12070000000000000000000814212e3a47535f6a7683909daaaa9e9184776b605442393b4754616e7b86939fac9f92867a6d6154473c31261a0e0000000000000000000714212d3a46535e697884919a9b9c9d96897c6f625a504a464440434044464b515c67717e8b98a3aeaa9b8f827568554b4135291d11040000000000000000000004111d2935414c56616c74808d939fa4a09591867f7a74716f6e6d6d6e6f7174797e8590959fa39f938d80736b61554b4035291d1004000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700000000000000000000000000000000000000000000000000000c18242f3947535f6a7683909ca9afa4998c8073665c504949494949494949494949494949494949494949494e5864717e8b97a2adaa9d9083776b6054443a2f24190d010000000000000000030d151d23292c2d2d2c292c343d44505b666f7c89949eac9f92877b6e61554b4034291c1004000000000000000000000000000000000000000000000005121e2a36424d57616e7a86929fa8a1978c8073685e52473d31271d110700000000000000000000000000000000030d1a25303b45525d6873808c98a2a99f92867b6e61554c4135291d11040000000000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c0807050200000000000000000000000000000000040607070606111c262f3d4854606b7784919daba2978a7e7164574d42362a1b1106000000000000000000000000000000000000000000020b1a26313b454f59616b707b838a9095989b9d9e9f9f9f9e9d9b9895908b837c6f6b717e8a97a4afa295887c6f6255493c2f2216090000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e232523221f1b150f07000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000000000e1925303b45515d676f7c869299a2aaa49f928d86807c79767574747576787b7e838a9297a1a8b2bcb8ab9e9285796c605346392d20130600000000020e1a25313b46535f69737f8c949fa7a79f948f837c75706d676867676869696e737a818c919ca5aaa1978f82766c6155473d331e150b00000000000000000003101c28343f4a54626e7b88959faba7998c807366594f43303946525e687683909ca9a3998b7f7265574d42372b1b1106000000000000000005121e2a36424d576774818e9aa6a9a89b8e81756c605c5453514a504a5153555d606d7983919daaaea2988b7e7165584b3e2f24180d01000000000000000000000713202c3945525d68717e8a929da5a19791837b726d676462616060616264676d717a839096a1a59c928a7d70675d5145392c1f150a000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000000000000000000000000000000000000000000000000000007121d2b37434e5864717e8a97a1adab9e9184796d6056565656565656565656565656565656565656565656565f6a7683909ca9aea2988b7f7265594f4332281e130800000000000000000000030b12181c1f20201f1d2228333f4a54606b75828f9ca8a3998d8073675c5145382c1f140900000000000000000000000000000000000000000000000714202d3a46525e6974818d98a2aa9e92857a6d60564c41352b1f150b00000000000000000000000000000000000009141f2935414c56616d7a86929faca3988d8073675d5145392c20150a0000000000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c00000000000000000000000000000000000000000000000000000a141d2c38444f5965727f8c99a3a99c8f8276695f5346382d22170b0000000000000000000000000000000000000000000a141d2a36424d57616b707d8690959d9fa7a8aaaaa39f9e9e9e9fa3a09d9590867d6f717d8a97a4afa295887c6f6255493c2f2216090000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e22191615130f0a0400000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000000009141f2935404b55606a707e879298a0a7a49d98928d898583828181828384878b90959ea1a9b2babeb2a99b8e8175665b5044382b1f1206000000000009141f2a36424d57606d78828f959fa7a69f959087817d79777574747476787b80858e939ca3aaa29892857b6e615a5044352b210c0300000000000000000006121f2c3844505c6673808d9aa7ab9f95887b6e6255483d3236414d5665727f8c98a7ab9d908376695f5347382d22170b0000000000000000020e1a25313c4855626f7c88949faaaa9e938a7e726d6662605c545d545c6062676d75808d95a0aca99f92867a6d6154473a2e2114070000000000000000000003101c28343f4a54606d7a85929ea4a79e91857b6e69605d55555453535455555c60686e7a84919ea8a49e9184796d6053473c31261b0f030000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000010f1a26313c4653606d7985929eacada1968a7d70646363636363636363636363636363636363636363636363636e7b88949fabac9f92867a6d6054473d3221160c01000000000000000000000001070c10131414131017222d38424f5963707d8995a0ab9e9285796d6053473b31261a0e0000000000000000000000000000000000000000000004111d2935414c56616e7b86929faaa2988c7f73675d51443b3023190d03000000000000000000000000000000000000020d19242f3a46525e6874808d9aa6aa9f92857a6d6054473c31261b0f0300000000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c0000000000000000000000000000000000000000000000000000020b1c27333d4754616d7a86929fac9f93877b6e6153493f33271b0f030000000000000000000000000000000000000006111b262f3846535f69707d8792989fa7aba8a09d9898929191919299989d9f9892867c707d8a96a3afa295887c6f6255493c2f2216090000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221509080603000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000000020c18242f39434e58616c707d8690959ea1a9a29f9a9892908f8e8e8f8f9196989da09f9da0a8b2b9ada1978a7d7063544a3f33281c0f030000000000030e1a26313b44505c666d7a8390959da5a7a099938e898683828181818385888c92979da5a7a09892867d70695e52483e3323190f000000000000000000000713202d3a4653606d7985919eabab9d908377695f53473a2b303b4854616e7b8795a0ab9f95887b6e6253493f33271b0f0300000000000000000915212e3b47535f6a76828f98a2aea59f92877f78726f6d666a696a666d6f7379818d929da7aca2978d8074685d5246392d2013070000000000000000000006121f2b3844505c66737f8c97a1ab9f958a7d70695f57514b4847464747484b51565e68717e8a96a0aca1968b7f7265584e43372b1f12060000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700000000000000000000000000000000000000000000000000000009151f2c3845515c6673808d9aa4afa99c8f82757070707070707070707070707070707070707070707070707074808d9aa6b0a79b8e8174685d5245392c201304000000000000000000000000000000040607070606111c262f3d4854606b7784919daba2978a7e7164574d42362a1b11060000000000000000000000000000000000000000000713202c3945525d6874808d99a3ab9f92857a6d60554c4132291e1107000000000000000000000000000000000000000008131e2935414c56626f7b88949faba2988b7f7265584e43372b1f120600000000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c0000000000000000000000000000000000000000000000000000000b13202d3a4653606d7985929eaba49a8c8073655b5044372b1f1207000000000000000000000000000000000000000b17222d3841505a616e7b859299a2aaaba39f96918c888584848586888c90959e9891847a7d8996a3afa295887c6f6255493c2f2216090000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000000000007121d27313d46505a616b707c838b91979c9fa3aaa29f9d9c9b9a9b9c9ea1a29f9a939196a0acb8ab9e9184796d6053463a2d22170b0000000000000009141f28343f4a545e686d7a838e929d9fa7a49f9b9892908e8e8d8e8f9197999ea1a9a29e9590867d706b60574d42362c22110800000000000000000005111d2a36414c5663707d8a97a1ada3998c7f7265574d42372b2d3a46535e697783909daaa7998d8073655b5044372b1f1207000000000000000006121f2b37434e58626f7c86929fa4aca399928b837f7b797777767777797c80858e939da4aea49a92857a6d61564c4135291d1105000000000000000000000713202d3a4653606d7984919ea9a99d9083766b61574d45403c3b3a3a3b3c40454c56606c7884919eaaa89d9184776a5f53473a2e2115080000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700000000000000000000000000000000000000000000000000000004101c2834404b54616e7b87939facac9f93877d7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7d85929fabaca095897c6f63564c4135291d11040000000000000000000000000000000000000000000a141d2c38444f5965727f8c99a3a99c8f8276695f5346382d22170b0000000000000000000000000000000000000000000714212d3a4754606d7a86929faba69a8d8074685d52433a2f20170d000000000000000000000000000000000000000000010d1925303a47535f6a7683909cacaa9d9184776a5f53473a2e21150a00000000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c000000000000000000000000000000000000000000000000000005111d2a36414c5664707d8a97a1adac9e9184786c605346392f24180c000000000000000000000000000000000000030f1b27333f4953616c76828f97a2ababa399928c847f7b79787778797b7f838a9197968e817d8996a3afa295887c6f6255493c2f2216090000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000000000010b151f2b343e485059616a6e787e858a8f9299999b9d9e9f9f9f9e9e9c9998928e8684919daab0a69a8d8073665c5044382b1c110600000000000000030b17232e38424c565e686d79818990959b9fa2aaa39f9d9b9a9a9b9c9ea1a9a49f9c97928c837b706b60594f453b30241a10000000000000000000000713202d3946525e6875828f9ba9ac9f92867a6e6154473c31262a36424d5766737f8c99a7ab9e9184786c605346392f24180c0000000000000000030f1b26323c47535f6a717e8b939aa2aaa39f95918c8886848483838485898c92979ea5aaa39f93887d70685e52443a3024190d0100000000000000000000091623303c4956636f7c8996a1adab988b7f7265594f453c352f2e2d2d2e2e343b44505b6674808d9aa7aca095887b6f6255483c2f2215090000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000000000000000000000000000000000000000000000000000000000c18232e3946535f6976828f9ca9afa499938a89898989898989898989898989898989898989898989898989899297a2adaa9d9084776b6054443a2f24190d01000000000000000000000000000000000000000000020b1c27333d4754616d7a86929fac9f93877b6e6153493f33271b0f030000000000000000000000000000000000000006131f2b37434e5865727f8c98a2ab9f94887b6e62564c4131281e0e050000000000000000000000000000000000000000000008131e2b37434e5865727f8b9aa4aca095887b6f6255483c32261b0f03000000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c00000000000000000000000000000000000000000000000000000713202d3946525e6875828f9ba9b3aca196897c6f63554b4035291d1004000000000000000000000000000000000005121f2b3744505b65717e8a949fa9aea39992877f78726e6c666b666d6f72777e859095938c7f8c99a6afa295887c6f6255493c2f2216090000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000000000000030d19222c363e474f575f666d72797e82868a8c8e909192929292918f8d8a86817c838f9ca9aa9e93887b6e62544a3f34281c0a00000000000000000006111c26303a444c565e676d747c83898e9298999b9d9e9f9f9f9f9e9d9b999993908b857f786e6960594f473d33291f1208000000000000000000000714212e3a4754616d7a86929facaa9c8f8276685e5246392a2025313b4855626e7b8895a0aca196897d7063554b4035291d100400000000000000000a15202b37434e58616c727f8892989fa3a7a09d99999291909090919298999ea2a9a69f98928b7f726c61564c4132281e130800000000000000000000000c1926333f4c5966727f8c99a8afa499887b6e6255483e332924212020212328333f4a5464717d8a97a4b1a7988b7e7265584b3f3225180c0000000000000000000203101d2a3643505d69768390908376695d5043362a1d10030200000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000007121d2a36424d5764707d8a96a1adaba49f9796969696969696969696969696969696969696969696969696969fa2a9aea2988b7f7265594f4332281e130800000000000000000000000000000000000000000000000b13202d3a4653606d7985929eaba49a8c8073655b5044372b1f1207000000000000000000000000000000000000000815212e3b47535f6a7784919daaac9c8f83766a5f53443a301f160c0000000000000000000000000000000000000000000000020f1a26313c4754616e7b87939faca7998c807366584e43372b1f1306000000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c00000000000000000000000000000000000000000000000000000714212e3a4754616d7a86929facb9b2a89a8e8174675d5145382c1f140800000000000000000000000000000000000613202d394653606c7883909da6b0a79f92877d726d6662605b545c6062656c717a8390969285929facafa295887c6f6255493c2f2216090000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000000000000007101a232c353e454e545c60676d71767a7d7f828385858686858482807d79757d89949faba69b8f82756a5f5342382e23170b000000000000000000000a141e28323a444c555c606b6f777d8185898c8e90919292929291908f8d8a86837e79726d665f574f473d352b20170d0000000000000000000006131f2b37434e5865727f8b99a3aea2988b7e7164564c41362a18212e3a47535f6a7784919daaa89b8e8174675d5145392c1f14090000000000000000040f1a26313c46505a636d727e868e92999da0a8aba39f9e9d9c9d9e9fa2aaaaa29f9b948f867e726d62594f443a3020160c0200000000000000000000020f1c2935424f5c6875828f9ba8ac9f9386796c605346392d20181413141418222d3c4956626f7c8995a2afa79a8e8174675b4e4134281b0e01000000000000050a0f12101d2a3643505d69768390908376695d5043362a1d10120f0a050000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000305101d2a3643505d69768390908376695d5043362a1d1005030000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000e1a26313b4653606d7984919eabb5afaca3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3abadb3ac9f92867a6d6054473d3221160c010000000000000000000000000000000000000000000005111d2a36414c5664707d8a97a1adac9e9184786c605346392f24180c000000000000000000000000000000000000000916222f3c4955626f7c8896a0aca49a8b7e7265574e4232281e0d040000000000000000000000000000000000000000000000000a15202d3a46525e697683909da9aa9e9184776a5f54473b2e221506000000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c0000000000000000000000000000000000000000000000000006131f2b37434e5865727f8c99a3aeb7b8ab9f9285796d6053473b3025190e02000000000000000000000000000000030f1c28333f4a5463707c8995a0acab9f958b7f726b605c5453504a5153555a61686e7a8491989298a2aeafa295887c6f6255493c2f2216090000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0600000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000000000000000008111a232c333c424a50555c6064676d707375767878797978777673716d7883909da6ac9e93887c6f62584e4330261c110600000000000000000000020c162029323a434b515960636b7075797c7f82838485868685858382807d7a76726d67605c544d453d352b23190e05000000000000000000000815222e3b47545f6a7783909dabac9f92867a6d6054473b3025191e2b37424e576673808c99a8ab9f9285796d6053473b3025190e0200000000000000000a15202a343e48515b636c717b81878c919597999c9d9e9e9f9f9f9e9d9b9998928e89827b716c625b51473e32281e0e04000000000000000000000003101d2a3643505d697683909ca9ab9e928578665b5044382b1f120707070715222e3b4855616e7b8894a1aea89b8f8275685c4f4235291c0f0200000000010910161b1e20202a3643505d69768390908376695d5043362a20201e1b16100901000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000060b0f12131d2a3643505d69768390908376695d5043362a1d13120f0b06000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000000000000000000000000000000000000000000000000000000000009141f2c3844505c6673808c99a3afbbb9b1acaa9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa7a9afb8bab1a79b8e8174685d5245392c20130400000000000000000000000000000000000000000000000713202d3946525e6875828f9ba9b3aca196897c6f63554b4035291d1004000000000000000000000000000000000006131f2b37434e586673808d99a8ac9f93877b6e6154473c3121160c0000000000000000000000000000000000000000000000000005111e2a36424d5765727f8c98a9aca096887c6f6255493c2d22170b000000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c000000000000000000000000000000000000000000000000000815222e3b4754606a7783909dabacababaea2988a7e7164564c41362a1e110500000000000000000000000000000006121f2b3844505b6674818e9ba7b1a99d9083786c6059504a46444044464850565e68707d89939fa2aab4afa295887c6f6255493c2f2216090000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000713202d3a4653606d798693a0aca79a8d8174675a4e412d22170b00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000000000000000008111a212a30383f444b5153555d606366686a6b6c6c6c6b6b696668717e8b95a0aca49a8f82756a5f54463c311e140a000000000000000000000000050e172029313940454f54596063676d70727576787879797878777573706d6865605d55504a423c332b231911070000000000000000000004101c2834404b55626f7c8895a0aca99b8e8175675d514539291e141a26313c4955626f7c8896a0aca2988a7e7164564d42362a1e11050000000000000000030e18222d363f49515a61696e747b8084888b8d8f90919292929291908e8c8985817c766e69615a51493f352c20160c00000000000000000000000004111e2b3744515e6a7784919daaab9e9184786b554b4034281c100400000814212e3b4754616e7a8794a1ada99c908376695d5043362a1d1003000000010a131b21272b2d2d2d3643505d69768390908376695d5043362d2d2d2b27211b130a010000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000020a11171b1f202a2d3643505d69768390908376695d5043362d2a201f1b17110a0200000000000000000000000000101d2a3643505d69768390908376695d5043362a1d10000000000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000000000000000000000000000000000000000000000000000000000003101c28343f4a54616e7b87929facb9b1a7a0939393939393939393939393939393939393939393939b9ea5afb8aca095897c6f63564c4135291d110400000000000000000000000000000000000000000000000714212e3a4754616d7a86929facb9b2a89a8e8174675d5145382c1f140800000000000000000000000000000000000815222e3b4754606a7784919eaaa99c908376685e5246392d20140400000000000000000000000000000000000000000000000000020e1a25303b4855616e7b8896a1ada8998c7f7366544a3f33281c0f030000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c00000000000000000000000000000000000000000000000004101c2834404b55626f7c8895a0a8a19e9fa2aa9c8f8275685e5246392d20150a0000000000000000000000000000000613202d394653606c7985929eabada1978a7d70655b50443f393834383a3e444c56606b75828f9ba8b1bcafa295887c6f6255493c2f2216090000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000713202d3a4653606d798693a0aca89b8e827568544a3f33281c0f03000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000000000000000000030e1a242f3841474c4e4c474c515457595b5d5e5f5f5f5f5e59616d7a85929ea7a89f93877c6f62584e43342a200c0200000000000000000000000000050e171f272f343d43484f54555c606366686a6b6c6c6c6c6b6a686664615e5653514b443f38302a21191108000000000000000000000006131f2c3845515c6774808d9aa7ada1978a7d7063554b413529170d15212e3b47535f6a7784919eaaaa9c8f8276695e52463a2d20150a00000000000000000006101b242e373f4850575e61696e73777b7e80828484858686858583827f7d79756f6b625f5750483f372d231a0e0400000000000000000000000004111e2b3744515e6a7784919daaab9f928578675c5145382c1f130f0b0c1015222f3b4855626e7b8895a1aea99c8f8376695c504336291d100300000009131c252c33373939393943505d69768390908376695d50433939393937332c251c13090000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000020b141b22272b2d37393943505d69768390908376695d50433939372d2b27221b140b0200000000000000000000000811192a3643505d69768390908376695d5043362a1911080000000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000c17232e3846525e6975828f9ca8b2aca095898686868686868686868686868686868686868686868e939ea9b4aa9d9084776b6054443a2f24190d010000000000000000000000000000000000000000000006131f2b37434e5865727f8c99a3aeb7b8ab9f9285796d6053473b3025190e02000000000000000000000000000000000916222f3c4955626f7c8896a0aca8988c7f7265564d41362a1e110500000000000000000000000000000000000000000000000000000914212d3a46535f697884919eaba99c8f8276665b5044382b1f12060000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c00000000000000000000000000000000000000000000000006131f2c3845515c6774808d9aa7a196919298a29f92867a6e6154473c31261b0f0000000000000000000000000000000916222f3c4955626f7c8897a1adab9e9285796d6053493f342e2b282c2d323b444f59626f7c8995a0acb8afa295887c6f6255493c2f2216090000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000713202d3a4653606d798693a0aca99c8f8376665b5044382b1f120700091623303c4956636f7c8996a2afa4988b7e7165584b3e3225180b00000000000000000008141f2b36414a52585a5954524c474a4c4f50525253534c56616b74818e97a1ada1968d81746a5f54463c3222180e000000000000000000000000000000050d151d232932383d44484b515356595b5d5e5f5f5f5a61646c6c6c6c66635c524739342e261e180f080000000000000000000000000713202d3a4653606d7985929eabab9e9285796d6053463a2f241807131f2b37434e586773808d9aa8ac9f93877b6e6154473c32261b0f0000000000000000000009121c252e363e454d52575f62666a6e71737577787879797978777573706d67636059534d453e362d251b11080000000000000000000000000003101d2a3643505d697683909ca9aea29886796d6053463a2f241f1c17181c1f262f3d495663707c8996a3afa89b8f8275685c4f4235291c0f02000005101b252e373e434646464646505d69768390908376695d504646464646433e372e251b100500000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000a141d262d33373943464646505d69768390908376695d50464646433937332d261d140a0000000000000000000009111a232b3443505d69768390908376695d5043342b231a110900000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000006111c2a36424d5763707d8a96a1acaa9d9083797979797979797979797979797979797979797979818e9ba7aea2988b7f7265594f4332281e130800000000000000000000000000000000000000000000000815222e3b4754606a7783909dabacababaea2988a7e7164564c41362a1e110500000000000000000000000000000003101c28343f4a546673808c99a8ada196887b6e6155483b3025190e02000000000000000000000000000000000000000000000000000005121e2a36424d576875828f9ba8ab9f9285796c605346392d2013060000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c0000000000000000000000000000000000000000000000000713202d3a4653606d7985929fab9e918485929fa3998c7f7265584e43372b1c110600000000000000000000000000000c1926323f4c5965727f8c98a9b3a89b8e8175665c5041382d231f1c1f2029323d4854606a7784919daab7afa295887c6f6255493c2f2216090000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000713202d3a4653606d798693a0acab9f9285796c605346392e23180d060a1723303d4a5663707d8996a3b0a4978b7e7164584b3e3125180b0000000000000000000b1724303c47525c646766615e56544e46454045453f49535d68707d8a939da9a59e91847a6d60584e43342a200f0600000000000000000000000000000000030b121821272c323839404546494c4f50514a505b636c7079797979736e63574b3f32231c150c0600000000000000000000000005111e2a36424d5664717d8a97a2ada89a8d8174665c514438281d13070f1b26323c4956626f7c8996a1ada4998c7f7265584e43372b1c1106000000000000000000000a131c242c333b42464d5355575f626466696a6b6b6c6c6c6b6a686663605d55544f47423c332d241b13090000000000000000000000000000020e1b2835414e5b6874818e9ba7b3aa96897c6f63554b40352f2b282223282c3038414e5865727f8c98a5b5ab9a8d8073675a4d4034271a0d0100000a16212c3740494f5353535353535d69768390908376695d5353535353534f4940372c21160a00000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000006111b262f383f444650535353535d69768390908376695d535353535046443f382f261b1106000000000000000006121b232c353d464e576976839090837669574e463d352c231b1206000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000e1a25303b4653606c7884919eabaca095897c6f6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6d7a86929facac9f92867a6d6054473d3221160c010000000000000000000000000000000000000000000004101c2834404b55626f7c8895a0a8a19e9fa2aa9c8f8275685e5246392d20150a00000000000000000000000000000006121f2b3844505c6676828f9ca9ab9e918478695f53463a2d1f1408000000000000000000000000000000000000000000000000000000020e1a26313f4c5965727f8c98abaea298887c6f6255483c2f2215090000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c000000000000000000000000000000000000000000000005111e2a36424d5764717e8a97a2a99a8d80818e9baa9d9083776a5f5347382e23170b00000000000000000000000000020f1b2835424e5b6875818e9ba8b5ab988b7e7165544a3f2f261b12101217202c38434e586673808d99abb5afa295887c6f6255493c2f2216090000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000713202d3a4653606d798693a0acada297887c6f62544a4034281f1612101724313e4a5764717d8a97a4b0a4978a7e7164574b3e3124180b0000000000000000000d1a2633404c58646e74736e6862605853514b464244505b656d7a84919ea5a79e938a7d70675d51463c3222190e00000000000000000000000000000000000001070c161b21272c2e34383a3d3f42444c545c606d727e868686868073665a4d4033271a0a03000000000000000000000000000714202d3a46525e6975828f9ca9aca096897c6f63544a403428160c010a13202d394653606c7884919eabab9d9084776a5f5347382e23170c00000000000000000000010a121a212930363c4247484e5355585a5c5d5e5f5f5f5f5e5d5b595653514b48433d37312a211b1209010000000000000000000000000000000c1925323f4c5865727f8b98a7b1a6998c8073675d5145403938332d2e34383a4149535f6a76828f9ca9afa4998a7e7164574b3e3124180b0000000f1b27333e49525a5f60606060606069768390908376696060606060605f5a52493e33271b0f00000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000b17222d38414950535d6060606060697683909083766960606060605d53504941382d22170b000000000000020a1117242d363e474f585f69768390908376695f584f473e362d2417110a0200000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000009141f2b3844505b66727f8c99a3aea79a8d8174675c606060606060606060606060605765717e8b98a2aea79b8e8174685d5245392c201304000000000000000000000000000000000000000000000006131f2c3845515c6774808d9aa7a196919298a29f92867a6e6154473c31261b0f0000000000000000000000000000000713202d3a4653606d7985929faba89b8e827568574d42362a1e0d0200000000000000000000000000000000000000000000000000000000091623303c4956636f7c8999a3aeaa988b7e7265584b3f322518070000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c00000000000000000000000000000000000000000000000714202d3a46525e6976828f9ca9a297897d7d8a98a2a095887c6f62544a3f34281c100300000000000000000000000005111d2a36414c566a7784909daaafa499887c6f6255483c2e22140a04060e1b27323d495663707c8999a4afafa295887c6f6255493c2f2216090000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000713202d3a4653606d798693a0acb3a9998c7f73665c51443b3128201f1c1f25323f4c5865727f8b98a5b0a3968a7d7063574a3d3024170a0000000000000000010e1b2734414e5a6774807f7a756f6a64605c55524d505a606c77828f96a1a9a0958e81756b61554c41342a2010070000000000000000000000000000000000000000040a0f161b1d23282c2d343d454d565d666d747f87929892857b6e6154473b2e21140800000000000000000000000000000814212e3b4754616e7b86929facaa9e9184776b605442392e2318040005121f2b3744505b6574808d9aa9aca095887c6f62544a3f34281c10030000000000000000000000080f171f252a31373a3c4247484b4d4f51515253535252504f4c4a4745403938322b2620180f0900000000000000000000000000000000000815222f3b4855626e7b88959fabab9e9185796d605a514b46443f42424045464c525b656e7b87939facac9f93867a6e6154473b2e211408000000121e2b37434f5a646c6c6c6c6c6c6c6c7683909083766c6c6c6c6c6c6c6c645a4f43372b1e1200000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000030f1b27333f49535b606a6c6c6c6c6c6c7683909083766c6c6c6c6c6c6a605b53493f33271b0f0300000000020b141b2227363f485059606a6f7b859191857b6f6a605950483f3627221b140b02000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000030f1c28333f4a54616e7a86929facab9f9285796d60535353535353535353535353535f697683909caaaca095897c6f63564c4135291d110400000000000000000000000000000000000000000000000713202d3a4653606d7985929fab9e918485929fa3998c7f7265584e43372b1c110600000000000000000000000000000916222f3c4955626f7c8898a2aeab988c7f7265594c3f31261a0e02000000000000000000000000000000000000000000000000000000000714202d3a4753606d7986929faca79b8e8174685b4e412e23180c0000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c00000000000000000000000000000000000000000000000814212e3b4754616e7b87939fab9e9285797985929fa79a8d8073665c5044382b1f13070000000000000000000000000713202d3946525e687985929facac9f93867a6d6053473a2d20140700000a14202d3a4753606d7a86939facafa295887c6f6255493c2f2216090000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000713202d3a4653606d798693a0acb8ab9e9184796d60574d433a322d2c282b2d36414c566774808d9aa7b3aa95897c6f6256493c2f2316090000000000000000020f1c2935424f5c6875828c86817c76716d67615e5759616c727f8c949ea9a2979083796d60594f433a2f22190e0000000000000000000000000000000000000000000000040b0c151d2328363e464f575f686d78818c939993877d70695e52463a2d2014070000000000000000000000000007131f2c38434f5966727f8c99a3afa7998c807366594f4330271c120700030f1b27333f495363707c8997a1ada79a8d8074665c5044382c1f1206000000000000000000000000050d141a1f262b2e31373a3b3e4042444545464646454442403d3a38352f2c27211a150e060000000000000000000000000000000000000814212e3a47535f6a7683909da6ada1978c80736c605c5553504a4e4f4b5153565d616c77828f99a4afa69c8f8276685e5246392d20140700000013202d3946535f6c767979797979797979839090837979797979797979766c5f5346392d201300000000000000000000101d2a3643505d69768390908376695d5043362a1d0a0000000000000000000005121f2b3744505b656c76797979797979798390908379797979797979766c655b5044372b1f1205000000000a141d262d334048505a616b6f7c8591979791857c6f6b615a504840332d261d140a000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000b17222d3846525e6875828e9ba8ada2978a7e7164574d42464646464646463f4a54626e7b88949fabaa9d9084776b6054443a2f24190d010000000000000000000000000000000000000000000005111e2a36424d5764717e8a97a2a99a8d80818e9baa9d9083776a5f5347382e23170b00000000000000000000000000000c1825323f4b5865727e8b98aaaea399897c6f6356493c30231609000000000000000000000000000000000000000000000000000000000006131f2c3845515c677784919eaaa99c90837669554b4034281c100400111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c0000000000000000000000000000000000000000000007131f2c38434f5966727f8c99a4aa9b8e817475818e9baa9e9184796d6053463a2f24180d0100000000000000000000000714212e3a4754616d7a8798a2aeab9e918478675c5145382c1f1306000006131f2c3945515d677784919eaaafa295887c6f6255493c2f2216090000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000713202d3a4653606d798693a0acb9ada1968b7e71695e554c443e3a383437393e46525e687683909ca9aea298877a6e6154473b2e2114080000000000000000020f1c2935424f5c6875828f928e89837e79736e6963606b707e88939fa6a39992857b6e675d51473e31281e10070000000000000000000000000000000000000000000000060e161e272e344048505960696e7a828e939f948c7f736b60574d42362a1e1105000000000000000000000000000915222f3b4854606b7784919d9f9f9f95887b6e6255483d3222150b0000000b17222d3a4653606d7985929e9f9f9e9185796d6053463a2d2013070000000000000000000000000002090e151a1e21262b2e2f31333637383839393938373533302d2c29241d1b160e09030000000000000000000000000000000000000006121e2b37424e5764707d8a949fa9a99c928b7e746d6762605b545b5b555c6062686d75808d949eaba99e94897d7063564c41362a1e110500000013202d394653606c798686868686868686909494908686868686868686796c605346392d2013000000000000000000020b142a3643505d69768390908376695d504331261a0b020000000000000000000613202d394653606c798386868686868686909494908686868686868683796c605346392d20130600000006111b262f383f44515a626c707d8591938e8e9391857d706c625a51443f382f261b11060000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000006111c2a36414c5663707d8996a0aca99c8f8276695e5246382d393939393844505c6673808d99a6aea2988b7f7265594f4332281e130800000000000000000000000000000000000000000000000714202d3a46525e6976828f9ca9a297897d7d8a98a2a095887c6f62544a3f34281c1003000000000000000000000000020e1b2835414e5b6874818e9ba7ac9f9286796d6053473a2d201407000000000000000000000000000000000000000000000000000000000004101c2934404b556976828f9ca9ab9e918478675c5145382c1f130600111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c000000000000000000000000000000000000000000000915222f3b4854606b7784919eaba2988a7d70707d8a98a2a197897d7063554b4135291d110400000000000000000000000915222f3c4855626f7b8895aab4a99d9083766a554b4034291c1004000004101d2935404b556976828f9ca9afa295887c6f6255493c2f2216090000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000713202d3a4653606d798693a0acb1a8a09d92857b6e675e56504846443f4446484f58616d7a86929facab9f928578695e52463a2d2014070000000000000000020f1c2935424f5c6875828f999b95908b85807b756f6b6f7d86929aa4a49f92877d70695f554b41352c1f160c0000000000000000000000000000000000000000000000070f18202830394045525a616b6f7b838f949d968f82776c60594f453b30251a0e0200000000000000000000000000091623303c4956636f7c8996939393939083776a5f53473a2e21140300000006121f2b3844505c6674818e93939393978a7d7063574a3d3024170a00000000000000000000000000000003090e12151a1e21222527292a2b2c2c2c2c2b2a282623201f1d18120f0a04000000000000000000000000000000000000000000020e1a26313c4955616c76828f97a1aaa49f93888079736f6c6669686869676d6f747a818d929ca6aaa1978f82766b6055443b3025190e0200000013202d394653606c798693939393939393969696969393939393939386796c605346392d20130000000000000000000a141d2b37434e586976839090837669584e43372b1d140a00000000000000000005121f2b3744505b656f7c899393939393939c9f9f9c939393939393897c6f655b5044372b1f12050000000b17222d384149505b636c717e8692928c81818c9292867e716c635b504941382d22170b0000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000d1925303b4854606b7784919daaac9f93877b6e6153493f33272d2d2d3a4653606d7984919eabac9f92867a6d6054473d3221160c0100000000000000000000000000000000000000000000000814212e3b4754616e7b87939fab9e9285797985929fa79a8d8073665c5044382b1f130700000000000000000000000004101c2934404b55697683909ca9aa9e918477675c5145382c1f13060000000000000000000000000000000000000000000000000000000000000c18232f414e5b6774818e9aa7ac9f9386796d6053463a2d20130700111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c00000000000000000000000000000000000000000004101d2935404b55636f7c8996a0ab9f9285796d6d7985929fa99b8e8175675d5145392c20140900000000000000000000000a1623303d495663707c8996a3afa89c8f8275695c4f422f23180c000000000c18242f414e5a6774818d9aa7afa295887c6f6255493c2f2216090000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508000000000000000000000713202d3a4653606d798693a0acaca09591959082796d68615a5553504a50535459616a73808c99a3afa99c8f827669564d42362a1e11050000000000000000000d1a2633404d59667380878c91979c97928c86827c777c859298a2a49a938b7f726b60574d433a2f231a0d0400000000000000000000000000000000000000000000071019212a323a434b515b636c717d8591959f9991847a6d655b50473d33291f140900000000000000000000000000000e1b2834414e5b677481868686868686867f7265574e42372b1e120600000003101c28343f4a5463707d868686868686868175685b4f4235281c0f00000000000000000000000000000000000206090e121415181a1c1e1e1f20201f1f1d1c19171413100c07010000000000000000000000000000000000000000000000000915202d3944505a616e7b859298a1a9a49a938d85807b79767575757677797c81858e939ca4a9a19892857b6e61594f4432291e14080000000013202d394653606c798693928d8989898989898989898989898d929386796c605346392d2013000000000000000006111b262f3847535f6a7683909083766a5f53473d2f261b11060000000000000000030f1b27333f4953606b75828f99a39f9f9fa9ababa99f9f9fa3998f82756b6053493f33271b0f030000030f1b27333f49535b606d737e8792928b807474808b9292877e736d605b53493f33271b0f0300000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000008141e2c38444f5965727f8c98a3aea4998c7f73655b5044372b1f2a36414c5663707d8a97a1ada79b8e8174685d5245392c201304000000000000000000000000000000000000000000000007131f2c38434f5966727f8c99a4aa9b8e817475818e9baa9e9184796d6053463a2f24180d01000000000000000000000006131f2c3845515c677885919eaba99c8f827669554b4034291c1004000000000000000000000000000000000000000000000000000000000000071926333f4c5966727f8c99a5afa49a887b6e6255483b2f22150800111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c0000000000000000000000000000000000000000000613202c3945515d6774818e9aa8aa9b8e8175676775818e9baa9f92867a6d6054473b31251a0e02000000000000000000000a1724313d4a5764707d8a97a3b0a89b8e8175685b4e4235281b0700000000071a2633404d596673808c99a6afa295887c6f6255493c2f2216090000000000000c1925323f4c5865727f8b98a5aea194887b6e6155483b2e221508080400000000000000000713202d3a4653606d798693a0acaa9d9184919590837a716c6662605c545b6061646b707c87929fabb0a6998c7f7266594c3f3025190e020000000000000000000c1926323f4b57636e737b80858a90949a99928e8984869297a2a49a93887f726d62594f453b3128221c140b020000000000000000000000000000000000000000040f19222b333c444c555c606d737e869297a09f92877c6f685d53493f352b20170d0200000000000000000000000000000d1a2733404c59646f7479797979797979726d6256453c31261a0e02000000000b17232e384855616b7079797979797979756f65594d4034271b0e0000000000000000000000000000000000000000020608080b0d0f11121213131312110f0d0a07060400000000000000000000000000000000000000000000000000000003101c28333e46525e696f7c8692979fa6a49f97918c888583828182828386898d92989ea5a69f9792867c6f695e52473d3320170d020000000013202d394653606c7986938d807d7d7d7d7d7d7d7d7d7d7d7d808d9386796c605346392d201300000000000000000b17222d38414f59626f7c879292877c6f62594f41382d22170b0000000000000000000b17222d38414f59616e7b86929fa9b3acb6b7b7b6acb3a99f92867b6e61594f41382d22170b00000005121f2b3744505b656c747f8b9292877e736d6d737e8792928b7f746c655b5044372b1f120500000b1825323e4b5865717e8b98a4aca295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000002101c27333d4754616d7a86929facab9e9184786c6053463a2f242d3946525e6875828f9ba9aca095897c6f63564c4135291d110400000000000000000000000000000000000000000000000915222f3b4854606b7784919eaba2988a7d70707d8a98a2a197897d7063554b4135291d110400000000000000000000000714202d3a4753606d7a86939faca79a8e8174675b4e412f23180c000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a97a4b6ac96897d7063564a3d3023170a00111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c0000000000000000000000000000000000000000000714202d3a4753606d7a85929faca3988a7d716464707d8a98a2a2988b7e7165574d42362a1e1205000000000000000000000b1724313e4a5764717d8a97a4b0a79a8d8174675a4e4134271b0e010000000c1926323f4c5965727f8c98a5afa295887c6f6255493c2f2216090000000000050c1925323f4c5865727f8b98a5aea194887b6e6155483b2e22171614100b050000000000000713202d3a4653606d798693a0aca4978a7e85929590847e77726f6d666b656c6e71767d859299a3aeac9f94887b6e6155483b2e221509000000000000000000000a17232f3b47525c63696e73797e83888d92989b95909298a2a99f93887f726d625b514c47433c332d261d140a00000000000000000000000000000000000000000a16212b343d454d565e676d757f8a9298a19e938b7f726a60564c41382d23190e050000000000000000000000000000000b1824303c48535d64676c6c6c6c6c6c6c65625b5146332a201509000000000006111c2c38444f5961636c6c6c6c6c6c6c68655d53483d3125180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222a36424d57606a6f7c858f949ea1a8a19e999892908f8e8e8f9092999a9fa2a8a09e948f857c6f6a60564d42352c210e05000000000013202d394653606c7986938b7e7270707070707070707070727e8b9386796c605346392d201300000000000000030f1b27333f4953606b75828f99998f82756b6053493f33271d1207000000000000000006111b262f3d46535f6974808d97a2adbac3c4c4c3b9ada2978d8073695f53473d2f261b11060000000613202d394653606c77808c9192867d716c63636c717d8692918c80776c605346392d20130600000b1825323e4b5865717e8b989f9f9f95897c6f6256493c2f23160900000d1a2733404d5a6673808d999f9f9f9386796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000000b16202d3946525d6875818e9ba7aca096897c7063554b4135292e3a4754616d7a86929facaa9d9084776b6054443a2f24190d010000000000000000000000000000000000000000000004101d2935404b55636f7c8996a0ab9f9285796d6d7985929fa99b8e8175675d5145392c20140900000000000000000000000815222f3b4855626e7b889aa4afa5998c7f7266594c3f3326190700000000000000000000000000000000000000000000000000000000000000091623303c4956636f7c8996a2afa4978b7e7164584b3e3125180b00111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c000000000000000000000000000000000000000005121e2a36424d5764717e8b98a2ac9f92867a6d60606d7985929faa9c8f8376695e53463a2d21160a000000000000000000000b1824313e4b5764717e8a97a4b1a79a8d8174675a4e4134271b0e010000000c1825323f4b5865727e8b98a5afa295887c6f6255493c2f221609000000000810171c25323f4c5865727f8b98a5aea194887b6e6155483b2e262423201c17100800000000000713202d3a4653606d798693a0aca4978a7e7e8b9296918a837f7b79787778797b7e828a9297a2abafa49a8f8276695f53473a2d2114080000000000000000000007131f2a35404a52575e61666d71767c81869196a09d9fa2aaa6998c8075706b65605d55534e443f382f261c1106000000000000000000000000000000000000030f1b27323d464e575f686d79818c929fa3a0958e81756d62584e443a2f261b1108000000000000000000000000000000000814202b36414a53595b60606060606060595651493f3521180e03000000000000101c28333e474f5557606060606060605b59534b41372c2014080000000000000000000000000000000000000000000000000406070a0d0f11121313131212100e0c0906060300000000000000000000000000000000000000000000000000050e1a25303b454e58606a6f7b828b91969c9fa3aaa29f9d9c9b9b9c9d9fa3aba39f9b96918a827b6f6a60584e443b30231a0f00000000000013202d394653606c7986938b7e7265636363636363636365727e8b9386796c605346392d2013000000000000010c161f2b3744505b65707d89949e9e94897d70655b5044392e23180c0100000000000000000a141d2b37424d57606d7a85929fa8b2bdc8c8bdb2a89e92857a6d60574d42352b1d140a000000020f1b2835424e5b6875818d9292857c706b625a5a626b707c8592928d8175685b4e4235281b0f02000b1825323e4b5865717e8b9393939393897c6f6256493c2f2316110b0b101a2733404d5a6673808d939393939386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000005111d2935414c56636f7c8995a0aca89b8e8174675d5145392c37434e5865727f8b99a3aea2988b7f7265594f4332281e130800000000000000000000000000000000000000000000000613202c3945515d6774818e9aa8aa9b8e8175676775818e9baa9f92867a6d6054473b31251a0e02000000000000000000000a1724303d4a5763707d8a96acb6a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8895a2afa5988b7e7265584b3f3225180c00111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c00000000000000000000000000000000000000000714212d3a46535f6976838f9caaaa9b8f8275675d5d6775828e9baa9f93877b6e6154483d32271b0f000000000000000000000b1825313e4b5864717e8b97a4b1a79a8d8074675a4d4134271a0e010000000b1825323e4b5865717e8b98a4afa295887c6f6255493c2f22160900000008121a22282d323f4c5865727f8b98a5aea194887b6e6155483b333331302d28221a1108000000000713202d3a4653606d798693a0aca4978b7e74818e949e95908c888685848585878b8f949fa2a9aea59f93877c6f62574d42372b1e120600000000000000000000020e19242e3840454d52545c60646a6f747b84919eaba39f9da09f9287827d77726d67625f58504a42382d22170b00000000000000000000000000000000000007131f2c38434e5860696e7a828e939ca4a2989183796d605b51463d32281d140a0000000000000000000000000000000000030f1a252f3841484c4e535353535353534c4a463f372d230f06000000000000000b16212c353e44484a535353535353534f4d4841392f251a0f0400000000000000000000000000000000000000000001070c10131416191c1d1f1f20201f1e1d1b191613120f0b0600000000000000000000000000000000000000000000000009141f29333d464e5860696e767e848a8f9299999b9d9e9f9f9f9f9e9d9b9999928f8a847e766e6960584e463d32291f110800000000000013202d394653606c7986938b7e7265585656565656565865727e8b9386796c605346392d201300000000000008131e2834404b54606c7883909da6a69d9083786c60544b4034281e13080000000000000000020b1a26313c45525d68727f8c96a0acb9c2c7b8aca0968b7f72685d52453b3123190b02000000000b1724313e4a5764717e869293877f746d665d5d666d747f879392867e7064574a3d3124170a00000b1825323e4b5865717e868686868686867c6f6256493c2f23221d16161b202733404d5a66738086868686868686786d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000000010d1924303a4854606b7783909daaac9f92857a6d6054473c313b4754606a7783909dabac9f92867a6d6054473d3221160c0100000000000000000000000000000000000000000000000714202d3a4753606d7a85929faca3988a7d716464707d8a98a2a2988b7e7165574d42362a1e1205000000000000000000000b1825313e4b5864717e8b97a4afa296897c6f6356493c30231609000000000000000000000000000000000000000000000000000000000000000815222f3b4855626e7b8895a1aea5988c7f7265594c3f3226190c00111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c00000000000000000000000000000000000000030f1c28333f4a54616e7b87939faca2988a7e7164555564717e8a98a3a49a8c7f7366584e43372b1d12070000000000000000000b1824313e4b5764717e8a97a4b1a79a8d8174675a4e4134271b0e010000000b1825323e4b5865717e8b98a4afa295887c6f6255493c2f221609000005101a242c33393c3f4c5865727f8b98a5aea194887b6e6155484040403d3c39332c231a10050000000713202d3a4653606d798693a0aca5988b7e7278828e939f9d999a939291919298979c9fa6adaba39f938d80736a6054453c31261a0e0200000000000000000000030e18212a31373e434b51575e666c727c849196a1a0999290959b99928f89847f7a746f6a605b544a3f33281c0f0300000000000000000000000000000000000915222e3b4854606a6f7b8490949ea5a49f92867c6e675d51493f342b20160b0200000000000000000000000000000000000008131d262f363c4041464646464646463f3e3a352d251b11000000000000000005101a232c33383c3d4646464646464642403d372f271e13090000000000000000000000000000000000000000040a0f12181c1f202326282a2b2c2c2c2c2b2a282523201f1c17110f0a03000000000000000000000000000000000000000000020d17212b343d464e565e616c71787e82868a8c8f90919292929291908e8c8986827d78716c615e574e463d342b20170d0000000000000013202d394653606c7986938b7e7265584b4a4a4a4a4b5865727e8b9386796c605346392d20130000000000010d19242f3845515c66717e8a959fabab9f958a7e71665c51453a2f24190d02000000000000000009141f2935414c56606d7984919ea6b0bebeb0a69e9184796d60564c41332a1f100700000000000a1623303c4955616c717d8692938c80786d67676d78808c9392867d706c6155493c3023160a00000b1724313d4a56626c71797979797979796f6a6054473b36332e272021272c2f303f4b58636e737979797979797976665c5044382c1f1206000000000000000000000000000000000000000000000000000000000000000000000008131e2c38434f5965727f8b98a2aea2988b7e7165574d4237404b55626f7c8895a0aca79b8e8174685d5245392c201304000000000000000000000000000000000000000000000005121e2a36424d5764717e8b98a2ac9f92867a6d60606d7985929faa9c8f8376695e53463a2d21160a000000000000000000000c1825323f4b5865727e8b98a5afa295887c6f6255493c2f221609000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794a1aea6998c7f7366594c403326190d00111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c0000000000000000000000000000000000000006121f2b3844505b6673808c9aa4ac9f92867a6d605454606d7a86929fac9d9184776a605447392e23180c0000000000000000000b1724313e4a5764717d8a97a4b0a79a8d8174675a4e4134271b0e010000000c1825323f4b5865727e8b98a5afa295887c6f6255493c2f22160900000c17222c363e45494a4d5865727f8b98a5aea194887b6e61554d4d4d4d4a49443e362c22170b0000000713202d3a4653606d798693a0aca5988b7f726d78818b92989fa29f9e9e9e9fa3aaa9a9aaa29f99928b81786d60584e43332a1f1509000000000000000000000009151f2a333c42474f555c60696e787f879196a09f95918684898e92989b95918b85817c766c665b5044382b1f120600000000000000000000000000000000000916232f3c4956626f7c85919693939393928a7e716a5f554b40372d22190e0400000000000000000000000000000000000000010b141d252b3033343939393939393932312e29231b130900000000000000000008111a21282c2f30393939393939393534312c251e150c02000000000000000000000000000000000000040a0f161b1d23292c2d303335373839393939383635322f2d2b28221c1b150e09030000000000000000000000000000000000000000050f19222b343c444d525a61666d71757a7d80828385858686858483827f7d7a75716d66615a524d453d342b22190e050000000000000013202d394653606c7986938b7e7265584b3f3d3d3f4b5865727e8b9386796c605346392d2013000000000004111d2935414c56606d7984919ea7b1b1a79e9184796d60564c4135291f14090000000000000000030d1924303a44515c66707d8a949facb6b6ac9f948a7d70665c51443a3021180e0000000000000814212d3944505a616b707c8591928d82796e6e79828e9291857c706b615a5044392d20140800000915212e3a45505a62656c6c6c6c6c6c6c6260584e4344433f3932292b32383b3d4647525c63666c6c6c6c6c6c6c6c5c544a3f34281c10030000000000000000000000000000000000000000000000000000000000000000000000020f1b27323d4754606d7a86929facaa9c908376695f53473845515c6774808d9aa7aca095897c6f63564c4135291d110400000000000000000000000000000000000000000000000714212d3a46535f6976838f9caaaa9b8f8275675d5d6775828e9baa9f93877b6e6154483d32271b0f000000000000000000000c1926323f4c5965727f8c98a5aea195887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0ada6998d8073665a4d4033271a0d00111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c000000000000000000000000000000000000000613202d394653606c7884919eaca99b8e8175675d51515d6775828f9caba096897c6f62544b4034281c100400000000000000000a1724303d4a5763707d8a96a3b0a89b8e8175685b4e4235281b07000000000c1926323f4c5965727f8c98a5afa295887c6f6255493c2f2216090005111c28333e48505557595965727f8b98a5aea194887b6e615959595959575550483e33281c100400000713202d3a4653606d798693a0aca5998c7f72666d757f868d92989a9c9e9e9f9f9e9d9c9998928d867f746d665c50463d3221180e0300000000000000000000020e1a26313c454d535961676d727b828c92999f99928d837c777c81868c91969c98928d8882786c605346392d20130600000000000000000000000000000000000d1a2633404d59667380868686868686868680746c61574e43392f251b1007000000000000000000000000000000000000000000020b131a202427282d2d2d2d2d2d2d2625221e18110901000000000000000000000810161c2023242d2d2d2d2d2d2d282725201a130c03000000000000000000000000000000000000060b151b21272c2f34383a3d40424445464646454543413f3c3938332d2b26201a150b060000000000000000000000000000000000000000071019222b323b424650545c6064676d70737577787979797878767573706d6764605c545046423b332b22191007000000000000000013202d394653606c7986938b7e7265584b3f3d3d3f4b5865727e8b9386796c605346392d201300000000040e18222c3945525d68727f8b96a0acb9b9aca0968b7f72685d52453b30251a0e04000000000000000008131e2834404a54616c7682909aa4afafa49a9082766c61544a4032281e0f0600000000000004101c28333e485059606a6f7b8490948f837a7a838f9490847b6f6a605950483e33281c1004000005111d29343f485056586060606060606056544e5353514f4a443b32353d44484953535352585a606060606060605f504a42382e23170c000000000000000000000000000000000000000000000000000000000000000000000000000a16202c3945515d6774818e9aa7ab9f94887b6e62544a3f4653606d7985929fabaa9d9084776b6054443a3024190d0100000000000000000000000000000000000000000000030f1c28333f4a54616e7b87939faca2988a7e7164555564717e8a98a3a49a8c7f7366584e43372b1d12070000000000000000000d192633404c5966737f8c99a6aea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0ada79a8d8074675a4d4134271a0e00111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c00000000000000000000000000000000000004111d2935414c5663707d8996a1aca1978a7d7063554b4b5564717e8b99a3a89a8d8174665c5145382c1f130800000000000000000916232f3c4956626f7c8995acb6a89c8f8275695c4f422e23180c000000000d1a2633404d596673808c99a6afa295887c6f6255493c2f221609000814212d3945505a6164666666727f8b98a5aea194887b6e66666666666664615a5044392d20140800000713202d3a4653606d798693a0aca6998c7f7366606d727b80858a8d8f9192929291908f8c8985807b726d605c544a3f342b200f06000000000000000000000006121e2b37424d575f616b70797f868f949f9d948f8780796f6a6f747a7f84898f93999a9486796d6053463a2d20130700000000000000000000000000000000000c1925323f4b57636d737979797979797979746e645a50453c31281d1209000000000000000000000000000000000000000000000001080f14181a1b20202020202020191816120d0700000000000000000000000000050b10141617202020202020201c1b18140f09020000000000000000000000000000000000020a111720262b323839404547494c4f50525253535251504e4c4946443f3837312b262017110a0200000000000000000000000000000000000000071019202930363e424a5053555d606366686a6b6c6c6c6c6b6a686663605d5553504a423e3630292119100700000000000000000013202d394653606c7986938b7e7265584b4a4a4a4a4b5865727e8b9386796c605346392d2013000000000a15202a36424d57606d7a85929ea8b2bdbdb2a89e92857a6d60574d42362a20150a0000000000000000020c18232e3942505a626f7c87939faaaa9f93877c6f625a5042392e20160c00000000000000000b17222c363e474f585f696e7a839094908484909490837a6e695f584f473e362c22170b000000010c18222d363f454a4b5353534c525f6060606060605d5b554d44393d474f54566060606060605a58535353535353443f3830261c11060000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c55626f7c88959faba6998d8073665c50444d5764717e8a97a2ada2988b7f7265594f4332281e1308000000000000000000000000000000000000000000000006121f2b3844505b6673808c9aa4ac9f92867a6d605454606d7a86929fac9d9184776a605447392e23180c0000000000000000000d1a2734404d5a6773808d9aa6ada094877a6d6154473a2e211407000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0ada79a8d8074675a4d4134271a0e00111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c0000000000000000000000000000000000000613202c3945525d6875818e9ba8ab9e9285796d6053464754616d7a86929fab9e9285796d6053463a3025190d01000000000000000815222e3b4855616e7b889aa4afa99d9083766a554b4034281c10040000010e1b2834414e5b6774818e9aa7afa295887c6f6255493c2f221609000a1723303c4955616c71737373737f8b98a5aea194887b73737373737373706c6155493c3023160a00000713202d3a4653606d798693a0aca6998d8073665b62686e74797d808284858685858482807d7a746e69625b504a42382e22190f0000000000000000000000000814212d3a47535f696e757d848c92989395908a827c736d676062686d72787d82878d929786796d6053463a2d20130700000000000000000000000000000000000a16232f3b47525b63666c6c6c6c6c6c6c6c67645c52483e332a1f160c000000000000000000000000000000000000000000000000000003080b0d0e131313131313130c0b090601000000000000000000000000000000000407090a131313131313130f0e0c0804000000000000000000000000000000000000040b141c222832373d43484b515356595b5d5e5f5f5f5f5e5d5b585653504a47433c373127221b140b0300000000000000000000000000000000000000070e171f252a30383f44464c515457595c5d5e5f5f5f5f5e5d5b595653514b46443f38302a251f170f070000000000000000000013202d394653606c7986938b7e7265585757575757575865727e8b9386796c605346392d2013000000020b1b26313a46525e6973808d97a1adbac4c4b9ada1978d8073695e52463c31261b0b02000000000000000007121c27303e4754606a75818e98a2a2988e81756a6054483e30271c0e04000000000000000005101a242c353d464e575f686e7a828f949191948f827a6e685f574e463d352c241a10050000000006111b242d343a3d3e46414c565e6c6c6c6c6c6c6c6a675f554a3f444f5960636c6c6c6c6c6c67645c534846464638342e261e150a0000000000000000000000000000000000000000000000000000000000000000000000000000010d19242f3a47545f6a7783909da9ab9e9184796d605346525e6976828f9ca9ac9f92867a6d6054473d3221160c0200000000000000000000000000000000000000000000000613202d394653606c7884919eaca99b8e8175675d51515d6775828f9caba096897c6f62544b4034281c100400000000000000000e1a2734414d5a6774808d9aa7ada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0ada6998d8073665a4d4033271a0d00111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c0000000000000000000000000000000000000714212d3a4754606d7a86929faca89a8d8174665c514446525d6876828f9caba2978a7d7064564c4135291d1105000000000000000714202d3a4753606d7a86939facab9e918478675c5145382c1f1306000004111d2935414c566976828f9ca9afa295887c6f6255493c2f221609000b1724313e4a5764717e80808080828f9ca8b3a79a8d80808080808080807e7064574a3d3124170a00000713202d3a4653606d798693a0aca6998d8073665a565e61666d7073757778797978777673706d67615e5751443f3830261c10070000000000000000000000000815222e3b4855616e7b8286868686868686837d766f6a605c55565d61656c70757b80858a867a6d6053473a2d201407000000000000000000000000000000000007131e2a35404952575960606060606060605a58524a40362c21180d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161d262d333c43474f54555c606366686a6b6c6c6c6c6b69686562605b54534e47423c332d261d150d0300000000000000000000000000000000000000050d14191e262e34383a4145474a4d4f50525253535251504f4c4a4745403a38342e261e1a140d05000000000000000000000013202d394653606c7986938b7e7265646464646464646465727e8b9386796c605346392d20130000000a141d2b37434e58616e7b86929fa9b3becccabeb3a99f92867b6e61584e43372b1d140a0000000000000000000b151e2b37434e58616e7b86929f9f92867b6e61584e43362c1e150b0000000000000000000008121a232b343c454d565e686d79828e93938e82796d685e564d453c342b231a120800000000000009121b22292e31323946525e68767979797979797771675b4f434854606b70797979797979746e64584c4039392c28231c150c0300000000000000000000000000000000000000000000000000000000000000000000000000000008131e2b37434e5865717e8b97a2ada1968a7d7063564c54616e7b87939faca79b8e8174685d5245392c201304000000000000000000000000000000000000000000000004111d2935414c5663707d8996a1aca1978a7d7063554b4b5564717e8b99a3a89a8d8174665c5145382c1f130800000000000000000e1a2734414d5a6774808d9aa7ada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794a1aea6998c7f7366594c403326190d00111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c000000000000000000000000000000000006121f2b37434e5865727e8b98a2aca096897c6f63544a40414c5665727e8b99a4a99b8f8275685e5246392d2015090000000000000006131f2c3845515c677885919eabac9f9286796d6053463a2d20130600000713202c3945525d687884919eabafa295887c6f6255493c2f221609000f1c2835424f5b6875828c8c8c8c8f949eaab5a99d928d8c8c8c8c8c8c8c8174685b4e4135281b0e02000713202d3a4653606d798693a0aca6998d8073665a4d52545c606367696b6b6c6c6b6a696663605d55534d453f342e261e140a000000000000000000000000000814212d3a47535f696e757979797979797976706b625f58514b4c52535b6063696e73797e83796d6053473a2d2014070000000000000000000000000000000000020d19242e3740474b4d53535353535353534d4c4740382f241a0f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000010406070a0d10111213131211100d0a07060400000000030505060606060606000000000000000000000000000000000000030c161f282f383f444e54596063676d707375777879797978787674726f6c66625f58534d443f382f271f150d030000000000000000000000000000000000000002090c151c23282c2f35393a3d4042444546464645454342403d3a39352f2b28231c140c090200000000000000000000000013202d394653606c7986938b7e7270707070707070707070727e8b9386796c605346392d2013000006111b262f3847535f6a74818e98a2aebbb9b9b9b9baaea2988e81746a5f53473d2f261b11060000000000000000030c1b27323c46525e6973808d97978c8073695e52463c32241a0c030000000000000000000000081119222a333c444d565d676d78818d8d81786d675d564d443c332a2219110800000000000000000911181d21212e3b4754616e7a86868686868683776a5d5144495663707d8686868686868074675a4e4134271f1c17110a0300000000000000000000000000000000000000000000000000000000000000000000000000000000010f1b26323c4753606d7985929faba99b8e8275685d525966737f8c99a4aca095897c6f63564c4135291d110400000000000000000000000000000000000000000000000613202c3945525d6875818e9ba8ab9e9285796d6053464754616d7a86929fab9e9285796d6053463a3025190d01000000000000000d1a2734404d5a6773808d9aa6ada094877a6d6154473a2e211407000000000000000000000000000000000000000000000000000000000000000815222f3b4855626e7b8895a1aea5988c7f7265594c3f3226190c00111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c00000000000000000000000000000000000814212e3a47535f6a7683909daaaa9e9184776b605442393b4754616e7b86939fac9f92867a6d6154473c31261a0e0000000000000004101c2934404b55697683909ca9afa399887b6f6255483c2e23170b00010714212d3a4754606d7a8796a1acafa295887c6f6255493c2f221609000f1c2835424f5b6875828e9999999c9ea6b0b9aea49d9a9999999999998e8174685b4e4135281b0e02000713202d3a4653606d798693a0aca6998d8073665a4d464b5153575a5c5e5f5f5f5e5d5c595654514b46423b3328231c140c020000000000000000000000000006121e2b37424d575f61696c6c6c6c6c6c6c6a636159534e45404146495053575e61666d71766d675d5145392c1f130600000000000000000000000000000000000007121c252e353b3f404646464646464646413f3c362f261d1208000000000000000000000000000000000000000000000000000000000000000000000000000000000001080d111314171a1d1e1f1f201f1e1c1a171413100c07010c0f11121313131313130909070300000000000000000000000000000b151e283139424a50585f626b6f75797d7f828385858686858483817f7c79746f6a625f575049413931271f150b010000000000000000000000000000000000000000030a11171c1f24292c2d30333537383939393938373533302d2c29241f1c17110a02000000000000000000000000000013202d394653606c7986938d807d7d7d7d7d7d7d7d7d7d7d7d808d9386796c605346392d201300000b17222d38414f59626f7c87939faab4acacacacacacb4aa9f93877c6f62594f41382d22170b0000000000000000000a15202a36424d57606d7a85919185796d60574d42342b20110800000000000000000000000000071019212a323b444c555d666d748080746d665d554c443b322a2118100700000000000000000000060c1114212e3b4754616e7a87939393939084776a5d5144495663707c89939393938d8174675a4e4134271b100c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151f2c3945515d6774808d9aa6ac9f92867a6d6154606b7784919eabaa9d9084776b6054443a3024190d0100000000000000000000000000000000000000000000000714212d3a4754606d7a86929faca89a8d8174665c514446525d6876828f9caba2978a7d7064564c4135291d1105000000000000000d192633404c5966737f8c99a6aea194877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8895a2afa5988b7e7265584b3f3225180c00111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c0000000000000000000000000000000003101c28343f4a54626e7b88959faba7998c807366594f43303946525e687683909ca9a3998b7f7265574d42372b1b1106000000000000000c18232f414d5a6774808d9aa7b5ab988b7e7165544a3f34281c100b0e131c2834404a5464707d8a97a8b2afa295887c6f6255493c2f221609000f1c2835424f5b6875828e9b9f9fa0acaeb5bdb1a9a3a19f9f9f9f9f9b8e8174685b4e4135281b0e02000713202d3a4653606d798693a0aca6998d8073665a4d404045464a4d4f5152535252514f4d4a4745413a3631292117110a020000000000000000000000000000020e1a26313c454d53555c606060606060605d57554f47433c3435383f44464d53545c606469605d554b4035291d1004000000000000000000000000000000000000000a131c242a2f323339393939393939393433302b241d140b0000000000000000000000000000000000000000000000000000000000000000000000000000000003090e13191d20212427292b2b2c2c2c2b292724201f1c18120e181c1e1f2020202020201615130f0a04000000000000000000000007121d273039434b545b606a6f767c8185898c8e90919292929291908e8b8985817c756e69605b534b433931271d120700000000000000000000000000000000000000000000060c1013191d20212426292a2b2c2c2c2c2b2a282623201f1d1812100b060000000000000000000000000000000013202d394653606c798693928d8a8a8a8a8a8a8a8a8a8a8a8a8d929386796c605346392d201300030f1b27333f4953606b76828f99a49f9f9f9f9f9f9f9f9f9fa4998f82756b6053493f33271b0f030000000000000000040e1a25303b45515d67727e8b8b7e71675d51453b3022190f000000000000000000000000000000070f182029323a434b545c606e73736e605c544b433a322920180f07000000000000000000000000010814212e3b4754616e7a87949f9f9d9084776a5d5144495663707c89969f9f9a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b55626f7b88949faba3998b7e726557636f7c8996a0aca2988b7f7265594f4332281e1308000000000000000000000000000000000000000000000006121f2b37434e5865727e8b98a2aca096897c6f63544a40414c5665727e8b99a4a99b8f8275685e5246392d201509000000000000000c1926323f4c5965727f8c98a5aea195887b6e6255483b2f22150800000000000000000000000000000000000000000000000000000000000000091623303c4956636f7c8996a2afa4978b7e7164584b3e3125180b00111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c0000000000000000000000000000000006121f2c3844505c6673808d9aa7ab9f95887b6e6255483d3236414d5665727f8c98a7ab9d908376695f5347382d22170b00000000000000071824313e4b5764717e8a97a7b1a79b8e8174665c5044382b221b171a1d242c3844515c6674818d9aa7b4afa295887c6f6255493c2f221609000f1c2835424f5b6875828e939393939fa3abb5a99f98949393939393938e8174685b4e4135281b0e02000713202d3a4653606d798693a0aca6998d8073665a4d4034383a3d404244454646454443403d3a39352f2a251f170f06000000000000000000000000000000000009151f2a333c4247484f53535353535353504a48443e373129292d33373b42464b5153575d53514b43392f24180c0000000000000000000000000000000000000000010a12191e2325262d2d2d2d2d2d2d2d2726241f19130b02000000000000000000000000000000000000000000000000000000000000000000000000000000060e141a1e24292c2d3033363738393939383634302d2c29231d1a24282b2c2d2d2d2d2d2d23221f1b160f07000000000000000000040d18232e39434b555d666c737c83898e9298999b9d9e9f9f9f9f9e9c9b9897918d88827b736c655d554b43392f24180e05000000000000000000000000000000000000000000000003080d111314171a1c1d1f1f20201f1e1d1c19171413100c070300000000000000000000000000000000000013202d394653606c798693939393939393939393939393939393939386796c605346392d20130005121f2b3744505b65707d8994939393939393939393939393939394897d70655b5044372b1f120500000000000000000009141f2935414b55606d788383786d60554b4033291f100700000000000000000000000000000000060e1720283139424a505c636767635c504a4239312820170e0600000000000000000000000000000814212e3b4754616e7a8794a1aa9d9084776a5d5144495663707c8996a3a79a8d8174675a4e4134271b0e010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18242f3947535f6a7683909ca9ab9d908376695f6774818e9aa8ac9f92867a6d6054473d3221160c0200000000000000000000000000000000000000000000000814212e3a47535f6a7683909daaaa9e9184776b605442393b4754616e7b86939fac9f92867a6d6154473c31261a0e000000000000000c1825323f4b5865727e8b98a5afa295887c6f6255493c2f221609000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a97a4b6ac96897d7063564a3d3023170a00111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c000000000000000000000000000000000713202d3a4653606d7985919eabab9d908377695f53473a2b303b4854616e7b8795a0ab9f95887b6e6253493f33271b0f030000000000000814212e3b4754616e7b8795a0acab9e9285796d6053463e342b2722262a2f35404b55606d7985929eabb8afa295887c6f6255493c2f221609000f1c2835424f5b68758186868686868b99a3aea3988d88868686868686868174685b4e4135281b0e02000713202d3a4653606d798693a0aca6998d8073665a4d40332c2d3034363838393938373633302d2c29241d1a140d05000000000000000000000000000000000000030e18212a31373a3b4246464646464646433d3c38332b26201b22272b3136394045464b504745403931271d120700000000000000000000000000000000000000000000070d1316191a20202020202020201a1a17130e0801000000000000000000000000000000000000000000000000000000000000000000000000000000070f181f262a2f35393a3d404344454646454443403d3a38342f2a252f3437383939393939392f2e2c272119100700000000000000010c161f2834404b555d676d78808790949b9fa2a9a29e9c9b9a9a9b9d9fa3a9a19e9a948f877f776d675d554b40352920170d02000000000000000000000000000000000000000000000000010406070a0d0f11121313131212100f0d0a07060400000000000000000000000000000000000000000013202d394653606c798686868686868686868686868686868686868686796c605346392d2013000613202d394653606c798386868686868686868686868686868686868683796c605346392d201306000000000000000000030d18242f3a44505c66707d7d70665c50433a2f21170d000000000000000000000000000000000000050d161f2730383f4452585a5a5852443f3830271f160d050000000000000000000000000000000814212e3b4754616e7a8794a1a99d9084776a5d5144495663707c8996a3a79a8d8174675a4e4134271b0e0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2b37434e5864717e8a97a1ab9f95887b6e616d7985929faba79b8e8174685d5245392c201304000000000000000000000000000000000000000000000003101c28343f4a54626e7b88959faba7998c807366594f43303946525e687683909ca9a3998b7f7265574d42372b1b11060000000000000b1825313e4b5864717e8b97a4afa296897c6f6356493c30231609000000000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a5afa49a887b6e6255483b2f22150800111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c00000000000000000000000000000005111d2a36414c5663707d8a97a1ada3998c7f7265574d42372b2d3a46535e697783909daaa7998d8073655b5044372b1f12070000000000000714202d3a46525e697784909dabada1978a7d70635a50463d37332d31363a4045515d67717e8b97a1adb9afa295887c6f6255493c2f221609000e1b2834414d59656f75797979797987929faca194887b79797979797979746f64594d4034271a0e01000713202d3a4653606d798693a0aca6998d8073665a4d403327202427292b2c2c2c2b2a29262321201d18130e09030000000000000000000000000000000000000000060f181f262b2d2e363939393939393937302f2c28211b1511171b1f252a2e34383a3e433a39352f271f150b01000000000000000000000000000000000000000000000002070a0c0d13131313131313130e0d0b0703000000000000000000000000000000000000000000000000000000000000000000000000000000030b1218212a31363a4145474a4d505152525352514f4d4a4745403936313a4044454646464646463c3b38322b22190f0400000000000008131e28313a45515c676d79828d92999fa6a39f9a97928f8e8d8e8e9092989b9fa3a69e99928c82796d675d51453f32291e140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202d3946535f6c767979797979797979797979797979797979797979766c5f5346392d20130005121f2b3744505b656c77797979797979797979797979797979797979776c655b5044372b1f12050000000000000000000007131d28343f4a54606b70706b60544a3f31281d0f0500000000000000000000000000000000000000040d151e262e3440474b4d4d4b4740342e261e150d04000000000000000000000000000000000814212e3b4754616e7a87949c9c9c9084776a5d5144495663707c89969c9c9a8d8174675a4e4134271b0e01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a26313c4653606d7985929eaca7998c7f7366717d8a98a2aca095897c6f63564c4135291d1104000000000000000000000000000000000000000000000006121f2c3844505c6673808d9aa7ab9f95887b6e6255483d3236414d5665727f8c98a7ab9d908376695f5347382d22170b0000000000000a1724303d4a5763707d8a96acb6a4978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7ac9f9386796d6053463a2d20130700111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c0000000000000000000000000000000713202d3946525e6875828f9ba9ac9f92867a6e6154473c31262a36424d5766737f8c99a7ab9e9184786c605346392f24180c00000000000005111e2a36424d5666737f8c99a3afa99c9083766c61584f46443f414142464b515b606d7984919ea9afb8afa295887c6f6255493c2f221609000c1925313d48535d65686c6c6c677683909da9a194887b6e6c6c6c6c6c6c68645d53483c3024180c00000713202d3a4653606d798693a0aca6998d8073665a4d4033271a171a1c1e1f201f1f1e1c1a171413110d07010000000000000000000000000000000000000000000000060e151a1e2122292d2d2d2d2d2d2d2a2423201c160f0a060b0f141a1d23282c2d31362d2c29241d150d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151c2328333b42464c5254575a5c5e5e5f5f5f5e5c5a5753514b46423b454c50525353535353534948433d342b21160a0000000000010d19242f3a43505a606d79828f949fa3a7a099928e898583818181828386898e92999fa7a39f948f82796d605b51443b3025190e0200000000000000000000000000000000000000000000000002070b0d0d131313131313130f0e0c0804000000000000000000000000000000000000000000000000121e2b37434f5a646c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c645a4f43372b1e1200030f1b27333f49535b606a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a605b53493f33271b0f0300000000000000000000010b17232e38424f5960636360594f42382e1f160c000000000000000000000000000000000000000000030c151c2328363b3f40403f3b3628231c140c0300000000000000000000000000000000000814212e3b4754616e7a878f8f8f8f8f84776a5d5144495663707c898f8f8f8f8d8174675a4e4134271b0e01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151f2c3845515c6773808d9aa4aa9d9184776a75828e9baaaa9d9084776b6054443a3024190d0100000000000000000000000000000000000000000000000713202d3a4653606d7985919eabab9d908377695f53473a2b303b4854616e7b8795a0ab9f95887b6e6253493f33271b0f0300000000000815222f3b4855626e7b889aa4afa5998c7f7266594c3f3326190700000000000000000000000000000000000000000000000000000000000004101d2935404b556976838f9ca9ab9e918478675c5145382c1f130600111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c0000000000000000000000000000000714212e3a4754616d7a86929facaa9c8f8276685e5246392a2025313b4855626e7b8895a0aca196897d7063554b4035291d10040000000000020e1925303b4854616e7b87929fabab9f948a7e716a60595350494e4e4d53555d606d74808d969b9ea5afafa295887c6f6255493c2f221609000915202c37424b53595b6060606774808d9aa7a194887b6e6160606060605b59534b41372b20140800000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d0d0f111213131211100d0a07060401000000000000000000000000000000000000000000000000000003090e1214151c202020202020201d171614100b0500000003090e12181c1f20242a201f1d18120b03000000000000000000000000000000000000000000000000000000000000000000010406070a0d10111213131211100d0a07060400000000030505060606060606000000000000000000000000000000000b151e272e343f454d53565d606366696a6b6c6c6c6b696763605c55534d444f575c5f60606060606056544e463d32271b0f030000000004111d2935414c56616c74818e949ea6a69f959087817c79767474747577797d818790959ea5a69e948e81756d62564c41362a1e14080000000000000000000000000000000000000000000001080e1317191a202020202020201b1b18140f0901000000000000000000000000000000000000000000000f1b27333e49525a5f60606060606060606060606060606060606060605f5a52493e33271b0f00000b17222d38414950535d6060606060606060606060606060606060605d53504941382d22170b00000000000000000000000006111c26303d474f555656554f473d30261c0d0400000000000000000000000000000000000000000000030a1117242a2f323434322f2a2417110a020000000000000000000000000000000000000714212d3a4754606d7a8283838383838174675b4e414855626f7c8283838383827f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b55616e7b87939faca095887b6f7985929faca3988b7f7265594f4332281e1308000000000000000000000000000000000000000000000005111d2a36414c5663707d8a97a1ada3998c7f7265574d42372b2d3a46535e697783909daaa7998d8073655b5044372b1f120700000000000714202d3a4753606d7a86939faca79a8e8174675b4e412f24180c00000000000000000000000000000000000000000000000000000000000006131f2c3845515d677784919eaaa99c90837669554b4034281c100400111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c000000000000000000000000000006131f2b37434e5865727f8b99a3aea2988b7e7164564c41362a18212e3a47535f6a7784919daaa89b8e8174675d5145392c1f14090000000000000914202d3a46525e6975818e99a3afa69f92857c706b62605b535a5b575f61676d747f8b92938f939eaaafa295887c6f6255493c2f22160900040f1b25303942484d4f53535764717e8a97a9a194887b6e6155535353534e4d4841392f251a0f0300000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d01030505060605040300000000000000000000000000000000000000000000000000000000000000000000020608080f13131313131313100a0907040000000000000000070c101313181d1413100c0701000000000000000000000000000000000000000000000000000000000000000001080d111314171a1d1e1f1f201f1e1c1a171413100c07010c0f111213131313131309090703000000000000000000000007121c273039404451575f61686d7073767778797978777673706d67615e57505761686b6c6c6c6c6c6c6260584e43382c1f1307000000000613202c3945525d68717e8a939da6a89f948f837c746f6c6668676768666d70757c838f939ea7a69e938b7f72685e52463b3025190d010000000000000000000000000000000000000000020a12191f2326272d2d2d2d2d2d2d282724201a130b030000000000000000000000000000000000000000000a16212c3740494f535353535353535353535353535353535353535353534f4940372c21160a000006111b262f383f4446505353535353535353535353535353535353535046443f382f261b1106000000000000000000000000000a141e2c353d44484a4a48443d352c1e140a00000000000000000000000000000000000000000000000000060c191f2326272726231f190b0600000000000000000000000000000000000000000713202c3945525d686d767676767676746f64584c4047535f6a6f767676767676726d62564a3e3125180b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e3946535f6976828f9ca9a7998c7f737d8a98a2ac9f92867a6d6054473d3221160c0200000000000000000000000000000000000000000000000713202d3946525e6875828f9ba9ac9f92867a6e6154473c31262a36424d5766737f8c99a7ab9e9184786c605346392f24180c000000000006131f2c3845515d677885919eaba99c8f827669554b4035291d100400000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a86929faca79b8e8174685b4e412e23180c0000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c00000000000000000000000000000815222e3b47545f6a7783909dabac9f92867a6d6054473b3025191e2b37424e576673808c99a8ab9f9285796d6053473b3025190e02000000000005121e2a36424d57626e7c87929fa7ada29792857d756f6c6568676869696e7379818b91948f828f9ba8afa295887c6f6255493c2f221609000009141e2730373d4142464854616e7b8796a1a194887b6e61554846464641403c372f271d13090000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003060606060606060400000000000000000000000000000406070b1007060400000000000000000000000000000000000000000000000000000000000000000003090e13191d20212427292b2b2c2c2c2b292724201f1c18120e181c1e1f2020202020201615130f0a040000000000000000000c18232e39424a515b63696e747a7d808384858586858482807d79746e69605b536873787979797979796f6a6054483b2e22150900000004111d2935414c55606d7a85929ea5aca0968f82796e6a62605b545a5b545c60636a6e78818f959faba59f92857a6e61564c41362a1e110500000000000000000000000000000000000000010a141c242b2f3334393939393939393534312c251d150b01000000000000000000000000000000000000000005101b252e373e4346464646464646464646464646464646464646464646433e372e251b10050000000a141d262d33373944464646464646464646464646464646464646443937332d261d140a0000000000000000000000000000020c1a232c33383c3d3d3c38332c231a0c020000000000000000000000000000000000000000000000000000080e1317191a1a1917130e0800000000000000000000000000000000000000000004111d2935414c565d6069696969696967645c53483c434e585f6269696969696965625b51463a2e22160900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2b37424d5764717d8a97a1aa9d908377818e9baaa79b8e8174685d5245392c2013040000000000000000000000000000000000000000000000000714212e3a4754616d7a86929facaa9c8f8276685e5246392a2025313b4855626e7b8895a0aca196897d7063554b4035291d10040000000004101d2935404b55697683909ca9aa9e918477675d5145382c1f13060000000000000000000000000000000000000000000000000000000000091623303c4956636f7c8999a3afaa988b7e7265584b3f322518070000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c0000000000000000000000000004101c2834404b55626f7c8895a0aca99b8e8175675d514539291e141a26313c4955626f7c8896a0aca2988a7e7164564d42362a1e11050000000000020e1a25303b47535f6a73808d95a0a8a9a1979288817c797674747476787b7f858d929790827d8996a3afa295897c6f6256493c2f2316090000020c151e252c3134353a46535e697884919ea194887b6e6155483b39393534302b251d150b010000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e141a1e24292c2d3033363738393939383634302d2c29231d1a24282b2c2d2d2d2d2d2d23221f1b160f070000000000000004101c2834404a545c606d727b81868a8d8f9191929292918f8d8a85807b726c655c6b78858686868686867c6f6256493c2f2316090000000613202c3945515d6773808d97a1ada69e91847a6d675f5853504a4e4e4b5153585f666d79839099a3ada2978d8174685e5246392d2014090000000000000000000000000000000000000008121c262e363b3f404646464646464642403d372f271d130900000000000000000000000000000000000000000009131c252c33373939393939393939393939393939393939393939393937332c251c130900000000020b141b22272b2d37393939393939393939393939393939393939372d2b27221b140b0200000000000000000000000000000008111a21272c2f30302f2c27211a11080000000000000000000000000000000000000000000000000000000002070a0d0d0d0d0a070200000000000000000000000000000000000000000000010d1924303a444c52545c5c5c5c5c5c5b58534a41363c464e53555c5c5c5c5c5c585651493f34291e1206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a26313c4653606d7984919eaba095887b85929faba095897c6f63564c4135291d1104000000000000000000000000000000000000000000000006131f2b37434e5865727f8b99a3aea2988b7e7164564c41362a18212e3a47535f6a7784919daaa89b8e8174675d5145392c1f140900000000000c18242f414e5b6874818e9ba7ac9f92867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99abaea298887b6f6255483c2f2215090000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c0000000000000000000000000006131f2c3845515c6774808d9aa7ada1978a7d7063554b413529170d15212e3b47535f6a7784919eaaaa9c8f8276695e52463a2d20150a00000000000009141f2b37434e58606d79839096a0a8a9a19a938e8985828181818284888c91979992857b7c8996a2afa296897c6f6356493c30231609000000030c141b2025282a36424d576875828e9ba194887b6e6155483b2e2d282724201a130b03000000000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406070a0d0f11121313131212100e0c090606030000000000000000000000000000000000000000000000000000000000070f181f262a2f35393a3d404344454646454443403d3a38342f2a252f3437383939393939392f2e2c27211910070000000000030e18212c3844515c666d757f878d9298999c9d9e9f9f9f9e9c9a98928d867f776d666679869293939393887b6e6255483b2f2215080000000714212d3a4754606d7a85929fa9aa9e94897d70685d554e46443f41414045464e545c676f7c87929faca99f92867a6e6154473c31261a0e020000000000000000000000000000000000020e19242e3840474c4d535353535353534e4d4841392f251a0f040000000000000000000000000000000000000000010a131b21272b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b27211b130a010000000000020a11171b1f202a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2a201f1b17110a020000000000000000000000000000000000080f161c2023232323201c160f08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28323a4145475050505050504e4c4841382f343c4347485050505050504c4a463f372d23180d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2c3844505c6673808c99a4a79c8f828f97a2aa9d9084776b6054443a3024190d0100000000000000000000000000000000000000000000000815222e3b47545f6a7783909dabac9f92867a6d6054473b3025191e2b37424e576673808c99a8ab9f9285796d6053473b3025190e0200000000071925323f4c5865727f8b98aaafa399897c6f6356493c302316090000000000000000000000000000000000000000000000000000000006121e2b37424d576875828f9ba8ab9f9285796c605346392d2013060000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c000000000000000000000000000713202d3a4653606d7985929eabab9e9285796d6053463a2f241807131f2b37434e586773808d9aa8ac9f93877b6e6154473c32261b0f000000000000030f1a26313c45515c676e7b8491969fa4aca49f9b97928f8e8d8e8f9196999e9892877d707b8895a2aea396897c706356493d3023160a0000000002090f15191a25313f4c5965727f8c989f94887b6e6155483b2e221b1a18140f090100000000000713202d3a4653606d7986939f9f9f998d8073665a4d4033271a0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c10131416191c1d1f1f20201f1e1d1b191613120f0b0600000000000000000000000000000000000000000000000000030b1218212a31363a4145474a4d505152525352514f4d4a4745403936313a4044454646464646463c3b38322b22190f04000000000915202c38434f59606d78818c92999fa2aaa9a8aaa29f9e9e9e9fa29f98928c81786d6d798699a39f9f94877a6e6154473b2e211408000005111e2a36424d5765727f8b98a2aea99c8f82756b60564c433c38332d2e34383c424b555f6a74818e9ba8aea3988c7f7266574d42372b1e1205000000000000000000000000000000000007131f2b36404a52585a606060606060605b59534b41372c201408000000000000000000000000000000000000000000010910161b1e202020202020202020202020202020202020202020201e1b161009010000000000000000060b0f12131d2020202020202020202020202020202020201d13120f0b060000000000000000000000000000000000000000050b10141617171614100b050000000000000000000000000000000000000000000000000000000000000000000000000000050a0d0f101313100f0d090500000000000000000000000000020c1620283035393a43434343434341403c362f262a32373b3c4343434343433f3e3a342d251b1107000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54616e7b87939fac9e948f949ea9a3988b7f7265594f4332281e1308000000000000000000000000000000000000000000000004101c2834404b55626f7c8895a0aca99b8e8175675d514539291e141a26313c4955626f7c8896a0aca2988a7e7164564d42362a1e1105000000000916222f3c4955626f7c8898a2aeab988c7f7265594c3f31261a0e020000000000000000000000000000000000000000000000000000000814212d3a47535f697885919eaba99c8f8276665b5044382b1f12060000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c00000000000000000000000005111e2a36424d5664717d8a97a2ada89a8d8174665c514438281d13070f1b26323c4956626f7c8996a1ada4998c7f7265584e43372b1c11060000000000000a15202934404b555e696e7b848e939a9fa3aba9a19e9c9b9a9b9c9ea09d9590867d706e7b8894abb5a396897d7063564a3d3023170a0000000000000409091623303c4956636f7c89999393887b6e6155483b2e2215080c0803000000000000000713202d3a4653606d798693939393938d8073665a4d4033271a0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f12181c1f202326282a2b2c2c2c2c2b2a282523201f1c17110f0a03000000000000000000000000000000000000000000030c151c2328333b42464c5254575a5c5e5e5f5f5f5e5c5a5753514b46423b454c50525353535353534948433d342b21160a000000020e1a26313b4854606b74808d939fa3ababa49f9b979892919192939a989d9f938f82786d7a8794abb4a094877a6d6154473a2e21140700000714202d3a46525e697683909daaada196897d7063594f433a312b282223282c3039434e58626f7c8895a0acaa9d908477695f53463a2d21140700000000000000000000000000000000000b17232f3b47525c64676c6c6c6c6c6c6c68655d53483d3124180c0000000000000000000000000000000000000000000000050a0f1213131313131313131313131313131313131313131313120f0a0500000000000000000000000003050611131313131313131313131313131313131313110605030000000000000000000000000000000000000000000000000407090a0a0907040000000000000000000000000000000000000000000000000000000000000000000000000000030a11161a1c1d20201c1c1915100a02000000000000000000000000040e161e24292c2d3636363636363433302b251d20262b2e2f36363636363632312e29231b1309000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17232e3846535e6975828f9ca8a69e9c9ea6ac9f92867a6d6054473d3221160c02000000000000000000000000000000000000000000000006131f2c3845515c6774808d9aa7ada1978a7d7063554b413529170d15212e3b47535f6a7784919eaaaa9c8f8276695e52463a2d20150a000000000713202d3a4653606d7985929faca89b8f827568574d42362a1e12050000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8897a1ada8998c7f7366544a3f33281c0f030000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c0000000000000000000000000714202d3a46525e6975828f9ca9aca096897c6f63544a403428160c010a13202d394653606c7884919eabab9d9084776a5f5347382e23170c000000000000030c18232f39434d575e696e7981878f92999b9d9e9f9f9f9e9d9b9895908b837c706b6d7a8799a49f9f978a7d7064574a3d3124170a00000000000000000713202d3a4653606d7987868686867b6e6155483b2e221508000000000000000000000713202d3a4653606d78868686868686868073665a4d4033271a0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f161b1d23292c2d303335373839393939383635322f2d2b28221c1b150e0903000000000000000000000000000000000000000b151e272e343f454d53565d606366696a6b6c6c6c6b696763605c55534d444f575c5f60606060606056544e463d32271b0f03000006121e2b37424e57636f7c87939fa5afa9a199938f8a878584848586888c90959e948d80747b8794a1ada093877a6d6054473a2d21140700000814212e3b4754616e7b87959fabab9e9184786c6053463d31281f1c17181c1f27313c47535f6a7784919daaaca095887b6e6155483b2e22150600000000000000000000000000000000000d1926333f4c58646e7379797979797979756f65594d4034271b0e01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d151c2226292a2d2d292825211b140c04000000000000000000000000040c13191d2021292929292929282724201a13151b1f21222929292929292525221e181109010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040906111c2a36424d5763707d8a96a1acaaa8aab0a79b8e8174685d5245392c20130f0c07010000000000000000000000000000000000000000000713202d3a4653606d7985929eabab9e9285796d6053463a2f241807131f2b37434e586773808d9aa8ac9f93877b6e6154473c32261b0f0000000006121f2b3844505c6676838f9ca9ab9e918578695f53463a2d211409000000000000000000000000000000000000000000000000000005121e2a36424d5766727f8c99a9aca096887c6f6255493c2d22170b000000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c0000000000000000000000000814212e3b4754616e7b86929facaa9e9184776b605442392e2318040005121f2b3744505b6574808d9aa9aca095887c6f62544a3f34281c100300000000000007121d27313b454d575e676d747c82868b8e909192929291908e8b88837e786f6a606c798693939393938a7e7164574b3e3124180b000000000000000006131f2c3845515c6775797979797976695f53463a2d2114070000000000000000000006121f2c3844505c667679797979797979736e63584b3f3226190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b151b21272c2f34383a3d40424445464646454543413f3c3938332d2b26201a150b06000000000000000000000000000000000007121c273039404451575f61686d7073767778797978777673706d67615e57505761686b6c6c6c6c6c6c6260584e43382c1f130700000814212e3a47535f6a76828f9aa4afaba1979287827d7a79787778797b7f838a9196928a7e7b8895a1ada093867a6d6053473a2d20140700000b1824313e4b5764717e8a97a7b1a79a8e8174665b5044382b1f160f0b0c10151f2b37434e586773808d9aa6b1a7988b7e7165584b3e2d22170b00000000000000000000000000000000010d1a2734404d5a677380868686868686868175685b4e4235281b0f0200000000000000000000000000000000000000000000000000000000000000060a0e1011131313131313100f0d0a0500000000000000000000000000000000000000000000000000000000060a0e1011131313131313100f0d0a05000000000000000000000000000005090d0f101313100f0d0a050000000000000000000000000000000000000000000000000000000000000000000000000000000000030d161f272d32353639393635322c261e160c0200000000000000000000000002080d1113141d1d1d1d1d1d1b1a18140f080a0f1215151d1d1d1d1d1d191816120d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f151a1d1a25313b4653606c7884919e9f9f9f9f9fa095897c6f63564c4135291d1e1c18130c050000000000000000000000000000000000000005111e2a36424d5664717d8a97a2ada89a8d8174665c514438281d13070f1b26323c4956626f7c8996a1ada4998c7f7265584e43372b1c110600000003101c28343f4a546673808c99a8ada197887b6e6155483b30251a0e02000000000000000000000000000000000000000000000000000714212d3a46535e697783909daaaa9e9184776a5f53473b2e1c1106000000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c000000000000000000000007131f2c38434f5966727f8c99a3afa7998c807366594f4330271c120700030f1b27333f495363707c8997a1ada79a8d8074665c5044382c1f1206000000000000010b151f29333b454d555d606a6f757a7e8183858586858583817f7b77716d665f5b6678848686868686867f7265584c3f3225190c000000000000000004101c2834404b555c6a6c6c6c6c6c6c5f574d42372b1e12050000000000000000000003101c28343f4a545c6c6c6c6c6c6c6c6c66635c52473b2f23170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a111720262b323839404547494c4f50525253535251504e4c4946443f3837312b262017110a020000000000000000000000000000000c18232e39424a515b63696e747a7d808384858586858482807d79746e69605b536873787979797979796f6a6054483b2e22150900000815222f3b4855626e7b88949facaea39992857d75716e686b6b666d6e72767d84909492857d8996a3aca09386796d6053463a2d20130700010e1b2834414e5b6774818e9aa7b4aa978a7e7164544a3f3328190d040000040d1b26323d4a5764707d8a97aab4a79b8e81746853493f33271b0f03000000000000000000000000000000010d1a2734404d5a6773808d93939393938e8175685b4e4235281b0f020000000000000000000000000000000000000000000000000000000000040b11161a1d1e2020202020201d1c1916100a03000000000000000000000000000000000000000000000000040b11161a1d1e2020202020201d1c1916100a0300000000000000000000020a1015191c1c20201d1c1a16110a030000000000000000000000000000000000000000000000000000000000000000000000000000000a151f2831383e4243464643413d3830281e140a0000000000000000000000000000010407071010101010100e0d0b08030000030608091010101010100c0b09060100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121a20262a2c2d2b3844505b66737f8c999393939393939084776b6054443a30242c2b28241e170f070000000000000000000000000000000000000714202d3a46525e6975828f9ca9aca096897c6f63544a403428160c010a13202d394653606c7884919eabab9d9084776a5f5347382e23170c000000000b17232e3c4956626f7c8996a0aca9988c7f7265574d42362a1e1205000000000000000000000000000000000000000000000000000815212e3b4854616e7b87959faba8998c807366584e43372b1f0a00000000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c00000000000000000000000915222f3b4854606b7784919d9f9f9f95887b6e6255483d3222150b0000000b17222d3a4653606d7985929e9f9f9e9185796d6053463a2d20130700000000000000030d172129333b434b51586062686e71747678797978787675726e6a64605c5454687278797979797979726d62564a3e3124180b0000000000000000000c18232e39434b51535f6060606055534d453c31261a0e0200000000000000000000000c17232e38424a505f606060606060605a58524a40362a1f130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b141c222832373d43484b515356595b5d5e5f5f5f5f5e5d5b585653504a47433c373127221b140b030000000000000000000000000004101c2834404a545c606d727b81868a8d8f9191929292918f8d8a85807b726c655c6b78858686868686867c6f6256493c2f23160900000d192633404c5966737f8c99a6b0ac9f92877c6f6b64615e56545c6062656c707a8290949083909daaaca09386796d6053463a2d2013070005111e2a36414c566a7683909da9aea298887b6e6155483b2d221708000000000a15212e3b4854616e7b8798a2aeaa9d908377655b5044372b1f1205000000000000000000000000000000010d1a2734404d5a6773808d9a9f9f9f9b8e8175685b4e4235281b0f0200000000000000000000000000000000000000000000000000000000050d151c2227292a2d2d2d2d2d2d292926211c150d0400000000000000000000000000000000000000000000050d151c2227292a2d2d2d2d2d2d292926211c150d040000000000000000040c141b212528292d2d2a2926221c150d040000000000000000000000000000000000000000000000000000000000000000000000000005111c27313a434a4e5053534f4e49423a30261b1005000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121b242b3236393939333f4a54616e7a8786868686868686867f7265594f433239393837342f2921190f0500000000000000000000000000000000000814212e3b4754616e7b86929facaa9e9184776b605442392e2318040005121f2b3744505b6574808d9aa9aca095887c6f62544a3f34281c10030000000615222e3b4754606a7784919eaaa99d908376695e52463a2d20150a00000000000000000000000000000000000000000000000006131f2b37434e5865727f8c98a7aca095887c6f6255483c32261b0f00000000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c0000000000000000000000091623303c4956636f7c8996939393939083776a5f53473a2e211417110b0b10121f2b3844505c6674818e93939393978a7d7063574a3d3024170a0000000000000000050f172129313a40454e54565e6164686a6b6c6c6c6b6a6865625f5753504a5660686b6c6c6c6c6c6c65625b51463a2e22160900000000000000000007121d27303940454653535353534846423c332a1f140900000000000000000000000006111c2630383f4453535353535353534d4b4740382e24190e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161d262d333c43474f54555c606366686a6b6c6c6c6c6b69686562605b54534e47423c332d261d150d030000000000000000000000030e18212c3844515c666d757f878d9298999c9d9e9f9f9f9e9c9a98928d867f776d666679869293939393887b6e6255483b2f2215080005111e2a36424d576976838f9ca9b1a79a8d80736a605954524c4a5053555a61676d798290959095a0abaca09386796d6053463a2d201307000713202d3946525e687885929fabac9f9285796c605346392d201306000000000714212d3a46535e697985929facac9f9285796c605346392d201306000000000000000000000000000000010d1a2734404d5a6773808d9aa6aca89b8e8175685b4e4235281b0f02000000000000000000000000000000000000000000000000000000040d171f272e3336373939393939393635322d261f160d030000000000000000000000000000000000000000040d171f272e3336373939393939393635322d261f160d03000000000000020c161e262c32353639393635322d271f160d030000000000000000000000000000000000000000000000000000000000000000000000000a16222d38434c545a5d60605c5a544c42382c211509000000000000000000000000000000000000030608090b0d0f1112121313121211100e0c0a070604010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f1a242d363d42454646464646525e686e797979797979797979726d625647454646464544403a332b21170c0100000000000000000000000000000007131f2c38434f5966727f8c99a3afa7998c807366594f4330271c120706040f1b27333f495363707c8997a1ada79a8d8074665c5044382c1f120600000006131f2b37434e586673808d99a8ac9f93877b6e6154483c31261b0f0200000000000000000000000000000000000000000000020c15212e3b47535f6a7683909da9aa9d9184776a5f53473a2a20150a00000000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c00000000000000000000000e1b2834414e5b677481868686868686867f7265574e42372b2a27221d16161b202228343f4a5463707d868686868686868175685b4f4235281c0f000000000000000000050f171f282f353d43474c5254585b5d5e5f5f5f5e5d5b5855534e46443f4e565c5e606060606060585651493f34291e1206000000000000000000000b151e272e34383a46464646463b3a37312a21180e03000000000000000000000000000a151e262e34384646464646464646403f3b362e261c1208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c161f282f383f444e54596063676d707375777879797978787674726f6c66625f58534d443f382f271f150d03000000000000000000000915202c38434f59606d78818c92999fa2aaa9a8aaa29f9e9e9e9fa29f98928c81786d6d798699a39f9f94877a6e6154473b2e211408000714202d3a46525e697885929fabaca095877b6e61584f4746413f44464850555d676e7b85929da0a7b1aca09386796d6053463a2d201307000714212e3a4754616d7a8798a2aeaa9d918477665b5044382b1f12060000000005121e2a36424d576a7784919daaaea298877a6e6154473b2e211408000000000000000000000000000000010d1a2734404d5a6773808d9aa6aca89b8e8175685b4e4235281b0f020000000000000000000000000000000000000000000000000000000b151f2931393f424446464646464643423e3831281f150a00000000000000000000000000000000000000000b151f2931393f424446464646464643423e3831281f150a0000000000000a141e2830383d4143464643423e3831281f150a0000000000000000000000000000000000000000000000000000000000000000000000010d1a26323e4a545e66696c6c69665e54493d3225190d00000000000000000000000000000003070a0f121515181a1c1e1e1f1f201f1f1e1d1b19161413110d08040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915202b363f484e5253535353514d565e616c6c6c6c6c6c6c6c6c65625b514b5253535352504c453d33291e13070000000000000000000000000000000915222f3b4854606b7784919d9f9f9f95887b6e6255483d3222151b1313100c17222d3a4653606d7985929e9f9f9e9185796d6053463a2d201307000000030f1b27323d4955626f7c8896a0aca49a8b7f7265584e43372b1e13080000000000000000000000000000000000000000000008131e2a36414c56626f7c88959faba2988c7f7265584e43372b1f120600000000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c00000000000000000000000d1a2733404c59646f7479797979797979726d6256453c313736332e272021272c2f302e384855616b7079797979797979756f65594d4034271b0e00000000000000000000050d161d242932373b4146474b4e505252535252504e4c4847423c3834454b50515353535353534c4a463f372d23180d0100000000000000000000030c151d23282c2d39393939392e2d2b261f180f060000000000000000000000000000030c151c23282c393939393939393933322f2a241c140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e283139424a50585f626b6f75797d7f828385858686858483817f7c79746f6a625f575049413931271f150b010000000000000000020e1a26313b4854606b74808d939fa3ababa49f9b979892919192939a989d9f938f82786d7a8794abb4a094877a6d6154473a2e211407000814212e3b4754616e7b8798a2aeaa9d908377695e53463d393634383a3e434c555e69717e8b97a1adb9aca09386796d6053463a2d201307000915222f3c4855626f7b8895aab4a99c8f837669544a3f33281c0f0300000000020e1a2531434f5c6976828f9ca9b4aa95887b6f6255483c2f221509000000000000000000000000000000010d1a2734404d5a6773808d9a9f9f9f9b8e8175685b4e4235281b0f02000000000000000000000000000000000000000000000000000006111c27313b434a4f51535353535353504e49423a31261c100500000000000000000000000000000000000006111c27313b434a4f51535353535353504e49423a31261c10050000000005101b26303a42494e4f5353504e4a433a31271c110500000000000000000000000000000000000000000000000000000000000000000000030f1c2935424e5a66707679797670665a4e4135281c0f00000000000000000000000000040a0f13151b1f21222527292a2b2c2c2d2c2b2b2a28262321201d1913100c07010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1a26323d4851595e606060605e575552545f606060606060606058565053585f6060605f5c574f453a2f24180c000000000000000000000000000000091623303c4956636f7c8996939393939083776a5f53473a2e2d2d28201f1c18121f2b3844505c6674818e93939393978a7d7063574a3d3024170a000000000a15212e3b47535f6a7784919daaac9c9083766a5f53473a3025190d010000000000000000000000000000000000000000010d1924303946525e6874818e9aa7aa9f92857a6d6054473c31261b0f0300000000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c00000000000000000000000b1824303c48535d64676c6c6c6c6c6c6c65625b5146464644433f3932292b32383b3d4646444f5961636c6c6c6c6c6c6c68655d53483d3125180c0000000000000000000000040c131820272b3036393b3e4143454646454543423f3b3a37312c283a4043454646464646463f3e3a342d251b1106000000000000000000000000030b12181c1f202c2d2d2d2d22211e1a140e0600000000000000000000000000000000030a11171c1f2d2d2d2d2d2d2d2d2726231f19120a0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d273039434b545b606a6f767c8185898c8e90919292929291908e8b8985817c756e69605b534b433931271d1207000000000000000006121e2b37424e57636f7c87939fa5afa9a199938f8a878584848586888c90959e948d80747b8794a1ada093877a6d6054473a2d21140700091623303c4956636f7c8996aab4a79a8e817467574d42342d2a282b2d313a434d57606d7985929eabb8aca09386796d6053463a2d201307000a1723303d4a5663707d8996a3b0a89b8e8275685b4f422d22170b000000000000091c2835424f5b6875828e9ba8b0a396897d7063564a3d3023170a000000000000000000000000000000010d1a2734404d5a6773808d93939393938e8175685b4e4235281b0f0200000000000000000000000000000000000000000000000000000a16222e39434d555b5d6060606060605c5a544c42382d21160a0000000000000000000000000000000000000a16222e39434d555b5d6060606060605c5a544c42382d21160a000000000915212c38424c545a5c60605d5a544c43382d22160a0000000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d69768286868276695c4f4336291c100000000000000000000000040b10161b1f22262b2e2f3233353738383939393837373532302d2c29241f1d18120b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a36424e59636b6c6c6c6c6b64615a534d53535353535353534d535b60656c6c6c6c6b6861574c4034281c0f0300000000000000000000000000000e1b2834414e5b677481868686868686867f7265574e4237393939352d2c28231d1c28343f4a5463707d868686868686868175685b4f4235281c0f0000000006131f2b37434e5865727f8c98a2ab9f94887c6f62564c4135291e1308000000000000000000000000000000000000000005111d2935414c56616e7a86929faca3988d8074685d5245392a20150a0000000000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c00000000000000000000000814202b36414a53595b6060606060606059565153535353514f4a443b32353d444849535353534f5557606060606060605b59534b41372c20140800000000000000000000000001070d151b1e252a2d2e31353738393939383735322f2e2b261f282f34373839393939393932312e29231b1309000000000000000000000000000000070c10131320202020201514120e090300000000000000000000000000000000000000060c101220202020202020201a1917130e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d18232e39434b555d666c737c83898e9298999b9d9e9f9f9f9f9e9c9b9897918d88827b736c655d554b43392f24180e05000000000000000814212e3a47535f6a76828f9aa4afaba1979287827d7a79787778797b7f838a9196928a7e7b8895a1ada093867a6d6053473a2d201407000a1724313d4a5764707d8a97a3b0a5988c7f7265594c3f31261e1c1f2028313b45515c6673808d99aab4aca09386796d6053463a2d201307000a1724313d4a5764707d8a97a3b0a79a8e8174675b4e4134281b060000000000010e1b2834414e5b6774818e9aa7b0a3978a7d7064574a3d3124170a000000000000000000000000000000010d1a2734404d5a677380868686868686868175685b4e4235281b0f0200000000000000000000000000000000000000000000000000010e1a27333f4a555f676a6c6c6c6c6c6c69665e54493e3226190d0100000000000000000000000000000000010e1a27333f4a555f676a6c6c6c6c6c6c69665e54493e3226190d010000000d1925323d49545e66696c6c69665e544a3e32261a0d0100000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c1000000000000000000000060c161b21272c2f31373a3c3e4042444545464645454443413f3d3a39352f2c29241d17110a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3945525e6b757979797978706c615f57514b434646424b51575f656c71787979797873685c5044372b1e110500000000000000000000000000000d1a2733404c59646f7479797979797979726d6256453c45464646413a38342e271e232e384855616b7079797979797979756f65594d4034271b0e00000000030f1b26323c4754606d7a86929faaa69a8d8174685e52463a2f24190d02000000000000000000000000000000000000040d1a232d3946525d6873808d98a3aa9f92867b6e61564c413529180e040000000000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326190c0807050200000000000000030f1a252f3841484c4e53535353534c525f6060606060605d5b554d44393d474f54566060606060605a585353535353534f4d4841392f251a0f040000000000000000000000000000040a0f14191e202125282a2b2c2c2c2b2a282522211e1a151d23272a2b2d2d2d2d2d2d2524221e1811090100000000000000000000000000000000000406071313131313080705020000000000000000000000000000000000000000000000030613131313131313130d0c0a070200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2834404b555d676d78808790949b9fa2a9a29e9c9b9a9a9b9d9fa3a9a19e9a948f877f776d675d554b40352920170d020000000000000815222f3b4855626e7b88949facaea39992857d75716e686b6b666d6e72767d84909492857d8996a3aca09386796d6053463a2d201307000b1824313e4b5764717e8a97a4b0a4978a7d7164574a3e3124171012161f2834404b54626f7c8998a3aeaca09386796d6053463a2d201307000b1824313e4b5764717e8a97a4b1a79a8d8174675a4e4134271b0e0100000000010e1b2734414e5a6774818d9aa7b0a4978a7d7164574a3e3124170b000000000000000000000000000000000d1926333f4c58646e7379797979797979756f65594d4034271b0e010000000000000000000000000000000000000000000000000003101d2936424f5b6771777979797979797670665a4e4235291c0f030000000000000000000000000000000003101d2936424f5b6771777979797979797670665a4e4235291c0f030000000f1c2835414e5a66707679797670665a4e4235291c0f0300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c100000000000000000030a111721272c32383b3c4347484b4d4f5151525253525251504e4c494745413a39352f28221c140b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c7987868686847d756e69605c554f46454f545c60696e777e8586868685786b5f5245382c1f120500000000000000000000000000000b1824303c48535d64676c6c6c6c6c6c6c65625b514c50525353534e464540393029202c38444f5961636c6c6c6c6c6c6c68655d53483d3125180c00000000000a15202c3945525d6874808d98a3ac9f92867a6d61564c4135291f14090000000000000000000000000000000000010c161f2a36424d57616d7a85929faaa2988d8074695e52433a2f241906000000000000111e2b3744515e6a7784919daaa5998c7f7266594c3f332619191514120e090300000000000008131d262f363c4041464646414c565e6c6c6c6c6c6c6c6a675f554a3f444f5960636c6c6c6c6c6c67645c534846464642403d372f271e1309000000000000000000000000000000000002080e111414181b1d1f1f201f1f1d1b191514120e0912171b1e1e202020202020191816120d060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28313a45515c676d79828d92999fa6a39f9a97928f8e8d8e8e9092989b9fa3a69e99928c82796d675d51453f32291e14080000000000000d192633404c5966737f8c99a6b0ac9f92877c6f6b64615e56545c6062656c707a8290949083909daaaca09386796d6053463a2d201307000b1825313e4b5864717e8b97a4b0a396897d7063564a3d3023170a060d18232e3a4653606d7986929facaca09386796d6053463a2d201307000b1825313e4b5864717e8b97a4b1a79a8d8074675a4d4134271a0e0100000000010e1a2734414d5a6774808d9aa7b1a4978b7e7164584b3e3125180b000000000000000000000000000000000b17232f3b47525c64676c6c6c6c6c6c6c68655d53483d3124180c000000000000000000000000000000000000000000000000000004111e2a3744515d6a77838686868686868276695c504336291d10030000000000000000000000000000000004111e2a3744515d6a77838686868686868276695c504336291d1003000000101c2936434f5c69768286868276695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c1000000000000000030c151c232832383d4348494e5355585a5c5d5e5f5f605f5e5e5d5b595654514c47454039332d261d181008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e889396918a827b736d67615953525960666d737b828b929792877e7064574a3d3124170a0000000000000000000000000000000814202b36414a53595b606060606060605956514f575d5f6060605b53514b423a322a28333e474f5557606060606060605b59534b41372c201408000000000004111d2935414c56616e7b86929faaa2988c8073685d52453b30251a0d030000000000000000000000000000000007121d28313946535e6973808d98a2a89f92857a6d61564d4231281e1308000000000000111e2b3744515e6a7784919daaa5998c7f7266594c3f3326252522211e1a140e060000000000010b141d252b30333439393946525e68767979797979797771675b4f434854606b70797979797979746e64584c4039393534312c251e150c0200000000000000000000000000000000000000020507080b0e101213131212100f0c0808060200070b0f11121313131313130c0b09060100000000000000000000000000000000000000000000000000000000050a0d0f101313100f0d0a0500000000000000000000000000000000000000000000000000000000000000000000020608080b0e1011121313121211100d0b080705020000000000000000000000000000000000000000000000010d19242f3a43505a606d79828f949fa3a7a099928e898583818181828386898e92999fa7a39f948f82796d605b51443b3025190e020000000005111e2a36424d576976838f9ca9b1a79a8d80736a605954524c4a5053555a61676d798290959095a0abaca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa296897c6f6356493c302316090007131f2c3845515c667683909da9aca09386796d6053463a2d201307000b1824313e4b5764717e8a97a4b1a79a8d8174675a4e4134271b0e0100000000010e1b2734414e5a6774818d9aa7b1a4978a7e7164574b3e3124180b0000000000000000000000000000000007131f2b36404a52585a606060606060605b59534b41372c201408000000000000000000000000000000000000000000000000000004111e2a3744515d6a778490939393938f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a778490939393938f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c10000000000000030d151e262e343d44484f5456585f626566686a6b6b6c6c6c6b6a6a686563605d5553514b443f382f2a221a11080000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4956626c717f8b919e948f868079706b615f5d606b6f797f868f949f93887e716c6155493c3023160a000000000000000000000000000000030f1a252f3841484c4e535353535353534c4a4c5761696b6c6c6c68605c544c443c342c2c353e44484a535353535353534f4d4841392f251a0f040000000000010d19242f3a46525e6974808d98a2aa9f92857a6d60574d42362a1f150b010000000000000000000000000000050e18242f39434f59616e7b86929faaa0968c7f72685e52443b301f160c01000000000000111e2b3744515e6a7784919daaa5998c7f7266594c3f333232322e2d2a261f180f060000000000020b131a202427282d2e3b4754616e7a86868686868683776a5d5144495663707d8686868686868074675a4e41342d282725201a130c0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a11161a1c1d20201d1c1a16110a0300000000000000000000000000000000000000000000000000000000000205090e121415181b1d1e1f20201f1f1e1c1a181514120e090502000000000000000000000000000000000000000004111d2935414c56616c74818e949ea6a69f959087817c79767474747577797d818790959ea5a69e948e81756d62564c41362a1e1408000000000714202d3a46525e697885929fabaca095877b6e61584f4746413f44464850555d676e7b85929da0a7b1aca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f2316090004101c2834404b546875828f9ba8aca09386796d6053463a2d201307000a1724313d4a5764707d8a97a3b0a79a8e8174675b4e4134281b0e0100000000010e1b2834414e5b6774818e9aa7b0a3978a7d7064574a3d3124170a00000000000000000000000000000000020e19242e3840474c4d535353535353534e4d4841392f251a0f04000000000000000000000000000000000000000000000000000004111e2a3744515d6a7784909d9f9f9c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909d9f9f9c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c100000000000020b151f2730383f444f54596063676a6f7173757778787979787877767472706d6764605d55504a423c342c231a100700000000000000000000000000000000000000000000000000000000000000000000000000000000000815212d3945505a626d727f8b919c98928c847d756e69686d747c838c92989c918b7f726c625a5044392d2014080000000000000000000000000000000008131d262f363c4041464646464646463f44505d697378797979746d665e564e463e35282c33383c3d4646464646464642403d372f271e13090000000000000008131e2a36424d57616d7a85929fa8a2978d8073695e52463d31271d120700000000000000000000000000020b17202935404b55606b75828f98a3a59d9184796d60564c4132291f0d0400000000000000111e2b3744515e6a7784919daaa5998c7f7266594c3f3f3f3f3f3b3a36312a21180e03000000000001080f14181a1b212e3b4754616e7a87939393939084776a5d5144495663707c89939393938d8174675a4e4134271c1b18140f090200000000000000000000000000000000000000000000020507080b0e111112131312110f0c0908060300000000000000000406070b0f1213131211100e0c0b09060100000000000000000000000000000000040d151c2226292a2d2d2a2926221c150d04000000000000000000000000000000000000000000000000000002080e11151a1e21222528292b2c2c2c2c2b2b29272522211e1a14120e09020000000000000000000000000000000000000613202c3945525d68717e8a939da6a89f948f837c746f6c6668676768666d70757c838f939ea7a69e938b7f72685e52463b3025190d010000000814212e3b4754616e7b8798a2aeaa9d908377695e53463d393634383a3e434c555e69717e8b97a1adb9aca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000c18232e414e5b6874818e9ba7aca09386796d6053463a2d201307000a1723303d4a5663707d8996a3b0a89b8e8175685b4e4235281b090000000000020f1b2835424e5b6875818e9ba8b0a3968a7d7063574a3d3024170a00000000000000000000000000000000020e1a26313c454e53556060606060606055534e463c31261b0f03000000000000000000000000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c1000000000000a141d273139424a505960636b6f74787b7e8082848485858685858483817f7c7a75716d67605b544e463e352c23190d040000000000000000000000000000000000000000000000000000000000000000000000000000000005111d29343e48505a626d727f8c929c9f96918a827b73717a818891959f9d928c7f736d625a50483e33281c100400000000000000000000000000000000010b141d252b303334393939393939393845525f6b788586868681786d685f584f473f342e272c2f30393939393939393534312c251e150c0200000000000000010e1a25303b46525e68727f8c96a0a99f92867b6e61594f43392f24180e040000000000000000000000000a141d29323a45515d67707d89939ea89d93897d70675c51443a3020170d0000000000000000111e2b3744515e6a7784919daaa5998c7f7266594c4c4c4c4c4c4846423b332a1f14090000000000000003080b0814212e3b4754616e7a87949f9f9d9084776a5d5144495663707c89969f9f9a8d8174675a4e4134271b0e0c08040000000000000000000000000000000000000000000003090e121415181b1d1e1f201f1f1d1b191515120f0a0401000000070c101313181c1e1f201f1e1d1b181815120d060000000000000000000000000000030d161f272d32353639393635322d271f160d03000000000000000000000000000000000000000000000002080d14191e20262b2e2f323436383939393938373634322e2d2b26201e1a140e090200000000000000000000000000000004111d2935414c55606d7a85929ea5aca0968f82796e6a62605b545a5b545c60636a6e78818f959faba59f92857a6e61564c41362a1e1105000000091623303c4956636f7c8996aab4a79a8e817467574d42342d2a282b2d313a434d57606d7985929eabb8aca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f2316090000071a2734404d5a6773808d9aa6aca09386796d6053463a2d201307000916222f3c4955626f7c8895aab4a99c8f8276695c4f4330251a0e0200000000030f1c2936424f5c6975828f9ca8b5ab95897c6f6256493c2f2316090000000000000000000000000000000006121e2b37424e575f6c6c6c6c6c6c6c6c625f584e43372b1f1206000000000000000000000000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c100000000006111b262f39434b545c606b70767c8184888b8d8f9091929293929191908e8c8986827e79716c665f584f473e352b1f160c01000000000000000000000000000000000000000000000000000000000000000000000000000000000c17222d363f48515b636d737f8c929ca09e948f867f7d848d939aa09d938d80736d635b51483e362c22170b000000000000000000000000000000000000020b131a202427282d2d2d2d2d2d2d323f4c5965727f8c93938e827a6f6a615951444039302823242d2d2d2d2d2d2d282725201a130c0300000000000000000009141f2a36414c56606d7984919da5a2988e81756b60554b40352920160b020000000000000000000006111c262f3a444f59606d7984919ea5a1968e81746b60554b4032291e0e050000000000000000111e2b3744515e6a7784919daaa5998c7f72665958585858585855534d453b31261a0e020000000000000000000814212e3b4754616e7a8794a1aa9d9084776a5d5144495663707c8996a3a79a8d8174675a4e4134271b0e0100000000000000000000000000000000000000000000040a0f141a1e212125282a2b2c2c2c2b2a282622211f1b15110d08030b12181c1f2025292b2c2c2c2b2a272524221d181109010000000000000000000000000a151f2831383e4243464643423e3831281f150a00000000000000000000000000000000000000000000040c13191f252a2d31373a3b3e41434445464645454443403e3b3a37312d2a251f1a140d0500000000000000000000000000000613202c3945515d6773808d97a1ada69e91847a6d675f5853504a4e4e4b5153585f666d79839099a3ada2978d8174685e5246392d2014090000000a1724313d4a5764707d8a97a3b0a5988c7f7265594c3f31261e1c1f2028313b45515c6673808d99aab4aca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000814212e3b4754616e7b8798a3aeaa9d9084776a574d42362a1e12050000000005111d2935414c566a7783909daaafa399877b6e6154483b2e211508000000000000000000000000000000000814212e3a47535f6a7679797979797979766a5f53473a2e211508000000000000000000000000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c10000000000b17222d38414b555c666d737d82898e919698999b9d9e9e9f9f9f9e9d9d9b9898928f8a857e786f6a61594f473d31281e13080000000000000000000000000000000000000000000000000000000000000000000000000000000006101b242d363f49515b636d73808d929da49e98928c8a91969fa49e938e81746e645b51493f362d241a10050000000000000000000000000000000000000001080f14181a1b20202020202025313e4a56626d75818f969490847c706b625b514a423a322a21192020202020201c1b18140f090200000000000000000000020d1925303a45515c67707d89939da89e93897d70675d51453d32281d140a000000000000000000071017222d38424c56606b74808d96a0a3999184796d60594f43392e20170d000000000000000000111e2b3744515e6a7784919daaa5998c7f726665656565656565615f574d42362a1e12050000000000000000000814212e3b4754616e7a8794a1a99d9084776a5d5144495663707c8996a3a79a8d8174675a4e4134271b0e01000000000000000000000000000000000000000000060c161b1f252a2d2e31343738393939383735322f2e2b26201d19130c151d23282c2d32353839393838363432312e29231b1309000000000000000000000005111c27313a434a4e505353504e4a433a31271c11050000000000000000000000000000000000000000080e161e25293036393c4247484b4e50515253535252514f4d4b4846423c3a36302a251f170f08000000000000000000000000000714212d3a4754606d7a85929fa9aa9e94897d70685d554e46443f41414045464e545c676f7c87929faca99f92867a6e6154473c31261a0e0200000b1824313e4b5764717e8a97a4b0a4978a7d7164574a3e3124171012161f2834404b54626f7c8998a3aeaca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000713202d3a4653606d7986929facab9f928578695e52463a2d201407000000000713202d3946525d687885929eabac9f9286796d6053463a2d201307000000000000000000000000000000000815222f3b4855626e7b868686868686867c6f6255483c2f22140a000000000000000000000000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c10000000030f1b27333f49535c676d7880888f949a9ea1a8a6a9a19e9d9d9c9d9d9ea1a9aaa39f9b97918b837c706b61594f433a2f24190d010000000000000000000000000000000000000000000000000000000000000000000000000000000009121b242d373f49525b636e74808d929da5a39f99979ea1a69e948e81786c605c524940372d241b11080000000000000000000000000000000000000000000003080b0d0e131313131316222e3a46515b606d7a8491989691867d726d605c544c443c332b2317110a1313130f0e0c08040000000000000000000000000008131e2834404b55606b74818e96a1a59d9184796d60594f443a2f261b110600000000000000060f192228333f4a545e68707d88939fa69f92877d6f675d51473d30271d0e05000000000000000000111e2b3744515e6a7784919daaa5998c7f7272727272727272726e695f53463a2d2114070000000000000000000814212e3b4754616e7a87949c9c9c9084776a5d5144495663707c89969c9c9a8d8174675a4e4134271b0e0100000000000000000000000000000000000000030a111720272b31363a3b3e4144444546464544423f3c3b37322c29241e191e272e34383a3e42454646454443413f3d3a342d251b1106000000000000000000000a16222d38434c545a5d60605d5a544c43382d22160a000000000000000000000000000000000000020a121a202830353b4146474e5355585b5c5e5f5f5f5f5e5e5c5a5855534d4846423b363029211a120a020000000000000000000005111e2a36424d5765727f8b98a2aea99c8f82756b60564c433c38332d2e34383c424b555f6a74818e9ba8aea3988c7f7266574d42372b1e120500000b1825313e4b5864717e8b97a4b0a396897d7063564a3d3023170a060d18232e3a4653606d7986929facaca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d2013070006121f2b3844505c667784909daaaea298877b6e6154483b2e21150a000000000714212e3a4754616d7a8797a1adaa9e918477665c5145382c1f1306000000000000000000000000000000000714212d3a4754606d7a879893939393897d7063564a3d2f261b11060000000000000000000000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c1000000005121f2b3744505b656d79828d939a9fa6a7a09d999697929090909090929795999da0a7a19e9590867d706b60564c4135291d1307000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b252d374049525c646e74808d939da59f9f9f9fa79f948f82786d665b504a40372e251b1209000000000000000000000000000000000000000000000000000001010606060606121e29353f45525d686f7c86929f9892877f746d665d564d453d3528231c140c0300020100000000000000000000000000000000020c18232e39434f59606d79849199a3a0968d80736b60564c41382d221710070000000000030d18212b343d44505b666d7a85919aa49e948c7f726b60554b41352b1e150b00000000000000000000111e2b3744515e6a7784919daaa89b8f817f7f7f7f7f7f7f7f7f7b6e6155483b2e2215080000000000000000000814212e3b4754616e7a878f8f8f8f8f84776a5d5144495663707c898f8f8f8f8d8174675a4e4134271b0e01000000000000000000000000000000000000030c151c232832373b4246484b4e505152535252504e4c4847433c39352f28222b30394045464b4f5152535251504e4b4a463f372d23180d010000000000000000010d1a26323e4a545e66696c6c69665e544a3e32261a0d0100000000000000000000000000000000020b141c242c323a41464d5254575f626567696b6c6c6c6c6b6a696765615f5754524d46423b332c241c140a020000000000000000000714202d3a46525e697683909daaada196897d7063594f433a312b282223282c3039434e58626f7c8895a0acaa9d908477695f53463a2d21140700000b1825323e4b5865717e8b98a4afa296897c6f6356493c302316090007131f2c3845515c667683909da9aca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d2013070003101c28343f4a546875818e9ba8b3aa978a7d7064574a3d32271b0d04000001081623303d495663707c8996a9b3a89c8f827569544b4034281c1004000000000000000000000000000000000613202c3945525d687985929f9f9f998c7f7366584e41382d2217110a02000000000000000000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c10000005111e2a36414c56606c77818e949fa4a7a09d95908c89878584838383848587898c90959ea1a7a09892867d6f685d52453a2f24180d01000000000000000000000000000000000000000000000000000000000000000000000000000000000009131c252e37404a525c606c77818e93939393939393959082796d665c544a3f382e251c1309000000000000000000000000000000000000000000000000000000000000000000010d18232935414c565f6a727e8b939e99938c81786d685f574f473f342e261e150c030000000000000000000000000000000000000007121d27303d45515d676f7d87929fa69f93877d6f685e53493f332722190f060000000009141f29333d46505a606c78828f97a1a0958f82776c60594f433a2f23190c0300000000000000000000111e2b3744515e6a7784919daaaa9e938f8b8b8b8b8b8b8b8b8a7d7164574a3e3124170b0000000000000000000714212d3a4754606d7a8283838383838174675b4e414855626f7c8283838383827f7265584c3f3225190c000000000000000000000000000000000000030d151e262e343d43474d5354585b5d5e5f5f5f5e5d5b5955534e4745413a3129343c424b5153585c5e5f5f5f5e5d5a585651493f34291d12060000000000000000030f1c2935424e5a66707679797670665a4e4235291c0f03000000000000000000000000000000010b141d262e363e444c52565e61666a6e717476777879797878777673716e6966615e57524d453e362e261c140a0000000000000000000814212e3b4754616e7b87959fabab9e9184786c6053463d31281f1c17181c1f27313c47535f6a7784919daaaca095887b6e6155483b2e22150600000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f2316090004101c2834404b546875828f9ba8aca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700000b17232e3f4b5865727e8b98a8b2a69a8d807367584e43372b1f15100c090e131e2a36414c5666727f8c99a5b3aa998c7f7366594c402e23180c000000000000000000000000000000000004111d2935414c566976838f9caca99d9083766a6053493f3327221b140b040000000000000000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c1000000713202d3946525e68727f8c939ea6a59d959089837f7c7a787776767677787a7c7f838a9297a1a9a29891847a6d60554b4135291d11040000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131c252e384044505b656c7881868686868686868683796d675d544a42382d261c130a0100000000000000000000000000000000000000000000000000000000000000000000070d19242f3a434e58626d75818e95a09f928e827a6e69605951443f3830271e150b00000000000000000000000000000000000000000b151e2935414b55606b727f8c949ea49991847a6d655b50443e342b21180d030000020e1a26313b454e58616c73808d949ea19791837a6d655b50473d31281d11070000000000000000000000111e2b3744515e6a7784919daab0a69e9b98989898989898978a7d7164574a3e3124170b0000000000000000000713202c3945525d686d767676767676746f64584c4047535f6a6f767676767676726d62564a3e3125180b0000000000000000000000000000000000010b151f2730383f444e54575e6164676a6b6c6c6c6b6a6865625f5854524c433f353c464e545c6065686b6c6c6b6b696765625b51463a2e221509000000000000000003101d2a3643505d69768286868276695d5043362a1d100300000000000000000000000000000009131d262f38404850565e61686e73777b7e81838485868685858482807e7b77736e69615e57504840382e261c130900000000000000000b1824313e4b5764717e8a97a7b1a79a8e8174665b5044382b1f160f0b0c10151f2b37434e586773808d9aa6b1a7988b7e7165584b3e2d22170b00000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000c18232e414e5b6874818e9ba7aca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700000615222f3c4855626f7b8896a0acaa9d9184776a6054473c31271f1c181b1a1e242d3946525e6876838f9ca9aea298897c706356493d302316070000000000000000000000000000000000010d19242f3f4c5966727f8c9aa4ab9f95897c6f655b50443e332d261d160e0600000000000000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c100004101c2834404a54616d7a85929fa5a69d938e837d77736f6d686a6a696a6a676d6f73787e859196a1aaa1968d8073675d5145392c201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131c2627333f49535b666c757979797979797979776d675d554b42392f261c140a0100000000000000000000000000000000000000000000000000000000000000000000000008131e28313c46515b606d79839198a29d948f847b706b625b504a423930271d120700000000000000000000000000000000000000030c18242f3a434f59606c77828f95a0a1968f82776c605a50463d33291f1409000005121e2a36424d57606a717e8a929ca29892857b6e685d53493f352b1f160c000000000000000000000000111e2b3744515e6a7784919d9f9f9f9f9f9f9f9f9f9f9f9f978a7d7164574a3e3124170b00000000000000000004111d2935414c565d6069696969696967645c53483c434e585f6269696969696965625b51463a2e221609000000000000000000000000000000000007121d273139424a50586062696e71747777787979787775726f6a66605d56504540454e5860666d717578797978777674726d62564a3d3124180b000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000007101b252f38404a525a61686d747b8084888b8e8f919292929291918f8d8b8884807b746e69615a524a40382e251b0f06000000000000010e1b2834414e5b6774818e9aa7b4aa978a7e7164544a3f3328190d040000040d1b26323d4a5764707d8a97aab4a79b8e81746853493f33271b0f03000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f2316090000071a2734404d5a6773808d9aa6aca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700000815212e3a47535f6a7784919eabaca095887c6f62584e4339312c282327262b2f35414c56616d7a86929facab9f9285796d6053463a2d2013070000000000000000000000000000000000000815222f3b4855626e7b87939faba79c9082776c605a50443f382f282017110a020000000000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c100006121f2c3844515c6674808d98a2aa9e948e8179706b6663605d565d5d5d555d6062656c717b84919ea8a99f92857a6d6054473a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a1417222d38414a545b60686c6c6c6c6c6c6c6c6a605d554c433930271d140a0200000000000000000000000000000000000000000000000000000000000000000000000000010c161f2a343f45515d676e7c86929fa59f9691857d726d605c544b42392e23180c000000000000000000000000000000000000000007131d28313d44505b656d7a839197a19e948c80736c61584e453b31261a0e02000714212d3a46535f696f7c869293939992867c6f695f564c41382d23190d04000000000000000000000000111e2b3744515e6a77849193939393939393939393939393938a7d7164574a3e3124170b000000000000000000010d1924303a444c52545c5c5c5c5c5c5b58534a41363c464e53555c5c5c5c5c5c585651493f34291e120600000000000000000000000000000000020c18242f39434b545c606a6f757b7e8183848586858583817f7c78726d68625a514b4d57606a6f797e82848586858483817f7265584b3f3225180c000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000030c19222d37404a525c636c717a81868c9196989a9c9e9f9f9f9f9e9d9c9a9895918d86817b716c645c524a40372d21180e03000000000005111e2a36414c566a7683909da9aea298887b6e6155483b2d221708000000000a15212e3b4854616e7b8798a2aeaa9d908377655b5044372b1f1205000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000006121f2b37434e586673808d99a3afa89b8e81756a5f554b433c38342e3431373a4145525d68737f8c99a3afa79b8e8175675c5145382c1f13060000000000000000000000000000000000000814212e3a47535f6975828f99a3ab9f948c7f726c615a5049413a3227221b140b0400000000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c10000713202d3a4653606d7885929fa9a2988f82786d6760595654524c5050504c5154535b6069707d8a96a0aca2988a7e7164574a3e3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b262f38424a50535b60606060606060605d54514c433a31271e150b02000000000000000000000000000000000000000000000000000000000000000000000000000000040d18222935404b555f6a717e8a939da7a09792877f746d665c544b4034281c100400000000000000000000000000000000000000010c161f27333f49535d686e7b859298a29f93887e706a60574d42362a1e1205000815222e3b4855616e7b858686868686867d706a60574d433a2f261b110700000000000000000000000000111e2b3744515e6a7784868686868686868686868686868686867d7164574a3e3124170b0000000000000000000008131e28323a4145475050505050504e4c4841382f343c4347485050505050504c4a463f372d23180d01000000000000000000000000000000000a141e2935404b555d666d747c82878b8e909192929291908e8c88847f7a716d605d55535f696f7c848b8f9192929291908d86796c605346392d2013000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000a151e2b343f49525c646e737e858d92999da0a8a9a29f9d9c9b9c9d9fa2aaa7a09d99928e857e736e645c52493f332a1f140900000000000713202d3946525e687885929fabac9f9285796c605346392d201306000000000714212d3a46535e697985929facac9f9285796c605346392d201306000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d2013070000030f1a26313c4854616e7b87929faaac9f92877c6f675d554e46454041414142474c515b606d7a85929eabaca095897d7063554b4034281c100400000000000000000000000000000000000006121e2b37424d57626f7c87929fa7a69f93877e716c605b534c443d332d261d160e06000000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c10000a1723303d4a5663707d899297979992857b6e665c554f49474541434343414547495057616b7784919daaaa9a8d8174675a4e4134271b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262f383f44464e5353535353535353504745413a31281f150c030000000000000000000000000000000000000000000000000000000000000000000000000000000000071018242f39434e58616c74818e95a0a9a299928b80786d665c5145382c1f13060000000000000000000000000000000000000000040d17222d38414c565f696f7d869299939a92867c6f695f53463a2d211407000714212d3a46535f696e78797979797979706b61584e453b31281d140a0000000000000000000000000000101d2a36434f5b67717779797979797979797979797979797979716c6155493c3023170a00000000000000000000020c1620283035393a43434343434341403c362f262a32373b3c4343434343433f3e3a342d251b11070000000000000000000000000000000006111c26303845515d676d7880898f93999a9d9e9f9f9f9e9d9b9896918c857e756d675d58626e7b8691969b9e9f9f9e9e9c9386796c605346392d2013000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000006111c26303d46515b646e74808a92979fa3a9a19e999792908f8f8f909298989d9fa7a39f97928a80736e635b51453b31261a0e04000000000714212e3a4754616d7a8798a2aeaa9d918477665b5044382b1f12060000000005121e2a36424d576a7784919daaaea298877a6e6154473b2e211408000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d2013070000000a15212d3a46535e6975818e98a3aea3999083796d675f5853514b4e4e4e4d53555d606d74818e97a1ada69d9083776b605443392e23180c00000000000000000000000000000000000000020e1a26313c4754606a73808d959fa8a49992877e736c655e564f443f382f2820180f070000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c10000a1724313d4a5764707d8285878a8c8d8073685e544b433d3a39352f362f35393a3f444f596774818d9aa7a99c908376695d5043362a1d1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141d262d333839424646464646464646443a39352f281f160d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d28313c46505a606d7983909893939393928d82796d6053463a2d20130700000000000000000000000000000000000000000006111b262f3a434d57606a707d868686868686857b6e6155483b2e2215080005121e2a36424d575f616b6c6c6c6c6c6c6361594f463d332a1f160b0200000000000000000000000000000e1b27333f4b565f676a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c64615a5045392d2114080000000000000000000000040e161e24292c2d3636363636363433302b251d20262b2e2f36363636363632312e29231b130900000000000000000000000000000000000b17232e3842505a606d79828d929b9fa4ababa39f9d9c9b9c9d9fa19e97928b82796d685f6a76828f98a1a8aaa39f9995949386796c605346392d2013000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000c17232e38424f59626d74808d929ea1a9a39f97918c8885838282838385888b90959ea1a8a29f928d80736d62574d42362a20160a000000000915222f3c4855626f7b8895aab4a99c8f837669544a3f33281c0f0300000000020e1a2531434f5c6976828f9ca9b4aa95887b6f6255483c2f221509000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700000005121e2a36424d57616e7b86929fa6aba0958f82796f6a63605c555b5a5b575f62676d747f8c939ea9a99f948a7d7064594f4430271d120700000000000000000000000000000000000000000915202b37434e58606d79839096a0a7a39992877f776d6860595049413a322a2119100700000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c10000a1623303c4955616c7076787b7d80827c6f62564d4239302d2c29242a24292c2d33404c5966737f8c99a6aa9d9184776a5e5144372b1e110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141c22282b2d353939393939393939372d2c29241e160d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2a343e45515c676e7b8586868686868686867a6e6154473b2e211408000000000000000000000000000000000000000000000a141d28313b454e58616b70797979797979786e695f53463a2d21140700020e1a26313b454d53555f60606060605f57554f473e342b21180d040000000000000000000000000000000b17232e39444d565b5e60606060606060606060606060606060575550483e33281c1104000000000000000000000000040c13191d2021292929292929282724201a13151b1f21222929292929292525221e181109010000000000000000000000000000000003101c28343f4a54616c74818e949da4aca7a09d9992908f8f8f9192999a9e9f948f837a6d666f7c88949faaaea398928c88878886796c605346392d2013000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000003101c28343f4a54606b727f8c929ca4aaa299928c84807b787675757677797b7f838a91969fa6a49c928b7f72695f53463d32271b0f030000000a1723303d4a5663707d8996a3b0a89b8e8275685b4f422d22170b000000000000091c2835424f5b6875828e9ba8b0a396897d7063564a3d3023170a000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000000020e1a25313b46535f69737f8c949fa7a79f948f837c75706d676867676869696e737a818c919ca5aaa1978f82766c6155473d331e150b000000000000000000000000000000000000000000030f1b27323c45515d676e7a8490959ea6a399938c827a6f6b605b534c443c332b22191107000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c10000814202d39444f59616469696e7073756f6a5f53443b302721201f2023282c2f353a424d566673808c99a6aa9e9184776b5e5144382b1e11000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171c1f20282d2d2d2d2d2d2d2d2a21201d19130c0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d18222934404b555f696e78797979797979797976685e5246392d20140700000000000000000000000000000000000000000000020b161f2a333d464f5961636c6c6c6c6c6c6b615f574d42362a1e1205000009141f29333b424648525353535353534a48443e352c22190f060000000000000000000000000000000006121d28323b444b4f51535353535353535353535353535353534a49453e362c22170c000000000000000000000000000002080d1113141d1d1d1d1d1d1b1a18140f080a0f1215151d1d1d1d1d1d191816120d0700000000000000000000000000000000000006121f2b3844505c66717e8b939ea6aea59d95908a86838282838486898d92979f959083786d73808d99a6b0a89f9286807c7a7b7d7063574a3d3024170a000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000006121f2c3844505c666f7c87929fa4aba29892878079736f6a6a696869656c6e72777d848f949fa6a49f92867b6e61584e43382b1f13060000000a1724313d4a5764707d8a97a3b0a79a8e8174675b4e4134281b060000000000010e1b2834414e5b6774818e9aa7b0a3978a7d7064574a3d3124170a000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d2013070000000009141f2a36424d57606d78828f959fa7a69f959087817d79777574747476787b80858e939ca3aaa29892857b6e615a5044352b210c03000000000000000000000000000000000000000000000a15202935404b555e686e7b838f949fa3a49f948f847d726c655d564d453d342b23190f060000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c100004101c28333e474f5557575e61646669625f584e4332292122282b2d2e34383a40454c545e6975828f9ba8aa9d9083776a5d5044372a1d110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f12131b20202020202020201d1413110d0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f18232f39434d575f616c6c6c6c6c6c6c6c6c6c5e564c41362a1e11050000000000000000000000000000000000000000000000040d18212b343e474f55575f60606060605f55534d453b31261a0e020000030d18212931363a3b454646464646463d3c38332c231a10070000000000000000000000000000000000000b16202932393f4344464646464646464646464646464646463e3c39332c241a100500000000000000000000000000000000010407071010101010100e0d0b08030000030608091010101010100c0b090601000000000000000000000000000000000000000713202d3a4653606d7884919ea5afa69d938e837d797776757677797c80858c9298958e81747683909ca9aca0958a7e736f6e6e706b6155483c2f231609000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000003101c28343f4a54606d78839099a3afa39992867d736d67625f585c5c535b6061656c707a828f949fa9a2988f82766a6054473b2e2215080000000b1824313e4b5764717e8a97a4b1a79a8d8174675a4e4134271b0e0100000000010e1b2734414e5a6774818d9aa7b0a4978a7d7164574a3e3124170b000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700000000030e1a26313b44505c666d7a8390959da5a7a099938e898683828181818385888c92979da5a7a09892867d70695e52483e3323190f0000000000000000000000000000000000000000000000040c18242f39434c565e696e7a828c9299a1a69e9691877f776d685f574e463d352b21180c0300000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c1000000b17212c353e44494a4d535457595c55534e463c312a2d2d3338393c4045464b51565d666e7b86929faca89c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306060f1313131313131313110706040100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27313c454d53555f60606060606060605f524c443b3025190e02000000000000000000000000000000000000000000000000060f19222c353e44484a535353535353524846423b33291f140900000000060f181f262a2d2e38393939393939302f2c28211a110800000000000000000000000000000000000000040e1720282e3336373939393939393939393939393939393931302d28221a120800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a96a0acac9f948e8179716d67696869676d70747a7f869095938a7e7885929fabaa9d9184776c6261616361594f44382c201407000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000006121f2c3844505c66727f8b95a0aba89f92877d706b605d55534e4f4f495053555a61686d79829097a1a49f94897c6f6256493c2f2316090000000b1825313e4b5864717e8b97a4b1a79a8d8074675a4d4134271a0e0100000000010e1a2734414d5a6774808d9aa7b1a4978b7e7164584b3e3125180b000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000000000009141f28343f4a545e686d7a838e929d9fa7a49f9b9892908e8e8d8e8f9197999ea1a9a29e9590867d706b60574d42362c22110800000000000000000000000000000000000000000000000007121d27313b444d565e686d777f8791979fa6a199928c827a6e6960584f473d332a1e150a00000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c10000005101a232c33393c3d4246484a4d4f4847433c3431363a3b3f4446494b5153555d60686d78828f98a2aea7998c7f7366594c403326190d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151f2a333c4246485253535353535353535346413b32291e1408000000000000000000000000000000000000000000000000000007101a232c33383c3d464646464646453b3a36312921180d030000000000060d141a1e21222c2d2d2d2d2d2c2423201c161008000000000000000000000000000000000000000000050e161d23272a2b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2423211c171008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090b0c1313131313130d0c0a070200000000000005121e2a36424d576875818e9ba8afa49a8f82786d66605d555c555c6063676d727b838f9391857b8797a2ada79a8d8074675a545557554f473e33281c1004000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000713202d3a4653606d7984919ea7ada1968d80736b6059514b474342423f44464850565d676d7a85929b9993908c8275685c4f4235291c0f0200000b1824313e4b5764717e8a97a4b1a79a8d8174675a4e4134271b0e0100000000010e1b2734414e5a6774818d9aa7b1a4978a7e7164574b3e3124180b000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d2013070000000000030b17232e38424c565e686d79818990959b9fa2aaa39f9d9b9a9a9b9c9ea1a9a49f9c97928c837b706b60594f453b30241a1000000000000000000000000000000000000000000000000000010b151f29323b444d565d656c727d858f949fa3a39f948f847b6f6a60594f453c30261c1106000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c1000000008111a21282d3031363a3b3d40423c3a37373b3c4246484a505355555c6063676d727a818f949eaaab9f95887c6f6255493c2f22160900000000000000000000000000000000000000000000000000000003080c0e0e131313131313130f0e0c09040000000000000000000000000000000000000000000000000000000000000003070b0d0e131313131313130e0e0c08030000000000000000000000000000000000000000000000000000000000030d18212a31373a3b4546464646464646463b3936302920170d0200000000000000000000000000000000000000000000000000000008111a21282c2f30393939393939382e2d2a261f180f060000000000000003090e1214151f202020202020171614100b050000000000000000000000000000000000000000000000040b12171b1d1e20202020202020202020202020202020171714110c0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d121618192020202020201a1917130e0800000000000714202d3a46525e697885919eabac9f93877c6f665c54514b4f4b5153555d60696e79818f949083909da9b3a4988b7e7165584b484a48443e352c21160b00000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000004101d2935404b5564717d8a96a1acaa9e9184796d60594f45403937312d3337393e444c555e68717e8b8e8a86837f7c6f6255483c2f2215090000000a1724313d4a5764707d8a97a3b0a79a8e8174675b4e4134281b0e0100000000010e1b2834414e5b6774818e9aa7b0a3978a7d7064574a3d3124170a000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700000000000006111c26303a444c565e676d747c83898e9298999b9d9e9f9f9f9f9e9d9b999993908b857f786e6960594f473d33291f12080000000000000000000000000000000000000000000000000000030d172029323b444c535b606b707a828c9299a1a69e9691857d6f6b60574d42382e23170c020000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c10000000000810171c2023252a2d2e31333036393c4347494d5354545b606266676d7074797e858f939ea6aea49d9083776a6054473b2e2215080000000000000000000000000000000000000000000000000001090f14181a1b202020202020201c1b191510090200000000000000000000000000000000000000000000000000000001080e1317191a202020202020201b1a18140f090100000000000000000000000000000000000000000000000000000000060f181f262b2d2e3939393939393939392e2d2a251e170e0500000000000000000000000000000000000000000000000000000000000810161c2023242c2d2d2d2d2d2c22211e1a140d060000000000000000000002050708121313131313130a090704000000000000000000000000000000000000000000000000000000060b0e1011131313131313131313131313131313130b0a080400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010911181e2225252d2d2d2d2d2d2726231f19120a020000000815212e3b4854616e7b8797a1adaa9d9083776a5f544b4540424045474b51575f676d78828f9590959fabb0a3968a7d7063574a3d3d3c38332c231a100500000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000613202c3945515d6775828f9ba8aea3988b7e71675d51473d352f2b2622272b2d323a434c56606d7883817e7a76736f6a5f53473b2e2115080000000a1723303d4a5663707d8996a3b0a89b8e8175685b4e4235281b090000000000020f1b2835424e5b6875818e9ba8b0a3968a7d7063574a3d3024170a000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000000000000000a141e28323a444c555c606b6f777d8185898c8e90919292929291908f8d8a86837e79726d665f574f473d352b20170d00000000000000000000000000000000000000000000000000000000050e172029323a4149505960686d777f879297a0a8a09792867d6f695f544a3f34281e13080000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c100000000000050b1014161a1e21282f353a4146474e5455575e6165666c6f7276797d81858b91979ea5afa69d92897d7063584e43372b1f1306000000000000000000000000000000000000000000000000030b131a202427282d2d2d2d2d2d2d292825211b140c0300000000000000000000000000000000000000000000000000020b12191f2326272d2d2d2d2d2d2d282724201a130b0300000000000000000000000000000000000000000000000000000000060e141a1e21222c2d2d2d2d2d2d2d2d21201e19140d0500000000000000000000000000000000000000000000000000000000000000050b101416172020202020201f1514120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131b23292e313239393939393933322f2a241c140a0000000916222f3c4955626f7c8895a9b3a79a8d817467584e4239352f34383a40454d555c666d7a85919d9fa7b1afa396897c706356493d302f2c28211a11080000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000714202d3a4753606d7a86929facac9f92867a6d60554b403529241d1a171b1f2028313a44515c666d7775716d6866625f584e43372b1f12060000000916222f3c4955626f7c8895aab4a99c8f8276695c4f4330251a0e0200000000030f1c2936424f5c6975828f9ca8b5ab95897c6f6256493c2f231609000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700000000000000020c162029323a434b515960636b7075797c7f82838485868685858382807d7a76726d67605c544d453d352b23190e050000000000000000000000000000000000000000000101020000000000050e1720282f383f444f565e656c727d859196a0a9a29892857b6e665c50443a3025190d0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c10000000000000000409121b232b323a41454c525458606266696e7175797c7f8285898d92979ea1a9ada59e948d80746b6054463c32271b0f030000000000000000000000000000000000000000000000010b151d252b303435393939393939393534312c261e150c000000000000000000000000000000000000000000000000000b141d242b303334393939393939393534302b251d150b010000000000000000000000000000000000000000000000000000000003090e1214151f20202020202020201414110e0802000000000000000000000000000000000000000000000000000000000000000000000407090a13131313131312080705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002070a0c0d13131313090907030005090d0f101313131312100d0903000000000000000000000000000000000000000000000000050a0d0f101313100f0d0a0500000000000000000000000000000007111b252d343a3e3f464646464646403f3b362e261c120800000a1723303d4a5663707d8996a3b0a6998c7f7366594c402f2924292c2f353b434b545d68707d8a959fabb7afa396897c706356493d3023201c161008000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000a1723303d4a5663707d8998a3aea89b8e8275675d51433a2f23181d1d1d1d1d161f2834404a545c606a6864615e5655534e463c32261b0f030000000814212e3b4754616e7b8798a3aeaa9d9084776a574d42362a1e12050000000005111d2935414c566a7783909daaafa399877b6e6154483b2e211508000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d2013070000000000000000050e1720353f474e524f54596063676d70727576787879797878777573706d6865605d55504a46423c332a1f14090000000000000000000000000000020507080a0b0c0c0d0e0f090907030000050d161d262d333d444c535b606b6f7b849196a1aaa2979083786d60564c41362a1b110600000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c100000000000000009121b242d353d444c52565e61666a6f73777b7e8285888c8f92989a9fa2a9aca9a19e938e82786d60594f44342b20150a00000000000000000000000000000000000000000000000009131d272f373c40414646464646464642413d3730271e0e050000000000000000000000000000000000000000000000030d1d262e363c3f414646464646464641403c372f271d13090000000000000000000000000000000000000000000000000000000000000205070812131313131313131308070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e1317191a202020201615130f0a1015191c1d202020201f1d19140e07000000000000000000000000000000000000000000030a11161a1c1d20201d1c1a16110a03000000000000000000000000010d18232d373f464a4c5353535353534d4b4740382e24190e02000a1724313d4a5764707d8a97a3b0a5988c7f7265594c3f2e23181c1f24293139424c56616c7683909da9b3afa396897c706356493d302316100b0500000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000d1a2733404d5a6673808d99aab4aa978b7e7164554c4131282a2a2a2a2a2a2a2a2a232e39424a51535d5b5754524c4847433c342a20150a000000000713202d3a4653606d7986929facab9f928578695e52463a2d201407000000000713202d3946525d687885929eabac9f9286796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700000000000000010e1a26313d4751595e5f606060555c606366686a6b6c6c6c6c6b6a686664615e566060606055534d453c31261a0e02000000000000000000000002090e111414171818191a1b1c1615130f0a0400040b141b2227323a4149505960696e7b849199a3a99f958c7f73685e5246382d22170b00000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c1000000000000006101b242d373f474f565d60686d72777c8084878b8e9297999c9fa2aaababa8a19e96918a81796d665c51473d3322190e040000000000000000000000000000000000000000000000030f1a252f3941484d4e535353535353534f4d4942393020170d02000000000000000000000000000000000000000000010b151f2e3840474c4d535353535353534e4d4841392f251a0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090b0c1313131313130d0c0a07020000000000000000000000000000000000000000000000010a12191f2326262d2d2d2d23221f1b161b212628292d2d2d2c2b29251f19110800000000000000000000000000000000000000040d151c2226292a2d2d2a2926221c150d04000000000000000000000006121e29343f495156586060606060605a58524a40362a1f1307000a1723303d4a5663707d8996abb5a6998d807366544a403428211e1a181f27303a44505a64707d8a97a2adafa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000004101c2834404b546976828f9ca9aea398887b6f6255483c2f3737373737373737373737373039404446514e4b4746413c3b37322a261f180f0600000006121f2b3844505c667784909daaaea298877b6e6154483b2e21150a000000000714212e3a4754616d7a8797a1adaa9e918477665c5145382c1f1306000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d2013070000000000000004111d2a36424e59636a6c6c6c6c6b636059595b5d5e5f5f5f5f5e5d5c5a575f626a6c6c6c6c6c5f574d42372b1e120500000000000000000000050d14191e20212324252627282823221f1b160f0700020a111720292f383f444f575f696f7d87929fa9a79f92867a6d6153493f33271b0f03000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c100000000000040e18222d363f49515960686d737a7f84888d9196989b9ea2a9a9acaaaaa29f9b96918c847e746d675c544a40352b2110070000000000000000000000000000000000000000000000000814202b37414b53595b606060606060605c59544b4232291f140900000000000000000000000000000000000000000007121d2731404a52585a606060606060605b59534b41372b2014080000000000000003060809131313131313130b0a08050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010406070f111213131312110e0b0706040000000000000000000000000000000000070d121618192020202020201a1917130e08000000000000000000000000000000000000000000000a131c242a2f323339393939302f2c2721262d323536393939393835312a231a11070000000000000000000000000000000000030d161f272d32353639393635322d271f160d03000000000000000000000916222e3a46515b62656c6c6c6c6c6c66635c52473b2f23170a000915222f3c4855626f7b8899a3afa89b8f8275665c51443a322d2b2627272628323e4653606d7985929fabafa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000006131f2c3845515c667884919eabac9f9286796d6053464444444444444444444444444444444444444444444444444444443b3a36312a21180e03000003101c28343f4a546875818e9ba8b3aa978a7d7064574a3d32271b0d04000001081623303d495663707c8996a9b3a89c8f827569544b4034281c1004000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000b1825323e4b5865717e8b98a4aca295897c6f6256493c2f23160906040d1a2733404d5a6673808d99a6aca09386796d6053463a2d2013070000000000000006121f2c3845525e6a757979797978706b605c544d5152535352524b515a61696e777979797976695f53463a2d211407000000000000000000050e171f252a2d2e30313233343435302f2c27211910070000060e171d262d333d454d57606b73808d97a2ada2988c8073655b5044372b1f1205000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c1000000000000a15202a343e48515b626b707a80868c9196999da0a8a8abaaa7a7a09d9a98928e8a847f79716c605c554b42392e231a0f000000000000000000000000000000000000000000000000000c1824303c48535d64686c6c6c6c6c6c6c68655d54443b3025190e0000000000000000000000000000000000000000000c18232f3943525c64676c6c6c6c6c6c6c68645d53483c3024180c0000000000040a0f13151620202020202020181715110c060000000000000000000000000000000000000000000000000000000000000000000000000000000001080d1113141c1e1f1f20201f1e1b181413100c0701000000000000000000000000010911181e2225252d2d2d2d2d2d2726231f19120a020000000000000000000000000000000000000007121c262e353b3f40464646463c3b38322b30383e41434646464645413c352c23190e03000000000000000000000000000000000a151f2831383e4243464643423e3831281f150a000000000000000000000b1825313e4a56626d72797979797979736e63584b3f3226190c000714202d3a4753606d7a86929facab9e9285796d60564c443d3a373134333332323845515c6675828f9ca8afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000713202d3a4653606d7986939facaa9d908477665c50505050505050505050505050505050505050505050505050505050504846423b332a1f14090000000b17232e3f4b5865727e8b98a8b2a69a8d807367584e43372b1f15100c090e131e2a36414c5666727f8c99a5b3aa998c7f7366594c402e23180c00000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000b1825323e4b5865717e8b989f9f9f95897c6f6256493c2f231b1313100c1a2733404d5a6673808d999f9f9f9386796d6053463a2d201307000000000000000613202c3946535f6c7987868686847d736d665f5751464146454d555c606c717b83868686867b6e6155483b2e2215080000000000000000020d17202930363a3b3d3e3f3f4041423c3b38322b23190f040000050b141b2227333b454f59606d7a85929fabaa9e9185786c605346392d201306000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c1000000000030f1b26313c46505a626d727d848d92989ea0a8aaaba8a8a09e9a9795908d8985817d78726d67615a514b433930271c1108000000000000000000000000000000000000000000000000000e1a2734404d59646f7479797979797979756f65564d42362a1c11060000000000000000000000000000000000000004101c2934404b55646e7479797979797979746f64594d4034271a0e00000000060e151b1f21222d2d2d2d2d2d2d2524211d1711090000000000000000000000000000000000000000000000000000000000000000000000000000040c13191d2021292a2c2c2d2c2c2a2824201f1c18120b03000000000000000000000009131b23292e313239393939393933322f2a241c140a000000000000000000000000000000000000020e19242e3840474b4d535353534948433d353a42494e5053535353514d473e352a1f140900000000000000000000000000000005111c27313a434a4e505353504e4a433a31271c11050000000000000000000c1925323f4c5865727f8686868686868073665a4d4033271a0d0006131f2c3945515d677783909dabada1978a7e71685e564f484742424140403f3f3f404b546673808c99a6afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000815212e3b4854616e7b879aa4afa99c90837669545d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d55534d453b31261a0e0200000615222f3c4855626f7b8896a0acaa9d9184776a6054473c31271f1c181b1a1e242d3946525e6876838f9ca9aea298897c706356493d3023160700000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000b1825323e4b5865717e8b9393939393897c6f6256493c2f2d28201f1c181a2733404d5a6673808d939393939386796d6053463a2d20130700000000000000000b1825323e4b5865717e8b9296918780786e69625b524c4550575f676d747e869095948d8074695f53463a2d211407000000000000000009141f29323b4246474a4b4b4c4d4e4f4948433d352b21160a000000020a11172129333d45525d6874808d9aa7ada197887c6f6255483c2f221509000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c100000000006121f2b37434e58626c727f8791969fa2aaaaaaa29f9b9896918e8a8784807d7975706d66605d555045403930271e150b00000000000000000000000000000000000000000000000000000e1b2835414e5b687481868686868686868175695e5246382d22170b0000000000000000000000000000000000000006131f2c3845515c677480868686868686868174685b4e4135281b0e00000006101820262b2e2f3939393939393931302d29221b1209000000000000000000000000000000000000000000000000000000000000000000000000040d161e24292c2d363738393939383735312d2c29231d150d0600000000000000000007111b252d343a3e3f464646464646403f3b362e261c1208000000000000000000000000000000000007131f2a35404a5257596060606056544f473d424c545a5c6060605f5e5850473c3125190d0100000000000000000000000000000a16222d38434c545a5d60605d5a544c43382d22160a0000000000000000000c1925323f4c5865727f8b939393938d8073665a4d4033271a0d0004101d2935404b5566737f8c99a3aea99e91847a6d68615955534d4f4e4d4c4c4c4b4b4c5865727f8b98a5afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000916232f3c4956626f7c8995acb6a89c8f82756a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a615f574d42362a1e120500000815212e3a47535f6a7784919eabaca095887c6f62584e4339312c282327262b2f35414c56616d7a86929facab9f9285796d6053463a2d20130700000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000b1825323e4b5865717e868686868686867c6f6256493c3939352d2c28231d2733404d5a66738086868686868686786d6053463a2d20130700000000000000000b1724313d4a56626d73808c9399938d837b726d615e56515a61696e79818a9298958f82786d60574d42372b1e120500000000000000020e1925303b444d5254565758595a5b5b56544f473d32271b0f0300000000060f18212935414c5663707d8996aab3a9988c7f7265594c3f3226190c000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c10000000000815212e3a47535f6a717e889299a1a9aca69f9c98928e8b8784817e7a7773706d6663605c54514b433e342e271e150c0300000000000000000000000000000000000000000000000000000916232f3c4956626f7c89959393939392867b6e61544a3f33281c0f030000000000000000000000000000000000000714202d3a4753606d7985929393939395897c6f6356493c302316090000040e18222a32373b3c464646464646463e3d39342d241b110600000000000000000000000000000000000000000000000000000000000000000000010c161f282f35393a4244454646464544413e3a38342f271f17110a02000000000000010d18232d373f464a4c5353535353534d4b4740382e24190e02000000000000000000000000000000000a17232f3b47525c63666c6c6c6c6360594f4349545e66696c6c6c6c6a62584d4135291d100400000000000000000000000000010d1a26323e4a545e66696c6c69665e544a3e32261a0d0100000000000000000c1925323f4c5865727f8b989f9f998d8073665a4d4033271a0d00000c18242f3b4854616e7b86929fa8ada19690827a706b65615f575c5a5a5959585858585865717e8b98a4afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000a1623303d495663707c8996a3afa89b8e8177777777777777777777777777777777777777777777777777777777777777776e695f53463a2d211407000006121f2b37434e586673808d99a3afa89b8e81756a5f554b433c38342e3431373a4145525d68737f8c99a3afa79b8e8175675c5145382c1f130600000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000b1724313d4a56626c71797979797979796f6a605447464646413a38342e2726323f4b58636e737979797979797976665c5044382c1f120600000000000000000915212e3a45505a636e74818e939f9590867e756d68605c606c717b838e939f969083796d665c50453c31261a0e020000000000000005111e2a36424d565e61636465666767686360594f43382c1f13070000000000060f1924303a4753606d798698a2aea79a8e8174675b4e4134281b0e000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c1000000006121f2b37434e58626f7c86929aa3aba8a09e948f8a85827e7b7774716e686763605c5453504a4540393128231f1c17110a02000000000000000000000000000000000000000000000000000915222e3b4854606a7783909daa9fa3998c7f73665b5044382b1f1409000000000000000000000000000000000006121f2b37434e5864717e8a97a29f9f9d9083776b6054483b2f22150900000a15202a343c434749535353535353534b49453e362d22170c0000000000000000000000000000000000000000000000000000000000000000000008131e28313a4145474f515252535352514e4b474540393127221b140b02000000000006121e29343f495156586060606060605a58524a40362a1f1307000000000000000000000000000000000c1926323f4b57636e73797979796f6b6054484e5a66707679797979746a5e5145382b1f120500000000000000000000000000030f1c2935424e5a66707679797670665a4e4235291c0f0300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00000714202d3a46525e6974808d96a1a9a89f9590847d77726e696a6867666665656565646465717e8b98a4afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000a1724303d4a5763707d8a96a3b0ab9e928583838383838383838383838383838383838383838383838383838383838383837b6e6155483b2e2215080000030f1a26313c4854616e7b87929faaac9f92877c6f675d554e46454041414142474c515b606d7a85929eabaca095897d7063554b4034281c100400000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000915212e3a45505a62656c6c6c6c6c6c6c6260584e525353534e4645403930292f3b47525c63666c6c6c6c6c6c6c6c5c544a3f34281c1003000000000000000005111d29343f48525b606d78818f959f98928b827a706b676d747e8690959d9891847b6e675d544a3f332a1f140900000000000000000714202d3a46525e696e707172727374756f6b6054483b2f22150800000000000008131f2c3845515c677885929faba89b8f8275685c4f4235291c0f000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c100000000815212e3a47535f6a76828f98a3aca7a0969189827d7975716e696764615e565653514a46443f38352f312f2d2b28221c140b0200000000000000000000000000000000000000000000000007131f2c38434e5865727e8b98a2aeab9e9184786c6053463b30251a0e00000000000000000000000000000000000814212e3a47535f6a7683909ca9aea2988b7f7265594f43382c1f130700030f1b26323c464e535560606060606060585650483e34291d11050000000000000000000000000000000000000000000000000000000000000000010d19242f3a434c52545c5d5f5f605f5f5d5b5753514b433f332d261d140a00000000000916222e3a46515b62656c6c6c6c6c6c66635c52473b2f23170a000000000000000000000000000000000d1a2633404d59667380868686867d6f635649505c69768286868686796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768286868276695d5043362a1d100300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000005121e2a36424d57606d79849197a1a9a79f969189837f7b78767574737372727271717171717e8b98a4afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000a1724313d4a5764707d8a97a3b0ada1979290909090909090909090909090909090909090909090909090909090909090887b6e6255483b2f2215080000000a15212d3a46535e6975818e98a3aea3999083796d675f5853514b4e4e4e4d53555d606d74818e97a1ada69d9083776b605443392e23180c0000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d2013070005111d29343f48505658606060606060605654575d5f6060605b53514b423a322a36404a52585a606060606060605f504a42382e23170c000000000000000000010c18222d364044505c666d79829095a09f938f857d746f79818a9298a09992867c6f695e554b42382e21180e0300000000000000000814212e3b4754616e7b7d7e7e7f8081827d6f6356493c3024190d02000000000004101c2934404b556b7784919eaaa99c908376695d5043362a1d10000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c100000000915222f3c4855626f7b88949faaaca09590847d76706d6765615e575754524c494644403a444442413f3e3c3938332d261d140a000000000000000000000000000000000000000000000000030f1b27323d4754606d7a85929facaca1968a7d7063574d42362a1c110600000000000000000000000000000004101c2934404b55626e7b88949fabac9f92867a6d6054473d32271b0f030006131f2b37434e585f626c6c6c6c6c6c6c64625a5045392d211508000000000000000000000000000000000000000000000000000000000000000004111d2935414c565d60696a6b6c6c6c6b6a6864605c5550443f382f261b1106000000000b1825313e4a56626d72797979797979736e63584b3f3226190c000000000000000000000000000000000d1a2633404d596673808c9393897c6f635649505c6976838f939286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0000020e1a25303b45515d676f7c8591979ea5a8a09e95908b8885838281807f7f7f7e7e7e7e7d7d808d9aa7afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000a1724313d4a5764707d8a97a3b0b3a9a19e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d94887b6e6155483b2e22150800000005121e2a36424d57616e7b86929fa6aba0958f82796f6a63605c555b5a5b575f62676d747f8c939ea9a99f948a7d7064594f4430271d12070000000b1825323e4b5865717e8b98a4aca295897c6f6256493c2f23160900040d1a2733404d5a6673808d99a6aca09386796d6053463a2d20130700010c18222d363f454a4b53535353535353495761696b6c6c6c68605c544c443c342e3840474b4d5353535353535353443f3830261c11060000000000000000000006111b2428343f4a545d676d7a839196a19e979188807b838e929fa29f93877d706a5f574d433a30261c0f060000000000000000000b1724313e4a5764717e898a8b8c8d8e8c807366564c4135291e130b060400020509121f2b3844505c667885929eaba99c908376695d5043362a1d10000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c100000000c1926333f4c5966727f8c99a6afa49a90837a706b64605c5554524d4b4746413d3a434a4f50514f4d4c4a4946443f382f261c11060000000000000000000000000000000000000000000000000a16202c3945515d6774818e9aa7b1a89b8f8275695e5246382e23170b00000000000000000000000000000006131f2c3845515c6774808d9aa6b0a79b8e8174685d5245392b21160a00000815212e3b47535f6a7679797979797979716c6256493d3024170a00000000000000000000000000000000000000000000000000000000000000000613202c3945525d686d757778797979787774716d67625a504941382d22170b030000000c1925323f4c5865727f8686868686868073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00000009141f2935414b555f6a6f7c858f939c9fa4a79f9d989892908f8d8d8c8c8b8b8b8b8a8a8a8d929da9afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000a1723303d4a5663707d8996a3b0b8b0aba99f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa9aaaaaaaaaa94877a6e6154473b2e211408000000020e1a25313b46535f69737f8c949fa7a79f948f837c75706d676867676869696e737a818c919ca5aaa1978f82766c6155473d331e150b000000000b1825323e4b5865717e8b989f9f9f95897c6f6256493c2f2316090b10141a2733404d5a6673808d999f9f9f9386796d6053463a2d201307000006111b242d343a3d3e46464646464646505d697378797979746d665e564e463e3528363b3f40464646464646464638342e261e150a000000000000000000000000091217232e38424b555d686e7b849197a2a19a938d8890959da59d928b7f726b61584e453b31281e140a000000000000000000000815222f3b4855626e7c889798999a9a8f8275685d52463a30241d1512100c0e12141a202d3a4653606d7986939faca99c8f8276695c4f4336291c10000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c100000020f1c2835424f5b6875828e9ba8ac9f93877c6f68605953514b4846423e3b393634434d555b5d5d5c5a59575553504a42382d22170b00000000000000000000000000000000000000000000000004111d2935414b55626f7c88959fabac9f92877b6e61544a3f34281c100300000000000000000000000000000714202d3a4753606d7985929eabaca095897c6f63564c413529190f0400000916222f3c4955626f7c868686868686867e7164584b3e3125180b00000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8284858586868584817e79716c605b53493f33271f14090000000c1925323f4c5865727f8b939393938d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000020d18242f3a434e585f6a6f7a82898f93999c9fa2aaa29f9d9b9a999998989898979797979a9da4aeafa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000091623303c4956636f7c8996a2afb0a69f9c9393939393939393939393939393939393939393939393939c9ea6b0aea398877a6d6054473a2d2114070000000009141f2a36424d57606d78828f959fa7a69f959087817d79777574747476787b80858e939ca3aaa29892857b6e615a5044352b210c03000000000b1825323e4b5865717e8b9393939393897c6f6256493c2f231610171c20232733404d5a6673808d939393939386796d6053463a2d20130700000009121b22292e313239393939393945525f6b788586868681786d685f584f473f342e2f323339393939393939392c28231c150c030000000000000000000000000006111c263039434c565e696f7c859299a3a49f9a959da0a79e948d80746d62594f463c33291f160c02000000000000000000000613202d394653606c7785929ea5a69f92867a6d61564c41352e27201f1c181a1e21252a34404b55626f7c889aa4afa79b8e8174685b4e4135281b0e000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c10000003101d293643505c6976838f9ca9a99d9083766a5f564f4645403b3a36302e2d2f3c46555f666a6a6967656462605b544a3f33281c0f030000000000000000000000000000000000000000000000010d18242f3a47535f6a7683909da9afa3998c7f73665c5044382b1f14090a0a0a0a0a0a0a0a0a0a0a0a0a0a121f2b37434e5864717e8b97a2adaa9d9083776b6054443a2f2419070000000916222f3c4955626f7c8893939393938b7e7164584b3e3125180b00000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a87909292939292908e8a847e746c655b50443b30251a0e0200000c1925323f4c5865727f8b989f9f998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0000000007131d28313c464e585f686d757c82878b8f929897999a9b9c9d9d9d9e9e9e9e9f9f9f9fa3abacb5afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000815222f3b4855626e7b8895a9b3ab9f948f8686868686868686868686868686868686868686868686868f949eaaac9f928579675d5145392c20130600000000030e1a26313b44505c666d7a8390959da5a7a099938e898683828181818385888c92979da5a7a09892867d70695e52483e3323190f00000000000b1825323e4b5865717e868686868686867c6f6256493c2f23161a22282d303139404d5a66738086868686868686786d6053463a2d201307000000000911181d2124252d2d2d2d2d323f4c5965727f8c93938e827a6f6a6159514440393028272d2d2d2d2d2d2d2d1f1c17110a030000000000000000000000000000000a141e27313a444d575f6a707d879299a49f9f9f9fa9a0958f82786d605b51473e342a21170d04000000000000000000000005121f2b3744505b6575828f9baaaea3988b7f72685d52454039302d2c2823252a2d30363e45515c6773808c99acb4aa998c7f7366594c403326190d000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c10000004101d2a3743505d6a7683909da9a79b8e817468584e443d38342e2d2a2a2d2f38424e5866717777757472716f6c665b5044382b1f120600000000000000000000000000000000000000000000000007131d2b37434e5864717e8b97a2adab9e9184786d6053463b31251a16161616161616161616161616161616212e3a47535f6a7683909ca9aea2988b7f7265594f4332281e13080000000916222f3c4955626f7c88959f9f9f978b7e7164584b3e3125180b00000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a87949e9f9f9f9e9d9b96918b80776c60574d42362a1e120500000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00000000010c161f2a343c464e565e616b6f757b7f8285888a8c8d8f8f9090919191919292929292999ba3acafa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000714212d3a4754606d7a8797a2ada99c8f82797979797979797979797979797979797979797979797979828f9ca9ab9e9184786b554b4135291d1104000000000009141f28343f4a545e686d7a838e929d9fa7a49f9b9892908e8e8d8e8f9197999ea1a9a29e9590867d706b60574d42362c22110800000000000b1724313d4a56626c71797979797979796f6a6054473b2e2217242c33393c3d46464b58636e737979797979797976665c5044382c1f12060000000000060c111517182020202025313e4a56626d75818f969490847c706b625b514a423a322a211920202020202012100c060000000000000000000000000000000000020c151f28323b454e58606b717e8793939393939393969083796d665c50493f352c22190f05000000000000000000000000030f1b27333f495364717e8a98a2aeaa9e91857a6d605b514b423d3a38342e31363a3b42465059606d7984919eabaea398897d7063564a3d3023170a000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c10000003101d293643505c6976838f9ca9a79a8d817467564c413a39352f363036393c424a54606a77838482807f7d7c786c605346392d201306000000000000000000000000000000000000000000000000010f1b26323c4753606d7985929fabada1968a7d7063574d42362a23232323232323232323232323232323232934404b55626e7b88949fabac9f92867a6d6054473d3221160c010000000916222f3c4955626f7c8895a2aca4978b7e7164584b3e3125180b00000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a87949fa3aba6abaaa9a19e928b7f72695e52463a2d20140800000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0000000000040d18222a343c444c52596063696e7276797b7d7f81828383848484848585858585868b909ba7afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000613202c3945515d677885929eabaa9d9184776c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c667784919eaaa99c8f8376695c50432f24180d010000000000030b17232e38424c565e686d79818990959b9fa2aaa39f9d9b9a9a9b9c9ea1a9a49f9c97928c837b706b60594f453b30241a100000000000000915212e3a45505a62656c6c6c6c6c6c6c6260584e43382b1c2328363e44494a525353525c63666c6c6c6c6c6c6c6c5c544a3f34281c10030000000000000105090b0b13131316222e3a46515b606d7a8491989691867d726d605c544c443c332b2317110a13131306030000000000000000000000000000000000000000030d162029333c464f59616c727f8686868686868686847b6e675d544a3f372d231a100700000000000000000000000000000b17222d3a4753606d7a85929faaada1978e81746d605c544f4946444043434246484d525a616b737f8c96a1acac9f92867a6d6053473a2d201407000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c100000020e1b2835414e5b6874818e9ba7a99c8f8276685e534c4745414343434146474d545b666f7c88908f8d8c8a85796c605346392d201306000000000000000000000000000000000000000000000000000a151f2c3845515d6774808d9aa6b0a89c8f8275695e5346382e3030303030303030303030303030303030303845515c6774808d9aa6b0a79b8e8174685d5245392c201304000000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e3125180b00000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a8799929995999fa2aaada49f92867b6e6154483b3025190e02000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0000000000050e171e252a323a41464f54575e6165666d6f717374757676777777787878787879797e8b98a4afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000004111d2935414c55697683909ca9ab9f928578695f606060606060606060606060606060606060606d7986929faca79a8d8174675a4e4134271b070000000000000006111c26303a444c565e676d747c83898e9298999b9d9e9f9f9f9f9e9d9b999993908b857f786e6960594f473d33291f120800000000000005111d29343f485056586060606060606056544e463d3227262e343f485055575f6060605a585a606060606060605f504a42382e23170c000000000000000000000000060606121e29353f45525d686f7c86929f9892877f746d665d564d453d3528231c140c03000000000000000000000000000000000000000000000000040e17212a343d47505a626d727979797979797979786e695e554b42382e251b11080000000000000000000000000000000613202c3945515d6773808d98a2aea99d938c7f736d6660595653514a50504d5354575e616c707d87929fa8b0a69b8e8275675d5145392c201306000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c100000000c1926323f4c5965727f8c98a7ac9f92867a6d655e5654514b504f504d5254575f666c7882909c9c9a988e8174655b5044372b1f12050000000000000000000000000000000000000000000000000004101d2935404b55626e7b88949fabac9f93877b6e61544a3f3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4753606d7985929eabaca095897c6f63564c4135291d1104000000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e3125180b00000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a87878686888d9298a2abaea2988c807366564d41362a1e1105000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00000000020c1720293036393a3e3f44484d5354545c606264666768696a6a6a6b6b6b6b6c6c6c717e8b98a4afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000010d19242f414d5a6774808d9aabaea298887b6e61555353535353535353535353535353535355626f7c8899a3afa9988b7e7265584b3f3225180c00000000000000000a141e28323a444c555c606b6f777d8185898c8e90919292929291908f8d8a86837e79726d665f574f473d352b20170d00000000000000010c18222d363f454a4b535353535353534947433d342b2830383f44515a61646c6c6c6c66635c5253535353535353443f3830261c11060000000000000000000000000000010d18232935414c565f6a727e8b939e99938c81786d685f574f473f342e261e150c03000000000000000000000000000000000000000000000000050f18222b353e48515b62656c6c6c6c6c6c6c6c6b615e574d433a30261c13090000000000000000000000000000000004111d2935404b55616e7b86929fa6afa59c918c8079706b6562605c545c5d575e6164696e747e869299a3afaa9f94897d7063554b4035291d1104000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c100000000915222f3c4855626f7b88959faba3998e81776d6863605d555d5c5d565e6164696e78808e949fa8a0958a7d706453493f33271b0f0300000000000000000000000000000000000000000000000000000c18242f3947535f6a7683909ca9afa4998c8073665c504949494949494949494949494949494949494949494e5864717e8b97a2adaa9d9083776b6054443a2f24190d01000000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e3125180b00000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d787c7a79797c80869299a4afaa9e918477685e5246392d201407000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0000000008131e29323a4146474b4c4d4e4f51524a50535557595a5c5c5d5d5e5e5e5e5f5f5f65717e8b98a4afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000081724313e4a5764717d8a99a3afaa988b7e7165574d42464646464646464646464646424d5765727f8c98abada297887b6f6255483c2f2215090000000000000000020c162029323a434b515960636b7075797c7f82838485868685858382807d7a76726d67605c544d453d352b23190e05000000000000000006111b242d343a3d3e464646464646463c3b38322b29323a424a505b636c7079797979736e63574b46464646464638342e261e150a00000000000000000000000000000000070d19242f3a434e58626d75818e95a09f928e827a6e69605951443f3830271e150b00000000000000000000000000000000000000000000000000061019232c363f4951565860606060606060605e54524d453b31281e140a0100000000000000000000000000000000010d18242f3a46525e68727f8c949fa8ada49c928d837d77726f6d666a69696a696e71757b818a9298a2abaea2988f82766b6054433a2f24180d01000000000000000205111e2a3744515d6a7784909d9f9f9c8f8376695c504336291d100d0b08030000000000000000000000000004111e2a3744515d6a7784909d9f9f9c8f8376695c504336291d1003000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c100000000815212e3a47535f6a7683909da5ab9e938e817a74706d676a6969696a686e71757b828e929da6a59d9083786c605346392d22170b00000000000000000000000000000000000000000000000000000007121d2b37434e5864717e8a97a1adab9e9184796d6056565656565656565656565656565656565656565656565f6a7683909ca9aea2988b7f7265594f4332281e130800000000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e3125180b020405060606050402000000000000000000000000000000000000000000000006121f2c3844515c666d6f6d686d6f737d87939facaca096877a6e6154473b2e211408000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000010d1925303a444c525457595a5b5c5d5e5b5953484a4c4e4f5050515151515252525965727f8c98a5afa396897c706356493d3023160a000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000714212e3a4754616d7a86929faca89b8e8275695e53463d313939393939393939303946525e6976828f9ca9ab9e9285786c605346392d201306000000000000000000050e172029313940454f54596063676d70727576787879797878777573706d6865605d55504a423c332b231911070000000000000000000009121b22292e3132393939393939392f2e2b272b333b444c545c606d727e868686868073665a4d4039393939392c28231c150c03000000000000000000000000000000000008131e28313c46515b606d79839198a29d948f847b706b625b504a423930271d12070000000000000000000000000000000000000000000000000007111a242d373f464a4c5353535353535353524846423b33291f160c0200000000000000000000000000000000000007131d2a36414d56606d78829096a1a8ada49d959089837f7c797777767677787b7d82868e939fa2aaaea39f92867b6e61594f4431281d130700000000000002080e11141e2a3744515d6a778490939393938f8376695c50433629201b1a18140f0801000000000000000000000004111e2a3744515d6a778490939393938f8376695c504336291d1001000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c1000000006121f2b37434e5863707d89939da6a59e938e86807d7a787776767677787a7e82878f949da5a69d938a7d70655b5044372b1b1106000000000000000000000000000000000000000000000000000000010f1a26313c4653606d7985929eacada1968a7d70646363636363636363636363636363636363636363636363636e7b88949fabac9f92867a6d6054473d3221160c0100000000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e3125180c0e101213131312100e0b0807050200000000000000000000000000000000000004101c2834404a545c6062615e60626b75818e9ba8b2a8968a7d7063574a3d3024170a000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00000005111d2a36414c565e6164656768696a6b68655d534840414243434444444545454d596673808c99a6afa295897c6f6256493c2f231609000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000713202d3946525d6876828f9ca9ac9f92867b6e61584e433b322c292424292c3139424d57616e7b86929faca89b8e8174655b5044372b1f120500000000000000000000050e171f272f343d43484f54555c606366686a6b6c6c6c6c6b6a686664615e5653514b443f38302a211911080000000000000000000000000911181d2124252d2d2d2d2d2d2d2322242c343d454d565d666d747f87929892857b6e6154473b2e2d2d2d2d1f1c17110a03000000000000000000000000000000000000010c161f2a343f45515d676e7c86929fa59f9691857d726d605c544b42392e23180c000000000000000000000000000000000000000000000000000008121b252d343a3e3f4646464646464646453b3a36302921170d0400000000000000000000000000000000000000010e1925303b44505c666e7a849196a0a7afa7a09d95908c8985848383838485878a8e92999da5aeaaa39f918a7e71695f53473d321f160c010000000000050d14191e20212d3744515d6a77838686868686868276695c5043362d2d272724201a130b020000000000000000000004111e2a3744515d6a77838686868686868276695c504336291c140a000000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c10000000030f1a26313c4855606b74818e949da5a59e98928d898785838382838485878a8f93999fa6a49d948e81746c6153493f33271b0a000000000000000000000000000000000000000000000000000000000009151f2c3845515c6673808d9aa4afa99c8f82757070707070707070707070707070707070707070707070707074808d9aa6b0a79b8e8174685d5245392c2013040000000000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e312518191b1d1f1f201f1f1d1b181414110e080200000000000000000000000000000000000c18232e39424a5153555452535964717e8a97a4b1a5988b7f7265584c3f3225190c000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0000000713202d3946525e686d71727374767778756f65594d3d323536373737383835404b556774818e9aa7b2a995887b6e6255483b2f221508000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000005111d2935414c5664717e8b96a1ada3998d80746a60564d443e39352f2f35383c434b545e6973808d99a3aca096897d706353493f33271b0f030000000000000000000000050d151d232932383d44484b5161696b6c6c6c68605c5f5e5d5c5a5754524c47454039342e261e180f080000000000000000000000000000060c11151718202020202020151d2328363e464f575f686d78818c939993877d70695e52463a2d2020202012100c06000000000000000000000000000000000000000000040d18222935404b555f6a717e8a939da7a09792877f746d665c544b4034281c1004000000000000000000000000000000000000000000000000000009131b23292e31323939393939393939382e2d2a251f170f0500000000000000000000000000000000000000000008141f28343f4a545e686e7b8490959fa3abaca7a09d98989291908f90919297979b9fa3abaca7a098928b7f726c61574d42352b210d040000000000050e171e252a2d2e3939424f5b6771777979797979797670665a4e423939393433302b251d140b0100000000000000000003101d2936424f5b6771777979797979797670665a4e42352e261c12070000101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c10000000000a15202c38444f59606d79828e939da0a7a29f9a96979290908f90909297979b9fa4a7a09d928d82786d605a5041382d22170b000000000000000000000000000000000000000000000000000000000004101c2834404b54616e7b87939facac9f93877d7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7d85929fabaca095897c6f63564c4135291d11040000000000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e31252225282a2b2c2d2c2b2a282521201e19140f0a0400000000000000000000000000000007121c2730394044464847464855626f7b8895a2aea6998c7f7366594c403326190d000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0000000714212e3a4754616d7a7e7f8081828485817568584e43372e2c2823282c2f3945515d677783909daaada196877a6d6054473a2d211407000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000010d1924303a4653606d7984919ea7ab9f92877c6f685e564f47454141414045474e555c666e7b86929faba89e9184786c605346392d22170b00000000000000000000000000030b121821272c323839505d697378797979746d665e564e4f4d4a4746413a39352f28231c150c06000000000000000000000000000000000105090b0b131313130e161e272e344048505960696e7a828e939f948c7f736b60574d42362a1e1113130603000000000000000000000000000000000000000000000000071018242f39434e58616c74818e95a0a9a299928b80786d665c5145382c1f13060000000000000000000000000000000000000000000000000000010911181e2224252d2d2d2d2d2d2d2d2b21201e1a140d0500000000000000000000000000000000000000000000020b17232e38424d565f696e7b838d92999fa4acacaaaaa39f9e9d9c9c9d9ea1a9a8acaca8a19e9590867e726d625a50453c3123190f0000000000020d1720293036393b4646464a555f676a6c6c6c6c6c6c69665e54494646464641403c362f261d1308000000000000000000010e1a27333f4a555f676a6c6c6c6c6c6c69665e544b4740382e24190e0200101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d697683908f8276695c4f4336291c100000000003101c27333d45515c676d79818990959b9fa2aaa9a19e9d9c9c9c9d9fa2a9aaa29f9b95908a80786d665c51473e2f261b11060000000000000000000000000000000000000000000000000000000000000c18232e3946535f6976828f9ca9afa499938a89898989898989898989898989898989898989898989898989899297a2adaa9d9084776b6054443a2f24190d010000000000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e312d2e32353738393939383735312e2d2a251f1b150d070100000000000000000000000000000b151e272e34383a3c3a3a4754606d7a8793a0b5a69a8d8073675a4d4034271a0d000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0000000815212e3b4854616e7b878c8d8e8f909184786a6054473f3a38342e34383a404b55606d7a86929facab9e918578675d5145392c201306000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000008131f2c3845515c67727f8b95a0aba39991847a6e68615954514c4e4e4b5153575f676d78839098a2aca0968b7f72665b5044382b1b1106000000000000000000000000000001070c161b21273845525f6b788586868681786d685f584f473f3a3936302c29241d17110a03000000000000000000000000000000000000000000000600070f18202830394045525a616b6f7b838f949d968f82776c60594f453b30251a0e020600000000000000000000000000000000000000000000000000000007121d28313c46505a606d7983909893939393928d82796d6053463a2d20130700000000000000000000000000000000000000000000000000000000060d1216181920202020202020201f1514120e090200000000000000000000000000000000000000000000000006111c26303b444d575f696e7880878f939a9ea1a8a7a9aaaaaaa9a9aaaaa9a8aaa39f9c96918b837c716c625b51483e332a1f1107000000000008141e29323b4146535353535353555b5d6060606060605c5a545353535353534e4c4841382f251a0f030000000000000000000a16222e39434d555b5d6060606060606060605a57524a40352a1f130700101c2936434f5c6976828f908376695d5043362a1d10030000000000000000000000000000000000000000000000010507070b0b0b0b0b0b0b101d2a3643505d697683908f8276695c4f4336291c1000000000000b16212834404b555c676d747d838a8e9298989a9c9d9e9f9f9f9e9e9c9a9898928e8a837d746d665c544a40352c1d140a0000000000000000000000000000000000000000000000000000000000000007121d2a36424d5764707d8a96a1adaba49f9796969696969696969696969696969696969696969696969696969fa2a9aea2988b7f7265594f4332281e1308000000000000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e373a3b3f4143454646464543413e3b3936302b272018130c0400000000000000000000000000030c151c23282c2d2f2e3a4653606d798699a3afa79a8d8074675a4d4134271a0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0000000714212d3a46535e697884919a9b9c9d96897c6f625a504a464440434044464b515c67717e8b98a3aeaa9b8f827568554b4135291d1104000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000004101c2834404b55606d78839099a3aba09690837a706b64605d555b5b555d60636a6e79818e959faaa49a9184796d60544a3f33281c0a0000000000000000000000000000000000040a0f1926323f4c5965727f8c93938e827a6f6a6159514440393028201d18120c0600000000000000000000000000000000000000000000000000071019212a323a434b515b636c717d8591959f9991847a6d655b50473d33291f14090000000000000000000000000000000000000000000000000000000000010c161f2a343e45515c676e7b8586868686868686867a6e6154473b2e21140800000000000000000000000000000000000000000000000000000000000106090b0c131313131313131312080705020000000000000000000000000000000000000000000000000000000a141e29323c454d575e666d737c82878d9196989a9c9d9e9f9f9f9f9e9c9b9998928f8a847f786f6a625a51493f362c21180e0000000000020e1925303b444c525f6060606060605d5b5553535353534f54566060606060605a58534a41362b20140800000000000000000006111c27313b434a4f5153515a61646c6c6c6c66635c52473b2f23170a00101c2936434f5c6976828f908376695d5043362a1d100300000000000000000000000000000000000000000002080d11131417171717171717171d2a3643505d697683908f8276695c4f4336291c100000000000050c18232e39434b555c606b6f787d8185898b8e9091919292929191908e8c8985827d77706b605c544b42392e231a0b0200000000000000000000000000000000000000000000000000000000000000000e1a26313b4653606d7984919eabb5afaca3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3abadb3ac9f92867a6d6054473d3221160c01000000000000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e4246484c4e505252535252504e4b4746413b373229241d160d0500000000000000000000000000030b12181c1f20222c3844505c667986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00000005121e2a36424d576774818e9aa6a9a89b8e81756c605c5453514a504a5153555d606d7983919daaaea2988b7e7165584b3e2f24180d01000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000c18232e3944515c666f7c87929fa4a8a09590847d76716d6769676869676d70757b838e939ea7a59f93887d70665c5142382d22170b000000000000000000000000000000000000000b1825313e4a56626d75818f969490847c706b625b514a423a322a2119110600000000000000000000000000000000000000000000000000040f19222b333c444c555c606d737e869297a09f92877c6f685d53493f352b20170d02000000000000000000000000000000000000000000000000000000000000040d18222934404b555f696e78797979797979797976685e5246392d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c17202a333c454d545c606a6f757b8084888b8d8f91929293929291908e8c8986827d79726d665f5850483f372d241a0f06000000000005111e2a36414c565e6c6c6c6c6c6c6c6a675f554a46444f5960636c6c6c6c6c6c67645c53483c3024180b0000000000000000000008101f2931323a424a505b636c7079797979736e63574b3f3226190c00101c2936434f5c6976828f908376695d5043362a1d10030000000000000000000000000000000000000000050d13191e20212424242424242424242a3643505d697683908f8276695c4f4336291c1000000000000007121d273039434b515960666c7075797c7f81838485858685858483817f7d7975706b636159514b423930271c110800000000000000000000000000000000000000000000000000000000000000000009141f2c3844505c6673808c99a3afbbb9b1acaa9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa7a9afb8bab1a79b8e8174685d5245392c20130400000000000000000916222f3c4955626f7c8895a2afa4978b7e7164584b464d5355585b5d5e5f605f5e5d5b5854524d47433d352f281f170f050000000000000000000000000000070c1012131c28343f4a5f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000020e1a25313c4855626f7c88949faaaa9e938a7e726d6662605c545d545c6062676d75808d95a0aca99f92867a6d6154473a2e21140700000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000007121d2834404a54606a727f8c929ca4a7a096918a827d7a7775747475767a7d818790959ea5a59e938d80736b60544b402f261c1106000000000000000000000000000000000000000916222e3a46515b606d7a8491989691867d726d605c544c443c332b2317110a0200000000000000000000000000000000000000000000000a16212b343d454d565e676d757f8a9298a19e938b7f726a60564c41382d23190e050000000000000000000000000000000000000000000000000000000000000000060f18232f39434d575f616c6c6c6c6c6c6c6c6c6c5e564c41362a1e1105000000000000000000000000000000000000000000000000000000000000000000000000020608080c0e111212131312110e0c080705020000000000000000000000000000000000000000050e18212a333b424b51585f626a6e73787b7e80828485858686858483817f7c7975716d66605c544e463f362d251b12080000000000000714202d3946525e68767979797979797771675b4f434854606b70797979797979746e64584c4033271a0d00000000000000000007121a222b333b444c545c606d727e868686868073665a4d4033271a0d00101c2936434f5c6976828f908376695d5043362a1d100b0b0b0b0b0b0b07070501000000000000000000050e171e252a2d2e313131313131313131313643505d697683908f8276695c4f4336291c10000000000000000b151e27303940454f545b6063676d7072747677787879797877767472706d66636159554f45403930271e150b0000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54616e7b87929facb9b1a7a0939393939393939393939393939393939393939393939b9ea5afb8aca095897c6f63564c4135291d110400000000000000000916222f3c4955626f7c8895a2afa4978b7e7164585053575f6165686a6b6c6c6c6b6a6864615e56544e45403a312921170f0500000000000000000000000000000004060c17232e46535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000915212e3b47535f6a76828f98a2aea59f92877f78726f6d666a696a666d6f7379818d929da7aca2978d8074685d5246392d20130700000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000c18232e39424e58626d73808c929ea1a8a19e948f8a8683828181828386898e93999fa7a39f938f81786d60594f42392e1d140a000000000000000000000000000000000000000006121e29353f45525d686f7c86929f9892877f746d665d564d453d3528231c140c03000000000000000000000000000000000000000000030f1b27323d464e575f686d79818c929fa3a0958e81756d62584e443a2f261b11080000000000000000000000000000000000000000000000000000000000000000000007121d27313c454d53555f60606060606060605f524c443b3025190e020000000000000000000000000000000000000000000000000000000000000000000003090e121415191b1d1e1f201f1f1e1b191514120e090300000000000000000000000000000000000000060f182129303940454e53575f6266696e71747677787979797877767572706d6764605c54504a423c342d241b1309000000000000000814212e3b4754616e7a86868686868683776a5d5144495663707d8686868686868074675a4e4134271b0e00000000000000030b1218242c343d454d565d666d747f87929892857b6e6154473b2e21140800101c2936434f5c6976828f908376695d5043362a1d17171717171717171413110d0802000000000000020d1720293036393a3e3e3e3e3e3e3e3e3e3e3e43505d697683908f8276695c4f4336291c1000000000000000030c151e272e343d424a5053555d60636567696a6b6c6c6c6b6b69676563605c54554f48443e342e271e150c0300000000000000000000000000000000000000000000000000000000000000000000000c17232e3846525e6975828f9ca8b2aca095898686868686868686868686868686868686868686868e939ea9b4aa9d9084776b6054443a2f24190d0100000000000000000916222f3c4955626f7c8895a2afa4978b7e7164545c6064696e72747678797979787674716e68626058514b433b332921170d030000000000000000000000000000000013202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0000000006121f2b37434e58626f7c86929fa4aca399928b837f7b797777767777797c80858e939da4aea49a92857a6d61564c4135291d110500000000000000000000000000000203101d2a3643505d69768390908376695d5043362a1d100302000000000000000000000007121c27303d46515b646e73808a92979fa3a69f9c9992908f8e8e8f9092989b9fa4a69f99928c81786d665c50473d30271d0b020000000000000000000000000000000000000000010d18232935414c565f6a727e8b939e99938c81786d685f574f473f342e261e150c03000000000000000000000000000000000000000007131f2c38434e5860696e7a828e939ca4a2989183796d605b51463d32281d140a0000000000000000000000000000000000000000000000000000000000000000000000010b151f2a333c4246485253535353535353535346413b32291e1408000000000000000000000000000000000000000000000000000000000000000000060c11151a1e212226282a2b2c2c2c2b2a282522211e1a14100b05000000000000000000000000000000000000060f171e272e343c43474e5355575f626567696a6b6c6c6c6c6b69686663605c5553504a443f38302a221b120901000000000000000814212e3b4754616e7a87939393939084776a5d5144495663707c89939393938d8174675a4e4134271b0e000000000000050c151d2328363e464f575f686d78818c939993877d70695e52463a2d20140700101c2936434f5c6976828f908376695d5043362a24242424242424242421201e19130d05000000000008131e29323a4146474a4a4a4a4a4a4a4a4a4a4a4a505d697683908f8276695c4f4336291c100000000000000000030c151d23282f383f44464b515356585b5d5e5e5f5f5f5e5e5d5b595653514b48443e383328231d150c0300000000000000000000000000000000000000000000000000000000000000000000000006111c2a36424d5763707d8a96a1acaa9d9083797979797979797979797979797979797979797979818e9ba7aea2988b7f7265594f4332281e13080000000000000000000916222f3c4955626f7c8895a2afa4978b7e716460666d71777b7f8183858586858583817e7b756f6a605d554d453b33291f150b0100000000000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00000000030f1b26323c47535f6a717e8b939aa2aaa39f95918c8886848483838485898c92979ea5aaa39f93887d70685e52443a3024190d01000000000000000000000000050a0f12101d2a3643505d69768390908376695d5043362a1d10120f0a05000000000000000000000b151e2b343f49525c646e737e858e92999ea1a8a39f9d9c9a9b9c9d9fa3a9a29f9b948f877f776d665c544a3f352c1e150b00000000000000000000000000000000000000000000070d19242f3a434e58626d75818e95a09f928e827a6e69605951443f3830271e150b00000000000000000000000000000000000000000915222e3b4854606a6f7b8490949ea5a49f92867c6e675d51493f342b20160b02000000000000000000000000000000000000000000000000000000000000000000000000030d18212a31373a3b4546464646464646463b3936302920170d020000000000000000000000000000000000000000000000000000000000000002090e171d1f262b2e2f32353738393939383735322e2d2b261f1c160c07010000000000000000000000000000000000050c151d232831373c4247484d5355585a5c5e5f5f605f5f5e5d5b595653514b46443f38342e261e1810090000000000000000000814212e3b4754616e7a87949f9f9d9084776a5d5144495663707c89969f9f9a8d8174675a4e4134271b0e0000000000060e161e272e344048505960696e7a828e939f948c7f736b60574d42362a1e110500101c2936434f5c6976828f908376695d504336313131313131313131312e2d2a251e170e05000000010d1925303a444c5254575757575757575757575757575d697683908f8276695c4f4336291c10000000000000000000030b12181d262d333839404547494c4e5051525253525251504e4c4a4645403938332c282118120b0300000000000000000000000000000000000000000000000000000000000000000000000000000e1a25303b4653606c7884919eabaca095897c6f6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6d7a86929facac9f92867a6d6054473d3221160c010000000000000000000916222f3c4955626f7c8895a2afa4978b7e71646a6f787e83888b8e909192939291908e8b86827c746d675e574d453b31271d120700000000000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00000000000a15202b37434e58616c727f8892989fa3a7a09d99999291909090919298999ea2a9a69f98928b7f726c61564c4132281e13080000000000000000000000010910161b1e20202a3643505d69768390908376695d5043362a20201e1b161009010000000000000000030c19222d37404a525c636c717a81868d9196989b9c9e9f9f9f9f9e9d9b9997928e89827c736c655c544b42382e231a0c03000000000000000000000000000000000000000000000008131e28313c46515b606d79839198a29d948f847b706b625b504a423930271d1207000000000000000000000000000000000000000916232f3c4956626f7c85919693939393928a7e716a5f554b40372d22190e040000000000000000000000000000000000000000000000000000000000000000000000000000060f181f262b2d2e3939393939393939392e2d2a251e170e0500000000000000000000000000000000000000000000000000000000000000050d141a22282d31373a3b3f4144454546464544413f3b3a37312c272118120b030000000000000000000000000000000000030b121820262b31373a3c4247484b4d4f51525253535251504e4c494745403a38342e28231c140c06000000000000000000000814212e3b4754616e7a8794a1aa9d9084776a5d5144495663707c8996a3a79a8d8174675a4e4134271b0e00000000070f18202830394045525a616b6f7b838f949d968f82776c60594f453b30251a0e0200101c2936434f5c6976828f908376695d50433e3e3e3e3e3e3e3e3e3e3e3a3936302920170d02000005111e2a36414c565e616464646464646464646464646464697683908f8276695c4f4336291c100000000000000000000000070b141c22282b2f35383a3d3f41434445454646454443413f3d3a38342e2c28211c160c070000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2b3844505b66727f8c99a3aea79a8d8174675c606060606060606060606060605765717e8b98a2aea79b8e8174685d5245392c201304000000000000000000000916222f3c4955626f7c8895a2afa4978b7e716c717c838b9095989b9d9e9f9f9f9e9d9b99928f8781796e695e574d43392f23180c03000000000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0000000000040f1a26313c46505a636d727e868e92999da0a8aba39f9e9d9c9d9e9fa2aaaaa29f9b948f867e726d62594f443a3020160c0200000000000000000000010a131b21272b2d2d2d3643505d69768390908376695d5043362d2d2d2b27211b130a01000000000000000007101b252e38404a525a61686d747b8084888b8e90919292929291908e8c8985817c766f6a605b534b423930261c1108000000000000000000000000000000000000000000000000010c161f2a343f45515d676e7c86929fa59f9691857d726d605c544b42392e23180c000000000000000000000000000000000000000d1a2633404d59667380868686868686868680746c61574e43392f251b100700000000000000000000000000000000000000000000000000000000000000000000000000000000060e141a1e21222c2d2d2d2d2d2d2d2d21201e19140d0500000000000000000000000000000000000000000000000000000000000000060f171f252a34393c4247484c4e505152535252514e4c4846423c383329241d150d03000000000000000000000000000000000000070c151b20262b2e31373a3b3e41434445464646454443423f3d3a38342f2c28231c17110a0200000000000000000000000814212e3b4754616e7a8794a1a99d9084776a5d5144495663707c8996a3a79a8d8174675a4e4134271b0e000000071019212a323a434b515b636c717d8591959f9991847a6d655b50473d33291f14090000101c2936434f5c6976828f908376695d504a4a4a4a4a4a4a4a4a4a4a4a4746413a32291e130800000713202d3946525e686d7171717171717171717171717171717683908f8276695c4f4336291c10000000000000000000000000020a11171c1f24292c2d3032343637383939393838363432302d2c28231d1c16100b050000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a54616e7a86929facab9f9285796d60535353535353535353535353535f697683909caaaca095897c6f63564c4135291d1104000000000000000000000916222f3c4955626f7c8895a2afa4978b7e71717e8790959da09e9c9b9a9b9c9ea1a9aba39f9a938e847b6e695e554b403429201509000000000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0000000000000a15202a343e48515b636c717b81878c919597999c9d9e9e9f9f9f9e9d9b9998928e89827b716c625b51473e32281e0e04000000000000000000000009131c252c33373939393943505d69768390908376695d50433939393937332c251c130900000000000000000009131c262e38404850565e61696e73787c7e818384858686858583817f7c79746f6a625f585049413930271e150a0000000000000000000000000000000000000000000000000000040d18222935404b555f6a717e8a939da7a09792877f746d665c544b4034281c10040000000000000000000000000000000000000c1925323f4b57636d737979797979797979746e645a50453c31281d120900000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e1214151f20202020202020201414110e080200000000000000000000000000000000000000000000000000000000000000060f18212930363e45494d5355595b5d5e5f5f5f5e5d5b5855534d48443d352f271f150d03000000000000000000000000000000000000030a0f151a1e21262b2e2f32343637383939393938363533302d2c29231f1c17110b06000000000000000000000000000814212e3b4754616e7a87949c9c9c9084776a5d5144495663707c89969c9c9a8d8174675a4e4134271b0e0000040f19222b333c444c555c606d737e869297a09f92877c6f685d53493f352b20170d020000101c2936434f5c6976828f908376695d5757575757575757575757575754524c443a3025190d01000714212e3a4754616d7a7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7e83918f8276695c4f4336291c100000000000000000000000000000060b0f12181d1f202325282a2b2b2c2c2c2b2b2a282623201f1c1812100b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3846525e6875828e9ba8ada2978a7e7164574d42464646464646463f4a54626e7b88949fabaa9d9084776b6054443a2f24190d01000000000000000000000916222f3c4955626f7c8895a2afa4978a7e717e8892999e9896918f8e8d8e8f92979b9fa4aca49f9691847b6e675c51453c31261a0e020000000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000030e18222d363f49515a61696e747b8084888b8d8f90919292929291908e8c8985817c766e69615a51493f352c20160c000000000000000000000005101b252e373e434646464646505d69768390908376695d504646464646433e372e251b10050000000000000000010a141c262e363e444c52575e61666a6f7274767878797978787675726f6d66626058534e443f382f271e150c03000000000000000000000000000000000000000000000000000000071018242f39434e58616c74818e95a0a9a299928b80786d665c5145382c1f13060000000000000000000000000000000000000a16232f3b47525b63666c6c6c6c6c6c6c6c67645c52483e332a1f160c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002050708121313131313131313080705020000000000000000000000000000000000000000000000000000000000000000030d18212a333b42465055575f6265686a6b6c6c6c6b6a6865615f57544f45403931271f150b010000000000000000000000000000000000000003090e12151a1e21222527292b2c2c2d2c2c2b2a282623201f1c1812100c060000000000000000000000000000000814212e3b4754616e7a878f8f8f8f8f84776a5d5144495663707c898f8f8f8f8d8174675a4e4134271b0e00000a16212b343d454d565e676d757f8a9298a19e938b7f726a60564c41382d23190e05000000101c2936434f5c6976828f908376696464646464646464646464646464615e564c41362a1e1105000a1723303d4a5663707d898a8a8a8a8a8a8a8a8a8a8a8a8a8a8a91958f8276695c4f4336291c100000000000000000000000000000000003070c10131416191b1d1e1f1f201f1f1e1d1b19171313100c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2a36414c5663707d8996a0aca99c8f8276695e5246382d393939393844505c6673808d99a6aea2988b7f7265594f4332281e130800000000000000000000000916222f3c4955626f7c8895a2afa4978a7e7c86929a96918c8784828181818285898e939aa1a9a8a0969083796d60574e42372b1f14090000000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b989f9f998d8073665a4d4033271a0d0000000000000006101b242e373f4850575e61696e73777b7e80828484858686858583827f7d79756f6b625f5750483f372d231a0e0400000000000000000000000a16212c3740494f5353535353535d69768390908376695d5353535353534f4940372c21160a000000000000000000020a131c242c323a41464d5254585f626568696b6c6c6c6c6b6a686663605c54544e47433c332d261d150c03000000000000000000000000000000000000000000000000000000000007121d28313c46505a606d7983909893939393928d82796d6053463a2d20130700000000000000000000000000000000000007131e2a35404952575960606060606060605a58524a40362c21180d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151f2a333c454d525a6164696e72747778787979787774726e69636059514b433931271d12070000000000000000000000000000000000000000000206090e121415181a1c1e1f1f20201f1e1d1b19161413100c070300000000000000000000000000000000000714212d3a4754606d7a8283838383838174675b4e414855626f7c8283838383827f7265584c3f3225190c00030f1b27323d464e575f686d79818c929fa3a0958e81756d62584e443a2f261b110800000000101c2936434f5c6976828f9083767171717171717171717171717171716d685e5246392d201307000a1723303d4a5663707d8993939393939393939393939393939393938f8276695c4f4336291c10000000000000000000000000000000000000000406070a0c0e1011121213131211100e0c0a07060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1925303b4854606b7784919daaac9f93877b6e6153493f33272d2d2d3a4653606d7984919eabac9f92867a6d6054473d3221160c0100000000000000000000000916222f3c4955626f7c8895a2afa3978a7e839098938d847f7b777574747476797c81889297a1a9a89f958d80736a5f53473b30251a0e0200000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8b939393938d8073665a4d4033271a0d000000000000000009121c252e363e454d52575f62666a6e71737577787879797978777573706d67636059534d453e362d251b11080000000000000000000000000f1b27333e49525a5f60606060606069768390908376696060606060605f5a52493e33271b0f00000000000000000000010a121a202830363b4246484e5355585b5d5e5f5f5a61646c6c6c6c66635c52473d373127221b140b03000000000000000000000000000000000000000000000000000000000000010c161f2a343e45515c676e7b8586868686868686867a6e6154473b2e211408000000000000000000000000000000000000020d19242e3740474b4d53535353535353534d4c4740382f241a0f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000030613131313131313130d0c0a07020000000000000000000000000003060809131313131313130b0b090501000000000000000007121d27313c464e575e616c71777b7f8183848586858584817f7b76706b605d554b43392f23180c040000000000000000000000000000000000000000000000020608080b0e1011121313131211100f0c0a07060400000000000000000000000000000000000000000713202c3945525d686d767676767676746f64584c4047535f6a6f767676767676726d62564a3e3125180b0007131f2c38434e5860696e7a828e939ca4a2989183796d605b51463d32281d140a0000000000101c2936434f5c6976828f91837e7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7a6d6154473a2e211407000a1723303d4a5663707d868686868686868686868686868686868686868276695c4f4336291c1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141e2c38444f5965727f8c98a3aea4998c7f73655b5044372b1f2a36414c5663707d8a97a1ada79b8e8174685d5245392c2013040000000000000000000000000916222f3c4955626f7c8895a2afa89b8e818e9593878079726e6969686768656c6f757d859297a2ada79f92877b6e62574d42362a1e110500000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000c1925323f4c5865727f8686868686868073665a4d4033271a0d0000000000000000000a131c242c333b42464d5355575f626466696a6b6b6c6c6c6b6a686663605d55544f47423c332d241b130900000000000000000000000000121e2b37434f5a646c6c6c6c6c6c6c6c7683909083766c6c6c6c6c6c6c6c645a4f43372b1e12000000000000000000000000080e161e252a30363a3c4347484b4e504a505b636c7079797979736e63574b3f32262017110a020000000000000000000000000000000000000000000000000000000000000000040d18222934404b555f696e78797979797979797976685e5246392d2014070000000000000000000000000000000000000007121c252e353b3f404646464646464646413f3c362f261d12080000000000000000000000000000000000000000000000000000000000000000000000000000000000060c101220202020202020201a1917130e0800000000000000000000040a0f13151620202020202020181715110c06000000000000000c18242f39434e585f696e767e83888c8e909192929291908e8b87827d746d675d554b40342920150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c565d6069696969696967645c53483c434e585f6269696969696965625b51463a2e221609000915222e3b4854606a6f7b8490949ea5a49f92867c6e675d51493f342b20160b020000000000101c2936434f5c6976828f95918a8a8a8a8a8a8a8a8a8a8a8a8a8a8a897d7063564a3d3023170a000916222f3c4854606b70797979797979797979797979797979797979797670665a4e4135281c0f00000000000000000000000000000000000003080b0d0e13131313131313131313131313131313131313131313131313131313131313131311100e0a06000000000000000000000000000000000000000000000000000000000002101c27333d4754616d7a86929facab9e9184786c6053463a2f242d3946525e6875828f9ba9aca095897c6f63564c4135291d11040000000000000000000000000916222f3c4955626f7c8895a2afaa9e938e9393877e736d67615e575b5a535b60626b707c85929fa6afa3998e8175695e52463a2d20140800000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000b1825313e4a56626d72797979797979736e63584b3f3226190c000000000000000000010a121a212930363c4247485761696b6c6c6c68605c5f5f5e5d5b595653514b48433d37312a211b1209010000000000000000000000000013202d3946535f6c767979797979797979839090837979797979797979766c5f5346392d201300000000000000000000000000050c13191f252a2d32373b3c3f444c545c606d727e868686868073665a4d4033271a0b060000000000000000000000000000000000000000000000000000000000000000000000060f18232f39434d575f616c6c6c6c6c6c6c6c6c6c5e564c41362a1e110500000000000000000000000000000000000000000a131c242a2f323339393939393939393433302b241d140b00000000000000000000000000000000000000000000000000000000000000000000000000000000030a11171c1f2d2d2d2d2d2d2d2d2726231f19120a0200000000000000070f161b1f22232d2d2d2d2d2d2d2524211d181109000000000004101d2935404b555f6a6e7b838a9095989b9c9a989898999c9b9a938f8981796d675c51453d32271b0f00000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1924303a444c52545c5c5c5c5c5c5b58534a41363c464e53555c5c5c5c5c5c585651493f34291e1206000916232f3c4956626f7c85919693939393928a7e716a5f554b40372d22190e04000000000000101c2936434f5c6976828f9393939393939393939393939393939393897d7063564a3d3023170a000713202c38444f5960636c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c69665e54493d3225190d0000000000000000000000000000000001080f14181a1b2020202020202020202020202020202020202020202020202020202020202020201e1d1a16110b04000000000000000000000000000000000000000000000000000000000b16202d3946525d6875818e9ba7aca096897c7063554b4135292e3a4754616d7a86929facaa9d9084776b6054443a2f24190d010000000000000000000000000916222f3c4955626f7c8895a2afafa59e9b958c7f736c605c55524d4e4e49505359606a717e8a949fabab9f92877b6e6154473b3025190e02000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000916222e3a46515b62656c6c6c6c6c6c66635c52473b2f23170a0000000000000000000000080f171f252a313744505d697378797979746d665e564e504f4c4a4745403938322b2620180f0900000000000000000000000000000013202d394653606c798686868686868686909494908686868686868686796c605346392d2013000000000000000000000000000002080d141a1e20262b343d454d565d666d747f87929892857b6e6154473b2e2114080000000000000000000000000000000000000000000000000000000000000000000000000007121d27313c454d53555f60606060606060605f524c443b3025190e020000000000000000000000000000000000000000010a12191e2325262d2d2d2d2d2d2d2d2726241f19130b02000000000000000000000000000000000000000000000000000000000000000000000000000000030c151c23282c393939393939393933322f2a241c140a00000000000007101920272b2e2f3939393939393932312e29221b12090000000006131f2c3945515d676e7c8490959d9d9993908d8b8b8b8d8f92999f9c938e82796d60584e43372b1c110600000000000000000000000106090b0c0e06060300000000000000020405060605040200000000000002070a0c0d0b0b0905010000000000000000000000000008131e28323a4145475050505050504e4c4841382f343c4347485050505050504c4a463f372d23180d01000d1a2633404d59667380868686868686868680746c61574e43392f251b100700000000000000101c2936434f5c697682868686868686868686868686868686868686867d7063564a3d3023170a0004101c27333d474f5456606060606060606060606060606060606060605c5a544c42382c211509000000000000000000000000000000020b131a202427272d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2a2927221c150d0500000000000000000000000000000000000000000000000000000005111d2935414c56636f7c8995a0aca89b8e8174675d5145392c37434e5865727f8b99a3aea2988b7f7265594f4332281e1308000000000000000000000000000916222f3c4955626f7c8895a2afb7afa89d9083786d605a514b464241413f44464f58616c76828f9ca9afa3998c7f7266564c41362a1e1105000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000006121e29343f495156586060606060605a58524a40362a1f1307000000000000000000000000050d141a1f263845525f6b788586868681786d685f584f47403d3a38352f2c27211a150e060000000000000000000000000000000013202d394653606c798693939393939393969696969393939393939386796c605346392d201300000000000000000000000000000000050c151d2328363e464f575f686d78818c939993877d70695e52463a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000010b151f2a333c4246485253535353535353535346413b32291e14080000000000000000000000000000000000000000000000070d1316191a20202020202020201a1a17130e0801000000000000000000000000000000000000000000000000000000000000000000000000000000000a151e262e34384646464646464646403f3b362e261c120800000000040f19222b32383b3c464646464646463e3d3a342d241b1106000004111d2935414c55606d798391969f9b938e8783807f7e7f8082878f949e9d948e81746a605447382e23170b00000000000000000000070d121618191b13120f0b06000608080c0e1112131312110f0c09080603080e1317191a181715110c06000000000000000000000000020c1620283035393a43434343434341403c362f262a32373b3c4343434343433f3e3a342d251b110700000c1925323f4b57636d737979797979797979746e645a50453c31281d120900000000000000000f1c2835414e5a66707679797979797979797979797979797979797979706b6054483c2f22160900000b16212b353d44484a535353535353535353535353535353535353534f4e49423a30261b10050000000000000000000000000000010b141d252b3033343939393939393939393939393939393939393939393939393939393939393939393736332e271f170d040000000000000000000000000000000000000000000000000000010d1924303a4854606b7783909daaac9f92857a6d6054473c313b4754606a7783909dabac9f92867a6d6054473d3221160c01000000000000000000000000000916222f3c4955626f7c8895a2afb9ada1968a7d70665c5045403936302d33373d46505a63707d8a97a1adab9d908377685e5246392d201407000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000d1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000010d18232d373f464a4c5353535353534d4b4740382e24190e020000000000000000000000000002090e1926323f4c5965727f8c93938e827a6f6a6159514440393029241d1b160e0903000000000000000000000000000000000013202d394653606c798693928d89898989898989898989898989898986796c605346392d2013000000000000000000000000000000060e161e272e344048505960696e7a828e939f948c7f736b60574d42362a1e11050000000000000000000000000000000000000000000000000000000000000000000000000000030d18212a31373a3b4546464646464646463b3936302920170d0200000000000000000000000000000000000000000000000002070a0c0d13131313131313130e0d0b0703000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2630383f4453535353535353534d4b4740382e24190e020000000a16202b343d434749535353535353534b4a453f362d22180c01000613202c3945515d6773808d95a09b918c817b767372717273767b828f939e9f93877c6f62544a3f34281c100300000000000000010911181e22252628201f1c17110e121415181b1e1e1f201f1e1c191615130f12191f2326272524211d181109000000000000000000000000040e161e24292c2d3636363636363433302b251d20262b2e2f36363636363632312e29231b13090000000a16232f3b47525b63666c6c6c6c6c6c6c6c67645c52483e332a1f160c0000000000000000000d1925323d49545e66696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6360594f44382c2013070000050f19232b33383c3d4646464646464646464646464646464646464643413d3830281e140a00000000000000000000000000000008131d262f363c404146464646464646464646464646464646464646464646464646464646464646464644423f3931291f150b00000000000000000000000000000000000000000000000000000008131e2c38434f5965727f8b98a2aea2988b7e7165574d4237404b55626f7c8895a0aca79b8e8174685d5245392c20130400000000000000000000000000000916222f3c4955626f7c8895a2afb7ab9e9184786c60544a3f342e2a2522272b343e4653606c7885919eabac9f93877a6e6154473b2e211408000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000002090e1a2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000007111b252d343a3e3f464646464646403f3b362e261c1208000000000000000000000000000000000b1825313e4a56626d75818f969490847c706b625b514a423a322a211911060000000000000000000000000000000000000013202d394653606c7986938d807d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7063564a3d3023170a0000000000000000000000000000070f18202830394045525a616b6f7b838f949d968f82776c60594f453b30251a0e02000000000000000000000000000000000000000000000000000000000000000000000000000000060f181f262b2d2e3939393939393939392e2d2a251e170e050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17232e38424a505f606060606060605a58524a40362a1f13070000030f1b27323d464e545660606060606060585650483f34291d1105000714212d3a4754606d7a85929f9e948c7f746e696765656566696e78818f98a39a8e8175665c5044382b1f12060000000000000009131b23292e3132352d2b28221c1a1e212225282a2b2c2c2b2a282622221f1b1c242a2f323332312e29221b1209000000000000000000000000040c13191d2021292929292929282724201a13151b1f21222929292929292525221e1811090100000007131e2a35404952575960606060606060605a58524a40362c21180d040000000000000000000915212c38424c545a5c6060606060606060606060606060606060606056544f473d33271c100400000008111921272c2f30393939393939393939393939393939393939393635322c261e160c020000000000000000000000000000030f1a252f3841484c4e535353535353535353535353535353535353535353535353535353535353535353514f4a433b31271c11060000000000000000000000000000000000000000000000000000020f1b27323d4754606d7a86929facaa9c908376695f53473845515c6774808d9aa7aca095897c6f63564c4135291d110400000000000000000000000000000916222f3c4955626f7c8895a2afb6ac9a8d8073665b5042382e231d1a171b222b3744505b6574818e9ba7afa49a8a7e7164574b3e31241807000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000040a0f141a1e2633404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000009131b23292e313239393939393933322f2a241c140a00000000000000000000000000000000000916222e3a46515b606d7a8491989691867d726d605c544c443c332b2317110a02000000000000000000000000000000000013202d394653606c7986938b7e727070707070707070707070707070706b6054483c2f22160900000000000000000000000000071019212a323a434b515b636c717d8591959f9991847a6d655b50473d33291f14090000000000000000000000000000000000000000000000000000000000000000000000000000000000060e141a1e21222c2d2d2d2d2d2d2d2d21201e19140d05000000000000000000000000000000000000000000000000000000000000000000000000000000000001070b0f1112131313131313130a090704000001070b0f1112131313131313130a0907040000000000000003101c28343f4a545c6c6c6c6c6c6c6c6c66635c52473b2f23170a000006131f2b38434e5860626c6c6c6c6c6c6c65625a50453a2e211509000b1825323e4b5865717e8b989e9c8f82756d615e57585858575e666e7b86929f9e9285786d6053463a2d20130700000000000009121b252d353a3e3f413938332d26262b2e2f323537383939383735322f2e2b27262e353b3f403e3d3a342d241b120900000000000000000000000002080d1113141d1d1d1d1d1d1b1a18140f080a0f1215151d1d1d1d1d1d191816120d070000000000020d19242e3740474b4d53535353535353534d4c4740382f241a0f060000000000000000000005101b26303a42494e4f535353535353535353535353535353535353534a48443d352b21160b0000000000080f161c2022232d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d292825211b140c040000000000000000000000000000000814202b36414a53585a6060606060606060606060606060606060606060606060606060606060606060605d5b554d43392e22160a0000000000000000000000000000000000000000000000000000000a16202c3945515d6774818e9aa7ab9f94887b6e62544a3f4653606d7985929fabaa9d9084776b6054443a3024190d0100000000000000000000000000000916222f3c4955626f7c8895a2afafa49a897d7063544a3f30261c120e0b0f1b27333f495364717e8b97abb5ac9a8d8073675a4d402e23180c000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0000000000000000000002080d161b1f252a2d33404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000010911181e2225252d2d2d2d2d2d2726231f19120a02000000000000000000000000000000000006121e29353f45525d686f7c86929f9892877f746d665d564d453d3528231c140c030000000000000000000000000000000013202d394653606c7986938b7e7265636363636363636363636363636360594f44382c201307000000000000000000000000040f19222b333c444c555c606d737e869297a09f92877c6f685d53493f352b20170d0200000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e1214151f20202020202020201414110e08020000000000000000000000000000000000000000000000000000000000000000000000000000000000050c12171b1e1f20202020202020171613100b050c12171b1e1f20202020202020171613100b05000000000006121f2c3844505c667679797979797979736e63584b3f3226190c00000815222e3b4754606a6f79797979797979716c62564a3d3124170b000e1b2835414e5b6874818e909192897c6f635b524d4c4b4c4d545e6976828f9ca297887b6e6155483b2e221508000000000009121b252d373f464a4c4e46443f382f31373a3b3f41444546464544423f3c3b37322c3840474b4d4b4a453f362d241a120800000000000000000000000000010407071010101010100e0d0b08030000030608091010101010100c0b0906010000000000000007121c252e353b3f404646464646464646413f3c362f261d12080000000000000000000000000a141e2830383d4143464646464646464646464646464646464646463d3c38332b23190f05000000000000050b10131617202020202020202020202020202020202020201c1c1915100a02000000000000000000000000000000000b1824303c48535c64676c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a675f554a3f33271a0e00000000000000000000000000000000000000000000000000000004111d2935414c55626f7c88959faba6998d8073665c50444d5764717e8a97a2ada2988b7f7265594f4332281e13080000000000000000000000000000000916222f3c4955626f7c8895a2afac9f93867a6d6053473a2d20140a00000b17222d3c4855626f7b8899a4afa99c8f837669554b4034281c10040000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000050c131921272c30363a3b404d596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000070d121618192020202020201a1917130e0800000000000000000000000000000000000000010d18232935414c565f6a727e8b939e99938c81786d685f574f473f342e261e150c0300000000000000000000000000000013202d394653606c7986938b7e72655856565656565656565656565656544f473d33271c10040000000000000000000000000a16212b343d454d565e676d757f8a9298a19e938b7f726a60564c41382d23190e050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205070812131313131313131308070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f171e23282a2b2d2d2d2d2d2d2d2322201c160f171e23282a2b2d2d2d2d2d2d2d2322201c160f08000000000713202d3a4653606d78868686868686868073665a4d4033271a0d00000916232f3c4956626f7c868686868686867e7165584b3e3225180b000c1926323f4c5965727f8283848586786d605346423f3e3f424d576773808d9aa995897c6f6256493c2f2316090000000008121b242d373f495157595b53504a42383c4247484b4e5151525352514f4c4947433c39404a52585a585650483f362c241a1108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131c242a2f323339393939393939393433302b241d140b00000000000000000000000000020c161e262c32353639393939393939393939393939393939393939302f2c27211911080000000000000000000407090a13131313131313131313131313131313131313100f0d09050000000000000000000000000000000000000d1a2733404c58646e747979797979797979797979797979797979797979797979797979797979797979797771675b4f4236291d10000000000000000000000000000000000000000000000000000000010d19242f3a47545f6a7783909da9ab9e9184796d605346525e6976828f9ca9ac9f92867a6d6054473d3221160c020000000000000000000000000000000916222f3c4955626f7c8895a2afaa9e918477675d5145392c20130200000613202d3a4653606d7986939facab9e918478675c5145382c1f13060000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0000000000000000070e171e252a32383b4246474b4e596673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000070d121618192020202020201a1917130e080000000000000000000000000000000000000000070d19242f3a434e58626d75818e95a09f928e827a6e69605951443f3830271e150b00000000000000000000000000000013202d394653606c7986938b7e7265584b4a4a4a4a4a4a4a4a4a4a4a4a48443d352b21160b000000000000000000000000030f1b27323d464e575f686d79818c929fa3a0958e81756d62584e443a2f261b11080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f1821282f34373839393939393939302f2c27211921282f34373839393939393939302f2c27211911080000000713202d3a4653606d798693939393938d8073665a4d4033271a0d00000916232f3c4956626f7c8993939393938b7e7165584b3e3225180b000c1825313e4a57636d7275767778796d665c5044383030363f4c5966727f8c99ab96897d7063564a3d3023170a000000040d1a242d363f49515b626568605b544a45464d5355585b5d5e5f5f5e5d5b5955544e47454a525c636665625a50483e362c231a0d0400000000000000000003060809131313131313131313131313131313131313131313131313130b0a0804000000000000000000010a12191e2325262d2d2d2d2d2d2d2d2726241f19130b020000000000000000000000000000040c141b212528292d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2322201c160f0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a67748186868686868686868686868686868686868686868686868686868686868686868683776a5d5144372a1e110000000000000000000000000000000000000000000000000000000008131e2b37434e5865717e8b97a2ada1968a7d7063564c54616e7b87939faca79b8e8174685d5245392c201304000000000000000000000000000000000916222f3c4955626f7c8895a2afa89c8f827569554b4035291d1104000006131f2c3845515c677884919eabac9f9386796d6053463a2d2013070000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00000000000000071019202930363d44484d5254575b5d6673808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000010911181e2225252d2d2d2d2d2d2726231f19120a020000000000000000000000000000000000000008131e28313c46515b606d79839198a29d948f847b706b625b504a423930271d1207000000000000000000000000000013202d394653606c7986938b7e7265584b3f3d3d3d3d3d3d3d3d3d3d3d3c38332b23190f0500000000000000000000000007131f2c38434e5860696e7a828e939ca4a2989183796d605b51463d32281d140a0000000000000000000000000000000000000000000002070c0f11121313131313131313131313131313131313131313131313131313131313131313131313131308070502000000000000000000000001070b0f1112131313131313130a09070400000000000000010c17212a333a404345464646464646463d3c38332b232a333a404345464646464646463d3c38332b23190f0500000713202d3a4653606d7986939f9f9f998d8073665a4d4033271a0d00000916232f3c4956626f7c89959f9f9f988b7e7165584b3e3225180b000916222e3a46515b636568696b676d675c544a3f41414142464e586673808d99a399887c6f6255493c2f2216090000010c161f2c363f48515b626d72746c665b545153575f6265686a6b6c6c6b6a68656260585452525c636e73716c625a50483e352c1f160c01000000000000040a0f12151520202020202020202020202020202020202020202020202020171714110c05000000000000000000070d1316191a20202020202020201a1a17130e080100000000000000000000000000000000020a1015191c1c20202020202020202020202020202020202020171613100b05000000000000000000000000000000000000000003090d1012131313131313130e0d0b080300000000000000000000000000000000000000000e1b2734414e5a6774818d939393939393939393939393939393939393939393939393939393939393939083776a5d5144372a1e1100000000000000000000000000000000000000000000000000000000010f1b26323c4753606d7985929faba99b8e8275685d525966737f8c99a4aca095897c6f63564c4135291d1104000000000000000000000000000000000916222f3c4955626f7c8895a2afa79a8d8174675a4e412f24180d01000004101c2834404b556a7683909da9afa49a887b6e6155483b2e2215080000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000061019222b323a41464f54575e6164676a6b73808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000009131b23292e313239393939393933322f2a241c140a00000000000000000000000000000000000000010c161f2a343f45515d676e7c86929fa59f9691857d726d605c544b42392e23180c000000000000000000000000000013202d394653606c7986938b7e7265584b3f3d3d3d3d3d3d3d3d3d3d3d3c39332c231a10050000000000000000000000000915222e3b4854606a6f7b8490949ea5a49f92867c6e675d51493f342b20160b02000000000000000000000000000000000000000000060d13181c1e1f202020202020202020202020202020202020202020202020202020202020202020202020201514120e09030000000000000000050c12171b1e1f20202020202020171613100b05000000000007121e28333c454b5052535353535353534a48443d352b333c454b5052535353535353534a48443d352b21160b00000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2aca4988b7e7165584b3e3225180b0006121e2a353f495157595b5d555c605c554b474e4e4e4e4d52575f6a76838f9c9f92867a6d6054473a2d211407000007131d28313e48505a626d727f81786c665b5c6064696e727477787979787775726f6a65605d5c636e73807e716c615a50473e31281e13080000000000060e151b1f21222d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2423211c17100800000000000000000002070a0c0d13131313131313130e0d0b0703000000000000000000000000000000000000000005090d0f10131313131313131313131313131313131313130a090704000000000000000000000000000000000000000000070e14191d1f202020202020201b1a17140e08010000000000000000000000000000000000000e1b2734414e5a6774818d9a9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9d9084776a5d5144372a1e1100000000000000000000000000000000000000000000000000000000000a151f2c3945515d6774808d9aa6ac9f92867a6d6154606b7784919eabaa9d9084776b6054443a3024190d01000000000000000000000000000000000916222f3c4955626f7c8895a2afa6998c807366594d4033261a07000000000c18232e424f5c6975828f9ca8b6ac95887c6f6255493c2f2216090000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0000000000050e18222b343d444c52596063696e7174767778808c9996897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000007111b252d343a3e3f464646464646403f3b362e261c120800000000000000000000000000000000000000040d18222935404b555f6a717e8a939da7a09792877f746d665c544b4034281c10040000000000000000000000000013202d394653606c7986938b7e7265584b4a4a4a4a4a4a4a4a4a4a4a4a49443e362c22170b0000000000000000000000000916232f3c4956626f7c85919693939393928a7e716a5f554b40372d22190e04000000000000000000000000000000000000000000070f171e24282b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d22211e1a140e06000000000000060f171e23282a2b2d2d2d2d2d2d2d2322201c160f08000000000b17232f3a454e565c5e6060606060606056544f473d333a454e565c5e6060606060606056544f473d33271c1004000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00010d18232d373f464a4c4f504b5153514c52545a5a5a5b575e61696f7c87929f9c8f8376675d5145392c20130600010d18242f3a43505a626c727f8b8e81786c66666d71767b7e81848485868584827f7c77726d68606e73808d877e716c61594f433a2f24190d0100000006101820262b2e2f3939393939393939393939393939393939393939393939393931302d28221a1208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000811191f25292b2c2d2d2d2d2d2d2726241f1a130b0200000000000000000000000000000000000e1b2734414e5a6774818d9aa7acacb2a9a19e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9084776a5d5144372a1e11000000000000000000000000000000000000000000000000000000000004101d2935404b55626f7b88949faba3998b7e726557636f7c8996a0aca2988b7f7265594f4332281e130800000000000000000000000000000000000916222f3c4955626f7c8895a2afa5988b7f7265584c3f3225190c00000000071b2835424e5b6875818e9ba8b0a396897d7063564a3d3023170a0000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00000000020c16202a343d464e565e616b6f757b7e8183848587939f96897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000010d18232d373f464a4c5353535353534d4b4740382e24190e0200000000000000000000000000000000000000071018242f39434e58616c74818e95a0a9a299928b80786d665c5145382c1f13060000000000000000000000000013202d394653606c7986938b7e726558575757575757575757575757575550483e33281c100400000000000000000000000d1a2633404d59667380868686868686868680746c61574e43392f251b1007000000000000000000000000000000000000000000060f1921292f343738393939393939393939393939393939393939393939393939393939393939393939393939392e2d2b261f180f0600000000050f1821282f34373839393939393939302f2c27211911080000000f1b2834404b5660686b6c6c6c6c6c6c6c6360594f4438404b5660686b6c6c6c6c6c6c6c6360594f44382c201307000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000007111c252d353a3e3f42434045474c565d616767676869696e727b8491999e938a7d7063554b4135291d11040004111d2935404b55616c717e8893938e81786c70797e83888b8e9091929291908e8c88847f7a726d73808d9292877e716b61554c4135291d11040000040e18222a32373b3c464646464646464646464646464646464646464646464646463e3c39332c241a1005000000000000000000000000020608080c0b09060100000000000000000000000000000000000000000004080a0b0807050200000000000000000000000000000000000205070813131313131313130707050100000000000000000007111a232a313538393939393939393433302b241d140b01000000000000000000000000000000000e1b2734414e5a6774818d9aa9b3b9ada1979191919191919191919191919191919191919191919191919083776a5d5144372a1e110000000000000000000000000000000000000000000000000000000000000c18242f3947535f6a7683909ca9ab9d908376695f6774818e9aa8ac9f92867a6d6054473d3221160c0200000000000000000000000000000000000916222f3c4955626f7c8895a2afa5988b7e7265584b3f3225180c000000010e1b2834414e5b6774818e9aa7b0a3978a7d7064574a3d3124170a0000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0000000008131e28323c464e5860686d767c82878a8e9091929399a496897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000006121e29343f495156586060606060605a58524a40362a1f1307000000000000000000000000000000000000000007121d28313c46505a606d7983909893939393928d82796d6053463a2d2013070000000000000000000000000013202d394653606c7986938b7e72656464646464646464646464646464615a5044392d20140800000000000000000000000c1925323f4b57636d737979797979797979746e645a50453c31281d1209000000000000000000000000000000000000000000020d17212b333b404445464646464646464646464646464646464646464646464646464646464646464646464646463b3a37312a21180e030000010c17212a333a404345464646464646463d3c38332b23190f050000111e2a3743505c68727879797979797979706b6054483c43505c68727879797979797979706b6054483c2f221609000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000000a131c232a2e3132352f343946525d686d7474747475777b7f8591969e938e81746b6155433a2f24180d01000613202c3945515d67717e87939a9d938e81797d848b9095989b9d9e9f9f9e9d9b9895918c857f79808d929c9992877d70675d5145392c20130600000a15202a343c434748535353535353535353535353535353535353535353535353534a49453e362c22170c0000000000000000000003090e121415191815120d06000000000000000000000000000000000000050c111417171514120e09030000000000000000000000000002090e12141520202020202020201413110d0802000000000000030e19232c353c414546464646464646413f3c362f261d1308000000000000000000000000000000000e1a2734414d5a6774808d97a2adb8ab9e91858484848484848484848484848484848484848484848484848275685c4f4235291c0f00000000000000000000000000000000000000000000000000000000000007121d2b37434e5864717e8a97a1ab9f95887b6e616d7985929faba79b8e8174685d5245392c2013040000000000000000000000000000000000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e3125180b000000010e1b2734414e5a6774818d9aa7b1a4978a7e7164574b3e3124180b0000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000010d1925303a444e58606a6f7a82898f94979a9d9e9f9fa4ab96897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000000000101d2a3643505d69768390908376695d5043362a1d100000000000000000000916222e3a46515b62656c6c6c6c6c6c66635c52473b2f23170a0000000000000000000000000000000000000000010c161f2a343e45515c676e7b8586868686868686867a6e6154473b2e2114080000000000000000000000000013202d394653606c7986938b7e727070707070707070707070707070706c6155493c3023160a00000000000000000000000a16232f3b47525b63666c6c6c6c6c6c6c6c67645c52483e332a1f160c0000000000000000000000000000000000000000000007131e29333d454c5052535353535353535353535353535353535353535353535353535353535353535353535353534846423c332a1f1409000007121e28333c454b5052535353535353534a48443d352b21160b0000121f2b3845525e6b7884868686868686867d7063564a3d45525e6b7884868686868686867d7063564a3d3023170a000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000000010a11181e22252628232e3a4754616d7a808181818284878c929796918b81796d60594f4431281d130700000714202d3a4753606d7a859297a2a59d938e848991969d9fa7a7aaa8a7a7a8aaa8a7a09d97928b858d929ca4a39892857a6d6054473a2d21140700030f1b26323c464e535560606060606060606060606060606060606060606060606060575550483e33281c11040000000000000000060e151a1e21222524221e181109010000000000000000000000000000000810171c21232422211e1a140d060000000000000000000000050d141a1e20212d2d2d2d2d2d2d2d21201d19130c05000000000009141f2a353e474d51535353535353534e4c4741382f241a0e030000000000000000000000000000000815212e3b4854616e7b85929ea4aea99d9083787777777777777777777777777777777777777777777777756f65594d4134281b0e000000000000000000000000000000000000000000000000000000000000010f1a26313c4653606d7985929eaca7998c7f7366717d8a98a2aca095897c6f63564c4135291d11040000000000000000000000000000000000000916222f3c4955626f7c8895a2afa4988b7e7165584b3e3225180b000000010e1a2734414d5a6774808d9aa7b1a4978b7e7164584b3e3125180b0000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00000005111d2a36414c565f6a6f7d848f949c9ea6a7a9aaabacafa296897c6f635649505c6976838f9c9286796c5f5346392c201306000000000000000000000000030a0f1d2a3643505d69768390908376695d5043362a1d0f0a03000000000000000b1825313e4a56626d72797979797979736e63584b3f3226190c000000000000000000000000000000000000000000040d18222934404b555f696e78797979797979797976685e5246392d2014070000000000000000000000000013202d394653606c7986938d807d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7e7064574a3d3124170a000000000000000000000007131e2a35404952575960606060606060605a58524a40362c21180d04000000000000000000000000000000000000000000000c18242f3b454f575d5f6060606060606060606060606060606060606060606060606060606060606060606060606055534d453c31261a0e02000b17232f3a454e565c5e6060606060606056544f473d33271c100400121f2b3845525e6b7885919393939393897d7063564a3d45525e6b7885919393939393897d7063564a3d3023170a000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000000000070d121618191c212e3b4854616e7b878d8d8e8f9193938f8d89847e756d675c51473e331f160c0100000613202c3945515d676f7c859298a2a59d9591959da0a8aba8a09d9b9a9a9b9d9fa4aca9a19e9691969ca4a39992867d70675d5145392c2013060006121f2b37434e585f626c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c64615a5045392d21140800000000000000060f181f262b2e2f32312e29231b130a010000000000000000000000000008121a22282d30312e2d2a261f180f06000000000000000000050f171f252a2d2e39393939393939392e2d2a251e160e05000000010d1925313c4750585e5f6060606060605a58524a41362b1f14080000000000000000000000000000000714202d3a46525e69707d8a929da7ab9f958d80736b6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a68655d54493d3125190c000000000000000000000000000000000000000000000000000000000000000a151f2c3845515c6773808d9aa4aa9d9184776a75828e9baaaa9d9084776b6054443a3024190d010000000000000000000000000000000000000916222f3c4955626f7c8895a2afa5988b7e7265584b3f3225180c000000010e1b2734414e5a6774818d9aa7b1a4978a7e7164574b3e3124180b0000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0000000713202d3946525e686f7c8691969ea6aab0b4b6b7b8b9afa296897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000000060e151a1f2a3643505d69768390908376695d5043362a1f1a150e060000000000000c1925323f4c5865727f8686868686868073665a4d4033271a0d00000000000000000000000000000000000000000000060f18232f39434d575f616c6c6c6c6c6c6c6c6c6c5e564c41362a1e11050000000000000000000000000013202d394653606c798693928d8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a86796c605346392d20130000000000000000000000020d19242e3740474b4d53535353535353534d4c4740382f241a0f0600000000000000000000000000000000000000000000000f1c2834404c5761686b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5f574d42372b1e1205000f1b2834404b5660686b6c6c6c6c6c6c6c6360594f44382c20130700121f2b3845525e6b7885919e9f9f9f96897d7063564a3d45525e6b7885919e9f9f9f96897d7063564a3d3023170a000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000000000000106090c0c15212e3b4854616e7b87949a9b9c9e938682807d78716c605c554b40352c210d0400000004111d2935404b55606a6f7c869298a2a7a09da0a7a9a29f9996918f8e8d8e90939a9ea1a8a8a19ea1a8a39992877d706b60554c4135291d1104000815212e3b47535f6a7679797979797979797979797979797979797979797979797979716c6155493c3023170a000000000000060f18212a31373a3b3f3e3a342d251c130a01000000000000000000000008121a242c33393c3e3b3a36312921180f0500000000000000020d17212930363a3b4646464646464646463936302820160c02000004101d2935414d58626a6c6c6c6c6c6c6c67645c52473c3024170b00000000000000000000000000000005121e2a36424d57616c74808d95a0aaa79f93887d70685e545e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5c59544b42372c2115090000000000000000000000000000000000000000000000000000000000000004101c2834404b55616e7b87939faca095887b6f7985929faca3988b7f7265594f4332281e1308000000000000000000000000000000000000000916222f3c4955626f7c8895a2afa5988b7f7265584c3f3225190c000000010e1b2834414e5b6774818e9aa7b0a4978a7d7164574a3e3124170b0000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000005121e2a36424d57616d7a849198a1a8b0b7bbc1c3c4c5bcafa296897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000000006101820262b2e3643505d69768390908376695d5043362e2b262018100600000000000c1925323f4c5865727f8b939393938d8073665a4d4033271a0d000000000000000000000000000000000000000000000007121d27313c454d53555f60606060606060605f524c443b3025190e020000000000000000000000000013202d394653606c798693939393939393939393939393939393939386796c605346392d201300000000000000000000000007121c252e353b3f404646464646464646413f3c362f261d1208000000000000000000000000000000000000000000000000111e2b3744505d6873787979797979797979797979797979797979797979797979797979797979797979797979797976695f53463a2d21140700111e2a3743505c68727879797979797979706b6054483c2f22160900121f2b3845525e6b7885919eabaca396897d7063564a3d45525e6b7885919eabaca396897d7063564a3d3023170a000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000000000000060b0f12131c212e3b4854616e7b8793939495989a9285817d756e685e574d43392e23180c00000000010d18242f3a434e58606a6f7d86929aa4acaaaca59d97928c88848281818283878b91969fa3ababadac9f92877d706b61594f433a2f24190d01000915222f3c4855626f7c868686868686868686868686868686868686868686868686867e7164574a3e3124170b0000000000050f18212a333c4247484c4a463f372e251c130a0100000000000000000008121a242c363e45494a4846423b332921170e0500000000000009141f29333b42464853535353535353535346413a32281e1308000005121f2b3845515e6a7479797979797979746e64584c3f33261a0d000000000000000000000000000000020e1a25303b454f59606d79839098a2aea49a92857a6e665b5051515151515151515151515151515151514f4d49423930261b100400000000000000000000000000000000000000000000000000000000000000000c18232e3946535f6976828f9ca9a7998c7f737d8a98a2ac9f92867a6d6054473d3221160c02000000000000000000000000000000000000000916222f3c4955626f7c8895a2afa6998c7f7366594c4033261907000000020f1b2835424e5b6875818e9ba8b0a3978a7d7064574a3d3124170a0000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00000714212d3a46535f6974818e96a1aab2bac2c7ccd0d1c9bcafa296897c6f635649505c6976838f9c9286796c5f5346392c201306000000000000000000061018222a31373a3c43505d69768390908376695d50433c3a37312a22181006000000000c1925323f4c5865727f8b989f9f998d8073665a4d4033271a0d0000000000000000000000000000000000000000000000010b151f2a333c4246485253535353535353535346413b32291e1408000000000000000000000000000013202d394653606c798686868686868686868686868686868686868686796c605346392d2013000000000000000000000000000a131c242a2f323339393939393939393433302b241d140b00000000000000000000000000000000000000000000000000121f2c3845525f6b7885868686868686868686868686868686868686868686868686868686868686868686868686867b6e6155483b2e22150800121f2b3845525e6b7884868686868686867d7063564a3d3023170a00121f2b3845525e6b7885919eabaca396897d7063564a3d45525e6b7885919eabaca396897d7063564a3d3023170a000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000000020a11171c1f2028232e3b4854616e7b86868687898c9195928e89827a6e695e544a4034281c10040000000007131d28313d464e58606b6f7c87939facaba39f938e857f7b7775747475777a7e848c9299a2a9b3a4978a7e716b61594f473d31281e130800000916232f3c4956626f7c8993939393939393939393939393939393939393939393938a7d7164574a3e3124170b00000000050e172129333c454d5355585651493f372e251c130a010000000000000008121a242c363e4850555755534d453b332920170e0500000000020e1a25303b454d525f60606060606060605f524c443a3025190d01000613202c3946535f6c79868686868686868074675a4e4134271b0e0100000000000000000000000000000009141f29333e45515c676e7b86929fa5aca1978f82786c60594f4444444444444444444444444444444442413d3730271e140900000000000000000000000000000000000000000000000000000000000000000007121d2b37424d5764717d8a97a1aa9d908377818e9baaa79b8e8174685d5245392c20130400000000000000000000000000000000000000000916222f3c4955626f7c8895a2afa79a8d8174675a4e412e23180c000000030f1c2936424f5c6975828f9ca8afa296897c6f6356493c302316090000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00000815222e3b4855616e7b87929fa8b2bcc4ccd3d7dcd5c9bcafa296897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000000060f18222a343c43474847505d69768390908376695d50474847433c342a22180f060000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000000000000000000030d18212a31373a3b4546464646464646463b3936302920170d02000000000000000000000000000013202d3946535f6c767979797979797979797979797979797979797979766c5f5346392d201300000000000000000000000000010a12191e2325262d2d2d2d2d2d2d2d2726241f19130b0200000000000000000000000000000000000000000000000000121f2c3845525f6b7885929393939393939393939393939393939393939393939393939393939393939393939393887b6e6155483b2e22150800121f2b3845525e6b7885919393939393897d7063564a3d3023170a00121f2b3845525e6b7885919e9f9f9f96897d7063564a3d45525e6b7885919e9f9f9f96897d7063564a3d3023170a000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000000020b141c22282b2d352e343a46535e69767979797a7c7f848c9399948f847b6e665c5144382c1f150900000000010c161f2b343d45515d67717e8b9aa4afa399928b817a736e6968676768686e72797f879297a2aaa6998c7f73695f53463e352b1f160c010000091623303c4956636f7c89969f9fa8a19e9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c978a7d7164574a3e3124170b000000020b172029333b454d575f6265625b51493f372e251c130a01000000000008121a242c363e48505a6164615f574d453b322920170c0200000005121e2a36424d575e6c6c6c6c6c6c6c6c6c6c5e564c41362a1d1105000613202c3946535f6c798692939393938d8174675a4e4134271b0e01000000000000000000000000000000030d17212834404b555f69717e8a939da8a99f948c7f736b60564c4135373737373737373737373737373534312c261e150c02000000000000000000000000000000000000000000000000000000000000000000000e1a26313c4653606d7984919eaba095887b85929faba095897c6f63564c4135291d110400000000000000000000000000000000000000000916222f3c4955626f7c8895a2afa89b8f827568544a4034281c1004000004101c2934404b556a7683909da9b4aa95887b6f6255483c2f2215090000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0006121e2b37424d576774818d99a3afbac4ced6dfe3e2d5c9bcafa296897c6f635649505c6976838f9c9286796c5f5346392c20130600000000000000030e18212a343c464e535554525d69768390908376695d525455534e463c342a21180e0300000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00000000000000000000000000000000000000000000000000060f181f262b2d2e3939393939393939392e2d2a251e170e05000000000000000000000000000000121e2b37434f5a646c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c645a4f43372b1e12000000000000000000000000000000070d1316191a20202020202020201a1a17130e08010000000000000000000000000000000000000000000000000000121f2c3845525f6b7885929e9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f94887b6e6155483b2e22150800121f2b3845525e6b7885919e9f9f9f96897d7063564a3d3023170a00121f2b3845525e6b7885919393939393897d7063564a3d45525e6b7885919393939393897d7063564a3d3023170a000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000000a141d262d33383942434045464d575e6c6c666d6d6f72787f87939f969083786d6053463c31261a0e0200000000040f1b27333f4953606d7984919eaca49f92877f746d68615f575b5a565e61676d727d859298a2ac9f92867b6e61564c41362a1e11050000000a1623303d495663707c899aa4aca196918f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8a7d7164574a3e3124170b0000000a141d29323b454d575f696e726d635b51493f372d251c130a0100000008121a242c363e48505a616c716e695f574d443b32291e140a0000000714202d3a46525e6976797979797979797976685e5246392d201307000613202c3946535f6c7986929f9f9f9a8d8174675a4e4134271b0e0100000000000000000000000000000000050f18232e39434d57616c74818e95a0aaa69f92877d6f685d52463f342a2b2b2b2b2b2b2b2b2b2b2b292825211b140c03000000000000000000000000000000000000000000000000000000000000000000000009141f2c3844505c6673808c99a4a79c8f828f97a2aa9d9084776b6054443a3024190d0100000000000000000000000000000000000000000916222f3c4955626f7c8895a2afaa9d908477665c5144382c1f1206000006131f2c3845515c677884919eabaea298877a6d6154473a2e2114070000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000814212d3a47535f697884919eabb5c0ccd6e0e8f1e2d5c9bcafa296897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000009151f2a333c464e585f62615e566976839090837669565e61625f584e463c332a1f150900000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0000000000000000000000000000000000000000000000000000060e141a1e21222c2d2d2d2d2d2d2d2d21201e19140d05000000000000000000000000000000000f1b27333e49525a5f60606060606060606060606060606060606060605f5a52493e33271b0f0000000000000000000000000000000002070a0c0d13131313131313130e0d0b070300000000000000000000000000000000000000000000000000000000121f2c3845525f6b7885929eabacacaea9a7a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a194887b6e6155483b2e22150800121f2b3845525e6b7885919eabaca396897d7063564a3d3023170a00121f2b3845525e6b7884868686868686867d7063564a3d45525e6b7884868686868686867d7063564a3d3023170a000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000006111c262f383f44464f504b51535452535f605c606162666c727f8b95a0958c7f7265574e42372b1e12060000000005121f2b3744505b65727f8c97a1a89c928a7e726d615d56534d4e4e4c52555c606b707c86929fa6a3988e8175685e5246392d2014070000000815222f3b4855626e7b87939fa99e91848383838383838383838383838383838383827d706356493d3023160a000006111b262f3b444d575f696e7b7f726d635b51493f372d251c130a010008121a242c363e48505a616c717d7b6e695e564d443a30261c110600000815212e3b4854616e7b86868686868686867a6d6154473a2e211407000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e01000000000000000000000000000000000007121d27303c45505a606d79839198a3aea39991847a6d615b51463c31281d1e1e1e1e1e1e1e1e1e1c1b191510090200000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54616e7b87939fac9e948f949ea9a3988b7f7265594f4332281e13080000000000000000000000000000000000000000000916222f3c4955626f7c8895a2afac9f9286796d6053463a2d20130900000714202d3a4753606d7a86939facac9f928579685e5246392d2013070000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000815222e3b4855616e7b8896a1adbdc7d1dee8f2efe2d5c9bcafa296897c6f635649505c6976838f9c9286796c5f5346392c201306000000000000020e1a26313c454e585f6a6f6d685e69768390908376695e686d6f6a5f584e453c31261a0e02000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00000000000000000000000000000000000000000000000000000003090e1214151f20202020202020201414110e080200000000000000000000000000000000000a16212c3740494f535353535353535353535353535353535353535353534f4940372c21160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2c3845525f6b7885929eabb8aea49d9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a94887b6e6155483b2e22150800121f2b3845525e6b7885919eabaca396897d7063564a3d3023170a00111e2a3743505c68727879797979797979706b6054483c43505c68727879797979797979706b6054483c2f221609000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000b17222d38424a50535b5d555c60605d564c4a505354545b606c7883909d9e9184786a5f53473a2e211408000000000613202d394653606c7884919ea9a0968d80736c625b524c4642414141464b5159606a717e8a939eaa9f92867a6e6154473b2f24180c0000000814212e3a47535f6975818e97a29d9084787676767676767676767676767676767676706b6054483b2f22160900000b17222d38414d565e696e7b848b7f726d635b51493f372d251b130a08121a242c363e48505a616c717e86847b6e695e564c42382e23170b00000815212e3b4854616e7b87939393939393877a6d6154473a2e211407000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e010000000000000000000000000000000000000b151e2a333e45515d676f7c86929fa5aba1968f82756d62584e433a2f24180f111111111111110f0e0c09040000000000000000000000000000000000000000000000000000000000000000000000000000000c17232e3846535e6975828f9ca8a69e9c9ea6ac9f92867a6d6054473d3221160c020000000000000000000000000000000000000000000916222f3c4955626f7c8895a2afaea399887c6f6255493c31261a0d06030615222f3c4855626f7b8899a4afaa9d9084776a564c41362a1e11050000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000b1825313e4b5864717e8b97a8b2bdcfd9e3f0faefe2d5c9bcafa296897c6f635649505c6976838f9c9286796c5f5346392c20130600000000000006121e2b37424d575f6a6f7b7a6d686976839090837669686d7a7b6f6a5f574d42372b1e1206000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000000000000000000000000000002050708121313131313131313080705020000000000000000000000000000000000000005101b252e373e4346464646464646464646464646464646464646464646433e372e251b10050000000000000000000000000000000000000003080b0e0e131313131313130a090704000000000000000000000000000000000000000000000000000000121f2c3845525f6b7885929eabb8a99d928d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d887b6e6155483b2e22150800121f2b3845525e6b7885919e9f9f9f96897d7063564a3d3023170a000f1b2834404b5660686b6c6c6c6c6c6c6c6360594f4438404b5660686b6c6c6c6c6c6c6c6360594f44382c201307000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00030f1c28333f4a545b6068696b676d6d685d52454446474a505b6573808c99a196887b6e6255483b2f221508000000000a1623303d495663707d8996a0a99e9184786d605a5146413a373130363940454f58616c75828f99a3a3998c7f7266554b4035291d1004000006121e2b37424d57616e7b85929fa0958c80736c6969696969696969696969696969696360594f44382c20130700030f1b27333f49535e696e7b8491918c7f726d635b51493f372d251b13121a242c363e48505a616c717e879291847b6e685e544a3f34281c1003000815212e3b4854616e7b87949f9f9f9f94877a6d6154473a2e211407000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e01000000000000000000000000000000000000030c18212935404b555f6a727f8b939ea8a89e948b7f726a5f554b41352921180d030404040404020200000000000000000000000000000000000000000000000000000000000000000000000000000001070c06111c2a36424d5763707d8a96a1acaaa8aab0a79b8e8174685d5245392c201304000000000000000000000000000000000000000000000916222f3c4955626f7c8895a2afb5ab998c7f7266574d42372b1f15120f121c2834404a5465717e8b98abb5a89b8e8175685b4e423025190d010000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000d192633404c5966737f8c99a6b2bfcfd9eaf5ffefe2d5c9bcafa296897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000814212d3a47535f696f7c85837a6d68768390908376686d7a83857c6f695f53473a2d211408000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131c252c33373939393939393939393939393939393939393939393937332c251c130900000000000000000000000000000000000001080f14181a1b20202020202020171614100b0500000000000000000000000000000000000000000000000000121f2c3845525f6b7885929eabb4a79a8d8080808080808080808080808080808080808080808080808080808080807a6d6154473a2e21140700121f2b3845525e6b7885919393939393897d7063564a3d3023170a000b17232f3a454e565c5e6060606060606056544f473d333a454e565c5e6060606060606056544f473d33271c1004000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0006121f2b3844505b666c75767778797a6d60544b403a3a3f495364717e8b97a8978a7d7164574a3e3124170b00000003101c28343f4a546773808d9aa8a2978a7e71665c51483f35302b26252a2e343d46505a626e7b87929fab9d908376675d5145382c1f13060000020e1a26313c46525e68717e8a929c9f93887e716c605b535c5c5c5c5c5c5c5c5c5c5c56544f473d32271b10030005121f2b3744505b656e7b8491969c918c7f726d635b51493f372d251b1a242c363e48505a616c717e8792999691837a6d665c5044382b1f1206000815212e3b4854616e7b8794a1acaca094877a6d6154473a2e211407000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e0100000000000000000000000000000000000000060f18242f39434e58626d75818e96a1aba69f92867c6f675d51453f332a1f150b010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c13181b1e1a25313b4653606c7884919e9f9f9f9f9fa095897c6f63564c4135291d1104000000000000000000000000000000000000000000000916222f3c4955626f7c8895a2afb6a99c908376695f53473c3127201f1c1f232c3844515c6675818e9ba8b3a9988c7f7265594c3f32261908000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000d1a2734404d5a6773808d9aa6b3c0cdd9e6f3fcefe2d5c9bcafa296897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000815222e3b4855616e7b859290837a6d7683909083766d7a839092857b6e6155483b2e221508000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000000000000000000000000000000000000000000010406070a0d101112131312100e0b080705020000000000000000000000000000010a131b21272b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b27211b130a010000000000000000000000000000000000020b131a202427282d2d2d2d2d2d2d2323201c160f08000000000000000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a73737373737373737373737373737373737373737373737373737373736d685e5246392d20130700121f2b3845525e6b7884868686868686867d7063564a3d3023170a0007121e28333c454b5052535353535353534a48443d352b333c454b5052535353535353534a48443d352b21160b00000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000613202d394653606c7881838485868275665c5145403f414a5464717e8b97a4988b7e7165584b3e3225180b00000006121f2b3844505c667683909da99f9285796d60544a403629241e1a191d2328343e47535f6a7683909ca99f92867a6d6053473a2d2014070000000915202a36414d56616c73808d939d9a92877e736c655d554e5050505050505050504948443d352b21160b00000613202d394653606c79839096a0a39c918c7f726d635b51493f372d25242c363e48505a616c717e879299a3a0959083796d6053463a2d201307000815212e3b4854616e7b8794a1acaca094877a6d6154473a2e211407000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e01000000000000000000000000000000000000000007121d28313c46515b606d7a849199a3aea3999184796d605a50463c31271d120700000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f171e23282a2b2d2b3844505b66737f8c999393939393939084776b6054443a302419120b030000000000000000000000000000000000000000000916222f3c4955626f7c8895a2afb7ab9f94887b6e62574e4339312d2b282b2e343f4953606d7985929fabada297897c6f6356493c30231609000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000e1b2835414e5b6874818e9ba7b4c1cedae7f4fcefe2d5c9bcafa296897c6f635649505c6976838f9c9286796c5f5346392c2013060000000000000713202d3a4653606d78818e9390837a7683909083767a8390938e81786d6053463a2d201307000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00000000000000020608080d0606030000000000000000000000000000000104080d111314171a1d1e1f201f1f1d1b181414110e080200000000000000000000000000010910161b1e202020202020202020202020202020202020202020201e1b161009010000000000000000000000000000000000010b141d252b30333439393939393939302f2c27211a11080000000000000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e67676767676767676767676767676767676767676767676767676767615e564c4135291d110500111e2a3743505c68727879797979797979706b6054483c2f22160900010c17212a333b434a4f5053535353534c4a463f372d232a333b434a4f5053535353534c4a463f372d23190f0500000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0006121f2b3844505b6677849091929285796d6058514a4c4b515b6673808d99a9978a7d7164574a3e3124170b0000000713202d3a4653606d7986929fa89b8e8175665c5042392e2419130e0d1218222b37434e5866727f8c99a5a399897c6f6356493c30231609000000030e1925303b44505a606c77818e939c99928b80776d675f585045414343434343433d3b38322b23190f04000005121f2b3744505b65707d869298a2a39c918c7f726d625b51493f372d2c363e48505a616c717e879299a3a39992877e71665c5044382b1f1206000815212e3b4854616e7b87949f9f9f9f94877a6d6154473a2e211407000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e010000000000000000000000000000000000000000010c161f2a343f45525d686f7c87929fa6aba0968e81756c62584e43392f24180f060000000000000000000000000000000000000000000000000000000000000000000000000000000000050f1821292f3437383939333f4a54616e7a8786868686868686867f7265594f43322c29231d150d0700000000000000000000000000000000000000000916222f3c4955626f7c8895a2afbdb0a69a8d81746a5f554b433c39383338393f44505b65717e8a97a2adab9f9285796d6053463a2d201307000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000e1b2835414e5b6874818e9ba7b4c1cedae7f4fcefe2d5c9bcafa296897c6f635649505c6976838f9c9286796c5f5346392c20130600000000000006121f2c3844505c666d78818e9390837a839090837a8390938e81786d665c5044382c1f1206000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000003090e1214151913120f0b06000000000000000000000003070d1013191d202124272a2b2c2d2c2b2a282521201e19140f0a0400000000000000000000000000050a0f1213131313131313131313131313131313131313131313120f0a050000000000000000000000000000000000000008131d262f363c4041464646464646463d3c38332c231a0f0500000000000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e615a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a54524c443a3025190d01000f1b2834404b5660686b6c6c6c6c6c6c6c6360594f44382c20130700000a16222e39434d555b5d6060606060585651493f34292e39434d555b5d6060606060585651493f34291e120600000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00030f1c28333f4a546774818e9a9f978b7e716a605c5459555d606c7884919da297897c6f6356493c302316090000000714212e3a4754616d7a8798a3a5988b7f7265544a3f30271c1208020007101a26313d495663707c8996a3ab978a7d7164574a3e3124170b0000000008141f29323e44505b656c78818d929f9f928c81796f6a625a514c433c34363636302f2c2721191107000000030f1b27333f4953606b707d869298a2a39c918c7f726d625b51493f37363e48505a616c717e879299a3a39992877e716c61544a3f34281c1003000815212e3b4854616e7b87939393939393877a6d6154473a2e211407000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e01000000000000000000000000000000000000000000040d18222935414c56606a727f8c949fa9a89e938b7e716a5f554b40352921170c03000000000000000000000000000000000000000000000000000000000000000000000000000000010c17212a333a4044454646463a46525e686e797979797979797979726d6256473f3a38342f271f191007000000000000000000000000000000000000000916222f3c4955626f7c8895a2afb4aba39f92877b6e675d554e4846443f44464a5059606c7883909da9b1a89b8e8175665c5044382b1f1206000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000e1b2734414e5a6774818d9aa7b4c0cddae7f6ffefe2d5c9bcafa296897c6f635649505c6976838f9c9286796c5f5346392c20130600000000000003101c28343f4a545c666d78818e939084839191838490938e81786d665c544a3f34281c1003000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00000000060e151a1e212226201f1c17110a0200000000000003060c1012181d2024292c2d30343638393939383735322e2d2a251e1b150d08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1a252f3841484c4e535353535353534a48443d352c21160b00000000000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e61544d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4746413a32281e130800000b17232f3a454e565c5e6060606060606056544f473d33271c100400010e1a27333f4a555f676a6c6c6c6c6c65625b51463a2e333f4a555f676a6c6c6c6c6c65625b51463a2e22160900000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000b17222d3c4956626f7c89949f9f92857c716d66666666676d737f8c96a09f9285796d6053463a2d2013070000000815222f3b4855626e7b8895aaa4978a7d7164574a3e2e24150b000000000915222f3b4855626e7b8895a1a5988b7e7265584b3f3225180c00000000020d172027333f49535b666c74808b92989c938f847c716c605d554e463e362e292322201b160f0700000000000b17222d38414f59606b707d869298a2a39b918c7f726d625b51493f3e48505a616c717e879299a3a39992877e716c615a5042382e23170b00000815212e3b4854616e7b86868686868686867a6d6154473a2e211407000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e0100000000000000000000000000000000000000000000061019242f3a444e58606c77828f97a1aba59f92867c6e675d51453e33291e150b00000000000000000000000000000000000000000000000000000000000000000000000000000007131e29333c454c505253535246444d565e616c6c6c6c6c6c6c6c6c65625b51504c47454039312a221910060000000000000000000000000000000000000916222f3c4955626f7c8895a2afaea39992999083796d6760585553504a5053545c606b727f8b95a0acaca095897d7063544a3f34281c1003000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000d192633404c5966737f8c99a6b2bfced9e5f1feefe2d5c9bcafa296897c6f635649505c6976838f9c9286796c5f5346392c201300000000000000000c17232e38424a545c666c78818e92909195959191928d81786c665c544a42382e23170c00000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000060f181f262b2d2e332d2b28221c140b08060406060b0f12171c1f24292c2f35393a3d4043444546464543413e3b3936302b272019130c04000000000000000000000000000000000000000000050a0d0f101313100f0d0a05000000000000000000000000000000000000000000000000000814202b36414b53595b6060606060606056554f473d33271c1004000000000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e615447404040404040404040404040404040404040404040404040403a3935302820160c02000007121e28333c454b5052535353535353534a48443d352b21160b000003101d2936424f5b6771777979797979726d62564a3e3136424f5b6771777979797979726d62564a3e3124180b00000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000615222e3b4754606a76828f98a29792857e7975737273757a8088939fa1978d8074665c5144382c1f12060000000916222f3c4955626f7c8895a2a396897d7063564a3d30231706000000000714212e3a4754616d7a8794a0a5998c7f7266594c3f3326190c0000000000050e17222d38414a545b606e737e8691969e9691867e756d675f58504840372e261c13100b0400000000000006111b262f3d474f59606b707d869298a2a39b918c7f726d625b514948505a616c717e879299a3a39992877e716c615a50483e30261c110600000714202d3a46525e6976797979797979797976685e5246392d201307000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e01000000000000000000000000000000000000000000000008131e28323d44505b656d7a859199a4aea2989083796d605a50453b30271c120700000000000000000000000000000000000000000000000000000000000000000000000000000c18232f3a454f575c5e60605f53504a4d52545f60606060606060605c5e5f5f5c5853514b433c342a22180c0200000000000000000000000000000000000916222f3c4955626f7c8895a2afac9f928692958f81796f6a6462605b545b6062666d727d87929fa7b0a69d9184786c605346392e23170b00000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000b1824313e4b5764717e8a97a8b2bdc8d4e2edf8efe2d5c9bcafa296897c6f635649505c6976838f9c9286796c5f5346392c20110c0600000000000006111c263038424a545b666c77808d929da0a09d928d80776c665b544a423830261c110600000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0000030e18212a31373a3b403938332d261d191312101314171c1f23282c2f35393a4145474a4d505152535252504e4b4746413b373229241e160e05000000000000000000000000000000000000030a11161a1c1d20201d1c1a16110a0300000000000000000000000000000000000000000000000b1824303c48535d64676c6c6c6c6c6c6c6360594f44382c201407000000000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b3434343434343434343434343434343434343434343434342e2d29251e160e04000000010c17212a333b434a4f5053535353534c4a463f372d23190f05000004111d2a3744505d6a778386868686867f7265584c3f323744505d6a778386868686867f7265584c3f3225190c00000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000006131f2b37434e58616e7b869298a097928b8582807f8082858d939aa19892857a6d61544a4034281c10040000000815222e3b4855616e7b8894aaa4978a7d7164574a3e2d22170b000000000815222f3b4855626e7b8895a1a5988b7e7265584b3f3225180c00000000000006111b262f38424a505c636c717c848e939f98928b817a6f6a625a524940382e251c110800000000000000000a141d2b353d474f59606b707d869298a2a39b918c7f726d625b51505a616c717e879299a3a39992877e716c615a50483e362c1e140a00000005121e2a36424d575e6c6c6c6c6c6c6c6c6c6c5e564c41362a1d1105000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e010000000000000000000000000000000000000000000000010c162027333f49535e68707d87939fa6aaa0958d81746c61574d42392e23180e05000000000000000000000000000000000000000000000000000000000000000000000000030f1b2834404c5761686b6c6c6c605c544a46475353534c52565d6065696b6c6b6965605c554e463c342a1e140a00000000000000000000000000000000000916222f3c4955626f7c8895a2afa5988b7f8b93938f837c76716e6c666b666c6e72787f879299a3aea99f948a7e71665b5044382b1c110600000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000815222e3b4855616e7b8896a0acb8c6d0dbe7f0f9e2d5c9bcafa296897c6f635649505c6976838f9c9286796c5f5346392c211d1711090000000000000a151e263038424a545b656c77808d939d9d938d80776c655b544a423830261e150a0000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000009151f2a333c4247484c46443f382f2925201f1d1f2022282b2e34383a4045474c5254575a5d5e5f605f5e5d5b5854524c47433c35302820170e0500000000000000000000000000000000040d151c2226292a2d2d2a2926221c150d04000000000000000000000000000000000000000000010e1a2733404c59646f7479797979797979706b6055483c2f231609000000000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e272727272727272727272727272727272727272727272721201d19130c0400000000000a16222e39434d555b5d6060606060585651493f34291e1206000004111e2b3744515e6a7784919393938c7f7265594c3f323744515e6a7784919393938c7f7265594c3f3226190c00000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000030f1b27323d46535f69707d8691969e9f97928e8c8c8d8f92989f9f9691867d6f685e5242392e23180c000000000714212e3a4754616d7a8798a2a5988b7f7265544a3f33281c1107010006101823303c4956636f7c8996a2aa978a7d7164574a3e3124170b000000000000000a141d262f383f44525a616a6f7a818b92989f938e847c716c635b524a40372e231a0d0400000000000000020b19232b353d474f59606b707d869298a2a39b918c7f726d625b5a616c707e879299a3a39992877e716c615a50483e362c241a0c02000000020e1a25303b454d525f60606060606060605f524c443a3025190d01000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e01000000000000000000000000000000000000000000000000040d17222d38414c56606b73808d949fa9a79d928a7e71695f544a40342820170b02000000000000000000000000000000000000000000000000000000000000000000000005111e2a3744505c6873787979796d665c504441454c52565e61686d727678797876726d675f584e463c30261c1106000000000000000000000000000000000916222f3c4955626f7c8895a2afa396897d818e96959087827e7b79787778797b7f848c9299a3abaaa2978f82776c60544a3f33281c0a0000000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000714212d3a46535f697784919eaab4bfcad6dee8eee2d5c9bcafa296897c6f635649505c6976838f9c9286796c5f534639302d29221b12090000000000030c151e262f38424a535b656c74818e9b9b8e81746c655b534a42382f261e150c030000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00020e1a26313c454d53555953504a423b35302d2b292c2d2d3338393f44464b5153565d606367696b6c6c6c6b6a6865615e56544e46413a322920170d020000000000000000000000000000030d161f272d32353639393635322d271f160d030000000000000000000000000000000000000000010e1b2834414e5b677481868686868686867d7063564a3d3023170a000000000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1413110d08020000000000010e1a27333f4a555f676a6c6c6c6c6c65625b51463a2e221609000005111e2b3844515e6b7784919e9f998c7f7266594c3f333844515e6b7784919e9f998c7f7266594c3f3326190c00000713202d3a4653606d798693a0aca6998d8073665a4d4033271a0d00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000000a15202a36424d57606b707c848c9196999c9b9999999b9d9a97928d847d6f6b60564c4130271c1207000000000613202d394653606c7985929fa79b8e8174665b5044382d2218120d0c1117222b37424d5765727f8c98a5a398897c6f6256493c2f23160900000000000000020b141d262d33404850585f686d757e8690959d9691867e736d645c524940352c1f160c0100000000000000071119232b353d474f59606b707d869298a2a39b918c7f726d62616c707e879299a3a39992877e716c615a50483e362c241a1208000000000009141f29333b42464853535353535353535346413a32281e130800000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e010000000000000000000000000000000000000000000000000006111b262f3a444f59606d78829097a2ada49f92857b6e665c51443e32291d140a000000000000000000000000000000000000000000000000000000000000000000000005121f2b3845525e6b7885868686786d60534a4c51565e61686d737a7f82858685837f796f6a5f584e42382e23170b000000000000000000000000000000000916222f3c4955626f7c8895a2afa3968a7d7a84919899938f8b888685848486888c91969fa3aba9a29892857b6e655b5042382d22170b0000000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0005121e2a36424d576673808c98a2aebac3ccd7dce3e7d5c9bcafa296897c6f635649505c6976838f9c9286796c5f53463e3d39342d241b110600000000060f19232b353d464e58606a6f7c8592989891857c6f6a60584e463d352b23190f060000000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0006121e2b37424d575f6166605b544d46413b393835393a3c3f44464a5053555d6064686d70737677787979787674716e68626058524c443a32291e130800000000000000000000000000000a151f2831383e4243464643423e3831281f150a0000000000000000000000000000000000000000010e1b2734414e5a6774818d93939393938a7d7064574a3d3124170a000000000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e21140d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d070705010000000000000003101d2936424f5b6771777979797979726d62564a3e3124180b000005121e2b3845515e6b7884919ea6998c807366594d40333845515e6b7884919ea6998c807366594d4033261a0d00000713202d3a4653606d798693a0aca69a8d8073675a4d4034271a0700000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b000000040e1a26313b454f59606a6f797f848a8d8f9192929291908d8a8580796f6b60594f443a301e150b000000000006121f2b3844505b667683909ca99e9285786c60544a3f3329241d19181b2227343c46535f6976838f9ca99f9286796d6053463a2d2013070000000000000000020b141c2228363e464e565d606c717b838d929f98928b80736e645b51473d31281e13080000000000000000071119232b353d474f59606b707d869298a2a39b918c7f726d6c707e879299a3a39992877e716c615a50483e362c241a1208000000000000020d17212930363a3b4646464646464646463936302820160c0200000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e0100000000000000000000000000000000000000000000000000000a141d29323d44505c666e7b85929ea4ada2979083786d60594f443b2f261c11060000000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d6976839098897c6f635a56555d60686d737a80858b8f9192928f8b847c6f6a5f544a3f34281c10030000000000000000000000000000000916222f3c4955626f7c8895a2afa4978a7d717d8692989f9c9799929291919298989ea0a8aba69f9792867d70695f53493f2f261c11060000000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00020e1a26313b4754616e7a86929fa7b1bac2cbd1d6dcd5c9bcafa296897c6f635653535c6976838f9c9286796c5f53534b49453e362d22170c000000030e18212b353d474f58606a6f7c8592918c8c9191857c6f6a60584f473d352b21180e0300000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000814212d3a47535f696e736c665f57524c484644404547494a5053545c6063676d71757a7d8083848586858583817e7a756f6a615d564c443a3025190d0100000000000000000000000005111c27313a434a4e505353504e4a433a31271c110500000000000000000000000000000000000000010e1a2734414d5a6774808d9a9f9f9f978a7d7164574a3e3124170b000000000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e2114080101010101010101010101010101010101010101000000000000000000000004111d2a3744505d6a778386868686867f7265584c3f3225190c000005121f2b3845525e6b7885919ea6998d8073665a4d40333845525e6b7885919ea6998d8073665a4d4033271a0d00000713202d3a4653606d798693a0aca79a8e8174675b4e412e23180c00000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b0000000009141f29333d474f5860676d72787d8082848586858483807e79736d6760594f473d32281e0c030000000000030f1c28333f4a546673808d99a7a1978a7d70665b50443e352f292423282d333d464f59616e7b86929faa9c908376665c5145382c1f13060000000000000001070d111317242d343c444c525a62696e78808b92999f928c80736d63594f433a2f24190d010000000000000000071119232b353d474f59606b707d869298a2a39b918c7f72707e879299a3a39992877e716c615a50483e362c241a12080000000000000000050f171f252a2d2e39393939393939392e2d2a251e160e050000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e010000000000000000000000000000000000000000000000000000020b172028343f4a545e69707d8a929da7a99f958d80736b61564d42382d22170e05000000000000000000000000000000000000000000000000000000000000000000010e1b2834414e5b6774818e9a8e81756c656364676d737a80868d92989c9e9f9e9c9691857c6f665c5044382b1f13080000000000000000000000000000000916222f3c4955626f7c8895a2afa4978a7e71707d8690959da0a39f9e9e9e9fa3aaa9a8a69f9c948f857d706b60574d41382d1d140a000000000000000000000000000613202c3946535f6c7986929f9f9f9a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00000914202d3946525e6873808c95a0a8b1bbc0c7cbd0d0c9bcafa296897c6f63606060606976838f9c9286796c606060585650483e34291d110500000915202a333d474f59606a6f7c8592918c7f7f8c9192857c6f6a60594f473d332a20150900000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000815222e3b4855616e7b7f786e69615e565453504b515356545b6063666d70757a7e82868a8d909192939291908e8b86827c746d685e564c41362a1e11050000000000000000000000000a16222d38434c545a5d60605d5a544c43382d22160a00000000000000000000000000000000000000000d1a2633404d596673808c99a6aca4978b7e7164584b3e3125180b000000000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e2114080000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919393938c7f7265594c3f3226190c000005121f2c3845525f6b7885929ea69a8d8073675a4d40343845525f6b7885929ea69a8d8073675a4d4034271a0d01000713202d3a4653606d798693a0aca89b8f827568544b4034281c1004000916232f3c4956626f7c8995a2afa4988b7e7165584b3e3225180b00000000030d17212b353d464e555c60666d70737677787978787674716d67605d554f473d352b20160c000000000000000b17222d3c4956636f7c8995a0a99d9083786c605a50454039352f2e34383f444e58616b75818e99a3a3988c7f7265544b4034281c1004000000000000040c13181d202021222a323a414550575f666d747e8792989c928c7f726b61564c4135291d1307000000000000000000071119232b353d474f59606b707d869298a2a39b918b7f7d879299a3a39992877e716c615a50483e362c241a120800000000000000000000050d141a1e20212d2d2d2d2d2d2d2d21201d19130c05000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e01000000000000000000000000000000000000000000000000000000050e17232e38424d57616c74808d95a0aaa79f93887d70695e544a3f332820160b020000000000000000000000000000000000000000000000000000000000000000000c1825323f4b5865727e8b98938b7f75717071747a80858d92989fa2aaa4a3a5a8a1979083786d6053463a2f24190d0100000000000000000000000000000916222f3c4955626f7c8895a2afa4978a7e716b707c838b9195989b9d9e9f9f9f9e9d9b9894908a827b706b60594f453b2f261b0b02000000000000000000000000000613202c3946535f6c798692939393938d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000005111e2a36414c56606d798390969fa7afb5babfc2c3c4bcafa296897c6f6c6c6c6c6c6c76838f9c9286796c6c6c6c64625a5045392d21150800020f1a26313c464f59606b6f7c8592918b7f72727f8b9192857c6f6b60594f463c31261a0f02000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000815222f3b4855626e7b88827b736d686461605b555d606265666c7074797d81858a8f92999a9c9e9f9f9f9e9d9b99928f87817a6d685e5246392d2013070000000000000000000000010d1a26323e4a545e66696c6c69665e544a3e32261a0d01000000000000000000000000000000000000000c1925323f4c5865727f8b98a5b2a5988b7f7265584c3f3225190c000000000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e2114080000000000000000000000000000000000000000000000000000000000000005111e2b3844515e6b7784919e9f998c7f7266594c3f3326190c000006131f2c3946525f6c7985929fa79a8d8074675a4d41343946525f6c7985929fa79a8d8074675a4d4134271a0e01000713202d3a4653606d798693a0aca99d908376665c5145382c1f130700091623303c4956636f7c8996a2afa4988b7e7165584b3e3225180b0000000000060f19232b343d434b51545c606366696b6c6c6c6b6a6764605d55514b433d342b23190e04000000000000000615222f3b4854606b7784919da8a0958c7f726c615a514b4541403f4045495058606a707d8a939eaa9f92867a6d6154473a2e23180c000000000000040d161d24292c2d2e2f30302f353e454d545c606c717d8692999f93887d70685d52453a2f24180d01000000000000000000071119232b353d474f59606b707d869298a2a39b918b869299a3a39992877e716c615a50483e362c241a120800000000000000000000000002090e12141520202020202020201413110d080200000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e010000000000000000000000000000000000000000000000000000000006111c26303b45505a606d79839098a2aea49a92857b6e665b50443d32281d140a0000000000000000000000000000000000000000000000000000000000000000000815222f3b4855626e7b88959b918b827e7d7e81858c92989fa2a29f9a9796989c9f9f958a7d7164554c4135291d110400000000000000000000000000000916222f3c4955626f7c8895a2afa4978b7e71646a6e787e84888c8e909192929291908e8b88837d766e6960594f473d33291d140a00000000000000000000000000000613202c3946535f6c79878686868686868074675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0000020e1925303b45515c666e7b8490959fa3abaeb4b6b7b8b9afa296897d7979797979797979828f9c92867979797979716c6256493d3024170a0006121f2b37434e58606b707d8692918b7f726d6d727f8b9192867d706b60584e43372b1f1206000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000815222f3b4855626e7b888f86807a75716e6c666b676d6f7175797c81858a8e92989c9fa3aba39f9e9d9d9d9fa3a39f9a938e847a6d6154473a2e2114070000000000000000000000030f1c2935424e5a66707679797670665a4e4235291c0f03000000000000000000000000000000000000000b1724313e4a5764717d8a97a4b0a6998c807366594d4033261a0d000000000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e2114080000000000000000000000000000000000000000000000000000000000000005121e2b3845515e6b7884919ea6998c807366594d4033261a0d00000613202c3946535f6c7986929fa79a8d8174675a4e41343946535f6c7986929fa79a8d8174675a4e4134271b0e01000713202d3a4653606d798693a0acac9f9286796d6053463a2e23180d060a1723303d4a5663707d8996a3b0a4978b7e7164584b3e3125180b000000000000081119222b303940454a5053575a5c5e5f5f5f5e5d5a5753514b45413a312b22191107000000000000000007131f2c38434f5965727f8b96a1a79f93887e716c605d55524c4c4c4b51535b606a6f7c86929fa5a3988e8174685e5246392d1d12070000000000010c161f282f35393a3b3c3c3d3d3c383b424a515a626b707e87939f9a92857a6d60554b4135291d110400000000000000000000071119232b353d474f59606b707d869298a2a39b999299a3a39992877e716c615a50483e362c241a120800000000000000000000000000000002050708131313131313131307070501000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e0100000000000000000000000000000000000000000000000000040404000a141e29333e45515c676e7b86929fa5aca1978f82786c60594f443a2f261b110600000000000000000000000000000000000000000000000000000000000000000814212e3a47535f6a7784919d9b948f8b898a8d92989fa2a29f98928d8a898b90949c9c8f8276675d5145392c20130600000000000000000000000000000916222f3c4955626f7c8895a2afa4978b7e71645f666d71777b7f8183858586858583817e7b76706b615e574f473d352b21180b02000000000000000000000000000006121f2c3845525e6a7579797979797979746e64584c3f33261a0d000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00000008141e2834404b545e696e7b838d92999fa3aaa9aaabacaea5998f8986868686868686868f949f988986868686867e7164584b3e3125180b000814212e3a47535f6a707d8692918b7f726d62626d727f8b9192867d706a5f53473a2e211408000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000815222f3b4855626e7b8898928d86827e7b797877787a7c7e8285898d92979b9fa2a7a09d9999929190909192999a9ea19f96887b6e6255483b2f221508000000000000000000000003101d2a3643505d69768286868276695d5043362a1d1003000000000000000000000000000000000000000916232f3c4956626f7c8995aab4a79a8e8174675b4e4134281b09000000000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e2114080000000000000000000000000000000000000000000000000000000000000005121f2b3845525e6b7885919ea6998d8073665a4d4033271a0d000006121f2c3844515c667986939fa79b8e8174685b4e41353844515c667986939fa79b8e8174685b4e4135281b0e02000713202d3a4653606d798693a0acaea398897c6f62544b4034281f1612101824313e4b5764717e8a97a4b1a4978a7e7164574b3e3124180b000000000000000810191e272e34383f44464a4d505152535251504d4a47454039352f281f191007000000000000000000030c1b27323d4753606d7984919eaca49a92867e736d67605d565959545c60656c717c859198a2ac9f92867b6e61564c4135291d0c03000000000007131d28313a4045474848494a4a48443d3940445059616c73808c96a0978d8073675d5145392c2013060000000000000000000000071119232b353d474f59606b707d869298a2aba39fa3a39992877e716c615a50483e362c241a12080000000000000000000000000000000000000000060606060606060600000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e010000000000000000000000000000000000000000000306080911111111110c17212834404b555f69717e8a939da8a99f948c7f736b60564c41382d22170d040000000000000000000000000000000000000000000000000000000000000006121e2b37424e5765727e8b95a09e9c9896979a9fa2a39f98928c85817e7d7e838c929f92867a6d6054473a2d21140700000000000000000000000000000916222f3c4955626f7c8895a2afa4978b7e7164545c60646a6e72757778787979787675726e69636159534d453d352b23190f0600000000000000000000000000000004111d2a36424e59636a6c6c6c6c6c6c6c67645c52473c3024170b000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000020c18232e39424d575e696e7880878d9298999c9d9e9fa39fa1999693939393939393939c9fa6a393939393938b7e7164584b3e3125180b000815222f3b4855626e7b8592938b7f726d625b5b626d727f8b9192857b6e6255483b2f221508000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000815222f3b4855626e7b88959f98928e8b878685848586898b8e92979a9ea1a8a09e9995908c89868483838486898d92979e95887b6e6255483b2f221508000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000000000814212e3b4754616e7a8798a2aea89b8f8275685c4f4230251a0e020000000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e2114080000000000000000000000000000000000000000000000000000000000000005121f2c3845525f6b7885929ea69a8d8073675a4d4034271a0d01000713202d3a4653606d79869aa4a89b8e8175685b4e42353a4653606d79869aa4a89b8e8175685b4e4235281b0f02000713202d3a4653606d798693a0acb4aa998d8073665c51453b3128201f1c1e26323f4c5965727f8c98a5b0a3968a7d7063574a3d3024170a0000000000000000070c151d23282e34383a3d4043444546454543413e3a38352f29241d160d07000000000000000000000b151e2b353d45515c67717d8a9aa4aca298928a8079716d6867666567666d70787e869197a1aaa6998c8073695e53493f372d1e150b00000000010d18242f3a434b51535455565756554f473d343f47505a606d7884919e9f92857a6d6054473a2d211407000000000000000000000000071119232b353d474f59606b707d86929facafacac9f92877e716c615a50483e362c241a1208000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e0100000000000000000000000000000000000000030a0f1215151e1e1e1e1e1e1e18232e39434d57616c74818e96a0aaa69f93877d70685e53493f33271f160c01000000000000000000000000000000000000000000000000000000000000020e1a26313c4653606c78839097a1a8a4a3a4aaa29f98928d86807a74717072767f8c94998a7d7063574a3d3024170a00000000000000000000000000000916222f3c4955626f7c8895a2afa4978b7e7164585053585f6265686a6b6c6c6c6b6a6865615f57554f46423b332b2319110700000000000000000000000000000000010e1a26313d4751595e5f6060606060605a58524a41362b1f1408000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0000000007121d27303b454d575e666d747b8186898d8f909192999393939393939393939393939393939393939393938b7e7164584b3e3125180b000814212e3a47535f6a74808d887f726d625b51515b626d727f8b8d80746a5f53473a2e211408000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000815222f3b4855626e7b88949fa29f9b979992919192939a989b9ea1a9a29e9a96918c8883807d7a78767677797c80858b9297887b6e6255483b2f221508000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000000000613202d394653606c7985929facaa9d9083776a574d42362a1e11050000000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e2114080000000000000000000000000000000000000000000000000000000000000006131f2c3946525f6c7985929fa79a8d8074675a4d4134271a0e01000714202d3a4753606d7a8693a0a89b8e8275685b4f42353a4753606d7a8693a0a89b8e8275685b4f4235281c0f02000713202d3a4653606d798693a0acb8ab9e9285796d60574d433a322d2c282a2d36424d576774818e9aa7b3a995897c6f6256493c2f231609000000000000000000030b12181c23282b2d30333638393939383734312d2c29241d18130c040000000000000000000007121c27303d474f59606b707d87939facaaa29f928d847e7a767473727375797d838b9298a1a9b3a5998c7f726d625b51493f30271d120700000004111d2935404b555d60616263636360594f4438353e44505c66727f8b98a2988a7e7164574b3e3124180b00000000000000000000000000071119232b353d474f59606b727f8c98a5b2b3a79a8d80746c615a50483e362d241b120900000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e01000000000000000000000000000000000000060e151a1f21222b2b2b2b2b2b2b2b2b27303c45505a606d79849198a3aea49991847a6d655b50443d31281e13080000000000000000000000000000000000000000000000000000000000000009151f2b3844505b666f7c8591969c9f9f9e9c98928d86807a736d686463656d76828f998d8073665a4d4033271a0d00000000000000000000000000000916222f3c4955626f7c8895a2afa4978b7e7164584b464e5355595b5d5e5f5f5f5e5d5b5855534d48443e363129211911070000000000000000000000000000000000000915202b353f474e52535353535353534e4c4741382f241a0e03000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00000000000b151e29333b454d545c60696e747a7d808384858686868686868686868686868686868686868686868686867e7164584b3e3125180b0006121f2b37434e58646e74817e726d625b514949515b626d727f80746e64584e43372b1f1206000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000714212d3a4754606d79828b92989ea1a8a39f9e9e9f9fa4aca9a19e9a97928e89847f7b7773706d676a6a666d6f73797f858f887b6e6255483b2f221508000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000000000005121f2b3744505b657783909daaac9f928579695e52463a2d2014070000000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929fa79a8d8174675a4e4134271b0e01000714212d3a4754606d7a8793a0a89b8f8275685c4f42353a4754606d7a8793a0a89b8f8275685c4f4235291c0f02000713202d3a4653606d798693a0acb9ada1978b7e71695e554c443e3a3834363a3d46535e697784909daaada297877a6e6154473b2e2114080000000000000000000000070c11171c1f202427292b2c2c2c2b2a2724201f1d18120d070100000000000000000000000c18232e39424f59606b707d86929aa4aba9aca49c96918b8682807f7f8082858a90959fa3aaaaaca79c918b7f726d625b5142392e23180c0000000613202c3945515d676d6e6f6f70706b6055483d32343f4a54616e7b8899a49a8d8174675a4e4134271b0e010000000000000000000000071119232b353d474f59606b707d86929facacacac9f92877e716c615a50483e362d241b1209000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e01000000000000000000000000000000000006101820262b2e2f3737373737373737373737333e45515d676f7c86929fa5aba1968f82776c60584e433a2f24190d06000000000000000000000000000000000000000000000000000000000000030f1c28333f4a545f6a6f7c848c909292918f8b86807b746e68605d56565b64707d8a998f8275685c4f4235291c0f02000000000000000000000000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e4347484c4e505252535252504e4b4846423b38332a251f170f0700000000000000000000000000000000000000040f19242d353d424546464646464646413f3c362f261d130800000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0000000000030c172129333b424a51575e61676d7073767778797979797979797979797979797979797979797979797979716c6256493d3024170a00020f1a26313c46525c646e74726d625b51493f3f49515b626d72746e645c52463c31261a0f02000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000613202c3945515d676d767e858c9196989b9d9e9f9f9e9d9a9897928e8a85817c77736e696663605d55545c6063676d727a81887b6e6255483b2f221508000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000000000000030f1b27333f49536874818e9ba7aea298877b6e6154473b2e2114080000000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e2114080000000000000000000000000000000000000000000000000000000000000006121f2c3844515c667986939fa79b8e8174685b4e4135281b0e02000814212e3b4754616e7a8794a1a89c8f8275695c4f42363b4754616e7a8794a1a89c8f8275695c4f4236291c0f03000713202d3a4653606d798693a0acb1a7a09d92857b6e675d56504846443f4246474f58616e7b8795a0acab9f928578685e5246392d20140700000000000000000000000000060b101213171a1d1e1f201f1e1d1a171413100c070100000000000000000000000004101c2834404a54606b707d869298a3a69f9c9fa4a8a19e99928f8d8c8c8d8f92989da0a7a7a09da0a7a39b918b7f726d62544b4034281c100400000714202d3a4753606d797b7b7c7d7d7063584e4338313a4653606d7986939f9c8f8276695c4f4336291c100300000000000000000000071119232b353d474f59606b707d869298a2a39f9fa3a39992877e716c615a50483e362d241b12090000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929faca79b8e8174685b4e4135281b0e0200000000000000000000000000000000030e18222a31373a3c44444444444444444444444444404b555f6a727f8b939ea8a89e948c7f726a60554c41352922180c010000000000000000000000000000000000000000000000000000000000000b17222d38424e585f6a6f797f83858684827f7a736e69615e56524c4a54606d7987868683776a5e5144372b1e1104000000000000000000000000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e373a3b3f4244454546464543423f3b3a36312c28211a140d050000000000000000000000000000000000000000000a16202b343d4347494949494949494846423b33291f140900000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000050f172029303940444d53555d606366696a6b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c64625a5045392d21150800000915202a33414a525c646765625b51493f37373f49515b626567645c524a41332a20150900000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0004111d2935414b555d606d717a7f84898c8f9091929291908e8b8885817d79746f6b66615f575653514b4b5153555c60686d757f7b6e6155483b2e221508000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000000000000000b17222d3f4c5865727f8b98aab4aa96897c706356493d302316080000000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d79869aa4a89b8e8175685b4e4235281b0f02000815212e3b4854616e7b8794a1a99c8f8376695c5043363b4854616e7b8794a1a99c8f8376695c504336291d1003000713202d3a4653606d798693a0acaca09590959082796d68615a5553504a4d525459606a74808d9aa7b1a99c8f827669564d41362a1e11050000000000000000000000000000000306070a0d101112131212100e0b07060400000000000000000000000000000006121f2c3844515c66707d869298a3a39c948f939aa0a7aba39f9c9a99989a9b9fa2aaa8a19e9590959ba3a39b918b7f72665c5145382c1f13060003101c2936434f5c6976828788898a85786a605448423f404653606d798699a49c8f8376695c504336291d1003000000000000000000071119232b353d474f59606b707d869298a2a399929299a3a39992877e716c615a50483e362d241b120900000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929faca89b8e8275685b4f4235281c0900000000000000000000000000000000000a15202a343c4347485151515151515151515151515151514e58626d75818f96a1aba69f92877c6f675d51453f34291d110500000000000000000000000000000000000000000000000000000000000006111c262f3c464e585f676d727678797876726d68615e56524c454145515d67757979797771675b4f43362a1d1004000000000000000000000000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e312e2f32353738393939383735322e2d2a261f1c170e0903000000000000000000000000000000000000000000030f1b27323d464e545656565656565654534d453b31251a0e02000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00000000000000050e171e272e343b42464b5153565a5c5d5e5f6060606060606060606060606060606060606060606060585650483e34291d11050000030e18212f38414a52585a585651493f372d2d373f495156585a58524a41382f21180e0300000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00010d18242f3a434b515a62686d72797c7f82848586858583817f7c7974706d6663605955534d494745404045464b51565e616d726e695f53473a2d211408000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000000000000000616232f3c4956626f7c8998a3aea5988c7f7265594c3f3025190d0100000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0a89b8e8275685b4f4235281c0f02000815222e3b4855616e7b8894a1a99c908376695d5043363b4855616e7b8894a1a99c908376695d5043362a1d1003000713202d3a4653606d798693a0acaa9d9084909490827a716c6562605c54565e61646b707c87929facb0a6998c7f7266594c3f3025190e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d79849197a1a49c918c838790959c9fa4aca9a7a6a5a6a8a8a7a09d96918a848c919ba3a0959084796d6053463a2d20130700000d1a2733404d5a6673808d959697897c6f625b534d4c4d4f58626f7c8895ab9b8e8275685b4f4235281c0f020000000000000000071119232b353d474f59606b707d869298a2a3999286869299a3a39992877e716c615a50483f362d241b1209000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929faca89c8f8275695c4f4230251a0e02000000000000000000000000000000030f1a26313c464e53555e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5b606d7a849199a3aea39991847a6d605a50453a2e211509000000000000000000000000000000000000000000000000000000000000000a141d2a343c464e555d6065696c6c6b6965615e56524d46413b35414b555d6b6c6c6c6a675f564b3f33271b0e02000000000000000000000000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e31252226282a2b2c2c2c2b2a282522211e1a14100b05000000000000000000000000000000000000000000000006131f2b37434e586062626262626262615e574d42362a1e1205000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0000000000000000050c151c232831363a4045474a4d5051525353535353535353535353535353535353535353535353534b49453e362d22170c00000000060f1d262f3841474c4e4b4a453f372d25252d373f464a4b4e4c4741382f261d0f060000000c1925323f4c5865727f8b989f9f998d8073665a4d4033271a0d000007131d28313a414550565d60666d6f727577787979787674726f6c6663605c54544f4846423d3a393534383a40454c525b6265615f574d42372b1e1206000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000000000000000713202d3a4653606d7986929faca89b8e817568564c41362a1e110500000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0a89b8f8275685c4f4235291c0f02000815222f3b4855626e7b8895a1a99d9083766a5d5043373b4855626e7b8895a1a99d9083766a5d5043372a1d1004000713202d3a4653606d798693a0aca396897d85929490847d76726e6d666b6b696e71757d859299a3afab9f94887b6e6155483b2e2215080000000000000002060a0c0d1313131313131313131313131313131313131313131312110f0c0701000000000000000006121f2c3844515c666e7c8591979c928c7f767c838a8f939a9a9d9e9f9f9e9d9b9895908b847e777f8c919b9691837a6e665c5145382c1f130600000916232f3c4956626f7c89959f9c8f82756d615e57595959616a73808d99a8998d8073665a4d4033271a0d0000000000000000071119232b353d474f59606b707d869298a2a39992877d7d879299a3a39992877e716c625a50483f362d241b12090000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaa9d9083776a574d42362a1e120500000000000000000000000000000006121f2b37434e585f626a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a686f7c87929facaba0968e81756c62564a3d3124170b00000000000000000000000000000000000000000000000000000000000000020b18222a343c434b5154595d5f5f5e5c5854524c46423b36302f3a434b515e6060605e5b564d44392e22170b00000000000000000000000000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e312518191b1d1f1f201f1f1d1b181514120e0903000000000000000000000000000000000000000000000000000815222e3b4754606a6f6f6f6f6f6f6f6e695e53463a2d211407000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000030b12181f252a2f35393a3d404344454646464646464646464646464646464646464646464646463e3d39342d241b110600000000000b141d262f363c40413f3d3a342d251b1b252d343a3d3f413f3c362f261d140b000000000c1925323f4c5865727f8b939393938d8073665a4d4033271a0d0000010c161f282f353f444c52545c606265686a6b6c6c6b6a676562605b5453514a48433d3a36312d2c29282c2f343a414651575955534d453c31261a0e02000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000000000006121f2c3844515c667683909ca9aa9e918477685e5246392d20130700000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a8794a1a89c8f8275695c4f4236291c0f03000915222f3c4855626f7b8895a2aa9d9083776a5d5044373c4855626f7b8895a2aa9d9083776a5d5044372a1d1104000714202d3a4753606d7a8693a0ada194887b7e8b9296918a837f7b79787778797a7d82889297a1abafa4998f8276695f53473a2d211408000000000000070d12161919202020202020202020202020202020202020202020201f1e1b18130c050000000000000004101c2834404a545f6a6e7c8591928c7f736d6f787d82878b8e9091929291908e8b88837e79716d727f8c9191847a6e685e544b4034281c100400000815222e3b4754606a7783909a9e948c7f756e69676666676b707c86929fa096897c6f6356493c3023160900000000000000071119232b353d474f59606b707d869298a2a39992877e70717e879299a3a39993877e716c625a50483f362d241b120900000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facac9f928579695e52463a2d2014060000000000000000000000000000000815212e3a47535f6a6f777777777777777777777777777777777777777777777f8c99a5b2a89e938b7e7165584b3e3225180b0000000000000000000000000000000000000000000000000000000000000000061018222a313a4145474c50525352504c4746413a36302a2528313a414547535353514f4b443b32281d110600000000000000000000000000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e3125180c0f111212131312100f0c080705020000000000000000000000000000000000000000000000000000000916232f3c4956626f7c7c7c7c7c7c7c7b6e6154483b2e211508000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d0000000000000000000000070c141a1d24292c2d303336373839393939393939393939393939393939393939393939393931302d29221b1209000000000000020b141d242b30333432312e29231b12131b23292e31323433302b241d140b02000000000c1925323f4c5865727f8686868686868073665a4d4033271a0d000000040d161d2429323a41454a505356595c5d5e5f5f5e5d5b585553504a4644403938322d2a2620201d1c1f232930363f464a4c4847423c332a1f150900000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000000000004101c2834404a5466737f8c99a9aca096877a6d6154473a2e21140a00000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8794a1a99c8f8376695c504336291d1003000916232f3c4956626f7c8995a2aa9d9084776a5d5144373c4956626f7c8995a2aa9d9084776a5d5144372a1e1104000714212d3a4754606d7a8793a0ada194877b74818e949e95908c888685848585878a8f939aa1a9afa59f93877c6f62574d42372b1e120600000000010a12191e2325262d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b2b28241e170f06000000000000000c18232e39424e575f6a6e7c858c80736d63666d70767b7e81838485858584817f7c77726d67626d727f8b847b6e685e564c42392e23180c00000006131f2b38434e5863707d88939f9c918c817b7673727374777d859298a29e9184786d6053463a2d201307000000000000071119232b353d474f59606b707d869298a2a39992877e706c6c717e879299a3a49993877e716c625a50483f362d241b1209000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929facaea298877b6e6154483b2d22170b0607080808060200000000000000000915222f3c4855626f7c8484848484848484848484848484848484848484848484919daab7afa59f9285786c5f5245392c1f120600000000000000000000000000000000000000000000000000000000000000000610181f282f35393a3f43454645433f3a3936302a251f191f282f35393a46464644433f39322920160b0000000000000000000000000000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e3125180b020405060606050402000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c79878989898989898074675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00000000000000000000000003090e13181d20202327292a2b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2524211d1711090000000000000000020b131a1f2426272524221d1811090911181d2224252726241f1a130b0200000000000b1825313e4a56626d72797979797979736e63584b3f3226190c00000000040c131820282f35383f4446494c4f5152535252504e4c4946443f3a38342e2c27211e1a1413101013181e252a353a3e3f3b3a37312a21180e0300000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000000000000000c18232e3c4956626f7c8997a2ada8978a7e7164574a3e31261b0f03000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8894a1a99c908376695d5043362a1d100300091623303c4956636f7c8996a2aa9e9184776b5e5144383c4956636f7c8996a2aa9e9184776b5e5144382b1e1105000714212e3a4754616d7a8794a0b4ab94877a6d78828f939f9d989a939291919298979b9fa4acaba39f938d80736a6054453c31261a0e02000000000a131c232a2f3233393939393939393939393939393939393939393939393837342f2921180f0500000000000007121c27303c454e575f6a6e7c7f736e635b5c6064696e717477787979787775726f6a65605d5b626d727e7b6e695e564d443b30271d1207000000030f1b27323d4854606b73808d939f9c938e8783807f8081848a9297a19f928a7d70665c5044382b1f12060000000000071119232b353d474f59606b707d869298a2a39992877e716c61616c717e879299a3a49993877e716c625a50483f362d241b12090000000000000000000000000000060606060606060600000000000000000000000613202c3946535f6c7986929facb4aa978a7d7064544a3f33281c131313151514120f0a030000000000000916222f3c4955626f7c889191919191919191919191919191919191919191919196a0acb8b8ac9f9285796c5f5246392c1f1306000000000000000000000000000000000000000000000000000000000000000000060d161d24292c2d323639393836322e2d2a251e19140d161d24292c2d3939393736332e2820170e040000000000000000000000000000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e3125180b000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c798692959595958d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d000000000000000000000000000001070d111314171a1d1e1f202020202020202020202020202020202020202020202020181715110c060000000000000000000001080e14171a1b181815120c060000060c121518181b1a17140e08010000000000000916222e3a46515b62656c6c6c6c6c6c66635c52473b2f23170a000000000001070d161e24292e34383a3c3f42444546464543413f3c3938332d2c28231c1b16120e09060404070c131923292e31322e2d2b261f180f060000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000000000000000713202d3a4653606d7985929eaba79b8e817468584e43372b1f1206000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000815222f3b4855626e7b8895a1a99d9083766a5d5043372a1d1004000a1623303d495663707c8996a3ab9e9184786b5e5145383d495663707c8996a3ab9e9184786b5e5145382b1e1205000814212e3b4754616e7a87949f9fa39986796d6d79818c92989fa29f9e9e9e9fa2aaa8a9aaa29f99928b81786d60584e43332a1f15090000000007121c252e353b3e40464646464646464646464646464646464646464646464544403a332b21170c010000000000000b151e2a333c454e575f6a6e726d635c525053575e6164676a6b6c6c6b6a6865625f585351515b626c716e695e574d443b32291e150b00000000000a16202c38444f59606c77808c92989f9992908d8c8c8e91969e9f99928c80736b61544a3f34281c100300000000040f19232b353d474f59606b707d869298a2a49992877e716c615a5a616c717e879299a3a49993877e716c625a50483f362d241b110600000000000000000002050708131313131313131307070501000000000000000613202c3946535f6c7986929facb4a79a8e8174665b5044382d22201f202222211f1a150e0600000000000916222f3c4955626f7c88959d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9da0a8b2acacac9f9285796c5f5246392c1f130600000000000000000000000000000000000000000000000000000000000000000000040c13181d2021262a2c2c2b292521201d19130e09040c13181d20212d2d2d2b2a27221d160e05000000000000000000000000000000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e3125180b000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929fa2a29a8d8174675a4e4134271b0e000c1925323f4c5865727f8b98a5a6998d8073665a4d4033271a0d00000000000000000000000000000000010406070a0d1011121313131313131313131313131313131313131313131313130b0a0805000000000000000000000000000003080b0d0e0c0b090501000000000106090b0c0e0d0b0803000000000000000006121e29343f495156586060606060605a58524a40362a1f130700000000000000040c13191c23282b2d2f323537383939383734322f2d2b28221f1c18120f0a0502000000000002080d181e22252622211e1a150e06000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000000000000000006121f2b3844505c6674818e9baaab9e9184786a5f53473a2e21150a000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b8895a2aa9d9083776a5d5044372a1d1104000a1723303d4a5663707d8996a3ab9e9185786b5e5245383d4a5663707d8996a3ab9e9185786b5e5245382b1f1205000815222e3b4855616e7b889393939392867966676d787f868d92989a9c9e9e9f9f9e9d9c9998928d877f746d665c50463d3221180e03000000020d19232e3740464b4c5353535353535353535353535353535353535353535352504c453d33291e1307000000000000030c18212a333c454e575f6266635b524944464d5354585b5d5e5f5f5e5d5b5855534e474549515a6265615e574d453b322920170c03000000000004101c27323d44505b656c777f868e92999b9c9a99999a9d9b99938f867f736e63594f42382e23170b00000000000b16212b353d474f59606b707d869298a2a49993877e716c615a50505a616c717e879299a3a49993887e716c625a51483f372d23180c0100000000000002090e12141520202020202020201413110d080200000000000613202c3946535f6c7986929facb8ab9e9185786c60544a3f332d2c2c2d2f2f2e2b2620180f06000000000916222f3c4955626f7c88959f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9285796c5f5246392c1f1306000000000000000000000000000000000000000000000000000000000000000000000001070d111314191d1f201f1d191413110d0802000001070d1113142020201e1d1b17110b0400000000000000000000000000000000000916222f3c4955626f7c8895a2aca4978b7e7164584b3e3125180b000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929faca79a8d8174675a4e4134271b0e000c1925323f4c5865727f8b989f9f998d8073665a4d4033271a0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18232d373f464a4c5353535353534d4b4740382e24190e02000000000000000001080d11171c1f202326292a2b2c2c2b2a282522201f1c1712100c070000000000000000000000070d121618191514120e090300000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000000000000000003101c28343f4a5464707d8a98a2ada196887b6f6255483c31261a0f000000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c8995a2aa9d9084776a5d5144372a1e1104000a1724303d4a5763707d8a96a3ab9e9285786b5f5245383d4a5763707d8a96a3ab9e9285786b5f5245382c1f0600000916232f3c4956626f7c86868686868685786b5c666c727b80858a8d8f9192929291908f8c8a86807b726d605c544a3f342b200f060000000006121e2a354049515759606060606060606060606060606060606060606060605e5c574f453a2f24180c00000000000000060f18212a333c454e53555957514940383b4246484b4e5051525252514f4c4847433c393f4850565854534d453b332920170e05000000000000000b162127333f49535b656c727b81868b8e9091929291908e8b87827c726d635c52473e30261c11060000000003101b27323d474f59606b707d869298a2a49a93877e716c615a504848505a616c717e879299a4a49a93887e716c625b51493f34291d11050000000000050d141a1e20212d2d2d2d2d2d2d2d21201d19130c05000000000613202c3946535f6c7986929facb4aba1978a7e71665b50443f3a39383a3b3b3a37312a22180e030000000916222f3c4955626f7c8893939393939393939393939393939393939393939393939393939393939285796c5f5246392c1f130600000000000000000000000000000000000000000000000000000000000000000000000000010406070c10121312100c070705010000000000000104060713131311100e0b06000000000000000000000000000000000000000916222f3c4955626f7c88959f9f9f978b7e7164584b3e3125180b000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929f9f9f9a8d8174675a4e4134271b0e000c1925323f4c5865727f8b939393938d8073665a4d4033271a0d00000000000000000000000000000000000000000000000000000000000000000000040613131313131313131312110e09040000000000000000000000000000000000040613131313131313131312110e0904000000000000000000000000000000000007111b252d343a3e3f464646464646403f3b362e261c1208000000000000000000000000060b10121316191c1e1f201f1f1d1b191613120f0b060400000000000000000000000000000106090b0c08080602000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000000000000000b17232e3a4753606d7985929faca8998c7f7366584e43372b1c11060000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e21140800000000000000000000000000000000000000000000000000000000000000091623303c4956636f7c8996a2aa9e9184776b5e5144382b1e1105000a1724313d4a5764707d8a97a3ab9f9285786c5f52452e3d4a5764707d8a97a3ab9f9285786c5f52452e23170b00000815222e3b4754606a6f797979797979787368545b60696e74797d808284858685858482807d7a746e69625b504a42382e22190f00000000000a16232f3b46515b63666c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6861574c4034281b0f0000000000000000060f18212a333c4247484c4b463f372b31363a3b3e41444546464544423f3c3a37312c363f454a4b4846423b332920170e050000000000000000050b17222d384149535b606a6e757a7e81838585868584817f7b756f6a635b524940352c1e140a00000000000713202c38444f59606b707d869298a2a49a93887e716c615a50483e3e48505a616c717e879399a4a49a93887f726d625b51453a2e22150900000000050f171f252a2d2e39393939393939392e2d2a251e160e050000000613202c3946535f6c7986929facaea399929183786c6059504947454546484847433c342a20150a0000000916222f3c4955626f7c8686868686868686868686868686868686868686868686868686868686868686796c5f5246392c1f130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8893939393938b7e7164584b3e3125180b000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c798692939393938d8174675a4e4134271b0e000c1925323f4c5865727f8686868686868073665a4d4033271a0d0000000000000000000000000000000000000000000000000000000000000001070c10132020202020202020201f1d1a150f080000000000000000000000000001070c10132020202020202020201f1d1a150f08000000000000000000000000000000000009131b23292e313239393939393933322f2a241c140a000000000000000000000000000000030607090c0f1112131312100e0c090606030000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000000000000000006131f2c3845515d6774818e9ba8aa9d9184776a5f5347382e23170b0000000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000a1623303d495663707c8996a3ab9e9184786b5e5145382b1e1205000b1824313e4b5764717e8a97a4ac9f9285796c5f4a3f343e4b5764717e8a97a4ac9f9285796c5f4a3f34281c10030006131f2b37434e5860626c6c6c6c6c6c6b68615750575e61676d7073767778797978777673706d67615e5751443f3830261c100700000000000c1925323e4b57636d73797979797979797979797979797979797979797979797873685c5044372b1e11000000000000000000060f18212a31373a3b3f3e3a352e25252a2d2e313437383939383735322f2e2b26242d343a3d3e3b3a36312921170e050000000000000000000006111b262f38414950575f62686e717477787979787775726e69625f58514940372e231a0c0200000000000916222f3b4854606b707d869298a2a49a93887e716c625a50483e36363e48505a616c717e879399a4a49a93887f726d62564a3d3124180b000000020d17212930363a3b4646464646464646463936302820160c0200000613202c3946535f6c7986929facac9f9286928c7f736b605b53535151535555534e463c31261a0f0200000815222e3b4754606a76797979797979797979797979797979797979797979797979797979797979797974695d5144382b1f120500000000000000000000000000000000000003080c0e0e131313131313130f0e0c09040000000000000000000000000000000000000000000000000000000000000003070b0d0e131313131313130e0e0c08030000000000000916222f3c4955626f7c868686868686867e7164584b3e3125180b000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c79878686868686868074675a4e4134271b0e000b1825313e4a56626d72797979797979736e63584b3f3226190c000000000000000000000000000000000000000000000000000000000000030b12181c1f2d2d2d2d2d2d2d2d2c2c2a26201912090000000000000000000000030b12181c1f2d2d2d2d2d2d2d2d2c2c2a262019120900000000000000000000000000000000010911181e2225252d2d2d2d2d2d2726231f19120a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000000000000000004101d2935404b5563707d8996a1aca095887b6f62544a3f34281c100300000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d8996a3ab9e9185786b5e5245382b1f1205000b1825313e4b5864717e8b97a4ac9f938679665c5044383e4b5864717e8b97a4ac9f938679665c5044382b1f120600030f1b27323d464e54566060606060605f5c574f444d53555c606367696b6b6c6c6b6a696663605d55534d453f342e261e140a0000000000000d192633404c5966737f8686868686868686868686868686868686868686868685786b5e5245382b1f1200000000000000000000060f1820262b2e2f33322f2a231c1a1e212125282a2b2c2c2b2a282522211f1b1b22292e31322e2d2a251f170f050000000000000000000000000a141d262f383f444e53565e6165686a6b6c6c6b6a6865615e57534e463f372e251c11080000000000000a1623303d495663707d869298a2a39f93887f716c625a50483e362c2c363e48505a616c717e879399a4a49a93887e7265584b3f3225180c00000009141f29333b42464853535353535353535346413a32281e1308000005121f2b3744505b657986939faca79a8d818d93877d726c6562605d5c6062625f584e43372b1f1206000006131f2b37434e5860626c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6962584d4135291c10030000000000000000000000000000000001090f14181a1b202020202020201c1b191510090200000000000000000000000000000000000000000000000000000001080e1317191a202020202020201b1a18140f0901000000000815212e3b47535f6a7679797979797979716c6256493d3024170a0000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3845525e6a7579797979797979746e64584c3f33261a0d000916222e3a46515b62656c6c6c6c6c6c66635c52473b2f23170a0000000000000000000000000000000000000000000000000000000000030d151d23292c3939393939393939393836312b241b1208000000000000000000030d151d23292c3939393939393939393836312b241b12080000000000000000000000000000000000070d121618192020202020201a1917130e08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a0d0f101313100f0d0a0500000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000000000000000000000c18242f394653606c7884919eaba7998c8073665c5044382b1f140900000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a96a3ab9e9285786b5f5245382c1f0600000b1825323e4b5865717e8b98a4afa49986796d6053463a3e4b5865717e8b98a4afa49986796d6053463a2d20130700000a16202b343d43474953535353535352504c453b42464b5153575a5c5e5f5f5f5e5d5c595754514c46423b3328231c140c020000000000000d192633404c5966737f8c93939393939393939393939393939393939393939185786b5e5245382b1f120000000000000000000000060e151a1e21222625221e18120e121415181b1d1e1f1f1f1e1c191515120f11181d21242521211e1a140d0500000000000000000000000000020b141d262d333c42474c5254585b5d5e5f5f5e5d5b5854524d47433c342d251c130a000000000000020f1c2935424f5c6875828f949fa39b918b7f726d625a50483e362d24242c363e48505a616c717e879399a49e938e8175685b4e4235281b0f0200020e1a25303b454d525f60606060606060605f524c443a3025190d01000613202d394653606c78869aa4afa396897d869292877f78726e6d67676d6e6e6a5f53473a2e2114080000030f1b27323c464e5455606060606060606060606060606060606060606060606060606060606060605f5d5850463b3025190d00000000000000000000000000000000030b131a202427282d2d2d2d2d2d2d292825211b140c0300000000000000000000000000000000000000000000000000020b12191f2326272d2d2d2d2d2d2d282724201a130b0300000006131f2b37434e585f626c6c6c6c6c6c6c64625a5045392d2115080000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a36424e59636a6c6c6c6c6c6c6c67645c52473c3024170b0006121e29343f495156586060606060605a58524a40362a1f130700000000000000000000000000000000000000000000000000000000010b151f272f343846464646464646464645423d352d24190f0400000000000000010b151f272f343846464646464646464645423d352d24190f0400000000000000000000000000000000000106090b0c1313131313130d0c0a07020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a11161a1c1d20201d1c1a16110a030000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000000000000000007121f2b3844505b6673808c99a3ab9e9184796d6053463b30251a0e01000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3ab9f9285786c5f52452e23170b00000c1825323f4b5865727e8b98a5b5a093867a6d6053473a3f4b5865727e8b98a5b5a093867a6d6053473a2d2014070000040f19222b32373b3c4646464646464544403a3136394045474a4d4f5152535252514f4d4a4745413a3631292117110a02000000000000000d192633404c5966737f8c999999999999999da0a7a9a29f999999999999999185786b5e5245382b1f1200000000000000000000000003090e121415191816120d07020507080b0e1112131312110f0c09080603060c111517181514120e0903000000000000000000000000000000020b141b222731373b4146474b4e5152525352514e4c4846423b37312a221c130a01000000000000000714202d3a4753606d79828f949b918b7f726d625a50483f362d241b1a242c363e48505a626c717e87939a938e81786d6053463a2d201307000005121e2a36424d575e6c6c6c6c6c6c6c6c6c6c5e564c41362a1d1105000713202d3a4653606d798693a0b6a295887c818e99928c837f7b7a7979797b7c6e6255483b2f2215080000000a15202b343c4347495353535353535353535353535353535353535353535353535353535353535352514d463e342a1f1408000000000000000000000000000000010b151d252b303435393939393939393534312c261e150c000000000000000000000000000000000000000000000000000b141d242b303334393939393939393534302b251d150b010000030f1b26323c464e535560606060606060585650483e34291d110500000000000000000000000000000000000000000000000000000000000000000000000000000000010e1a26313d4751595e5f6060606060605a58524a41362b1f140800010d18232d373f464a4c5353535353534d4b4740382e24190e020000000000000000000000000000000000000000000000000000000007121d2731394045535353535353535353524e473f352b2015090000000000000007121d2731394045535353535353535353524e473f352b20150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d151c2226292a2d2d2a2926221c150d0400000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000000000000000000030f1c28333f4a54616e7b87929faca1968a7d7063574d42362a1d1307000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a97a4ac9f9285796c5f4a3f34281c1003000c1925323f4c5865727f8b98a5ada093877a6d6054473a3f4c5865727f8b98a5ada093877a6d6054473a2d21140700000007101920272b2e2f3939393939393837342f252a2f34383a3d404344454646454443403d3a39352f2a251f170f060000000000000000000d192633404c5966737f8c8c8c8c8c8c8c8c9095a0a297928c8c8c8c8c8c8c8c85786b5e5245382b1f120000000000000000000000000000020608080c0c0a060200000000000001040506060504020000000000000105090b0b08070502000000000000000000000000000000000000020a111720262b3036393b3e41444546464544423f3b3a36302b262018100a01000000000000000006131f2c3845515c676d79828f918b7f726d625b51483f362d241b12121a242c363e48505a626c717e88938e81786d665c5044382b1f120600000714202d3a46525e6976797979797979797976685e5246392d201307000714202d3a4753606d7a8693a0ada194887b7c88949f95918c8886858586888073675a4d4034271a0d000000040f19222b32373b3c464646464646464646464646464646464646464646464646464646464646464644413b342c22180d0200000000000000000000000000000009131d272f373c40414646464646464642413d3730271e0e050000000000000000000000000000000000000000000000030d1d262e363c3f414646464646464641403c372f271d13090000000a15202a343c434749535353535353534b49453e362d22170c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000915202b353f474e52535353535353534e4c4741382f241a0e03000007111b252d343a3e3f464646464646403f3b362e261c120800000000000000000000000000000000000000000000000000000000000c18232f39434b515f606060606060605f5e5951473d31261a0e010000000000000c18232f39434b515f606060606060605f5e5951473d31261a0e0100000000000000000000000000000000000000000000000000000000000106090b0c131313130c0b09060100000000000000000000000000000000000000000000000000000000000000030d161f272d32353639393635322d271f160d03000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000000000000000000000b17222d3846525e6975828f9ba7a89b8f8275695e52463a2f24180d000000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4ac9f938679665c5044382b1f1206000c1926333f4c5966727f8c99a5ada094877a6d6154473a3f4c5966727f8c99a5ada094877a6d6154473a2e21140700000000070f161b1f22232d2d2d2d2d2d2c2b28241a1d23292c2d3034363838393938373633302d2c29241e1a140d0500000000000000000000091623303c4956636f7d808080808080808083909d9f928580808080808080807f7265594c3f3226190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b151a1e252a2d2e323537383939383735322e2d2a251f1a150e060000000000000000000004101c2934404b555c676d79828a7f726d625b51493f362d241b120909121b242d363e48505a626c717e8681786d665c544a3f34281c100300000815212e3b4854616e7b86868686868686867a6d6154473a2e211407000714212d3a4754606d7a8793a0ada194877a76828f99a09d9895989292988d8073675a4d4034271a0d0000000007101920272b2e2f39393939393939393939393939393939393939393939393939393939393939393835302a221a1006000000000000000000000000000000030f1a252f3941484d4e535353535353534f4d4942393020170d02000000000000000000000000000000000000000000010b151f2e3840474c4d535353535353534e4d4841392f251a0f030000040e18222a32373b3c464646464646463e3d39342d241b1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f19242d353d424546464646464646413f3c362f261d13080000000009131b23292e313239393939393933322f2a241c140a000000000000000000000000000000000000000000000000000000000004101c2934404b555c6c6c6c6c6c6c6c6c6c6a63594e42362a1d1104000000000004101c2934404b555c6c6c6c6c6c6c6c6c6c6a63594e42362a1d110400000000000000000000000000000000000000000000000000000000070d1216181920202020181815120c060000000000000000000000000000000000000000000000000000000000000a151f2831383e4243464643423e3831281f150a000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000000000000000000000006111c2a36424d5763707d89959fac9f92867b6e61554b4135291d12070000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4afa49986796d6053463a2d201307000d192633404c5966737f8c99a6ada194877a6e6154473b404c5966737f8c99a6ada194877a6e6154473b2e2114080000000000040a0f1315162020202020201f1e1c180e12181c1f202427292b2c2c2c2b2a29262421201d19130e090300000000000000000000000915222f3b4854606b6f7373737373737374818e9b9e91847873737373737373726d62574a3e3125180b0000000000000105090b0b1313131307060405090b0b131313130706040005090b0b13131313070604000000000000000000000000000000000000000000000000000000000000000003090e14191e202125282a2b2c2c2b2a282521201e1a140f0a030000000000000000000000000c18232f39434b555c676d797d726d625b51493f372d241b1209000009121b242d363f48505a626c717d786d665c544a42382e23170b0000000815212e3b4854616e7b87939393939393877a6d6154473a2e211407000814212e3b4754616e7a8794a1aca093877a6f7c87929fa5a5aaa29f9f9a8d8073675a4d4034271a0d0000000000070f151b1f22222d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2b29251f181008000000000000000000000000000000000814202b37414b53595b606060606060605c59544b4232291f140900000000000000000000000000000000000000000007121d2731404a52585a606060606060605b59534b41372b20140800000006101820262b2e2f3939393939393931302d29221b1209000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121b242b313638393939393939393433302b241d140b0100000000010911181e2225252d2d2d2d2d2d2726231f19120a02000000000000000000000000000000000000000000000000000000000006131f2c3845515c67767979797979797979756a5e5245382c1f1206000000000006131f2c3845515c67767979797979797979756a5e5245382c1f12060000000000000000000000000000000000000000000000000000010911181e2225252d2d2d2d2524221d1811090000000000000000000000000000000000000000000000000000000005111c27313a434a4e505353504e4a433a31271c11050000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000000000000000000000e1a25303b4854606b7683909da8a3998d8073675d5145392e23180c0000000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000c1825323f4b5865727e8b98a5b5a093867a6d6053473a2d201407000d1a2633404d596673808c99a6aea194887b6e6155483b404d596673808c99a6aea194887b6e6155483b2e221508000000000000000306080913131313131312110f0c01070c101314171a1c1e1f201f1f1e1c1a171413110d0801000000000000000000000000000713202c38444f5960636666666666666874818e9b9e9184786b66666666666665625b51463a2e2216090000000000060c111517182020201f141310111517182020201f1413100c111517182020201f1413100c07010000000000000000000000000000000000000000000000000000000000000002080d111414181b1e1f1f201f1e1b191514120e0903000000000000000000000000000007121d273139434b555c676d716c625b51493f372d251b12090000000009121b242d363f48505a626b706d665c544a423830261c11060000000815212e3b4854616e7b87949f9f9f9f94877a6d6154473a2e211407000815222e3b4855616e7b88949f9fa39986796d73808c939fa2aaaaaba69a8d8073675a4d4034271a0d000000000000040a0f131516202020202020202020202020202020202020202020202020202020202020201f1f1c19140d0600000000000000000000000000000000000c1824303c48535d64686c6c6c6c6c6c6c68655d54443b3025190e0000000000000000000000000000000000000000000c18232f3943525c64676c6c6c6c6c6c6c68645d53483c3024180c00000000060e151b1f21222d2d2d2d2d2d2d2524211d1711090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121920262a2c2c2d2d2d2d2d2d2726241f1a130b0200000000000000070d121618192020202020201a1917130e08000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d798686868686868687796c5f5346392c20130600000000000714202d3a4753606d798686868686868687796c5f5346392c201306000000000000000000000000000000000000000000000000000009131b23292e31323939393932312e29231b13090000000000000000000000000000000000000000000000000000000a16222d38434c545a5d60605d5a544c43382d22160a0000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000000000000000000000009141f2c38444f5964717e8a96a0ab9f92857a6d60544b4034281d120700000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5ada093877a6d6054473a2d211407000d1a2733404d5a6673808d99a6aea195887b6e6255483b404d5a6673808d99a6aea195887b6e6255483b2f2215080000000000000000000000060606060606050503000000000406070a0d10111213131211100d0a07060401000000000000000000000000000000030f1b27323d474f545659595959595b6874818e9b9e9184786b5e5959595959595751493f35291e1206000000000911181d2124252d2d2d2c201f1c1d2124252d2d2d2c201f1c181d2124252d2d2d2c201f1c18120b030000000000000000000000000000000000000000000000000000000000000000010507080b0e1112131312110f0c0807050200000000000000000000000000000000010b151f273139434b555c6064615a51493f372d251b130900000000000009121b242d363f4850596063605c544a423830261e140a000000000815212e3b4854616e7b8794a1acaca094877a6d6154473a2e211407000915222f3c4855626f7b8893939393928679666c77818c92989b9e9f9f9a8d8073675a4d4034271a0d000000000000000003060809131313131313131313131313131313131313131313131313131313131313131312100d08020000000000000000000000000000000000000e1a2734404d59646f7479797979797979756f65564d42362a1c11060000000000000000000000000000000000000004101c2934404b55646e7479797979797979746f64594d4034271a0e0000000000040a0f13151620202020202020181715110c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f151a1d1f202020202020201b1a17140e08010000000000000000000106090b0c1313131313130d0c0a070200000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8693939393939286796c5f5346392c20130600000000000714202d3a4753606d7a8693939393939286796c5f5346392c2013060000000000000000000000000000000000000000000000000007111b252d343a3e3f464646463f3d3a342d251b110600000000000000000000000000000000000000000000000000010d1a26323e4a545e66696c6c69665e544a3e32261a0d0100000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000000000000000000000002101b27323d4653606c7884919da8a2978b7f72665c5145392e23180c01000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a5ada094877a6d6154473a2e211407000d1a2734404d5a6773808d9aa6aea295887b6f6255483c404d5a6773808d9aa6aea295887b6f6255483c2f22150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212b353d4448494d4d4d4d4e5b6874818e9b9e9184786b5e514d4d4d4d4c4a463f372d23180d0100000009121b22292e3132393939392d2c29292e3132393939392d2c2923292e3132393939392d2c29231d150d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d151f273139434b5153575550483f372d251b1309000000000000000009121b242d363f474f545653504a423830261e140c02000000000815212e3b4854616e7b8794a1acaca094877a6d6154473a2e211407000916222f3c4955626f7c86868686868685786c656c777f868b8e919292928d8073675a4d4034271a0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2835414e5b687481868686868686868175695e5246382d22170b0000000000000000000000000000000000000006131f2c3845515c677480868686868686868174685b4e4135281b0e0000000000000003060809131313131313130b0a080500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004090e1112131313131313130e0d0b080300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a86939f9f9f9f9286796c5f5346392c20130600000000000714202d3a4753606d7a86939f9f9f9f9286796c5f5346392c201306000000000000000000000000000000000000000000000000010d18232d373f464a4c535353534b4a463f372d23180c01000000000000000000000000000000000000000000000000030f1c2935424e5a66707679797670665a4e4235291c0f0300000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000000000000000000000000000b161f2b3844505b66717e8b96a0a99e9184796d60554b4034281e1308000000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000d192633404c5966737f8c99a6ada194877a6e6154473b2e211408000e1b2734414e5a6774818d9aa7afa295887c6f6255493c414e5a6774818d9aa7afa295887c6f6255493c2f2216090000000000000105080b0b1313131313130c0b090501000000000000000000000000000002070a0c0d1313131313130b0a08050000000000000000040f19232b32383b3c404040414e5b6874818e9b9e9184786b5e51454040403f3e3a352d251b110700000006111b242d343a3d3e464646463a3834343a3d3e464646463a38342f343a3d3e464646463a38342f271f150b0100000000000000000000000000000000000000030608090d1012131312110f0b0707050100000306060b0f121312110e080705020000000000000000000000000000030d151f2731394045474a49453e362d251b13090100000000000000000009121b242d353d44484a46443f3830261e140c0200000000000815212e3b4854616e7b87949f9f9f9f94877a6d6154473a2e211407000815222e3b4754606a767979797979797873695b656c727a7f8284858685837e7164574b3e3124180b00000000000004090c0e0f131313131313131313131313131313131313131313131313131313131313131313100f0d09050000000000000000000000000000000000000916232f3c4956626f7c89959393939392867b6e61544a3f33281c0f030000000000000000000000000000000000000714202d3a4753606d7985929393939395897c6f6356493c3023160900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a0d0f101313100f0d0a05000000000000000000000000000714202d3a4753606d7a8693a0acac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0acac9f9286796c5f5346392c20130600000000000000000000000000000000000000000000000006121e29343f4951565860606060585651493f34291d120600000000000000000000000000000000000000000000000003101d2a3643505d69768286868276695d5043362a1d100300000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000000000000000000000000030f1c28333f4a54606d7884919da7a1968b7e72675c51453a2f24190d030000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c99a6aea194887b6e6155483b2e221508000e1b2834414e5b6774818e9aa7afa295897c6f6256493c414e5b6774818e9aa7afa295897c6f6256493c2f2316090000000000060c11151718202020202020181815110c06000000000000000000000000070e1316191a202020202020181715110c060000000000000007111921272c2f30333335414e5b6874818e9b9e9184786b5e514538333332312e29231b130a000000010c18222d363f454a4b535353524745403f454a4b53535352474540393f454a4b535353524745403931271d12070000000000000000000000000000000000040a0f1315161a1d1f1f201f1e1b181413110d080b0f1213181c1f201f1e1b1514120e090300000000000000000000000000030d151f272f34383a3e3c39332c241b130901000000000000000000000009121b232b33383c3d3a38342e261e140c020000000000000815212e3b4854616e7b87939393939393877a6d6154473a2e2114070006131f2b37434e5860626c6c6c6c6c6c6c6961535b60686d72757778797876716c6155493d3023170a0000000002091015191b1c2020202020202020202020202020202020202020202020202020202020202020201d1c1915100a03000000000000000000000000000000000915222e3b4854606a7783909daa9fa3998c7f73665b5044382b1f1409000000000000000000000000000000000006121f2b37434e5864717e8a97a29f9f9d9083776b6054483b2f22150900000000000000000000000000000000000000000406070a0c0f11111213131312110f0d0b070705010000000000000000000000000000000000000000000000000003060809131313131313130b0a08050000000000000000000000000000000000000000000000000000000000000000000000000000000000030a11161a1c1d20201d1c1a16110a0300000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000000000000000916222e3a46515b62656c6c6c6c65625b51463a2e22150900000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000000000000000000000000000b17222d3844505c66717e8a95a0a89e9184796d60564c4135291f14090000000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000d1a2733404d5a6673808d99a6aea195887b6e6255483b2f221508000e1b2835414e5b6874818e9ba7afa396897c706356493d414e5b6874818e9ba7afa396897c706356493d3023160a000000000911171d2124252d2d2d2d2d2d2524221d181109000000000000000000010a12191e2325262d2d2d2d2d2d2524211d17110900000000000000070f161b202223262835414e5b6874818e9b9e9184786b5e5145382b262625221e18110a0100000005111d29343f485056586060605f53514b485056586060605f53514b43485056586060605f53514b43392f23180c00000000000000000000000000000003090e151b1f2222272a2b2c2c2c2a282521201d1913171c1f2024292b2c2c2a2821211e1a140d0500000000000000000000000000030d151d23292c2d31302d28221a1209010000000000000000000000000009111921272c2f302d2b28231c140c02000000000000000815212e3b4854616e7b86868686868686867a6d6154473a2e21140700030f1b27323c464e54556060606060605f5d574950565d6065686b6c6c6b6a64615a5045392d211408000000030c141b212528292d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d292826211b140c0400000000000000000000000000000007131f2c38434e5865727e8b98a2aeab9e9184786c6053463b30251a0e00000000000000000000000000000000000814212e3a47535f6a7683909ca9aea2988b7f7265594f43382c1f1307000000000000000000000000000000000001070c10131417191b1d1e1f20201f1f1e1c1a171413110d0804010000000000000000000000000000000000000000040a0f13151620202020202020181715110c060000000000000000000000000000000000000000000000000000000000000000000000000000040d151c2226292a2d2d2a2926221c150d04000000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000000000000000b1825313e4a56626d7279797979726d62564a3d3124180b00000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000000000000000000000000000006111c28343f4a54606c7883909da6a1968c7f72685d52453b31261a0c0300000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000d1a2734404d5a6773808d9aa6aea295887b6f6255483c2f221509000f1b2835424e5b6875818e9ba8b0a396897d7063564a3d424e5b6875818e9ba8b0a396897d7063564a3d3023170a00000009121b22292d303139393939393932312e29231b120900000000000000000a131c242a2f323339393939393931302d29221b120900000000000000040b0f1315161b2835414e5b6874818e9b9e9184786b5e5145382b1e191816120d0700000000000915212e3a45505a62656c6c6c6c605c55505a62656c6c6c6c605c554b505a62656c6c6c6c605c554b4034291c100400000000000000000000000000060e141a20262b2e2f3336383939383735322e2d2a251e22282b2d313638393937342e2d2a251f170f0500000000000000000000000000030b12181c1f202423211c17100800000000000000000000000000000000080f161c202223201f1c17110a0200000000000000000714202d3a46525e6976797979797979797976685e5246392d20130700000a15202b343c43474953535353535352514c3f444c5254585b5e5f5f5f5d575550483e33281d11050000020c151e262c3134353939393939393939393939393939393939393939393939393939393939393939393635322d261e160c030000000000000000000000000000030f1b27323d4754606d7a85929facaca1968a7d7063574d42362a1c110600000000000000000000000000000004101c2934404b55626e7b88949fabac9f92867a6d6054473d32271b0f03000000000000000000000000000000050b1012181c1f202326282a2b2c2c2c2c2c2a29272421201d1913100d07010000000000000000000000000000000000060e151b1f21222d2d2d2d2d2d2d2524211d171109000000000000000000000000000000000000000000000000000000000000000000000000030d161f272d32353639393635322d271f160d030000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000000000000000c1925323f4c5865727f868686867f7265584b3f3225180c00000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000000000000000000000000000b17232e3844505b66707d89949fa89e92857a6d60574d42362a1e150a00000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa7afa295887c6f6255493c2f221609000f1c2835424f5b6875828e9ba8b0a3968a7d7063574a3d424f5b6875828e9ba8b0a3968a7d7063574a3d3024170a000006111b242d34393d3e4646464646463f3d3a342d241b0b02000000000000030d1c252e353b3f404646464646463e3d39342d241b110600000000000000000307090e1b2835414e5b6874818e9b9e9184786b5e5145382b1e120b0906010000000000000b1724313d4a56626c71797979796d675c56626c71797979796d675c5156626c71797979796d675c5145382c1f1306000000000000000000000000080f181f262a32373b3c40434546464544423e3a3936302a2d3338393e4245464544413b3a36312921170d030000000000000000000000000001070c101314171714110c05000000000000000000000000000000000000050b101316171312100b060000000000000000000005121e2a36424d575e6c6c6c6c6c6c6c6c6c6c5e564c41362a1d11050000040f19222b32373b3c464646464646454441333a4145474b4f51525352504b49453e362c22170c00000009141e2730373d414246464646464646464646464646464646464646464646464646464646464646464643413e3830281e140a0000000000000000000000000000000a16202c3945515d6774818e9aa7b1a89b8f8275695e5246382e23170b00000000000000000000000000000006131f2c3845515c6774808d9aa6b0a79b8e8174685d5245392b21160a0000000000000000000000000000040b10161c1d23292c2d30333537383839393938373633312e2d2a25201d18120b0600000000000000000000000000000006101820262b2e2f3939393939393931302d29221b120900000000000000000000000000000000000000000000000000000000000000000000000a151f2831383e4243464643423e3831281f150a0000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000000000000000c1926323f4c5965727f8c93938b7f7265584c3f3225190c00000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000000000000000000000000000006111c28333f4a54616b76828f99a4a1978d8073695f53463d30261c1106000000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000e1b2834414e5b6774818e9aa7afa295897c6f6256493c2f231609000f1c2936424f5c6975828f9ca8b0a3978a7d7064574a3d424f5c6975828f9ca8b0a3978a7d7064574a3d3124170a00010c17222d363f45494b5353535353534b4a453f372d1d140a0000000000010b151f2e3740474b4d5353535353534b49453e362d22170c00000000000000000000020e1b2835414e5b6874818e9b9e9184786b5e5145382b1e12050000000000000000000b1825323e4b5865717e86868686796d605865717e86868686796d60535865717e86868686796d6053473a2d20140a0000000000000000000000081119212a31363c4347494d5052525352514e4b4746413a36383f44464b4f525352514e4846423b33291f1409000000000000000000000000000000000406070b0a0805000000000000000000000000000000000000000000000407090a070603000000000000000000000000020e1a25303b454d525f60606060606060605f524c443a3025190d0100000007101920272b2e2f393939393939393835272f35393a3f4244454645433e3d39332c241a1006000004101b26303942494d4f535353535353535353535353535353535353535353535353535353535353535353504e49423a30261b1005000000000000000000000000000004111d2935414b55626f7c88959fabac9f92877b6e61544a3f34281c100300000000000000000000000000000714202d3a4753606d7985929eabaca095897c6f63564c413529190f0400000000000000000000000000060b161b21282c2f34383a3d3f42444445464646454442403e3a3936302c29241d17110a02000000000000000000000000040e18222a32373b3c464646464646463e3d39342d241b110600000000000000000000000000000000000000000000000000000000000000000005111c27313a434a4e505353504e4a433a31271c110500000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99988c7f7265594c3f3226190c00000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000b17222d38424f59626f7c87939fa99f92867b6e61594f42382e23170c020000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000e1b2835414e5b6874818e9ba7afa396897c706356493d3023160a00101c2936434f5c6976828f9ca9aca4978a7d7164574a3e434f5c6976828f9ca9aca4978a7d7164574a3e3124170b0005111d29343f48505658606060606060585651493f2f261b11060000000007121d27314049525759606060606060585650483e34291d1105000000000000000205070e1b2835414e5b6874818e9b9e9184786b5e5145382b1e12050000000000000000000a1723303d4a5663707d8993988a7d70635763707d8993988a7d7063575663707d8993988a7d7063574a3d31261b0f03000000000000000000060f19232b333b42464e54555a5d5e5f5f5f5d5b5854524c4641424a5053575c5e5f5f5d5b54534d453b31251a0e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f29333b42464853535353535353535346413a32281e13080000000000070f151b1f22222d2d2d2d2d2d2c2b281e24292c2d3235383939383731302d28221a12080000000915212c37424b54595c6060606060606060606060606060606060606060606060606060606060606060605c5a544c42382d2115090000000000000000000000000000010d18242f3a47535f6a7683909da9afa3998c7f73665c5044382b1f14090a0a0a0a0a0a0a0a0a0a0a0a0a0a121f2b37434e5864717e8b97a2adaa9d9083776b6054443a2f241907000000000000000000000000020a111721272c3338394045474a4c4e50515253535252514f4d4a4746413a39352f28231c140c0600000000000000000000000a15202a343c434749535353535353534b49453e362d22170c0000000000000000000000000000000000000000000000000000000000000000000a16222d38434c545a5d60605d5a544c43382d22160a00000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000000000000000d192633404c5966737f8c99998c7f7266594c3f3326190c00000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000000000000000000000000000006111c262f3d47535f6a74818e97a2a3988e82756b60544a3f34281f14090000000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000f1b2835424e5b6875818e9ba8b0a396897d7063564a3d3023170a00101d293643505c6976838f9c9f9f9f978b7e7164584b3e43505c6976838f9c9f9f9f978b7e7164584b3e3125180b000815212d3945505a62646c6c6c6c6c6c65625b5141382d22170b000000000c18232f3943525b63666c6c6c6c6c6c64625a5045392d211508000000000002090e1114141b2835414e5b6874818e9b9e9184786b5e5145382b1e12050000000000000000000815222f3b4855626e7b88959a8d81746758626e7b88959a8d8174675855626e7b88959a8d817467584e43372b1f12060000000000000000030e18222b353d454d53585f6266696b6c6c6b6a6865615e56524c4c545b6064696b6c6c6a67615e574d42362a1e1205000000000000000000000000000000010406070b0e101213131312100e0b07060401000000000000000000000000000000000000000000000000000000000000020d17212930363a3b4646464646464646463936302820160c02000000000000040a0f1315162020202020201f1e1c13191d202125282b2c2c2c2a2423211d171008000000000c1925313d49545d65686c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c69665e54493e3226190d00000000000000000000000000000007131d2b37434e5864717e8b97a2adab9e9184786d6053463b31251a16161616161616161616161616161616212e3a47535f6a7683909ca9aea2988b7f7265594f4332281e13080000000000000000000000030b141c222832383e44484b515356595b5d5e5f5f5f5f5f5d5c5a5754524c47454039342e261e170f07000000000000000000030f1b26323c464e535560606060606060585650483e34291d110500000000000000000000000000000000000000000000000000000000000000000d1a26323e4a545e66696c6c69665e544a3e32261a0d00000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000000000000000d1a2633404d596673808c99998c7f7366594c403326190d00000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000000000000000000000000000000000a141d2b37434e58616d7a85929fa79e93897d70665c50443b30251a0d0300000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000f1c2835424f5b6875828e9ba8b0a3968a7d7063574a3d3024170a00101d2a3643505d6976839093939393938b7e7165584b3e43505d6976839093939393938b7e7165584b3e3225180b000b1724303d4956626c71797979797979726d6253493f33271b0f03000004101c2934404b55636e73797979797979716c6256493d3024170a00000000050d14191e2021272835414e5b6874818e9b9e9184786b5e5145382b1e12050000000000000000000714202d3a4753606d7a86979e9184786a5f606d7a86979e9184786a5f53606d7a86979e9184786a5f53473a2e21150800000000000000000a15202a343d474f575f616a6f7376787979787775716d68615e56565d666c717578797877746e695e53463a2d2114070000000000000000000000000001070d111314181b1d1f1f201f1f1d1b181413110d07010000000000000000000000000000000000000000000000000000000000050f171f252a2d2e39393939393939392e2d2a251e160e0500000000000000000003060809131313131313121210080d111314181c1e1f201f1d181714110c0600000000000e1b2834414d59656f757979797979797979797979797979797979797979797979797979797979797979797670665a4e4135281c0f000000000000000000000000000000010f1b26323c4753606d7985929fabada1968a7d7063574d42362a23232323232323232323232323232323232934404b55626e7b88949fabac9f92867a6d6054473d3221160c0100000000000000000000030c151d262d333d44484f55555c606366686a6b6b6c6c6c6b6a696664615e5653514b443f38302921191007000000000000000006131f2b37434e585f626c6c6c6c6c6c6c64625a5045392d21150800000000000000000000000000000000000000000000000000000000000000000f1c2935424e5a66707679797670665a4e4235291c0f00000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000000000000000d1a2733404d5a6673808d99998c807366594d4033261a0d00000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000000000000000000000000000000020b1b26323c46525e68727f8c95a0a59d9083786d60574d42362a1f150b01000000000000121f2c3845525f6b7885929eabada194877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000f1c2936424f5c6975828f9ca8b0a3978a7d7064574a3d3124170a00101d2a3743505d6a7683868686868686867f7265584b3f43505d6a7683868686868686867e7265584b3f3225180c000b1825313e4b5864717e8686868686867f72655b5044372b1f150a000006131f2c3845515c6773808686868686867e7164584b3e3125180b000000050e171f252a2d2e342d35414e5b6874818e9b9e9184786b5e5145382b1e120500000000000000000006131f2c3945515d677885929e96887b6f625d677885929e96887b6f62555d677885929e96887b6f6255483c3025190d01000000000000020f1a26313c464f5960696e767c80838585868583817e7a746d68605d686d787e8285868584817b6e6154483b2e211508000000000000000000000002080e13181d202024272a2b2c2d2c2b2a272421201d18130e090300000000000000000000000000000000000000000000000000000000050d141a1e20212d2d2d2d2d2d2d2d21201d19130c05000000000000000000000000000006060606060606050300010406070c0f11121312100b0a0805000000000000000f1c2935424f5c6875828686868686868686868686868686868686868686868686868686868686868686868276695c504336291d10000000000000000000000000000000000a151f2c3845515d6774808d9aa6b0a89c8f8275695e5346382e3030303030303030303030303030303030303845515c6774808d9aa6b0a79b8e8174685d5245392c20130400000000000000000000000b151e272f383f444f54596163676d70727577777879797978777573716d6865605d55504a423b332a22190f06000000000000000815212e3b47535f6a7679797979797979716c6256493d3024170a0000000000000000000000000000000000000000000000000000000000000000101d2a3643505d69768386868376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000000000000010d1a2734404d5a6773808d9a998d8073665a4d4033271a0d00000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000000000000000000000000000000000a15202a36414c56606d7883909aa4a0958c7f72695e52463e31271d1207000000000000121f2c3845525f6b7885929eabaca194877a6e6154473b2e21140800000000000000000000000000000000000000000000000000000000000000101c2936434f5c6976828f9ca9aca4978a7d7164574a3e3124170b00101c2936424f5b66717679797979797979726d62564a3d424f5b66717679797979797979726d62564a3d3124180b000713202d3a4653606d7984919393939184786c6053463c31261a0f02000714202d3a4753606d7985929393939184796d6053463a2d2013070000020d17202930363a3b413a38414e5b6874818e9b9e9184786b5e5145382b1e120500000000000000000004101d2935404b556a7783909d998c7f7266566a7783909d998c7f726656556a7783909d998c7f7266564c41362a1d110500000000000006121f2b37434e58606b707b82888d9091929292908e8b86817a706b606d7a828a8f91929290897d7063564a3d3023170a00000000000000000000050d14191d24292c2d31343738393939383634312d2c29241d1a140d050000000000000000000000000000000000000000000000000000000002090e12141520202020202020201413110d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2935424f5c6875828f939393939393939393939393939393939393939393939393939393939393938f8276695c504336291d100000000000000000000000000000000004101d2935404b55626e7b88949fabac9f93877b6e61544a3f3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4753606d7985929eabaca095897c6f63564c4135291d11040000000000000000000007121d273039424a505960636b7075797d7f81838485868685858482807d7a76716d67605c544d453c342a21180c030000000000000916222f3c4955626f7c868686868686867e7164584b3e3125180b0000000000000000000000000000000000000000000000000000000000000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000000000000010e1a2734414d5a6774808d9a9a8d8073675a4d4034271a0d01000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000040d1925303a44515c666f7d88939fa79f92867b6e61594f43392f24180c020000000000121f2c3845525f6b7885929e9f9f9f94877a6e6154473b2e21140800000000000000000000000000000000000000000000000000000000000000101d293643505c6976838f9c9f9f9f978b7e7164584b3e3125180b000e1a26323e4a555f666a6c6c6c6c6c6c6c65625b51453a3e4a555f666a6c6c6c6c6c6c6c65625b51453a2e2215090006131f2c3845515c66727f8c97a2a0958a7d7063584e43372b1e13080714202c38444f5965717e8b97a1a2978c7f72665c5144382c1f1206000009141f29323b4246474d4745404e5b6874818e9b9e9184786b5e5145382b1e1205000000000000000000000c18242f424f5c6875828f9b9c908376685e6875828f9b9c908376685e5c6875828f9b9c908376685e5246392d2013070000000000000814212e3a47535f6a707d858f94999c9e9f9c9b9c9b98928e857d706b75828f949c9e9f9f96897d7063564a3d3023170a000000000000000000080e171e252a2f35393a3e4143454646464543413e3a39352f2a251f170f09000000000000000000000000000000000000000000000000000000000002050708131313131313131307070501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2935424f5c6875828f9b9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9c8f8376695c504336291d1000000000000000000000000000000000000c18242f3947535f6a7683909ca9afa4998c8073665c504949494949494949494949494949494949494949494e5864717e8b97a2adaa9d9083776b6054443a2f24190d01000000000000000000040e18232e39434b545b606b70767d8185898c8e90919292929292908f8d8a86837e79726d665f574e463c332a1e150b0000000000000916222f3c4955626f7c8893939393938b7e7164584b3e3125180b0000000000000000000000000000000000000000000000000000000000000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000000000000010e1b2734414e5a6774818d9a9a8d8074675a4d4134271a0e01000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000030709090c0c0c0c0c0c0c0c0c0c0c0c0c0c08131e2834404a54606b74818e97a1a2988e81756b61554b4035291e140a0000000000121f2c3845525f6b7885929393939393877a6e6154473b2e21140800000000000000000000000000000000000000000000000000000000000000101d2a3643505d6976839093939393938b7e7165584b3e3225180b000a16222d38434d555b5d60606060606060585651493f3438434d555b5d60606060606060585651493f34291d11050004101c2834404b54606d7a85929fa89c8f82766a5f53473a3025190d0916232f3c4855606b7783909da99f92857a6d60544a4034281c100400020e1925303b444d52545a53514b4e5b6874818e9b9e9184786b5e5145382b1e120500000000000000000000071a2734414d5a6774808d9a9f93867a6d616774808d9a9f93867a6d615a6774808d9a9f93867a6d6154473a2e23180c000000000007131f2c38434e58626e7c8692989fa29f97928f8e8f9196999792877d707d89949ea69e989291897d7063564a3d3023170a00000000000000010a121a202930363a4045474b4e505252535252504e4b4745413a363029211b120a0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2935424f5c6875828f939393939393939393939393939393939393939393939393939393939393938f8376695c504336291d10000000000000000000000000000000000007121d2b37434e5864717e8a97a1adab9e9184796d6056565656565656565656565656565656565656565656565f6a7683909ca9aea2988b7f7265594f4332281e1308000000000000000000020c16202834404b555c666c737d838a8e9298999b9d9e9e9f9f9f9e9d9c999993908b857f786e695f584e453c30271d120700000000000916222f3c4955626f7c88959f9f9f978b7e7164584b3e3125180b0000000000000000000000000000000000000000000000000000000000000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000000000000010e1b2834414e5b6774818e9a9a8d8174675a4e4134271b0e01000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000040b0f1315161919191919191919191919191919191918232e39424f59616d7a85929ea69e938a7d70675d51453c30261c110600000000121f2c3845525f6b7885868686868686867a6e6154473b2e21140800000000000000000000000000000000000000000000000000000000000000101d2a3743505d6a7683868686868686867e7265584b3f3225180c0005111c27313b434a4f50535353535353534b4a453f372d313b434a4f50535353535353534b4a453f372d23180c0100000c18232e3945515d6773808d98a39f94887c6f62564c41362a1c12121f2b37434e5863707d8995a0a3988c8073675d5142392e23180c000005111e2a36424d565e6167605c554e5b6874818e9b9e9184786b5e5145382b1e1205000000000000000000000c1926323f4c5965727f8c98a4998b7e716465727f8c98a4998b7e71645465727f8c98a4998b7e7164544a4034281c1004000000000915222e3b4854606a76828f98a2a298928b8583828284878c929792857b818e9aa69e948f8684867d7063564a3d3023170a000000000000000a131c242c323b41464b5153575a5d5e5f605f5e5d5a5754514b46423b332d241c140a01000000000000000000000000000000000000000000000000000106090b0c13131313131313090806030000000000000000000000000003060809131313131313130b0b0905010000000000000000000000000000000000000000000f1c2935424f5c6875828686868686868686868686868686868686868686868686868686868686868686868376695c504336291d100000000000000000000000000000000000010f1a26313c4653606d7985929eacada1968a7d70646363636363636363636363636363636363636363636363636e7b88949fabac9f92867a6d6054473d3221160c0100000000000000000008131e28323a45515c676d78808990959b9fa2aaaba39f9d9d9c9d9ea1a9aba49f9d97928b837b6f6a5f574d42392e23180c02000000000916222f3c4955626f7c8895a2aca4978b7e7164584b3e3125180b0000000000000000000000000000000000000000000000000000000000000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000000000000020e1b2835414e5b6874818e9b9a8e8174675b4e4134281b0e01000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000070f161b20222325252525252525252525252525252525252527303d46525e68717e8a949ea59e9184796d60584e42382e23170b02000000111e2b3744505d6873787979797979797976685e5246392d20140700000000000000000000000000000000000000000000000000000000000000101c2936424f5b66717679797979797979726d62564a3d3124180b00000a151f2931383e4243464646464646463f3d3a342d242931383e4243464646464646463f3d3a342d241b110600000007121d2935414c55616e7b86929fa69a8e8174685e5246392e231814212e3a47535f6a76828f9ca79f92867a6d61554b4030271c120700000714202d3a46525e696e746d675f585b6874818e9b9e9184786b5e5145382b1e1205000000000000000000000b1724313e4a5764717d8a97ab9b8e82756664717d8a97ab9b8e8275665c64717d8a97ab9b8e8275665c5144382c1f1206000000000916232f3c4956626f7c89949fa79f92867e79767576777b7f858f948f8283909daa9c8f82797779796d6053473a2d20140700000000000009121c252e363e444c52555d6064676a6b6c6c6c6b696764605d55524d453f362e261c1309000000000000000000000000000000000000000000000000060d12161819202020202020201615130f0a04000000000000000000040a0f13151620202020202020181715110c0600000000000000000000000000000000000000000e1b2834414d59656f757979797979797979797979797979797979797979797979797979797979797979797670665a4e4135281c0f00000000000000000000000000000000000009151f2c3845515c6673808d9aa4afa99c8f82757070707070707070707070707070707070707070707070707074808d9aa6b0a79b8e8174685d5245392c201304000000000000000000010d1925303a44515b606d79828d929d9fa7a8a19e999992919090919297979b9fa4a9a19e9590857c6f695f544b4034281e1408000000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e3125180b0000000000000000000000000000000000000000000000000000000000000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000000000000020f1b2835424e5b6875818e9b9b8e8174685b4e4135281b0e02000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000007111921272c2f30323232323232323232323232323232323232323235414c56616c75828f98a2a1968d80736a5f544a3f34281d140a0000000f1c2834404c5761686b6c6c6c6c6c6c6c6c5e564c41362a1e1105000000000000000000000000000000000000000000000000000000000000000e1a26323e4a555f666a6c6c6c6c6c6c6c65625b51453a2e2215090000030d171f272d3236373939393939393932312e29231b1f272d3236373939393939393932312e29231b120900000000000d19242f3a46525e6874818e9aa49f92867a6d61544a4034281c1d2a36414c56626e7b88949fa3998d8174685e52433a2f1e150b0000000814212e3b4754616e7b80796f6a605b6874818e9b9e9184786b5e5145382b1e1205000000000000000000000916232f3c4956626f7c8995ab9f9285796d626f7c8995ab9f9285796d60626f7c8995ab9f9285796d6053463a2d201309000000000d1a2733404d5a6673808d99a69f958a7d716d666869696e737a828e938f90959fa298887b6f676d6d675c5145382c1f13060000000000050f1b242e37404850565e61676d71747678797979787674716d67615e57504840382e251b0f06000000000000000000000000000000000000000000010911181e2224252d2d2d2d2d2d2d23221f1b160f0700000000000000070f161b1f22232d2d2d2d2d2d2d2524211d171109000000000000000000000000000000000000000c1925313d49545d65686c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c69665e54493e3226190d00000000000000000000000000000000000004101c2834404b54616e7b87939facac9f93877d7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7d85929fabaca095897c6f63564c4135291d110400000000000000000005111d2935414c56626d75818e949ca4aba39f96918c88868483838485878a8f939a9fa7a79f9791857b6e665c51453b3025190d000000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e3125180b0000000000000000000000000000000000000000000000000000000000000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000000000000020f1c2835424f5b6875828e9b9b8e8175685b4e4235281b0f02000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000040f19232b32383b3c3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f44505a616e7b86929fa69f92877c6f665c50443c2f261b110600000c18242f3b454f575d5f606060606060605f524c443b3025190e02000000000000000000000000000000000000000000000000000000000000000a16222d38434d555b5d60606060606060585651493f34291d1105000000040d151c2226292a2d2d2d2d2d2d2d2524221d1811151c2226292a2d2d2d2d2d2d2d2524221d18110900000000000008131e2a36414d56626e7b87939fa3988c7f73665c5144382c1f202d3946525e6874818e9aa69f92877b6e61564c4131281d0c030000000815212e3b4854616e7b87837c726c656874818e9b9e9184786b5e5145382b1e1205000000000000000000000814212e3b4754616e7a8799a3a297897c70636e7a8799a3a297897c7063616e7a8799a3a297897c706356493d31261a0e02000000101d293643505c6976838f9ca99d9083766c605c54575e61686d78818e949d9fa79f9285796a5f60605c554b4034291c100400000000030d17212d364049515a61686e747a7e8183858586858583817e7a746e69625a524a40372d21180e03000000000000000000000000000000000000000009131b23292e3132393939393939392f2e2b2720191007000000000007101920272b2e2f3939393939393932312e29221b12090000000000000000000000000000000000000915212c37424b54595c6060606060606060606060606060606060606060606060606060606060606060605c5a544c42382d211509000000000000000000000000000000000000000c18232e3946535f6976828f9ca9afa499938a89898989898989898989898989898989898989898989898989899297a2adaa9d9084776b6054443a2f24190d010000000000000000000713202d3946525e68727f8b939ea6aba399928c84807c7977767677787a7e828790959ea5a9a1979083796d60564c41362a1c11060000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e3125180b0000000000000000000000000000000000000000000000000000000000000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000000000000020f1c2935424f5c6875828f9b9b8e8275685b4f4235281c0f02000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000203101d2a3643505d69768390908376695d5043362a1d10030200000000000000000b16212b353d4448494c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c525e69727f8b949fa3999083786d60574d41382d22170b000007131e29333d454c5052535353535353535346413b32291e1408000000000000000000000000000000000000000000000000000000000000000005111c27313b434a4f50535353535353534b4a453f372d23180c0100000000030a11161a1c1d20202020202020181815110c060a11161a1c1d20202020202020181815110c0600000000000000010e1925303b47535f6975828f9ba69e9184796d6053463d32272834404b55616d7a86929fa69b8e8175695f53443a301f160c000000000815212e3b4854616e7b8790867f776e6974818e9b9e9184786b5e5145382b1e1205000000000000000000000613202d394653606c7986929fa99a8d8073676c7986929fa99a8d807367606c7986929fa99a8d807367574d42372b1e1206000000111e2b3744515e6a7784919da6998d80736659504a4d52565e666d78829099a3aa9e9184776b585353514b43392f23180c000000000009141f29333f48515b636c717a80868a8d909192939291908d8a86817b716d645c52493f332a2015090000000000000000000000000000000000000009121b252d343a3e3f464646464646463c3b38322b22190f04000000040f19222b32383b3c464646464646463e3d3a342d241b1108000000000000000000000000000000000004101b26303942494d4f535353535353535353535353535353535353535353535353535353535353535353504e49423a30261b10050000000000000000000000000000000000000007121d2a36424d5764707d8a96a1adaba49f9796969696969696969696969696969696969696969696969696969fa2a9aea2988b7f7265594f4332281e130800000000000000000003101c28343f4a54616d7a85929fa5aea39992877f79736f6d666a696a686e71757c838f939ea7a9a0958c8073685e5246382d22170b0000000916222f3c4955626f7c8895a2afa4978b7e7164584b3e3125180b0204050606060504020000000000000000000000000000000000000000000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000000000000000000000030f1c2936424f5c6975828f9c9b8f8275685c4f4235291c0f02000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000050a0f12101d2a3643505d69768390908376695d5043362a1d10120f0a050000000000030f1b27323d474f54565858585858585858585858585858585858585858585858585857606c77828f97a2a0958c7f72695f53493f33271b0f0300020d17212b333b404445464646464646463b3936302920170d020000000000000000000000000000000000000000000000000000000000000000000a151f2931383e4243464646464646463f3d3a342d241b110600000000000000050a0e1010131313131313130c0b0905010000050a0e1010131313131313130c0b09050100000000000000000008141f2b37424d57626f7c89949fa1978a7e7164594f44382c2c3845515c67737f8c98a39f94887c6f62574d4232291e0d04000000000815212e3b4854616e7b8798928c827b7174818e9b9e9184786b5e5145382b1e12050000000000000000000005121f2b3744505b657784919eaa9d91847769657784919eaa9d918477695f657784919eaa9d918477695f53473a2d211408000000121e2b3845515e6b7884919ea5988b7e7265584b3f42464c545c666f7c87929faa9d9084776a5d514745403931271d120700000000020e1a25313b45505a636d737e858d92989a9d9a9998999a9c9a98928d867e736e645b51463c31261a0f04000000000000000000000000000000000008111a242d373f464a4c535353535353534947433d342b20160a0000000a16202b343d434749535353535353534b4a453f362d241a1107000000000000000000000000000000000009141e2730373d414246464646464646464646464646464646464646464646464646464646464646464643413e3830281e140a0000000000000000000000000000000000000000000e1a26313b4653606d7984919eabb5afaca3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3abadb3ac9f92867a6d6054473d3221160c0100000000000000000006121f2b3844505c6673808d97a2aba79f92877d726d6762605c545d565e61646a6f79818f95a0aba79f92867a6e61544a3f33281c0f0300000916222f3c4955626f7c8895a2afa4978b7e7164584b3e3125180c0e101213131312100e0b08070502000000000000000000000000000000000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000000000000000003101c2936434f5c6976828f9c9c8f8275695c4f4236291c0f03000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000010910161b1e20202a3643505d69768390908376695d5043362a20201e1b161009010000000713202c38444f596063656565656565656565656565656565656565656565656565656565656e7b85929fa79f92867b6e655b5044372b1f12050000060f1921292f343738393939393939392e2d2a251e170e0500000000000000000000000000000000000000000000000000000000000000000000030d171f272d3236373939393939393932312e29231b12090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a26313c4854606a7683909ca79d9083776b6054483b312d3a4653606d7985919ea79c8f82766a5f54453b3120170d00000000000815212e3b4854616e7b879298948f857e74818e9b9e9184786b5e5145382b1e120500000000000000000000030f1b27333f49536976838f9ca9a096887b6e6976838f9ca9a096887b6e616976838f9ca9a096887b6e6155483b2f24190d010000111e2a3744515d6a7784909da5988b7f7265544a413d3b424b545f6a75828f9ca89d9084776a5d514438342f271f150b010000000005121e2a36424d57626c737f8a92979f9f97918e8c8b8c8e91969e9f98928b80736d62584e43372b21160b0000000000000000000000000000000007101a232c363f495156586060606060606056544e463d32271b0f0300030f1b27323d464e545660606060606060585650483f362c2319100700000000000000000000000000000000020c151e262c3134353939393939393939393939393939393939393939393939393939393939393939393635322d261e160c0300000000000000000000000000000000000000000009141f2c3844505c6673808c99a3afbbb9b1acaa9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa7a9afb8bab1a79b8e8174685d5245392c201304000000000000000000000713202d3a4653606d7985929b9d9e9f958b7e716b605c5553514a504c5254585f676d78839099a3aea2988c8073665b5044382b1f120600000916222f3c4955626f7c8895a2afa4978b7e7164584b3e312518191b1d1f1f201f1f1d1b181414110e080200000000000000000000000000000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000000000000000003101d293643505c6976838f9c9c8f8276695c4f4336291c1003000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000010a131b21272b2d2d2d3643505d69768390908376695d5043362d2d2d2b27211b130a0100000915222f3b4854606b6f7272727272727272727272727272727272727272727272727272727272727e8b97a1a3989082776c605346392d201306000000070f171e24282b2c2d2d2d2d2d2d2d21201e19140d05000000000000000000000000000000000000000000000000000000000000000000000000040d151c2226292a2d2d2d2d2d2d2d2524221d181109000000000000000000000105070810101010101010101010101010101010101010101008070501000000000000000000000000000000000915202c38434e5863707d8a95a0a095897c6f63574d423638444f5964717e8b97a1a095897d7063584e43332a1f0e0500000000000613202d394653606c787f86909597928a81818e9b9e9184786b5e5145382b1e120500000000000000000000000b17222d414e5b6874818e9ba7a8988c7f726874818e9ba7a8988c7f72656874818e9ba7a8988c7f7265554c4135291d11040000101c2936434f5c6976828f9ca79a8d8074665c524c4a4847464e5865717e8b98a49d9084776a5d51443729231d150d0300000000000714212d3a46535e69717e8b919fa297928b85817f7f8081848a9196a09f928c7f726a5f53473d32271b10010000000000000000000000000000061019222c353e48515b62656c6c6c6c6c6c6c6260584e43382b1f13060006131f2b38434e5860626c6c6c6c6c6c6c65625a50483e352b22190f0600000000000000000000000000000000030c141b212528292d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d292826211b140c040000000000000000000000000000000000000000000003101c28343f4a54616e7b87929facb9b1a7a0939393939393939393939393939393939393939393939b9ea5afb8aca095897c6f63564c4135291d1104000000000000000000000a1623303d495663707c898c8e9092979083786c6059514b464440434146474e555d666f7c86929facaa9e9184786c605346392d20130600000916222f3c4955626f7c8895a2afa4978b7e7164584b3e31252225282a2b2c2d2c2b2a282521201e19140f0a040000000000000000000000000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000000000000000003101d2a3643505d697683909c9c8f8376695c504336291d1003000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000009131c252c33373939393943505d69768390908376695d50433939393937332c251c13090000091623303c4956636f7c7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f85919eaa9f948b7f7265584b3f3225180c00000000060d13181c1e1f202020202020201414110e08020000000000000000000000000000000000000000000000000000000000000000000000000000030a11161a1c1d20202020202020181815110c0600000000000000000002080d1114141c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1414110d08020000000000000000000000000000030f1b27323d4653606c7884919da79b8f8275695f53463a3c4854606b7783909da89d9083776b6054463c3221180e00000000000006121f2b3844505b666c727c838c9299938e8e939e9e9184786b5e5145382b1e12050000000000000000000000061a2633404d596673808c99a6a99c8f82766773808c99a6a99c8f8276676673808c99a6a99c8f8276675d5145392c20130600000c1926333f4c5966727f8c99a59e9184796d605d5656555453505663707c8996a39d9084776a5d5144372a18120b03000000000006121f2b37434e58616e7b86929fa29792857e787473727374787d849095a09f92867c6e62594f44382c1e130800000000000000000000000000060f18222b343e47505a626d72797979797979796f6a6054473b2e221508000815222e3b4754606a6f79797979797979716c625a50473d342b21180f050000000000000000000000000000000002091015191b1c2020202020202020202020202020202020202020202020202020202020202020201d1c1915100a030000000000000000000000000000000000000000000000000c17232e3846525e6975828f9ca8b2aca095898686868686868686868686868686868686868686868e939ea9b4aa9d9084776b6054443a2f24190d01000000000000000000000814212e3b4754616e7b7e7f81838587887e71655b5045403a38343036393c434b545f6a75818e9baaada196897c6f6256493c2f23160600000916222f3c4955626f7c8895a2afa4978b7e7164584b3e312d2e32353738393939383735312e2d2a251f1b150d0701000000000000000000000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000000000000000004101d2a3743505d6a7683909d9c908376695d5043362a1d1003000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000005101b252e373e434646464646505d69768390908376695d504646464646433e372e251b1005000e1b2734414e5a6774808b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b9197a1ada69b8e8175685b4f4235281c0f000000000002070c0f11121313131313131308070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a0e1010131313131313130c0b090501000000000000000000050d14191e202129292929292929292929292929292929292929292921201e19140d0500000000000000000000000000000a161f2b3744505b65717e8b96a19f93877b6e61554c41424e5763707d8995a0a0968a7e7164594f44342a200f06000000000000030f1c28333f4a545b606a6e787f8690959b9b9ea59e9184786b5e5145382b1e120500000000000000000000000b1825323e4b5865717e8b98a4ac9f92867a6d717e8b98a4ac9f92867a6d65717e8b98a4ac9f92867a6d6054473a2d22170b00000915222f3c4855626f7c88939ea0968c7f746d6865636261605c5f626f7b8895a29d9084776a5d5144372a1e07010000000000000815212e3a47535f6a76828f98a29f92857b716c66666566656c707a839099a3989083766b6054483a2f24190d010000000000000000000000050e17212a343d474f59616c727f868686868686867c6f6256493c2f231609000916232f3c4956626f7c868686868686867e716c61594f463c332a21170e05000000000000000000000000000000000004090c0e0f131313131313131313131313131313131313131313131313131313131313131313100f0d0905000000000000000000000000000000000000000000000000000006111c2a36424d5763707d8a96a1acaa9d9083797979797979797979797979797979797979797979818e9ba7aea2988b7f7265594f4332281e130800000000000000000000000714202d3a46525e696e71737476787a7c796d6053493f46464544423f3b3a39424e5863707d8998a2aea8998c7f7266594c3f2d22170b00000916222f3c4955626f7c8895a2afa4978b7e7164584b3e373a3b3f4143454646464543413e3b3936302b272018130c040000000000000000000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000000000000000004111d2a3744505d6a7783909d9d9083766a5d5043372a1d1004000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000a16212c3740494f5353535353535d69768390908376695d5353535353534f4940372c21160a000e1b2734414e5a6774818d9898989898989898989898989898989898989898989898989898989898989ea1a9b3a89b8e8175685b4f4235281c0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e171e252a2d2e3636363636363636363636363636363636363636362e2d2a251e170e0500000000000000000000000000030f1b27333f4953606d7984919ea4998d8074675d514547535f6a75828f9ca79e9184786d6053463d3320190e00000000000000000b17222d38424a50585f666d727c838c9299a0a79e9184786b5e5145382b1e120500000000000000000000000a1723303d4a5663707d8996a3aea3998a7d71707d8996a3aea3998a7d7164707d8996a3aea3998a7d7164544a3f33281c0f03000815212e3a47535f6a75828f97a29c918c807a7572706e6d6d666c6c6f7b8895a29d9084776a5d5144372a1e1104000000000003101c28343f4a54626f7c88949fa0958a7e7169605b5458535b60686e7b86929f9f95897d7063564c4135291d110400000000000000000000040d172029333c464f59616b717e88939393939791847a6d6154473a2e211407000714212e3a4754616d7a84919793939392877e706b60584e453c332920160d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a25303b4653606c7884919eabaca095897c6f6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6d7a86929facac9f92867a6d6054473d3221160c01000000000000000000000005111e2a36424d575e616466686a686d6f6d675d515152535352514e4c4847423c4653606c7885929faba89b8f82756853493f33271b0f03000916222f3c4955626f7c8895a2afa4978b7e7164584b3e4246484c4e505252535252504e4b4746413b373229241d160d0500000000000000000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000000000000000004111e2a3744515d6a7784909d9d9083776a5d5044372a1d1104000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000f1b27333e49525a5f60606060606069768390908376696060606060605f5a52493e33271b0f000e1b2734414e5a6774818d9aa5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5abadb3aca89b8e8275685b4f4235281c0f00000000000000020507080c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0906010000000000000000000000000000000000000000000000020d1720293036393b4343434343434343434343434343434343434343433b3936302920170d02000000000000000000000000000b17222d3844515c66727f8c97a29f92857a6d60544a4c56626e7b87939fa1978b7e72665c5044382b1f1207000000000000000006111c262f383f444e545c606a6f788087909593939184786b5e5145382b1e120500000000000000000000000815222f3b4855626e7b8895a99f9f9b8e81746e7b8895a99f9f9b8e8174666e7b8895a99f9f9b8e8174665b5044382b1f12060006121f2b37434e58616e7b8592979f9c928d86827f7d7b7a79797978787c8895a29d9084776a5d5144372a1e1104000000000006121f2b3844505c6674818d9aa69d9083786c6057504a4c4950565f6974818d9aa79b8e8175685d5245392c201306000000000000000000030d161f29323b454e58606b707d87929aa4a29791857b6e685e5246392d201307000713202d3946525e686e7b859197a2a39992867d706a60574e453b32281f160c030000000000000000000000000000060a0e1011131313131313130b0a08080b0d0e131313131313130e0d0b07030000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2b3844505b66727f8c99a3aea79a8d8174675c606060606060606060606060605765717e8b98a2aea79b8e8174685d5245392c201304000000000000000000000000020e1a25303b454d525457595b565d6062605d555c5e5f5f5f5f5d5b5955534d4644505b6576838f9ca9aa9e918477655b5044372b1f1205000916222f3c4955626f7c8895a2afa4978b7e7164584b464d5355585b5d5e5f605f5e5d5b5854524d47433d352f281f170f05000000000000000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d9d9084776a5d5144372a1e1104000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000121e2b37434f5a646c6c6c6c6c6c6c6c7683909083766c6c6c6c6c6c6c6c645a4f43372b1e12000e1b2734414e5a6774818d9a9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9b8e8275685b4f4235281c0f000000000003090e12141519191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191816120d070000000000000000000000000000000000000000000008141e29323b4146474f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4746413b32291e14080000000000000000000000000006111b2834404a54606d7a85929fa2988b7f72665b50525e6874818d9aa49e9285796d60544a3f34281c10030000000000000000000a141d262d333c424a50585f666d737c838686868684786b5e5145382b1e120500000000000000000000000714202d3a4753606d7a8697939393939285796d7a8697939393939285796c6d7a8697939393939285796c605346392d20130600030f1b26313c46535e696f7c858f949c9f98928f8c898887868685858584919eaa9d9084776a5d5144372a1e110400000000000713202d3a4653606d7885929fa9988b7f72655b50443f3f3f444d57626f7c8897a19f92867a6d6054473a2d2114070000000000000000030c151f28313b444d575f6a6f7d869299a3a29892857c6f695f564c4135291d11050005111d2935414c565f696f7c859298a2a39892867c6f6a5f574d443a31281e150c020000000000000000000000040b11161a1d1e2020202020202018171514171a1b202020202020201a1a17130e08010000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a54616e7a86929facab9f9285796d60535353535353535353535353535f697683909caaaca095897c6f63564c4135291d11040000000000000000000000000009141f29333b4246474a4c4e4c52545c606366696b6c6c6c6b6a6865625f5753504a536773808d9aa6ac9f9286796c605346392d201306000916222f3c4955626f7c8895a2afa4978b7e7164585053575f6165686a6b6c6c6c6b6a6864615e56544e45403a312921170f050000000000000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000000000000000005111e2b3844515e6b7784919e9d9184776a5e5144372b1e1104000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000013202d3946535f6c767979797979797979839090837979797979797979766c5f5346392d2013000e1b2734414e5a6774808d9393939393939393939393939393939393939393939393939393939393939393939393938e8275685b4f4235281c0f00000000060d141a1e2122262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262525221e1811090100000000000000000000000000000000000000010d1925303b444c52545c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c54524c443b3025190d01000000000000000000000000000c18232e3945515d6773808d98a39e9184786c605354616d7a86929fa2988c7f73675c5142382e23170b00000000000000000000020b141c222830383f444e545c606a6f77797979797872685c5043372a1d1104000000000000000000000006131f2c3945515d677885868686868686867c6f7885868686868686867c6f677885868686868686867c6f6256493c2f23160900000a15202a36424d57606a6f7b828a8f9299999b9896959499929292919196a1aa9d9084776a5d5144372a1e110400000000000915222f3c4855626f7c8897a2a197887b6e6153493f332d333b4653606c7985929ea399897d706356493d3023160a00000000000000020b151e27313a434c565f696f7c859298a2a39992867d6f6a5f574d443a3025190d0100010d1925303a444d575f6a6f7d869299a3a29892857c6e695e564c433a30271e140a00000000000000000000050d151c2227292a2d2d2d2d2d2d2d2524211f2426272d2d2d2d2d2d2d2726231f19120b0200000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3846525e6875828e9ba8ada2978a7e7164574d42464646464646463f4a54626e7b88949fabaa9d9084776b6054443a2f24190d0100000000000000000000000000020d17202930363a3b404850565d60666d70737677787979787775726e6964605c545966727f8c99a5aea399877a6d6154473a2e211407000916222f3c4955626f7c8895a2afa4978b7e7164545c6064696e72747678797979787674716e68626058514b433b332921170d0300000000000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000000000000000005121e2b3845515e6b7884919e9e9184776b5e5144382b1e1105000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000013202d394653606c798686868686868686909494908686868686868686796c605346392d2013000e1b2734414e5a67748086868686868686868686868686868686868686868686868686868686868686868686868686868175685b4f4235281c0f000000060f181f262a2d2e3232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232312e29231b13090000000000000000000000000000000000000005111e2a36414c565e61696969696969696969696969696969696969696969615e564c41362a1e11050000000000000000000000000007121c2935414b55616e7a86929fa0968a7d7064585c66737f8c98a29f92857a6d60554b4030261c11060000000000000000000000020a11171e262e343c424a51585f626a6c6c6c6c6b6860564b3f33271b0f02000000000000000000000004101d2935404b55687378797979797979796f6a7378797979797979796f6a687378797979797979796f6a6054483b2e2215090000030e1a25313b454e5860696e767d8286898c8e8f90909191919292929399a4aa9d9084776a5d5144372a1e110400000000000b1825323e4b5865717e8b98a99e928578695f5341382d222b3744505b6575828f9cab998c7f7266594c3f3326190c000000000000000a141d263039434c565e686e7b859197a2a49a92877d706b60584e453b32281e130800000008131e28323b454e58606b707d879299a4a19791847b6e685e554b433930261c11060000000000000000040d171f272e3336373939393939393931302d2b303334393939393939393433302b241d140b010000000000000000000000000000000000000000000000000000000000000000000000000006111c2a36414c5663707d8996a0aca99c8f8276695e5246382d393939393844505c6673808d99a6aea2988b7f7265594f4332281e1308000000000000000000000000000000050e171f252a38404a525a61686d73797d8082848586868584817f7b77716d66605865717e8b98a4b4ab94887b6e6155483b2e221508000916222f3c4955626f7c8895a2afa4978b7e716460666d71777b7f8183858586858583817e7b756f6a605d554d453b33291f150b01000000000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000000000000000005121f2b3845525e6b7885919e9e9184786b5e5145382b1e1205000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000013202d394653606c7986939393939393939c9f9f9c9393939393939386796c605346392d2013000d1a26333f4c58646e747979797979797979797979797979797979797979797979797979797979797979797979797979756f65594d4034271b0e0000030d18212931363a3b3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3e3a342d251b11070000000000000000000000000000000000000714202d3946525e686e7676767676767676767676767676767676767676766e685e5246392d20140700000000000000000000000000000d18242f3a46525e6874818e99a49c9083766a60606d7984919ea3998d8073685d5243392f1e140a0000000000000000000000000000060c141c2328303940444e54555d606060605e5c564e443a2f23170b000000000000000000000000000c18242f39435761686b6c6c6c6c6c6c6c6260686b6c6c6c6c6c6c6c626061686b6c6c6c6c6c6c6c6260584e43382c1f130700000009141f29333c464e575f626c70757a7d7f8182838484848585858687939faa9d9084776a5d5144372a1e110400000000000e1b2734414e5a6774808d9aa79d9083766a574d422f261b27333f49536774808d9aa79b8f8275685c4f4235291c0f00000000000006111b262f38424b555d686e7a849197a1a49f93887e716b61594f463c332a20160c02000000020c16202a333c464f59616b717e87939fa3a19691847a6d675d554b42382e2317130a000000000000000b151f2931393f4244464646464646463e3d39363c3f4146464646464646413f3c362f261d120800000000000000000000000000000000000000000000000000000000000000000000000000000d1925303b4854606b7784919daaac9f93877b6e6153493f33272d2d2d3a4653606d7984919eabac9f92867a6d6054473d3221160c01000000000000000000000000000000020c16202c36404a525c646c717a8085898d8f9192929292908e8c88837e786f6a6264717d8a97a4aea195887b6e6255483b2f221508000916222f3c4955626f7c8895a2afa4978b7e71646a6f787e83888b8e909192939291908e8b86827c746d675e574d453b31271d1207000000000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000000000000000005121f2c3845525f6b7885929e9e9185786b5e5245382b1f1205000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000013202d394653606c798689898989898989909595908989898989898986796c605346392d2013000b1724303c47525c64676c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c68655d53483d3125180c000009141f29333b4246484c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a463f372d23180d0100000000000000000000000000000000000814212e3b4754616e7a8282828282828282828282828282828282828282827a6e6154473b2e211408000000000000000000000000000007131d2a36414c56626e7b87939f9f94887c6f6264717e8b97a19f92867b6e61564c4131271d0c02000000000000000000000000000000020a11171e272e343c434749515353535351504b443c32281d12070000000000000000000000000007121d2731454f575d5f6060606060606056545d5f606060606060605654575d5f6060606060606056544e463d32271b0f030000020e1a25313b454d5354575a6164686d7072747576777778787878797c8895a29d9084776a5d5144372a1e110400000000000f1c2936424f5c6975828f9ca89b8e8175685b4e42312817222d3f4c5865727f8b98a59d9083766a5d5043372a1d100000000000091217222d38414a545d676d7a839096a0a49c928b7f726c61594f473d342a21180e040000000000040e18212a343d464f59616c727f8b919ca4a0969083796d675c544a3f3428251c1209000000000006111c27313b434a4f51535353535353534b494541474c4e535353535353534d4c4740382f24190e030000000000000000000000000000000000000000000000000000000000000000000000000008141e2c38444f5965727f8c98a3aea4998c7f73655b5044372b1f2a36414c5663707d8a97a1ada79b8e8174685d5245392c2013040000000000000000000000000000000008131e28323e48525c646e737e858d9297999c9e9f9f9f9e9d9b9895908b847c726d64717d8a97a4aea295887b6f6255483c2f221509000916222f3c4955626f7c8895a2afa4978b7e716c717c838b9095989b9d9e9f9f9f9e9d9b99928f8781796e695e574d43392f23180c030000000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000000000000000006121f2c3945525f6c7885929f9e9285786b5f5245382c1f1205000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000a1723303d4a5663707d7d7d7d7d7d7d7d839090837d7d7d7d7d7d7d7d7063564a3d3023170a0008141f2b36414a52585a60606060606060606060606060606060606060606060606060606060606060606060606060605b59534b41372c20140800020e1a26313b454d535559595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959585651493f34291e120600000000000000000000000000000000000815212e3b4854616e7b878f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f877b6e6154483b2e2115080000000000000000000000000000010e1925303b47535f6975828f9ba69b8e8175686b7783909da49a8e8174695e52443a301f150b000000000000000000000000000000000000060c151c232832373b3c444646464645433f3a322a20160c0100000000000000000000000000010b151f333d454c505253535353535353494850525353535353535349484c5052535353535353534948433d342b21160a00000005121e2a36424d575e6163646566676663666869696a6b6b6b6b6c6f7b8895a29d9084776a5d5144372a1e11040000000000101d2a3643505d697682909ca79a8d8174675a4e4134271b25313e4b5864717e8b97a49d9184776a5e5144372b1e110000000008121b2427333f49535c666d79829095a0a59d928c7f736d625a50473e352b22180f0600000000000000060f18222b343d47505a626d727f8c929da59f958f82796d665c504440372e241b1208000000000a16222e39434d555b5d606060606060605856504a52585a606060606060605a58524a40362b1f13070000000000000000000000000000000000000000000000000000000000000000000000000002101c27333d4754616d7a86929facab9e9184786c6053463a2f242d3946525e6875828f9ba9aca095897c6f63564c4135291d1104000000000000000000000000000000010d1925303a44505a646e73808a92979ea1a9a9a8a19e9c9b9a9b9d9f9d9591877f736e717d8a97a4afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afa4978b7e71717e8790959da09e9c9b9a9b9c9ea1a9aba39f9a938e847b6e695e554b4034292015090000000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000000000000000006131f2c3946525f6c7985929f9f9285786c5f5245392c1f1200000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000916222f3c4854606b70707070707070768390908376707070707070706b6054483c2f22160900030e1a242f3841474c4e53535353535353535353535353535353535353535353535353535353535353535353535353534f4d4841392f251a0f040005121e2a36424d575f616565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565625b51463a2e22160900000000000000000000000000000000000815212e3b4854616e7b87949c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c94877b6e6154483b2e21150800000000000000000000000000000008141e2b37424d57626f7c89949f9f92867b6e707d8995a09f93877c6f62574d4232281e0d0300000000000000000000000000000000000000030b121820262b2e2f37393939393837332f2820180f05000000000000000000000000000000030d212b333b404445464646464646463c3b4445464646464646463c3b404445464646464646463c3b38322b22190f040000000714212d3a46535e696e7071727374736d63545c5d5d5e5e5e5f626f7b8895a29d9084776a5d5144372a1e11040000000000111e2a3744515d6a7783909da69a8d8073675a4d4034271a24313e4a5764717d8a97a49e9185786b5e5245382b1f12000000060f1a242d363f44505b656d78828f949fa69e938d80746d635b51483e352c23191006000000000000000000061019222c353e48515b636d73808d939da59f948f81786d605c52493f362d241a0f060000000e1a27333f4a555f676a6c6c6c6c6c6c6c64625a525c64676c6c6c6c6c6c6c67645c52473c3023170b00000000000000000000000000000000000000000000000000000000000000000000000000000b16202d3946525d6875818e9ba7aca096897c7063554b4135292e3a4754616d7a86929facaa9d9084776b6054443a2f24190d0100000000000000000000000000000005111d2935414c56616c73808d929fa2a9aaa29f9996918f8e8d8e9092999d99928c8073717d8a97a4afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afa4978a7e717e8892999e9896918f8e8d8e8f92979b9fa4aca49f9691847b6e675c51453c31261a0e0200000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000000000000000613202c3946535f6c7986929f9f9285796c5f52462e23170b00000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000713202c38444f5960636363636363697683909083766963636363636360594f44382c201307000008131d262f363c3f41464646464646464646464646464646464646464646464646464646464646464646464646464642403d372f271e130900000714212d3a46535f696e72727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272726d62564a3e3125180b00000000000000000000000000000000000815212e3b4854616e7b8794a1a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a194877b6e6154483b2e211508000000000000000000000000000000020e1a26313c4754606a7683909ca3998c807375828f9ca69c8f82756a5f53453b3020160c00000000000000000000000000000000000000000000070c151b1f22222a2d2d2d2d2b2a27231d160f0600000000000000000000000000000000000f1921292f343738393939393939392f2e3738393939393939392f2e343738393939393939392f2e2c2721191007000000000815212e3b4854616e7b7d7e7f7f807f73665b50505151515256636f7c8996a29c8f8376695c504336291d10030000000000111e2b3844515e6b7784919ea6998c807366594d4033261a24303d4a5763707d8a96a39f9285796c5f5246392c1f130000030e18212c363f48515b606c77818e949ea69e948e81776c605b52493f362c231a1007000000000000000000000007101a232c363f49515b646e74818e939ea69e938e81746e635b51483f362c21180e030000101d2936424f5b67717779797979797979716c6258646e7479797979797979746e64584c3f33261a0d000000000000000000000000000000000000000000000000000000000000000000000000000005111d2935414c56636f7c8995a0aca89b8e8174675d5145392c37434e5865727f8b99a3aea2988b7f7265594f4332281e1308000000000000000000000000000000000713202d3946525e68717e8a929da4ada79f98928d88848281818183868b91959f928b7f727d8a97a4afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afa4978a7e7c86929a96918c8784828181818285898e939aa1a9a8a0969083796d60574e42372b1f140900000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000000000000000000000000000000006121f2b3844505c667986939f9f9286796c5f4a3f34281c1003000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000004101c27333d474f5456565656565d69768390908376695d5656565656544f473d33271c10040000010b141d242b30333439393939393939393939393939393939393939393939393939393939393939393939393939393534312c251e150c0200000815222e3b4855616e7b7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7265584c3f3225190c00000000000000000000000000000000000815212e3b4854616e7b87949f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f94877b6e6154483b2e211508000000000000000000000000000000000915202b38434e5863707d8a95a09e9285797b87939f9f94897c6f63584e4333291f0e040000000000000000000000000000000000000000000000040a0f1315161e202020201e1d1b17120c05000000000000000000000000000000000000070f171e24282b2c2d2d2d2d2d2d2d23222b2c2d2d2d2d2d2d2d2322282b2c2d2d2d2d2d2d2d23221f1b160f0700000000000b1724313e4a5764717d8a8b8b8c8d86786c60544c4a494a4e5764717e8b97a49b8e8275685b4f4235281c0f020000000000111e2a3744515d6a7783909da6998d8073665a4d4033271a24313d4a5764707d8a97a39f9285786c5f5245392c1f1200000915202a333e48505a636d73808d939ea69f948f82786d655b504940372d241a11080000000000000000000000000008111a242d374049525c606d78818f949fa59d938d80736d635a50483e332a2015090000111e2a3744515d6a7783868686868686867e71645a677480868686868686868074675a4d4134271a0e0000000000000000000000000000000000000000000000000000000000000000000000000000010d1924303a4854606b7783909daaac9f92857a6d6054473c313b4754606a7783909dabac9f92867a6d6054473d3221160c0100000000000000000000000000000004111d2935414c56616d7a85929ea4aea79f959086807b7875747475767a7e848c939992867c7d8a97a4afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afa3978a7e839098938d847f7b777574747476797c81889297a1a9a89f958d80736a5f53473b30251a0e02000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000000000000000713202d3a4653606d79869aa49f938679665c5044382b1f1206000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000b16212b353d44484a4a4a4a505d69768390908376695d504a4a4a4a48443d352b21160b00000000020b131a1f2426272d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d282725201a130c030000000a1724303d4a5763707d8a8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c86796c5f5346392c201300000000000000000000000000000000000815212e3b4854616e7b8793939393939393939393939393939393939393877b6e6154483b2e21150800000000000000000000000000000000030f1b27323d4653606c7883909da1978b7e808d9aa49c9083766b6054463c3121170d000000000000000000000000000000000000000000000000000003060809111313131312110f0b07010000000000000000000000000000000000000000060d13181c1e1f2020202020202016151e1f2020202020202016151c1e1f202020202020201615130f0a040000000000000814212e3b4754616e7a8793989998897d70665e56565657585f6975818e9ba7998c7f7266594c3f3326190c000000000000101d2a3643505d697682909ca79a8d8174675a4e4134271b24313e4b5764717e8a97a49e9184786b5e5245382b1f1200020f1a26313c46505a626d727f8c929da5a0959082796d665c53493f372e251b120800000000000000000000000000000008121b242e374044505c666d79828f959fa59c928c7f726c625a50463c31261a0f0200111e2a3744515d6a77849093939393938b7e71645a6774818d93939393938d8074675a4d4134271a0e00000000000000000000000000000000000000000000000000000000000000000000000000000008131e2c38434f5965727f8b98a2aea2988b7e7165574d4237404b55626f7c8895a0aca79b8e8174685d5245392c201304000000000000000000000000000000000713202c3945525d6873808d97a1adaa9f9590837b736e6969686768676d71797f87929890837e8a97a4afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afa89b8e818e9593878079726e6969686768656c6f757d859297a2ada79f92877b6e62574d42362a1e1105000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0a49a86796d6053463a2d201307000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000050f19232b33383c3d3d3d43505d69768390908376695d50433d3d3d3c38332b23190f05000000000001080e14171a1b20202020202020202020202020202020202020202020202020202020202020202020202020201c1b18140f0902000000000a1724303d4a5763707d8a96989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989286796c5f5346392c201300000000000000000000000000000000000815212e3b4854616e7b8686868686868686868686868686868686868686867b6e6154483b2e21150800000000000000000000000000000000000a161f2b3744505b65717e8b96a19e918486929fa0958a7d7064594f43342a200f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002070c0f111213131313131313090911121313131313131309090f1112131313131313130909070300000000000000000714202d3946525e6875828f9aa49d9083786e6865636363656a6e7b86929f9f95887c6f6255483c2f2215090000000000000f1c2935424f5c6875828f9ba79b8e8174685b4e4130251a25323f4b5865727e8b98a59d9083776a5d5144372a1e110006121f2b37434e58616c717f8b919ca4a09690837a6d675d544a41382d251c1309000000000000000000000000000000000009121c2528343f4a545c676d79839095a0a49c918b7e716c61584e43372b1f120600111e2a3744515d6a7784909d9f9f9f978b7e71645a6774818d9a9f9f9f9a8d8074675a4d4134271a0e000000000000000000000000000000000000000000000000000000000000000000000000000000020f1b27323d4754606d7a86929facaa9c908376695f53473845515c6774808d9aa7aca095897c6f63564c4135291d1104000000000000000000000000000000000714212d3a4754606d7a85929fa9aea2989083796e69625f575b5a555d60666d737e8692958f828f9ca8afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afaa9e938e9393877e736d67615e575b5a535b60626b707c85929fa6afa3998e8175695e52463a2d201408000000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0a093867a6d6053473a2d201407000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000005101a232c33393c3d3d3d43505d69768390908376695d50433d3d3d3c39332c231a10050000000000000003080b0d0e13131313131313131313131313131313131313131313131313131313131313131313131313130f0e0c08040000000000000a1724303d4a5763707d8a969f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9286796c5f5346392c201300000000000000000000000000000000000714212d3a46535e697679797979797979797979797979797979797979797976695e53463a2d2114070000000000000000000000000000000000030f1b27333f4953606d7984919ea096919298a29d9184786c6053463d3220180e0000000000000000000000000000000000000000000000000000020507080c1011131311100c0807050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36414c56626f7c87939f9f958f827a757270707072757c849198a39a9083766a5f53473a2e2115080000000000000e1b2734414e5a6774818d9aa79c90837669574d42362a1e2733404d5a6673808d99a69c8f8276695c4f4336291c10000814212e3a47535f6a717e87939fa3a19691847a6e685d554b42382f261b130a010000000000000000000000000000000000000a1317232e38424b555d676d7a839196a1a39f92877e716a5f53473a2e21140800111e2a3744515d6a7784909daaaca4978b7e71645a6774818d9aa7aca79a8d8074675a4d4134271a0e000000000000000000000000000000000000000000000000000000000000000000000000000000000a16202c3945515d6774818e9aa7ab9f94887b6e62544a3f4653606d7985929fabaa9d9084776b6054443a3024190d0100000000000000000000000000000004111d2935414c5665727e8b98a2aeab9f92867b6e675e57534d4e4e4b51545c606c717e8a92948f949eaaafa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afafa59e9b958c7f736c605c55524d4e4e49505359606a717e8a949fabab9f92877b6e6154473b3025190e020000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0a093877a6d6054473a2d211407000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000b17222c363e44494a4a4a4a505d69768390908376695d504a4a4a4a49443e362c22170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a93939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939286796c5f5346392c2013000000000000000000000000000000000005121e2a36424d575e6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5e574d42362a1e12050000000000000000000000000000000000000b17222d3844515c66727f8c97a2a09e9fa2a1968b7e71655b5044372b1f120600000000000000000000000000000000000000000000000003090e121415191c1e1f1f1e1c191514120e090300000000000000000000000000000000000105090b0b1313131307060400000105090b0b13131313070604000000000000000000000000000000000000000000000000010d1925303b4754606a73808d939f9e948f86817e7d7c7d7f82879196a09f93887d6f63584e43372b1f12060000000000000b1825323e4b5865717e8b98a99e918578695e52463a2d232b37424d576875828e9ba79a8d8074675a4d4134271a0e000815222f3b4855626e7b869299a4a29891847b6e685e564c433930261d140a01000000000000000000000000000000000000000006111c263039434b555e686e7b849197a2a39992867b6e6255483b2f22150800111e2a3744515d6a7784909daab1a4978b7e71645a6774818d9aa7b3a79a8d8074675a4d4134271a0e0000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c55626f7c88959faba6998d8073665c50444d5764717e8a97a2ada2988b7f7265594f4332281e1308000000000000000000000000000000000713202c3945525d687683909caaaea3998c8073695e554d4742414140454a515a616c74808d979c9ea6b0afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afb7afa89d9083786d605a514b464241413f44464f58616c76828f9ca9afa3998c7f7266564c41362a1e11050000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000000000000000814212e3b4754616e7a8794a1a094877a6d6154473a2e211407000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000004101c28333e48505557575757575d69768390908376695d57575757575550483e33281c10040000000000000000000000000000000000000000000000000000000000000000050a0d0f101313100f0d0a05000000000000000000000000000000000a1724303d4a5763707d8686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686796c5f5346392c20130000000000000000000000000000000000020e1a25313b454d535f6060606060606060606060606060606060606060605f534d453b31251a0e0200000000000000000000000000000000000006111b2834404a54606d7a85929393939393939184796d6053493f33271b0f030000000000000000000000000000000000000000000002090e141a1e212226292b2c2c2b292521211e1a140e09020000000000000000000000000000060c111517182020201f1413100c070c111517182020201f1413100c07010000000000000000000000000000000000000000000008141e2b38434e58606d78818c92999f98928e8b89898a8b8f92999f98928b7f726b6054463c31261b0f030000000000000915222f3c4855626f7c8897a2a197877b6e6154483d342e303947535f697784919ea7978b7e7164584b3e3125180b000a1723303d4a5663707d8999a3ab9f92857b6f695e564c433a31271e150b02000000000000000000000000000000000000000000000a141e27303a434c565e696e7b85929faba398897d7063564a3d3023170a00111e2a3744515d6a7784909daaa89f978b7e71645a6774818d9aa7a09f9a8d8074675a4d4134271a0e00000000000000000000000000000000000000000000000000000000000000000000000000000000010d19242f3a47545f6a7783909da9ab9e9184796d605346525e6976828f9ca9ac9f92867a6d6054473d3221160c02000000000000000000000000000000000714212d3a4754606d7a86929facac9f92867a6d61574d433b37312f35394044505a606d7a85919eaab0b8afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afb9ada1968a7d70665c5045403936302d33373d46505a63707d8a97a1adab9d908377685e5246392d2014070000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000000000000000815212e3b4854616e7b8794a1a194877a6e6154473b2e211408000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000814202d3944505a616464646464646976839090837669646464646464615a5044392d201408000000000000000000000000000000000000000000000000000000000000030a11161a1c1d20201d1c1a16110a0300000000000000000000000000000916232f3c4855616b707979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979746a5e5145382b1f1200000000000000000000000000000000000009141f29333b4246485353535353535353535353535353535353535353534846423b33291f140900000000000000000000000000000000000000000c18232e3945515d67738086868686868686867f72665c5141382d22170b00000000000000000000000000000000000000000000050d141a1f262a2d2e32363839393836322e2d2a251f19140d050000000000000000000000000911181d2124252d2d2d2c201f1c1812181d2124252d2d2d2c201f1c18120b03000000000000000000000000000000000000000000020f1b27323d44505c666d777f868e92999a9b98969696989b9a98928e867f726d62594f44342a20150a000000000000000713202d3a4653606d7985929fa9988b7e7165594f443f3f3f424c56616e7b8896a0a095877b6e6154483b2e211508000a1723303d4a5663707d8996a1a9a2988b7e716b61584e463c332920160d03000000000000000000000000000000000000000000030c161f29323c454e58606b717e87939fa9a196897d7063564a3d3023170a00101d2a3743505d6a7683909d9e9b93938b7e71645a6773808d9aa19393938d8074675a4d4134271a0e000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2b37434e5865717e8b97a2ada1968a7d7063564c54616e7b87939faca79b8e8174685d5245392c20130400000000000000000000000000000000000a1724313d4a5764707d8a99a3afa99c8f8276685e52453b312b2624292e343e45525d68727f8c98a2aebaafa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afb7ab9e9184786c60544a3f342e2a2522272b343e4653606c7885919eabac9f93877a6e6154473b2e2114080000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000000000000000000000000000815222e3b4855616e7b8894a1a194877b6e6154483b2e211508000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000a1623303c4955616c70707070707070768390908376707070707070706c6155493c3023160a0000000000000000000000000000000000000000000000000000000000040d151c2226292a2d2d2a2926221c150d04000000000000000000000000000714202c38444f5961636c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a62584d4135291d10000000000000000000000000000000000000030d17212931363a3b4646464646464646464646464646464646464646463b3a36312921170d03000000000000000000000000000000000000000007121c2935414b55636e737979797979797979726d62544a402f261b1106000000000000000000000000000000000000000000080e171f252a31363a3b3f4344464644433f3b3a36312a251f170e070000000000000000000009121b22292e3132393939392d2c29231d22292e3132393939392d2c29231d150d030000000000000000000000000000000000000000000a162028343f4a545c656c737b82868b8e909192929291908d8b86817b726d625b51473d3222180e040000000000000006121f2b3844505c6674808d9aa69c9083766b6157504a4c4c4e545d68737f8c99a89d908377695e53463a2d211407000814212e3b4754616e7a849197a2aa9f92877d706a60584e453b32281f150c0200000000000000000000000000000000000000020b151e28313b444d57606a707d879299a4a29791847a6e6154473b2e21140800101d293643505c6976828f9c938e8686867e7164596673808c9997898686868074675a4d4134271a0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1b26323c4753606d7985929faba99b8e8275685d525966737f8c99a4aca095897c6f63564c4135291d110400000000000000000000000000000000000d1a2733404d5a6673808d99abb5ab988b7f7265564c4133291f1a181c232935414c56606d7a85929fabb8afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afb6ac9a8d8073665b5042382e231d1a171b222b3744505b6574818e9ba7afa49a8a7e7164574b3e312418070000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000000000010406070c0b0a09080815222f3b4855626e7b8895a1a194887b6e6155483b2e22150808090a0b0c07070501000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000a1724313d4a5764707d7d7d7d7d7d7d7d839191837d7d7d7d7d7d7d7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000000030d161f272d32353639393635322d271f160d0300000000000000000000000004101c28333e474f5557606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060605f5e5850473c3125190d00000000000000000000000000000000000000050f171f252a2d2e3939393939393939393939393939393939393939392e2d2a251f170f05000000000000000000000000000000000000000000000d18242f3a43525c63666c6c6c6c6c6c6c6c65625b5142392e1d140a00000000000000000000000000000000000000000009111a202930363b4246484c4f515252514f4c4846423b36302920191109000000000000000006111b242d343a3d3e464646463a38342f272d343a3d3e464646463a38342f271f150b010000000000000000000000000000000000000000040b17232e38424a535b60696e757a7e8183848586858483817e7a756e69625b51493f352b211006000000000000000003101c28343f4a54626e7b88949e9f94897d7069605c5458595860666d7a85929fa1978b7f7265574d42362a1e1205000714202d3946525e686f7c859298a3a39992867d6f6a5f574d443a31271e140a000000000000000000000000000000000000000a141d27303a434c565f696f7c869299a3a29892857c6f685e5246392d201407000f1c2935424f5c6875828f9b8e81797979716c625965727f8c989285797979746e64584c3f33261a0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151f2c3945515d6774808d9aa6ac9f92867a6d6154606b7784919eabaa9d9084776b6054443a3024190d010000000000000000000000000000000003101c28343f4a546975828f9ca8afa399887c6f6255493c3022170d0d1219242f3a45525d6875818e9ba8b4afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afafa49a897d7063544a3f30261c120e0b0f1b27333f495364717e8b97abb5ac9a8d8073675a4d402e23180c0000101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000000001080d11131419181716151415222f3c4855626f7b8895a2a195887b6e6255483b2f22151415161718181413110d080200000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000013202d394653606c79868a8a8a8a8a8a8a919595918a8a8a8a8a8a8a86796c605346392d2013000000000000000000000000000000000000000000000000000000000a151f2831383e4243464643423e3831281f150a000000000000000000000000000b16212c353e44484a5353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353514d473e352a1f14090000000000000000000000000000000000000000050d141a1e21212d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d21211e1a140d05000000000000000000000000000000000000000000000007131d2831404a52585a6060606060606060595751493f30271c0b02000000000000000000000000000000000000000009121b232b333b42464d5355595c5e5f5f5e5c5854534d46423b322b231b1209000000000000010c18222d363f454a4b535353524745403931363f454a4b535353524745403931271d120700000000000000000000000000000000000000000006111c263038414950575f62686d71747778787978787674716d68615f5751493f372d23190f000000000000000000000b17232e3847535f6a75828f97a29e92857b716d66666566676a6f78828f97a29e9285796d6053473b31251a0e020005111e2a36414c565f6a6f7d869299a3a29892857c6e695e564c433930261c1106000000000000000000000000000000000006111c262f39434c565e686e7b859298a2a39992867d6f6a5f564c41362a1e1105000f1b2835424e5b6875818e9b9083766c6c64625a5865727e8b989386796d6c67645c52473c3023170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b55626f7b88949faba3998b7e726557636f7c8996a0aca2988b7f7265594f4332281e1308000000000000000000000000000000000006121f2b3844505c667884919eabac9f9286796d6053463a2d2013070008131e2935414c5664717d8a97a8b2afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afac9f93867a6d6053473a2d20140a00000b17222d3c4855626f7b8899a4afa99c8f837669554b4034281c100400101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000000000040c13191d20212524232221201f222f3c4955626f7c8895a2a295887b6f6255483c2f221f20212223242521201d19130c04000000000000000000000203101d2a3643505d69768390908376695d5043362a1d1003020000000000000013202d394653606c798693939393939393939393939393939393939386796c605346392d201300000000000000000000000000000000000000000000000000000005111c27313a434a4e505353504e4a433a31271c110500000000000000000000000005101a232c33383c3d464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464645413c352c23190e0300000000000000000000000000000000000000000003090e1214152020202020202020202020202020202020202020201514120e0903000000000000000000000000000000000000000000000000010c161f2e3840474b4d53535353535353534c4a463f372d1e150b000000000000000000000000000000000000000007111b242d353d454d52575f6165696b6c6c6b6965615e57524d443d352c241b1107000000000005111d29343f485056586060605f53514b43393f485056586060605f53514b43392f23180c000000000000000000000000000000000000000000000a141e262f383f444d53565e6165676a6b6c6c6c6b696764605d56534d453f372d251b11070000000000000000000006111c2b37434e58616e7b85929fa19792857e797573727274777c838f949f9e938b7e71675d514539291f14090000020e1925303b444e58606b707e87929fa3a29791847b6e685d554b42382e23171309000000000000000000000000000000091317222d38424b555d686e7a849197a1a39f92877d706b60584e443b3025190e02000d1a2633404d596673808c99918477695e5856505663707d89969a877b6e615a58524a40362b1f1307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18242f3947535f6a7683909ca9ab9d908376695f6774818e9aa8ac9f92867a6d6054473d3221160c0200000000000000000000000000000000000713202d3a4653606d7986929facaa9e918477665c5145382c1f130600010d19242f3a4754616d7a8796a0acafa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afaa9e918477675d5145392c20130200000613202d3a4653606d7986939facab9e918478675c5145382c1f130600101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000000040d161e24292c2d3231302f2e2d2c292f3c4956626f7c8995a2a295887b6f6255483c2f292c2d2e2f3031322e2d29241e160e0400000000000000050a0f12101d2a3643505d69768390908376695d5043362a1d10120f0a05000000000013202d394653606c798686868686868686868686868686868686868686796c605346392d20130000000000000000000000000000000000000000000000000000000a16222d38434c545a5d60605d5a544c43382d22160a0000000000000000000000000008111a21282c2f3039393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393835312a231a11070000000000000000000000000000000000000000000000000205070813131313131313131313131313131313131313131308070502000000000000000000000000000000000000000000000000000000040d1c262e363b3f4046464646464646463f3e3a352d251b0c0300000000000000000000000000000000000000050e19232d363e474f575e61696e72767779797776726e69615e564f473e362c23190e04000000000915212e3a45505a62656c6c6c6c605c554b4045505a62656c6c6c6c605c554b4034291c1004000000000000000000000000000000000000000000020c141d262d333c42474c5254585b5d5e5f5f5f5e5d5a5854524c46423b332d251b13090000000000000000000000000f1a26313c46525e69717e8a939aa197928b8581807f7f80848890959f9f948e81756c62554b403529170d0300000008141e29323c464f59616c717e8b919ca4a19691837a6d675d544a3f3428251b12080000000000000000000000000008121b2528333f4a545c676d7a839096a0a49c918b7e716b61594f463c32291e140800000b1724313e4a5764717d8a9796877b6e6154474754616e7a8797978a7e7164544a4740382f24190e030000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2b37434e5864717e8a97a1ab9f95887b6e616d7985929faba79b8e8174685d5245392c2013040000000000000000000000000000000000000815212e3b4854616e7b8799a3afa99c8f827669544b4034281c100400000813202d3946525d687784919eaaafa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afa89c8f827569554b4035291d1104000006131f2c3845515c677884919eabac9f9386796d6053463a2d20130700101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000000010c161f282f35393a3f3e3d3c3b3a38352f3c4956636f7c8996a2a295887c6f6255493c2f34383a3b3c3d3e3f3a3935302820160c0200000000010910161b1e20202a3643505d69768390908376695d5043362a20201e1b1610090100000013202d3946535f6c767979797979797979797979797979797979797979766c5f5346392d20130000000000000000000000000000000000000000000000000000010d1a26323e4a545e66696c6c69665e544a3e32261a0d01000000000000000000000000000810161c2023242d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2b29251f191108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141c242a2f3233393939393939393932312e29231b130900000000000000000000000000000000000000020c17202b353e48505960696e747b7f8284858584827f7b746e69605950483e352b20160c020000000b1724313d4a56626c71797979796d675c51454a56626c71797979796d675c5145382c1f130600000000000000000000000000000000000000000000020b141b222731373a4146474b4e505152535251504e4b4745413a36312a211b1309010000000000000000000000000a15202a36424d57616c727f8892979f9e97928e8c8b8c8d90959d9f99938d82796d605a5043392f24180500000000020d17202a343d47505a626c737f8c929da5a0959082796d665c504440372d241a1107000000000000000000000007111a242d373f44505b666d79828f95a0a59d928c7f726c62594f463d342a20170d0200000815222f3b4855626e7b8897978b7e7164574d46525e697885929a8e8174665c5044382c261d12080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a26313c4653606d7985929eaca7998c7f7366717d8a98a2aca095897c6f63564c4135291d11040000000000000000000000000000000000000916222f3c4955626f7c8895abb5a79b8e8174685b4e412e23180c00000005111d2935414c566875828f9ba8afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afa79a8d8174675a4e412f24180d01000004101c2834404b556a7683909da9afa49a887b6e6155483b2e22150800101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000008131e28313a4145474c4b4a49484745404443495663707c8996a3a295897c6f625649434440454748494a4b4b4746413a32281e1308000000010a131b21272b2d2d2d3643505d69768390908376695d5043362d2d2d2b27211b130a010000121e2b37434f5a646c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c645a4f43372b1e120000000000000000000000000000000000000000000000000000030f1c2935424e5a66707679797670665a4e4235291c0f030000000000000000000000000000050b1014161720202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201f1d19140e070000000000000000000000000000000000000000000002070a0c0d131313130e0d0b0803000407090a131313131006050300000000000000000000000000000000000000000000000000000000000000000000020a12191f2326272d2d2d2d2d2d2d2d2625221e181109010000000000000000000000000000000000000008131e29323d47505a626b707b81878c8f919292918f8b87817b706b615a50473d32281e13080000000b1825323e4b5865717e86868686796d6053474b5865717e86868686796d6053473a2d20140a0000000000000000000000000000000000000000000000020a11171f262b3035393a3e4144454546454543413e3a3935302a261f180f090100000000000000000000000000030e1a25303b45505a626d727e858d92989a9c9b9998999a9d9b99938f8780786d675c51483e31281d12070000000000050e18222b353e47505a636d74808d939ea69f948f82786d605c52493f362c23191007000000000000000000071019232c363f49525c606c78818f949fa69e938d80746d635a50473e342b22180e050000000713202d3a4653606d7985929b8f8275695f53464d566975828f9c9184796d6053463e31271d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151f2c3845515c6773808d9aa4aa9d9184776a75828e9baaaa9d9084776b6054443a3024190d010000000000000000000000000000000000000a1623303d495663707c8996a3afa69a8d8073675a4d4034271a07000000010d192430414d5a6774808d9aa7afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afa6998c807366594d4033261a07000000000c18232e424f5c6975828f9ca8b6ac95887c6f6255493c2f22160900101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013060000000000000000010d19242f3a434c5154585756555453514b504f4e5663707c8996a3a296897c6f63564e4f504b5153545556575854524c443a3024190d01000009131c252c33373939393943505d69768390908376695d50433939393937332c251c130900000f1b27333e49525a5f60606060606060606060606060606060606060605f5a52493e33271b0f000000000000000000000000000000000000000000000000000003101d2a3643505d69768286868276695d5043362a1d1003000000000000000000000000000000000407090a131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131312100d090300000000000000000000000000000000000000000000070e1316191a202020201b1a18140f0b10141617202020201d13120f0b0600000000000000000000000000000000000000000000000000000000000000000000080e1317191a2020202020202020191816120d070000000000000000000000000000000000000000010d1925303a444f59626c717d858e92999c9a98989a9c99928e857d716c61594f443a3024190d0200000a1723303d4a5663707d8993988a7d7063574a4a5663707d8993988a7d7063574a3d31261b0f03000000000000000000000000000000000000000000000000060b151a1e25292d2e32343738393939383634312d2c29241e1a140e060000000000000000000000000000000009141f29333e48515b626c707a80858a8d909192939291908e8b87827c736d665c554b40362d1f160c01000000000000061019232c353f48515b606c78818e949fa69e948e81746e635b51483e352b22190f0600000000000000060f18222b353e48515b636e74808d939ea69f948e81776c605b51483f352c221910060000000006121f2b3844505c6675818e9b93877b6e61574d4b5864717e8b98978a7e7164594f43392f23180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b55616e7b87939faca095887b6f7985929faca3988b7f7265594f4332281e1308000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0a6998c807366594d4033261a0d00000000081926323f4c5965727f8c98a5afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afa5988b7f7265584c3f3225190c00000000071b2835424e5b6875818e9ba8b0a396897d7063564a3d3023170a00101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201306000000000000000004111d2935414c555d606564636261605d555d5c5b5a63707d8996a3a396897c70635a5b5c5d555c606162636465615d564c4135291d11050005101b252e373e434646464646505d69768390908376695d504646464646433e372e251b1005000a16212c3740494f535353535353535353535353535353535353535353534f4940372c21160a000000000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a12191f2325262d2d2d2d282724201a161c2022232d2d2d2d2a201f1b17110a0200000000000000000000000000000000000000000000000000000000000000000002070a0c0d13131313131313130c0b09060100000000000000000000000000000000000000000005111d2a36414c56606b717e8792979e96918d8c8c8d91969e9792877e716b60564c4135291e130800000815222f3b4855626e7b88959a8d817467584e4855626e7b88959a8d817467584e43372b1f12060000000000000000000000000000000000000000000000000003090e13191d202125282a2b2c2c2c2b2a272521201d19130e09030000000000000000000000000000000000020d17202c363f49515a61686d73797d8083848586858583817e7b756f6a605c544b43392f241b0d04000000000000000007101a232d364044505b666d79828f95a0a69d938d80736d625a50473d342a21180d040000000000040d18212a343d47505a626d73808c929da59f958f82786d655b50493f362d231a1007000000000003101c28343f4a5463707d8995998d8074695e534754606d7a86929d9083766b61554b4034291c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e3946535f6976828f9ca9a7998c7f737d8a98a2ac9f92867a6d6054473d3221160c02000000000000000000000000000000000000000b1724313e4a5764717d8a97a4b0a5998c7f7266594c3f3326190c000000000b1825323e4b5865717e8b98a4afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afa5988b7e7265584b3f3225180c000000010e1b2834414e5b6774818e9aa7b0a3978a7d7064574a3d3124170a00101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000613202c3945515d676d7271706f6e6d676b6a69686766707d8a96a3a396897d70666768696a6b676d6e6f7071726d685d5246392d201307000a16212c3740494f5353535353535d69768390908376695d5353535353534f4940372c21160a0005101b252e373e4346464646464646464646464646464646464646464646433e372e251b1005000000000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000000000000000000010406070a0d10111213131211100d0a07060400000000030505060606060606000000000000000000000000000000000000040613131313131313131312110e0904000000000000000a131c242a2f3233393939393433302b2521272c2f3039393939372d2b27221b140b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525e68707d87929997918a84807f7f81848a92979992877d6f685d52453a3024190d01000714202d3a4753606d7a86979e9184786a5f534753606d7a86979e9184786a5f53473a2e21150800000000000000000000000000000000000000000000000000000002080d111314181b1d1e1f201f1e1d1b181413110d08020000000000000000000000000000000000000000050e1a242d373f4850565e61676d70747678797979787774716e68625f58504a423931271d12090000000000000000000008111b2428333f4a545c676d79839096a0a59c928b7f726c61594f463c332a1f160c01000000010c161f2a333c464f59616c727f8b929ca4a0969083796d665c53493f372e241b1108000000000000000b17232e394653606c7883909d92867b6e615a50515d6774818e99958a7d70675c5145382c1f130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2b37424d5764717d8a97a1aa9d908377818e9baaa79b8e8174685d5245392c20130400000000000000000000000000000000000000000b1824313e4b5764717e8a97a4b1a5988c7f7265594c3f3226190c000000000b1824313e4b5764717e8a97a4afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afa4978b7e7164584b3e3125180b000000010e1b2734414e5a6774818d9aa7b1a4978a7e7164574b3e3124180b00101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000714212d3a4754606d797f7e7d7c7b7a79787776757473727d8a97a3a3968a7d72737475767778797a7b7c7d7e7f7a6d6154473a2e211407000f1b27333e49525a5f60606060606069768390908376696060606060605f5a52493e33271b0f000009131c252c33373939393939393939393939393939393939393939393937332c251c130900000000000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000000000000000001080d111314171a1d1e1f1f201f1e1c1a171413100c07010c0f111213131313131309090703000000000000000000000001070c10132020202020202020201f1d1a150f08000000000007121c252e353b3f404646464641403c362f2b33383c3d46464646433937332d261d140a00000000000000000000000000050a0d0f10131313130b0a0805050a0d0f10131313130b0a08050000000000000000000000000000000000000000000000000000000000000005111e2a36414c56616d7a8592999691857e7774727274787e8591969992857a6d60564c4135291d11040006131f2c3945515d677885929e96887b6f625548515d677885929e96887b6f6255483c3025190d0100000000000000000000000000000000000000000000000000000000010507070b0e111212131212100e0b07070401000000000000000000000000000000000000000000000008121b252d363e444c52555c606467696b6c6c6c6b6a6865615e56544e443f3830271f150b000000000000000000000000091217222d38424b555d676e7a849197a1a49f93887e716b60584e453b31281d130700000007131d28313b454e58606b717e87939fa4a19691847a6d675d544a41382d251c1209000000000000000006121f2b3744505b65717e8a94988f82756c61554c55616e7b8692939184796d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a26313c4653606d7984919eaba095887b85929faba095897c6f63564c4135291d110400000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a5988b7f7265584c3f3225190c000000000b1724313e4a5764717d8a97a4afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afa4988b7e7165584b3e3225180b000000010e1a2734414d5a6774808d9aa7b1a4978b7e7164584b3e3125180b00101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000815212e3b4854616e7b878a898887868584838281807f7e808d9aa7a79a8d807e7f808182838485868788898a887b6e6255483b2f22150800121e2b37434f5a646c6c6c6c6c6c6c6c7683909083766c6c6c6c6c6c6c6c645a4f43372b1e120000010a131b21272b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b27211b130a0100000000000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000000000003090e13191d20212427292b2b2c2c2c2b292724201f1c18120e181c1e1f2020202020201615130f0a040000000000000000030b12181c1f2d2d2d2d2d2d2d2d2c2c2a2620191209000000020e19242e3740474b4d535353534e4c484138353d44484a535353535046443f382f261b110600000000000000000000030a1016191c1d20202020181714111016191c1d20202020181714110c0600000000000000000000000000000000000000000000000000000000000714202d3946525e6874808d979891847b716c676565656c717b849198978d8073685d5245392c2013070004101d2935404b556a7783909d998c7f7266564c4b556a7783909d998c7f7266564c41362a1d1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131b242c323a41464b5153575a5d5e5f605f5e5d5b5854524d47433c342e261e150d030000000000000000000000000006111c262f39434c555e686e7b859298a2a49a92877d706a5f574d433a2f24180d0100010d18242f3a434d575f6a707d869299a4a29791847b6e685e554b42392f261b130a000000000000000000030f1b27333f4953616c7682868686867d7064574a535e69748086868686807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2c3844505c6673808c99a4a79c8f828f97a2aa9d9084776b6054443a3024190d0100000000000000000000000000000000000000000b1824313e4b5764717e8a97a4b1a5988c7f7265594c3f3226190c000000000b1825313e4b5864717e8b97a4afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afa5988b7e7265584b3f3225180c000000010e1b2734414e5a6774818d9aa7b1a4978a7e7164574b3e3124180b00101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130600000000000000000815212e3b4854616e7b8794969594989291908f8e8d8c8b8d929da9a99d928d8b8c8d8e8f9091929894959695887b6e6255483b2f2215080013202d3946535f6c767979797979797979839090837979797979797979766c5f5346392d2013000000010910161b1e202020202020202020202020202020202020202020201e1b161009010000000000000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000000000060e141a1e24292c2d3033363738393939383634302d2c29231d1a24282b2c2d2d2d2d2d2d23221f1b160f07000000000000030d151d23292c3939393939393939393836312b241b1208000007131f2a354049525759606060605b59534a413d474f5456606060605d53504941382d22170b000000000000000000040d151b212628292d2d2d2d2423211d1b212628292d2d2d2d2423211d171008000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a86929f92867c6e69615a59535b60696e7c86929f92867a6d6054473a2d21140700000c18242f424f5c6875828f9b9c908376685e524f5c6875828f9b9c908376685e5246392d20130700000000000000000000000106090b0c13131313130d0c0a070200050a0d0f1013131313130a0907040000000000000000000000000000000000000000000000000000000000000109111a20283035394045474a4d505152535252504e4b4746413b373228231c150c030000000000000000000000000000000a141d27303a434c565f696f7c869299a3a39992867c6f695f554b4035291d11040004111d2935404b555f696f7c869298a3a39892857c6f695e564c433930271d140a01000000000000000000000b17222d3841505a66707679797979706c6155494d57646e7479797979736e63574b3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54616e7b87939fac9e948f949ea9a3988b7f7265594f4332281e13080000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4b0a5998c7f7266594c3f3326190c000000000c1825323f4b5865727e8b98a5afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afa5988b7f7265584c3f3225190c000000010e1b2834414e5b6774818e9aa7b0a4978a7d7164574a3e3124170b00101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693a0acac9f9286796c5f5346392c20130600000000000714202d3a4753606d7a8693a0acac9f9286796c5f5346392c20130600000000000000000815212e3b4854616e7b8794a1a2aaa29f9e9d9c9b9a99989a9da4aeaea49d9a98999a9b9c9d9e9fa2aaa2a195887b6e6255483b2f2215080013202d394653606c798686868686868686909494908686868686868686796c605346392d20130000000000050a0f1213131313131313131313131313131313131313131313120f0a0500000000000000000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000000000070f181f262a2f35393a3d404344454646454443403d3a38342f2a252f3437383939393939392f2e2c272119100700000000010b151f272f343846464646464646464645423d352d24190f04000a16232f3b47525c63666c6c6c6c67645d5346444f5960636c6c6c6c6a605b53493f33271b110600000000000000000d161f262d3235363939393931302d28262d3235363939393931302d28221a12080000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b99998c7f736a5f57504c4950575f6a73808d99988a7e7164574b3e3124180b0000071a2734414d5a6774808d9a9f93867a6d61544d5a6774808d9a9f93867a6d6154473a2e23180c00000000000000000000070d1216181920202020201a1917130e0a1015191c1d2020202020161613100b05000000000000000000000000000000000000000000000000000000000000080e161e25292f34383a3d4143454646464544413e3b3936302b262017110a0300000000000000000000000000000000020b151e28313b444d57606a707d87929aa4a29892857b6e675d5145392c201306000613202c3945515d676e7b859198a2a39992867d6f6a5f574d443a31281e150b02000000000000000000000006111b262f3e48545e66696c6c6c6c64615a504445525c64676c6c6c6c66635b52473b2f23160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c17232e3846535e6975828f9ca8a69e9c9ea6ac9f92867a6d6054473d3222170b020000000000000000000000000000000000000000000a1724303d4a5763707d8a96a3b0a6998d8073665a4d4033271a0d000000000d192633404c5966737f8c99a6afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afa6998c7f7366594c4033261907000000020f1b2835424e5b6875818e9ba8b0a3978a7d7064574a3d3124170a00101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a86939f9f9f9f9286796c5f5346392c20130600000000000714202d3a4753606d7a86939f9f9f9f9286796c5f5346392c20130600000000000000000815212e3b4854616e7b8794a1aaa29f9e9d9c9b9a999796999ca4aeaea49c999697999a9b9c9d9e9fa2aaa195887b6e6255483b2f2215080013202d394653606c798693939393939393969696969393939393939386796c605346392d2013000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000000030b1218212a31363a4145474a4d505152525352514f4d4a4745403936313a4044454646464646463c3b38322b22190f0400000007121d2731394045535353535353535353524e473f352b201509000c1925323f4b57636e7379797979746f64584e4854606b7079797979766c655b5044382d22170b0000000000000008111f2831383e4243464646463e3d393431383e4243464646463e3d39342c241a100600000000000000000000000000000000000000000000000000000f1c2835424f5b6875818e9b92867a6d61574e453f3f444e58616e7b87969b8e8174685b4e4135281b0e00000c1926323f4c5965727f8c98a4998b7e7164544a5965727f8c98a4998b7e7164544a4034281c100400000000000000010911181e2225262d2d2d2d2d2726231f19141b212628292d2d2d2d2d2322201c160f07000000000000000000000000000000000000000000000000000000000000040c13191d23292c2d31343638393939383735322e2d2a251f1b150c0600000000000000000000000000000000000000030c161f29323c454e58606b717e8893939393979184796d6053473a2d201407000714202d3a4753606d7984919793939392877e706b60584e453b32281f160c03000000000000000000000000000a141d2c36424c545a5c60606060575550483e414a52585a606060605957524940352a1e1307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e2834404b545c66707d8a96a3b0aaa8aab0a79b8e8174685d544a3f33281d140a0000000000000000000000000000000000000000000916232f3c4956626f7c8995a2afa79a8d8174675a4e4134271b08000000010e1b2734414e5a6774818d9aa7afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afa79a8d8174675a4e412e23180c000000030f1c2936424f5c6975828f9ca8afa296897c6f6356493c3023160900101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d7a8693939393939286796c5f5346392c20130000000000000714202d3a4753606d7a8693939393939286796c5f5346392c20130600000000000000000815212e3b4854616e7b87949594989291908f8e8d8c8b8a8c929ca8a89c928c8a8b8c8d8e8f90919298949595887b6e6255483b2f2215080013202d394653606c79868989898989898989898989898989898d929386796c605346392d2013000000000000000105070810101010101010101010101010101010101010101008070501000000000000000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000000030c151c2328333b42464c5254575a5c5e5e5f5f5f5e5c5a5753514b46423b454c50525353535353534948433d342b21160a0000000c18232f39434b515f606060606060605f5e5951473d31261a0e000d1a2633404d596673808686868681746a5f534a5663707d8686868683776c6053493f33271b0f030000000000050f1a23313a42494e50535353534b49453e3a42494e50535353534b49453e362c22170c0000000000000000000000000000000000000000000000000000111d2a3744505d6a7783909d908377685e52453c33333c46525e697784919c8f8276695c504336291d1000000b1724313e4a5764717d8a97ab9b8e8275665c515764717d8a97ab9b8e8275665c5144382c1f12060000000000000009131b23292e3132393939393933322f2a241f262d3235363939393939302f2c272119110700000000000000000000000000000000000000000000000000000000000002080d12181c1f2024272a2b2c2d2c2b2a282521201e19140f0a04000000000000000000000000000000000000000000040d17202a333c464f59616c727f868686868686867b6e6154483b2e211508000815212e3b4854616e7b868686868686867e716c61594f463c332920160d040000000000000000000000000000020b1a24313a42494e50535353534a49443e363841474c4e535353534d4b4740372e24190e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27303945515c666d78808d99a6a3a0a0a1a4a89c8f82756c665b50443e2f261b110600000000000000000000000000000000000000000815222e3b4855616e7b8894a9b3a89b8f8275685c4f423025190e02000005121e2a36424d576976828f9ca9afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afa89b8f827568544a4034281c1004000004101c2934404b556a7683909da9b4aa95887b6f6255483c2f22150900101d2a3643505d69768390908376695d5043362a1d1000000000000000000714202d3a4753606d798686868686868687796c5f5346392c140c0200000000000714202d3a4753606d798686868686868687796c5f5346392c20130600000000000000000815212e3b4854616e7b878a8887868584838281807f7e7d808c99a6a6998c807d7e7f80818283848586878889887b6e6255483b2f221508000a1723303d4a5663707d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d808d9386796c605346392d2013000000000002080d1114141c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1414110d080200000000000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000000000b151e272e343f454d53565d606366696a6b6c6c6c6b696763605c55534d444f575c5f60606060606056544e463d32271b0f030004101c2934404b555c6c6c6c6c6c6c6c6c6c6a63594e42362a1d11000714202d3a4753606d7984919392877b6e62564c54606b75818e98958a7e71655b5044372b1f120600000000000b16212b35424c545a5c6060606057555048424c545a5c60606060575550483e34281d110500000000000000000000000000000000000000000000000000121f2b3845525e6b7885919b8f827568564c41332a2a36424d566976838f9c9184776a5e5144372b1e1100000916232f3c4956626f7c8995ab9f9285796d605356626f7c8995ab9f9285796d6053463a2d20130900000000000007111b252d353a3e3f4646464646403f3b352e2830383e424346464646463d3b38332b23190f050000000000000000000000000000000000000000000000000000000000000001070c101314171a1d1e1f201f1f1d1b181414110e0802000000000000000000000000000000000000000000000000050e18212b343d47505a626d727979797979797976695e53463a2d211407000714212d3a46535e697679797979797979716c625a50473d342a21170e050000000000000000000000000000000008121f2831383e4243464646463d3c39332c2f363c3f4146464646403f3b352e251c1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e3943505a606d78828d929c9c97949394979d9e948e81786c60594f41382d22170b00000000000000000000000000000000000000000714202d3a4753606d7a8697a1ada99d9083766a564d41362a1e110500000714202d3a46525e697885919eabafa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afaa9d908477665c5144382c1f1206000006131f2c3845515c677884919eabaea298877a6d6154473a2e21140700101d2a3643505d69768390908376695d5043362a1d10000000000000000006131f2c3845515c67767979797979797979756a5e52452e261e140a000000000006131f2c3845515c67767979797979797979756a5e5245382c1f120600000000000000000714212d3a4754606d797e7d7c7b7a7978767574737271727f8c98a5a5988b7f7271727374757678797a7b7c7d7e7a6d6054473a2d211407000916222f3c4854606b707070707070707070707070707070727e8b9386796c605346392d201300000000050d14191e202129292929292929292929292929292929292929292921201e19140d05000000000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000000007121c273039404451575f61686d7073767778797978777673706d67615e57505761686b6c6c6c6c6c6c6260584e43382c1f13070006131f2c3845515c67767979797979797979756a5e5245382c1f120006131f2c3845515c67707d8a95998e8275685e524f59616e7b86929d9184786c605346392d22170b0000000004101c27333d47545e66696c6c6c6c64615a5047545e66696c6c6c6c64615a5045392d21140800000000000000000000000000000000000000000000000000121f2b3845525e6b7884919b8f827568564c4135292a36414c566976828f9c9184776a5e5144372b1e1100000814212e3b4754616e7a8799a3a297897c70635654616e7a8799a3a297897c706356493d31261a0e0200000000010d18232d373f464a4c53535353534d4b474038303a42494e5053535353534948443d352b21160b000000000000000000000000000000000000000000000000000000000000000000000406070a0e101213131312110e0b08070502000000000000000000000000000000000000000000000000000000060f19222b353e48515b62656c6c6c6c6c6c6c6c5e574d42362a1e12050005121e2a36424d575e6c6c6c6c6c6c6c6c65625a50473e352b22180f050000000000000000000000000000000000000d161f262d3235363939393931302d2822242b3033343939393933322f2a241c130a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b55616c75818e949c94908a8786878a90959d938d80746b6153493f33271b0f030000000000000000000000000000000000000006131f2c3945515d677885919eabab9f928578685e5246392d20140600000815212e3b4854616e7b8797a1adafa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afac9f9286796d6053463a2d20130900000714202d3a4753606d7a86939facac9f928579685e5246392d20130700101d2a3643505d69768390908376695d5043362a1d10000000000000000004101c2934404b555c6c6c6c6c6c6c6c6c6c6a6359443f3830261c110600000006111c263038404b555c6c6c6c6c6c6c6c6c6c6a63594e42362a1d110400000000000000000613202c3945515d676d71706f6e6d676b6a696867666673808c99a6a6998c7f7366666768696a6b676d6e6f70716d685d5245392c201307000713202c38444f5960636363636363636363636363636365727e8b9386796c605346392d2013000000050e171e252a2d2e3636363636363636363636363636363636363636362e2d2a251e170e050000000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000000000c18232e39424a515b63696e747a7d808384858586858482807d79746e69605b536873787979797979796f6a6054483b2e221509000714202d3a4753606d798686868686868687796c5f5346392c20130004101c2934404b55616b7683909d92867a6e615447525e6974808d9995897d7063544a3f33281c0f030000000714202c38444f5966707679797979716c61554f5966707679797979716c6155493d3023170a00000000000000000000000000000000000000000000000000111d2a3744505d6a7783909d908377685d52463c33333b46525e687784919c8f8276695c504336291d1000000613202d394653606c7986929fa99a8d8073675753606c7986929fa99a8d807367574d42372b1e12060000000006121e29353f4951575960606060605a57524a4038424c545a5c606060606056544f473d33271c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101a232c363f49515658606060606060605f534d453b31251a0e0200020e1a25313b454d535f60606060606060585650483f352c2319100600000000000000000000000000000000000000040d151c212629292d2d2d2d2423201c171a1f2426272d2d2d2d2625231e19120a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c67717e8b939c928c837d7a797a7e838e939d928a7d70655b5044372b1f12050000000000000000000000000000000000000004101d2935404b55697683909ca9ada297877a6e6154473b2d22170b0107111e2a36414d5665717e8b98a9b3afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afaea399887c6f6255493c31261a0d06030615222f3c4855626f7b8899a4afaa9d9084776a564c41362a1e110500101d2a3643505d69768390908376695d5043362a1d100000000000000000000c18232f39434b515f6060606060606060605f5e504a42382e23170b0000000b17232e38424a505e5f60606060606060605f5e5951473d31261a0200000000000000000004111d2935414b555d6064636261605d555d5c5b5a5a6774818d9aa7a79a8d8074675a5a5b5c5d555d6061626364605d564c4135291d11040004101c27333d474f54565656565656565656565656565865727e8b9386796c605346392d20130000020d1720293036393b4343434343434343434343434343434343434343433b3936302920170d0200000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000004101c2834404a545c606d727b81868a8d8f9191929292918f8d8a85807b726c655c6b78858686868686867c6f6256493c2f231609000714202d3a4753606d7a8693939393939286796c5f5346392c201300000c18232f39434f5964717e8a97998b7f7265554b4d56616e7b87929b8e8175665b5044382b1f12060000000916222f3c4854606b7682868686867e71645754606b7682868686867e7164574b3e3124180b000000000000000000000000000000000000000000000000000f1c2835424f5b6875818e9b92867a6d61574d453f3f454e57616e7a87939b8e8174685b4e4135281b0e000005121f2b3744505b657784919eaa9d918477695f535b657784919eaa9d918477695f53473a2d211408000000000916222e3a46515b62656c6c6c6c6c66635c52473e49545e66696c6c6c6c6c6360594f44382c201307000000000000000000000000000000020507080c10121312110f0c080705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a242d373f464a4c535353535353534846423b33291f140900000009141f29333b424648535353535353534b4a453f362d231a1107000000000000000000000000000000000000000000030a1016191c1d20202020171614100b0e14171a1b202020201a1916130e070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7984919e938c8076706d6d6e7178818e949d9083786c605346392d20130600000000000000000000000000000000000000000c18242f414d5a6774808d9aa7b3a9978a7d706453493f33271b100d1218252d3946525e6875828f9ca8b5afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afb5ab998c7f7266574d42372b1f15120f121c2834404a5465717e8b98abb5a89b8e8175685b4e423025190d0100101d2a3643505d69768390908376695d5043362a1d100000000000000000040c131d2731394045534d545b60666c6c6c6c6c6a5c544a3f34281c10030003101c28343f4a545c6a6c6c6c6c6c66605b544d524e473f352019130c040000000000000000010d18242f3a434b51545857555453514b504f4e4f5b6875828e9ba8a89b8e8175685b4e4e4f504b51535455565854524c443a2f24190d0100000b16212b353d44484a4a4a4a4a4a4a4a4a4a4a4a4b5865727e8b9386796c605346392d2013000008141e29323b4146474f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4746413b32291e140800000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000000030e18212c3844515c666d757f878d9298999c9d9e9f9f9f9e9c9a98928d867f776d666679869293939393887b6e6255483b2f221508000714202d3a4753606d7a86939f9f9f9f9286796c5f5346392c2013000007121d27313e4653606d7984919d908376675d5146535e6975828f9b9285796c605346392d201306000006131f2b37434e5863707d8994998f82766c61555863707d8994998f82766c6155493d3023170a000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b99998c7f72695f57504c4c50575f6a73808c9a988a7e7164574b3e3124180b0000030f1b27333f49536976838f9ca9a096887b6e6155536976838f9ca9a096887b6e6155483b2f24190d010000000b1825313e4a57626d727979797979736e63574b424e5a6670767979797979706b6054483b2f2216090000000000000000000000000003090e121415191d1e1f1f1e1c181414110e080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121b252d343a3e3f464646464646463b3a36312921170d03000000030d17212931363a3b464646464646463e3d3a342d241b1108000000000000000000000000000000000000000000000000050a0d0f10131313130a0a08040003080b0d0e131313130d0c0a0702000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a96998e81756e64616061666d78828f9c95897c6f6256493c2f2316090000000000000000000000000000000000000000071825313e4b5864717e8b97a8b2a79a8d8074655b5044372b221c191d242a36414c56616e7b86929facb9afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afb6a99c908376695f53473c3127201f1c1f232c3844515c6675818e9ba8b3a9988c7f7265594c3f322619080000101d2a3643505d69768390908376695d5043362a1d1000000000000001070e161e2529323b424651575f666c72797979797975665c5044382b1f12060006121f2b3844505c66757979797979726c665f575146423b3229251e160e07010000000000000007131d28313a4145474b4a4948474540434243505c6976838f9ca9a99c8f8276695c4f43424340454748494a4b4745413a32281e1308000000050f19232b33383c3d3d3d3d3d3d3d3d3d3d3d3f4b5865727e8b9386796c605346392d201300010d1925303b444c52545c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c54524c443b3025190d01000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000000915202c38434f59606d78818c92999fa2aaa9a8aaa29f9e9e9e9fa29f98928c81786d6d798699a39f9f94877a6e6154473b2e211408000714202d3a4753606d7a8693a0acac9f9286796c5f5346392c2013000008121d262c3844505c6674818e9b92867a6d6053474d5765717e8b9897887b6e6255483b2f22150800000815212e3b47535f6a7683909d92867b6e615a535f6a7683909d92867b6e615a5045392d211408000000000000000000000000000000000000000000000000000814212e3b4754616e7a86929f92857b6e69615a59595a61696e7c86929f92867a6d6154473a2e2114070000000b17222d414e5b6874818e9ba7a8988c7f7265555b6874818e9ba7a8988c7f7265554c4135291d11040000000c1926323f4c5965727f86868686868073665a4d43505c69768286868686867d706356493d3023160a000000000000000000000002080e141a1e212226292b2c2c2b292521201e19140d0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131b23292e3132393939393939392e2d2a251f170f050000000000050f171f252a2d2e3939393939393932312e29221b12090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1b2734414e5a6774818d9a93877b6e615c5453545c666f7c8997998c807366594d4033261a0d00000000000000000000000000000000000000000815212e3b4854616e7b8796a0acab9e9184786c6053463e342c2924292f353e46525e6873808c99a3aebbafa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afb7ab9f94887b6e62574e4339312d2b282b2e343f4953606d7985929fabada297897c6f6356493c302316090000101d2a3643505d69768390908376695d5043362a1d100000000000040c1318202830353e444d525b62696e787f8686868687796d6053463a2d201307000713202d3a4653606d7987868686867f786e69625b524d443e3530282018130c04000000000000010c161f282f35393a3e3d3c3b3a38352f3744515d6a7784909daaaa9d9083776a5d50442e2f35383a3b3c3d3e3a39352f2820160c0100000005101a232c33393c3d3d3d3d3d3d3d3d3d3d3d3f4b5865727e8b9386796c605346392d20130005111e2a36414c565e61696969696969696969696969696969696969696969615e564c41362a1e1105000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000000020e1a26313b4854606b74808d939fa3ababa49f9b979892919192939a989d9f938f82786d7a8794abb4a094877a6d6154473a2e211407000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201300030e19242f3840474a5464717e8a9799897c6f6256494854616e7b8796978a7d7164574a3e3124170b00000916222f3c4955626f7c88959b8e8174695f5355626f7c88959b8e8174695f53483e34281d1105000000000000000000000000000000000000000000000000000714202d3946525e6874808d979891837b706c676565676c717b849198978d8073685d5246392d201307000000061a2633404d596673808c99a6a99c8f8276675d596673808c99a6a99c8f8276675d5145392c2013060000000d192633404c5966737f8c9393938d8074675a4d43505d6a7683909393938a7d7064574a3d3124170a00000000000000000000050d14191f262a2d2e32363839393836322e2d2a251e19130c0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010911181e2225252d2d2d2d2d2d2d21211e1a140d0500000000000000050d141a1e21212d2d2d2d2d2d2d2524211d18110900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004060709090909090909090706030000000000000000000000000000000000000000000000000000000000000000000003101c2936434f5c6976828f9c908377695e5247464a54606a7885919b8e8175685b4e4235281b0f02000000000000000000000000000000000000000714212d3a46535e697784919eaaaca196897d70635a50463e38343035394045515b616e7a85929fabb2baafa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afbdb0a69a8d81746a5f554b433c39383338393f44505b65717e8a97a2adab9f9285796d6053463a2d2013070000101d2a3643505d69768390908376695d5043362a1d1000000000070d161d2429323a414650565e616d727b828c929992877e71665c5044382b1f12060006121f2b3844505c66717e879399928c827b726d615e565046413a3229241d160d07000000000000040d161d24292c2d31302f2e2d2c292935404b556b7884919eabaa9e9184776b544a403428292c2d2e2f30312d2c29241e160d04000000000b17222c363e44494a4a4a4a4a4a4a4a4a4a4a4a4b5865727e8b9386796c605346392d2013000714202d3946525e686e7676767676767676767676767676767676767676766e685e5246392d201407000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000006121e2b37424e57636f7c87939fa5afa9a199938f8a878584848586888c90959e948d80747b8794a1ada093877a6d6054473a2d211407000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130007131f2b36404a52585a616e7b879a978a7e7164575055575e69788491998c7f7366594c403326190d0005121e2a36424d576673808d9994887c6f62574d576673808d9994887c6f62574d42362c22170c000000000000000000000000000000000000000000000000000005111e2a36414c56616d7a8592999591847d7774727274777e8591969992857a6d61564c4135291d11050000000b1825323e4b5865717e8b98a4ac9f92867a6d605865717e8b98a4ac9f92867a6d6054473a2d22170b0000010d1a2734404d5a6773808d9a9f9b8e8174685b4e44515e6a7784919d9f978a7e7164574b3e3124180b000000000000000000070e171f252a31363a3b3f4345464544423f3b39363029241e160d060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d12161819202020202020201514120e090300000000000000000003090e12141520202020202020181715110c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c10131316161616161616161312100c06000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909c8f827569574d423a424e586a7783909c8f8276695c4f4336291c10030000000000000000000000000000000000000005121e2a36424d576673808d99a6b0a89c9083766c6258504745404241464b515a626d75818e989ea0a8b2afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afb5aba39f92877b6e675d554e4846443f44464a5059606c7883909da9b1a89b8e8175665c5044382b1f12060000101d2a3643505d69768390908376695d5043362a1d100000000710191f282f353e444c525a61696e767f8690949a93877e716c61544a3f34281c10030003101c28343f4a54616c717e87939a9490867f766e69615a524c443e352f281f191007000000000000040c13181d202125242221201f1f2c3845515d677985929facab9f928578665c5144382c1f1f202122232521201d19130c040000000004101c28333e485055575757575757575757575757575865727e8b9386796c605346392d2013000814212e3b4754616e7a8282828282828282828282828282828282828282827a6e6154473b2e211408000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000814212e3a47535f6a76828f9aa4afaba1979287827d7a79787778797b7f838a9196928a7e7b8895a1ada093867a6d6053473a2d201407000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000b1723303c47525c64676c6d798693998c7f7266595a61646c6c7683909b8e8174685b4e4135281b0e000714212d3a46535e697884919c8f82766a5f53535e697884919c8f82766a5f53453c31241a10060000000000000000000000000000000000000000000000000000020e1925303b46525e68707d87929996918a84807f7f81848a91979992877d70685e52443a3024190d010000000a1723303d4a5663707d8996a3aea3998a7d71645463707d8996a3aea3998a7d7164544a3f33281c0f0300010e1b2734414e5a6774818d9aa79b8e8275685b4f45515e6b7884919ea5988b7e7265584b3f3225180c0000000000000000081019202930363b4246484c50515252514f4b4746413b352f282018100700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090b0c13131313131313080705020000000000000000000000000002050708131313131313130b0b09050100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181c1f202323232323232323201f1c17110a0300000000000000000000000000000000000000000000000000000000000003101d293643505c6976838f9c908376675d51464446535f697884919b8e8275685b4f4235281c0f0200000000000000000000000000000000000000020e1a25313b4855626e7b88949eacab9f948b7e716a615a53514b4e4c52555d606c727f8b93969196a0acafa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afafa39992999083796d6760585553504a5053545c606b727f8b95a0acaca095897d7063544a3f34281c10030000101d2a3643505d69768390908376695d5043362a1d100000040f19222b313a41454f565e616c717b828b92989a93887e716c615a5042382e23170b0000000b17232e3842505a616c717e88939a98928b827b716c615e564f45413a312b22190f0400000000000001070d111314181716151414202d3a4753606d7a8698a2aeaea29886796d6053463a2d201314151617181413110d080100000000000814202d3944505a61646464646464646464646464646465727e8b9386796c605346392d2013000815212e3b4854616e7b878f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f877b6e6154483b2e211508000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000815222f3b4855626e7b88949facaea39992857d75716e686b6b666d6e72767d84909492857d8996a3aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000d1a26333f4c58646e7479797985929a8d8073675a616c71797979828f9b8f8275685c4f4235291c0f000815212e3b4854616e7b8796988c7f7265584e54616e7b8796988c7f7265584e433b33291f140900000000000000000000000000000000000000000000000000000008141e2a36414c56606b717e8792989e96918d8c8c8d91969e9892877e716b60564c4132281e1308000000000815222f3b4855626e7b8895a99f9f9b8e8174665b626e7b8895a99f9f9b8e8174665b5044382b1f120600020e1b2835414e5b6874818e9ba79c8f8276695c4f45525f6b7885929ea5988c7f7265594c3f3226190c0000000000000008111a222b323b41464d5355595c5e5f5f5e5c5854524c45413a322a2219100700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151d23282c2d30303030303030302d2c28231c150c030000000000000000000000000000000000000000000000000000000000020f1b2835424e5b6875818e9b92867a6d605a5351535b616e7b88969a8d8073675a4d4034271a0d0100000000000000000000000000000000000000000914212e3a47535f6975828f9aa4afa69f92867d716c64605c555b565d61676d737e8792989184919eaaafa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afac9f928692958f81796f6a6462605b545b6062666d727d87929fa7b0a69d9184786c605346392e23170b000000101d2a3643505d69768390908376695d5043362a1d1000000a16212b343d434b515961686d757e858f949f9f93887f716c625a50483e30261c110600000006111c26303e48505a626c717f88939f9f948f857e756d686159514b433d342b21160a0000000000000000010406070b0a09080815212e3b4854616e7b8794aab4b3aa94877a6e6154473b2e21140808090a0b07070401000000000000000a1623303c4955616c707070707070707070707070707070727e8b9386796c605346392d2013000815212e3b4854616e7b87949c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c94877b6e6154483b2e211508000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000000d192633404c5966737f8c99a6b0ac9f92877c6f6b64615e56545c6062656c707a8290949083909daaaca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000e1a2734414d5a67748086868689979a8d8174675a64717e8686868f939c8f8276695c504336291d10000a1724313d4a5764707d8a9798887b6e6255525764707d8a9798887b6e6255524d453b30251a0e020000000000000000000000000000000000000000000000000000020d1925303a444f59626c717d868e93999c9a98989a9c99938e857d716c62594f443a3020160c02000000000714202d3a4753606d7a8697939393939285796c60606d7a8697939393939285796c605346392d20130600020f1c2935424f5c6875828f9ba89c908376695d5044505b667985929fa6998c807366594d4033261a0d00000000000006101a232c343d444d52575f6165696b6c6c6b6965615e56524c443c342b22190f0500000000000000000000050a0d0f1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100f0d09040000000000000000000000050a0d0f1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100f0d090400000000000000000b151e272e34383a3c3c3c3c3c3c3c3c3a38342e261e150a0000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b98988d80736d63605c60636d75818e9b97897d7063564a3d3023170a00000000000000000000000000000000000000000006121e2b37424d57626f7c87939fa7aea29892867e76706d67686869686d72798088929992867e8a97a4afa295887c6f6255493c2f221609000916222f3c4955626f7c8895a2afa6998c7f8c93938f837c76716e6c666b666c6e72787f879299a3aea99f948a7e71665b5044382b1c1106000000101d2a3643505d69768390908376695d5043362a1d1000030f1b27323d464e555d606b707a818a92979f9b918b7f726d625a50483e362c1e140a00000000000a141e2c363e48505a626d727f8b919b9e97928a817a706b605d554e463d32271b0f030000000000000000000000000000000915222f3c4855626f7b8895a2aeaea195887b6e6255483b2f2215080000000000000000000000000000000a1724313d4a5764707e7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d808d9386796c605346392d2013000815212e3b4854616e7b8794a1a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a194877b6e6154483b2e211508000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d1003000000000000000005111e2a36424d576976838f9ca9b1a79a8d80736a605954524c4a5053555a61676d798290959095a0abaca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000e1a2734414d5a6774808d939393a19a8e8174675b64717d8a93939b9e9d9083766a5d5043372a1d10000c1926333f4c5966727f8c999285796a63615e5766727f8c999285796a63615e574d42362a1e110500000000000000000000000000000000000000000000000000000008131e29323d47505a626b707b81878c8f919292918f8c87817b706b625a50473d32281e0e04000000000006131f2c3945515d677885868686868686867c6f625d677885868686868686867c6f6256493c2f2316090003101c2936434f5c6976828f9ca99d9084776a5d514653606c798698a3a69a8d8073675a4d4034271a0d0100000000020c18222c353e474f565e61696e72767879787775726e68605d564e463d342b21170b0200000000000000030a1016191c1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1c1b1915100a0200000000000000030a1016191c1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1c1b1915100a02000000000007121d273039404546494949494949494946443f3830261c110600000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a86929f93887f756f6d666d7076808c939e9185796d6053463a2d201307000000000000000000000000000000000000000000020e1a26313c4754606a74818d95a0a9aaa298928a827d7977757575777a7f848d939a948c7f7c8895a2afa295897c6f6256493c2f231609000916232f3c4956626f7c8995a2afa296897d818e96959087827e7b79787778797b7f848c9299a3abaaa2978f82776c60544a3f33281c0a00000000101d2a3643505d69768390908376695d5043362a1d100007131f2c38434e5860676d747d858e939fa29b918b7f726d625a50483f362d241a0c020000000000020c1a242d363f48505a626d727f8b919ba29f938e857d746d6760584e43382c1f13070000000000000000000000000000000a1623303d495663707c8996a3acaca296897c6f6356493c3023160900000000000000000000000000000013202d394653606c79868a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8d929386796c605346392d2013000815212e3b4854616e7b87949f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f94877b6e6154483b2e211508000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000714202d3a46525e697885929fabaca095877b6e61584f4746413f44464850555d676e7b85929da0a7b1aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000e1a2734414d5a6774808d9a9fa0a79b8e8174685b64717d8a979fa8aa9d9084776a5d5144372a1e11000e1a2734414d5a6774808d9a91847770706e695e6774808d9a91847770706e695e52463a2d201407000000000000000000000000000000000000000000000000000000020d17202b353f48505961696e747b7f8284858584827f7b746e69615950483f352b20160c00000000000004101d2935404b55687378797979797979796f6a6055687378797979797979796f6a6054483b2e2215090003101d2a3643505d697683909ca99e9184776b5e514754606d7a8793aaa79a8d8174675a4e4134271b0e01000000000a141e2a343e474f5960686e747b7f8384858584827e7a736d685f584f473d33291d140a000000000000040d151c2126292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292825211b140c040000000000040d151c2126292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292825211b140c04000000000c18232e39424b5153565656565656565653504a42382e23170c00000000000000000000000000000000000000000000000000000000000713202d3946525e6873808c959a938b817c7978797d828c929c948b7e71665c5145382c1f13060000000000000000000000000000000000000000000009151f2b37434e58606d79839197a0a8aaa29f948f8a868382818284878b91969f958f82787b8894a1aea296897c6f6356493c3023160900091623303c4956636f7c8996a2aea295887c7a84919899938f8b888685848486888c91969fa3aba9a29892857b6e655b5042382d22170b00000000101d2a3643505d69768390908376695d5043362a1d10000915222e3b4854606a6f79818a91979ea39c918c7f726d625b51483f362d241b12080000000000000008121b242d363f48515b626d727f8c919ca39e97918a81796f6a6054483b2e2215090000000000000000000000000000000b1724313e4a5764717d8a979f9f9f9f978a7d7064574a3d3124170a00000000000000000000000000000013202d394653606c798693939393939393939393939393939393939386796c605346392d2013000815212e3b4854616e7b8793939393939393939393939393939393939393877b6e6154483b2e211508000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000814212e3b4754616e7b8798a2aeaa9d908377695e53463d393634383a3e434c555e69717e8b97a1adb9aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000e1a2734414d5a6774808d9aa7b3a79b8e8174685b64717d8a97a4b0aa9d9084776a5d5144372a1e11000f1b2835424e5b6875818e9b91847d7d7d7b6e616875818e9b91847d7d7d7b6e6154473b2e21140800000000000000000000000000000000000000000000000000000000050e19232d363f474f575e61696e72767779797776726e69615e574f473f362d23190e05000000000000000c18242f39435761686b6c6c6c6c6c6c6c6260585761686b6c6c6c6c6c6c6c6260584e43382c1f13070004111e2a3744515d6a7784909daa9e9285786b5f4a4754616e7a8794a1a89b8e8175685b4e4235281b0f0200000006111c26303c464f59616b6f7a81878c8f919292918f8b86807a6f6a60594f453b2f261b110600000000030d161f262d323536363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363635312c261e160c02000000030d161f262d323536363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363635312c261e160c02000004101c2834404b545c606363636363636363605c544a3f34281c10030000000000000000000000000000000000000000000000000000000005111d2935414c56606d798390969f938e89868586898f949c958f82786c60544b4034281c100400000000000000000000000000000000000000000000030f1b27323d45515d676e7b8591969fa4aca69f9c9892908f8e8f90939a9e9f9490837a6d7a8794aab4a396897c706356493d3023160a000a1623303d495663707c8996a3aca194887b6f7d8692989f9c9799929291919298989ea0a8aba69f9792867d70695f53493f2f261c110600000000101d2a3643505d69768390908376695d5043362a1d10000916232f3c4956626f7c848e9393939393918c7f726d625b51493f362d241b120900000000000000000009121b242d363f49515b626d727f8c9193939393938e847c6f6256493c2f2316090000000000000000000000000000000c1825323f4b5865727e8b9393939393938b7e7165584b3e3225180b00000000000000000000000000000013202d394653606c798686868686868686868686868686868686868686796c605346392d2013000815212e3b4854616e7b8686868686868686868686868686868686868686867b6e6154483b2e211508000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d10030000000000000000091623303c4956636f7c8996aab4a79a8e817467574d42342d2a282b2d313a434d57606d7985929eabb8aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000e1a2734414d5a6774808d9aa7aca79b8e8174685b64717d8a97a4acaa9d9084776a5d5144372a1e11000f1c2936424f5c6975828f9c95918989897e72656975828f9c95918989897e7265584b3f3225180c000000000000000000000000000000000000000000000000000000000007111b242d353e454d52575f6165696b6c6c6b6965615f57524d453d352d241b1107000000000000000007121d2731454f575d5f6060606060606056544e4f575d5f6060606060606056544e463d32271b0f030005111e2b3844515e6b7784919eaa9f928579665b504855616e7b8894a1a89b8f8275685c4f4235291c0f020000000b17232e38424e58616b707d858e92999c9e9f9f9e9c98928d847c6f6b60574d41382d22170b000000000a151f2831383e42434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343413d3830281e140a0000000a151f2831383e42434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343413d3830281e140a000006131f2c3845515c666d6f6f6f6f6f6f6f6f6d665c5044382c1f120600000000000000000000000000000000000000000000000000000000010d1925303a45515d676e7a848f949d9b99929292999c9d938e83796d665b5042392e23180c0000000000000000000000000000000000000000000000000a15202935414b555f696e7b848e939a9fa3aaaaa39f9d9b9b9c9d9f9f99928d827a6d6d798698a29f9f96897d7063564a3d3023170a000a1723303d4a5663707d89969f9fa49a877a6d707d8690959da0a39f9e9e9e9fa3aaa9a8a69f9c948f857d706b60574d41382d1d140a0000000000101d2a3643505d69768390908376695d5043362a1d10000e1b2734414e5a67748186868686868686867f736d635b51493f372d241b1209000000000000000000000009121b242d373f49515b636d737f86868686868686868174675a4e4134271b0e0000000000000000000000000000000d192633404c5966737f86868686868686867f7265594c3f3226190c00000000000000000000000000000013202d3946535f6c767979797979797979797979797979797979797979766c5f5346392d2013000714212d3a46535e697679797979797979797979797979797979797979797976695e53463a2d211407000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000a1724313d4a5764707d8a97a3b0a5988c7f7265594c3f31261e1c1f2028313b45515c6673808d99aab4aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000e1a2734414d5a6774808d9a9f9f9f9b8e8174685b64717d8a979f9f9f9d9084776a5d5144372a1e1100101c2936434f5c6976828f9ca09d96968b7e72656976828f9ca09d96968b7e7265584b3f3225180c00000000000000000000000000000000000000000000000000000000000009121b232c333b42464d5355595c5e5f5f5e5c5955534d46423b332c231b1209000000000000000000010b151f333d454c505253535353535353494843454c5052535353535353534948433d342b21160a000005121f2b3845525e6b7885919eaba29886796c60534955626f7c8895a2a99c8f8376695c504336291d1003000003101c28343f4a545f6a707d8692979fa3ababacabaaaaa39f9691867d6f695e53493f33271b0f03000005101c26313a42494e50505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050504f4e49423a30261b10040005101c26313a42494e50505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050504f4e49423a30261b1004000713202d3a4653606d787c7c7c7c7c7c7c7c786d6053463a2d201307000000000000000000000000000000000000000000000000000000000008131e2935404b555e686e7a828a919598999a999795908981796d675d544a3f30271d1207000000000000000000000000000000000000000000000000040d18242f3a434d575f696e7981878e92989a9c9e9f9f9f9e9d9a98928e8680786d6866798592939393938a7d7164574a3e3124170b000b1724313e4a5764717d8a939393939386796d6b707c838b9195989b9d9e9f9f9f9e9d9b9894908a827b706b60594f453b2f261b0b020000000000101d2a3643505d69768390908376695d5043362a1d10000d1a2733404c58646e747979797979797979736d635b51493f372d251b12090000000000000000000000000009121b252d373f49515b636d737979797979797979746e64584c4033271a0d0000000000000000000000000000000c1825323e4b57636d737979797979797979726d63574a3e3125180c000000000000000000000000000000121e2b37434f5a646c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c645a4f43372b1e120005121e2a36424d575e6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5e574d42362a1e1205000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000b1824313e4b5764717e8a97a4b0a4978a7d7164574a3e3124171012161f2834404b54626f7c8998a3aeaca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000e1a2734414d5a6774808d93939393938e8174685b64717d8a93939393939084776a5d5144372a1e1100101d293643505c6976838f9ca9aaa3988b7e72656976838f9ca9aaa3988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000000000000000000009111a212930363b4246484c4f515252514f4c4846423b363029211a11090000000000000000000000030d212b333b404445464646464646463c3b383b404445464646464646463c3b38322b22190f04000005121f2b3744505b657985929facaa93877a6d60544956636f7c8996a2a99d9083766a5d5043372a1d1004000006121f2b3844505c666f7c869298a1a9afb5b7b8b8b7b4aea8a19892857b6e655b5044372b1f140900000a16212d38424c545a5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5a544c42382c211509000a16212d38424c545a5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5a544c42382c211509000815212e3b4854616e7b87898989898989877a6d6154473a2e2114070000000000000000000000000000000000000000000000000000000000020c18242f39434c565e686d777e84888b8c8d8c8b87837d746d675d554b42382d1e150b000000000000000000000000000000000000000000000000000007131d28313b454d575f676d747c81868a8d8f9192929291908d8a86817b736d665e6a77838686868686867e7165584b3e3225180b000b1825323e4b5865717e868686868686857866606a6e787e84888c8e909192929291908e8b88837d766e6960594f473d33291d140a000000000000101d2a3643505d69768390908376695d5043362a1d10000b1824303c48535c64676c6c6c6c6c6c6c6c66635b51493f372d251b130900000000000000000000000000000009131b252d373f49515b63666c6c6c6c6c6c6c6c67645c53483c3024180b0000000000000000000000000000000a16222f3b46515b63666c6c6c6c6c6c6c6c65635b51463a2e2216090000000000000000000000000000000f1b27333e49525a5f60606060606060606060606060606060606060605f5a52493e33271b0f00020e1a25313b454d535f6060606060606060606060606060606060606060605f534d453b31251a0e02000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000b1825313e4b5864717e8b97a4b0a396897d7063564a3d3023170a060d18232e3a4653606d7986929facaca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000e1a2734414d5a677480868686868686868174685b64717e8686868686868683776a5d5144372a1e1100101d293643505c6976838f9ca9b1a5988b7e72656976838f9ca9b1a5988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000000000000000000000080f171f252a31363a3b3f4344464644433f3b3a36312a251f170f08000000000000000000000000000f1921292f343738393939393939392f2e2c2f343738393939393939392f2e2c27211910070000000613202d394653606c7986939faca194877a6e61544a5663707d8996a3aa9d9184776a5e5144372b1e070000000713202d3a4653606d78839198a2aab3bbc0c4c5c5c4bfbab2aaa1979083776c6053463b31261a0e02000d1926323e49545e66696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969655e54493d3125190d000d1926323e49545e66696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969655e54493d3125190d000815212e3b4854616e7b87949696969694877a6d6154473a2e21140700000000000000000000000000000000000000000000000000000000000007121d27313b444c565d656c71777b7e80807f7e7b76706b605c554b43392f261c0c030000000000000000000000000000000000000000000000000000010c161f2a333b454d555d606a6f757a7d8183848586858583817e7a746e69605c54677177797979797979716c62564a3d3124170b000b1724313d4a56626c71797979797979787368585f666d71777b7f8183858586858583817e7b76706b615e574f473d352b21180b02000000000000101d2a3643505d69768386868376695d5043362a1d10000814202b36414a53585a60606060606060605957514940372e251b1309000000000000000000000000000000000109131b252e37404951575960606060606060605a58534a41362b20140800000000000000000000000000000006121e2a3540495157596060606060606060595751493f352a1e12060000000000000000000000000000000a16212c3740494f535353535353535353535353535353535353535353534f4940372c21160a000009141f29333b4246485353535353535353535353535353535353535353534846423b33291f140900000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000b1825323e4b5865717e8b98a4afa296897c6f6356493c302316090007131f2c3845515c667683909da9aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000d1a26333f4c58646e7479797979797979746f6459616c71797979797979797771675b4f4236291d1000101d293643505c6976838f9ca9aca5988b7e72656976838f9ca9aca5988b7e7265584b3f3225180c000000000000000000000000000000000000000000000000000000000000000000050d141a1f262a2d2e32363839393836322e2d2a261f1a140d050000000000000000000000000000070f171e24282b2c2d2d2d2d2d2d2d23221f24282b2c2d2d2d2d2d2d2d23221f1b160f07000000000714202d3a4753606d7a869aa4afa195887b6e62554a5764707d8a97a3ab9e9184786b5e51452f23180c000006121e2b37424e5765717e8b95a0aab4bcc5cbd1d2d2d0cbc4bcb3a99f958a7e7164574d42362a1e1205000f1c2935424e5a667076767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767670655a4e4135281b0f000f1c2935424e5a667076767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767670655a4e4135281b0f000815212e3b4854616e7b8794a1a2a2a094877a6d6154473a2e211407000000000000000000000000000000000000000000000000000000000000010b151f29323b444c535b6064696e71737473716e69636059514b433931281d140a00000000000000000000000000000000000000000000000000000000040d18212a333b434b51585f62686d71747678787979787674716d67615f5750555f676a6c6c6c6c6c6c65625a50453a2e211509000915212e3a45505a62656c6c6c6c6c6c6b686157545c60646a6e72757778787979787675726e69636159534d453d352b23190f06000000000000000f1c2935424e5a66707679797670665a4e4235291c0f00030f1a252f3841484c4e53535353535353534c4b4640372e251c1309010000000000000000000000000000000000010a131c252e3740464b4c53535353535353534e4c4841382f251a0f03000000000000000000000000000000020d19232e3740464b4c53535353535353534c4a463f372d23180d0100000000000000000000000000000005101b252e373e4346464646464646464646464646464646464646464646433e372e251b10050000030d17212931363a3b4646464646464646464646464646464646464646463b3a36312921170d0300000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f2316090004101c2834404b546875828f9ba8aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000b1723303c47525c64676c6c6c6c6c6c6c68645d535a61646c6c6c6c6c6c6c6a675f554a3f33271a0e00101d293643505c6976838f9c9f9f9f988b7e72656976838f9c9f9f9f988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000000000000000000000000003090e141a1e212226292b2c2c2b292622211e1a140e090300000000000000000000000000000000060d13181c1e1f20202020202020161513181c1e1f202020202020201615130f0a0400000000000814212e3b4754616e7a8794a1b6a295887c6f62554b5864717e8b97a4ab9f9285786c554b4034291c1004000814212e3a47535f6a7784919ea7b1bcc5cfd7dcdfdedcd6cec5bbb1a79d908377695f53463a2d21140700101d293643505c697683838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838276695c4f4336291c1000101d293643505c697683838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838276695c4f4336291c10000815212e3b4854616e7b8794a1aeada094877a6d6154473a2e21140700000000000000000000000000000000000000000000000000000000000000030d172029323a41495053575f626566676664615e57544f45403931281f160b020000000000000000000000000000000000000000000000000000000000060f182129313a40454e53565d606467696b6c6c6c6b6a6764605d55534d444d555b5e606060606060585650483f34291d11050005111d29343f485056586060606060605f5c574f4a5153585f6265686a6b6c6c6c6b6a6865615f57554f46423b332b2319110700000000000000000d1a26323e4a545e66696c6c69665e544a3e32261a0d000008131d262f363c40414646464646464646403e3b352e251c130a0100000000000000000000000000000000000000010a131c252e353b3e40464646464646464641403c362f261d1308000000000000000000000000000000000007121c252e353b3e4046464646464646463f3e3a352d251c1107000000000000000000000000000000000009131c252c33373939393939393939393939393939393939393939393937332c251c130900000000050f171f252a2d2e3939393939393939393939393939393939393939392e2d2a251f170f050000000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000c18232e414e5b6874818e9ba7aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130007131f2b36404a52585a606060606060605b59534b505557606060606060605d5b554d43392e22160a00101d293643505c6976828f93939393938b7e72656976838f93939393938b7e7265584b3f3225180c00000000000000000000000000000000000000000000000000000000000000000000000003090e121415191c1e1f1f1e1c191514120e09030000000000000000000000000000000000000002070c0f1112131313131313130909070c0f11121313131313131309090703000000000000000815222e3b4855616e7b8894a1aca396897c7063564b5865727e8b98a5ac9f928679675c5145382c1f1306000815222f3b4855626e7b8896a0acb9c3ced7e1e8ebebe7e0d6cdc2b8aca095887b6e6155483b2e2215080013202d394653606c79868f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f86796c5f5246392c1f130013202d394653606c79868f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f86796c5f5246392c1f13000815212e3b4854616e7b8794a1aeada094877a6d6154473a2e2114070000000000000000000000000000000000000000000000000000000000000000050e1720282f383f44464d535558595a595854534d48443d342f271f160d0400000000000000000000000000000000000000000000000000000000000000060f181f282f353c43474c5254575a5c5e5f5f5f5e5d5a5754514b46423b444a4f515353535353534b4a453f362d22180c0100010c18222d363f454a4b53535353535352504c454044464e5355595b5d5e5f5f5f5e5d5b5855534d48443e363129211911070000000000000000000a16222d38434c545a5d60605d5a544c43382d22160a0000010b141d252b303334393939393939393933322f2a231c130a01000000000000000000000000000000000000000000010a131c232a2f323339393939393939393433302b251d140b010000000000000000000000000000000000000a131c232a2f3233393939393939393932312e2a231c130a000000000000000000000000000000000000010a131b21272b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b27211b130a010000000000050d141a1e21212d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d21211e1a140d05000000000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f2316090000071a2734404d5a6773808d9aa6aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201300030e19242f3840474c4d535353535353534e4d484145494a53535353535353514f4a433b31271c110600101d293643505c697682868686868686867f7265697682868686868686867e7265584b3f3225180c0000000000000000000000000000000000000000000000000000000000000000000000000000020507080c1011131311100c0807050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b88959f9f9f968a7d7063574c5965727f8c989f9fa399867a6d6053473a2d201407000c1825323f4b5865727e8b98a8b2bdccd5e0e9f3f9f8f2e8dfd4c8bcb1a7988b7e7165584b3e3225180b0013202d394653606c7986939c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9286796c5f5246392c1f130013202d394653606c7986939c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9286796c5f5246392c1f13000815212e3b4854616e7b8794a1acaca094877a6d6154473a2e211407000000000000000000000000000000000000000000000000000000000000000000050e161d262d33373c4247484b4d4d4c4b4846423b383329231d150d04000000000000000000000000000000000000000000000000000000000000000000060d161d242932373a4145474a4e505152535252504e4b4745413a3631393f43444646464646463e3d3a342d241b110600000006111b242d343a3d3e4646464646464544403b34383c4347484c4e505252535252504e4b4846423b38332a251f170f070000000000000000000005111c27313a434a4e505353504e4a433a31271c1105000000020b131a202427272d2d2d2d2d2d2d2d2625231e19120a010000000000000000000000000000000000000000000000010a12191e2325262d2d2d2d2d2d2d2d272724201a130b0200000000000000000000000000000000000000010a12191e2225262d2d2d2d2d2d2d2d2625221e18110a0100000000000000000000000000000000000000010910161b1e202020202020202020202020202020202020202020201e1b161009010000000000000003090e1214152020202020202020202020202020202020202020201514120e090300000000000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000008121d262f363c3f414646464646464641403c37393c3e4646464646464644423f3931291f150b00000f1c2835414e5a66707679797979797979726d6266707679797979797979726d62564a3d3124180b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091623303c4956636f7c8993939393938a7e7164574c5966737f8c9393939393877a6d6154473a2e211407000d1a2633404d596673808c99a6b3bfced9e7f2fbfffffaf1e4d9cebfb3a6998c807366594d4033261a0d0013202d394653606c7986939f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9285796c5f5246392c1f130013202d394653606c7986939f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9285796c5f5246392c1f13000815212e3b4854616e7b87949f9f9f9f94877a6d6154473a2e21140700000000000000000000000000000000000000000000000000000000000000000000040b141b22272b31373a3b3e4041403e3b3a36312c272118120b030000000000000000000000000000000000000000000000000000000000000000000000040c131820262b2f35393a3e4143454546464543413e3a39352f2a262e33363739393939393932312e29221b1209000000000009121b22292e31323939393939393837342f282c31373a3b3f4244454546464543423f3b3a36312c28211a140d050000000000000000000000000a151f2831383e4243464643423e3831281f150a000000000001080f14181a1b2020202020202020191916120d07000000000000000000000000000000000000000000000000000000070d1216191920202020202020201b1a18140f080100000000000000000000000000000000000000000000070d121618192020202020202020191816120d070000000000000000000000000000000000000000000000050a0f1213131313131313131313131313131313131313131313120f0a0500000000000000000000000205070813131313131313131313131313131313131313131308070502000000000000000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130000010b141d242b303334393939393939393534302b2d3031393939393939393736332e271f170d0400000d1926323e49545e66696c6c6c6c6c6c6c65625b5e66696c6c6c6c6c6c6c65625b51453a2e2215090000000000000000000000000000000000000000000000000000000000000000050a0d0f10131313130b0a080500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d868686868686867e7165584d5a677380868686868686867b6e6155483b2e221508000e1b2734414e5a6774818d9aa7b4c0cddae7f7fffffffff5e7dacdc0b4a79a8d8174675a4e4134271b0e0013202d394653606c79869393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939285796c5f5246392c1f130013202d394653606c79869393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939285796c5f5246392c1f13000815212e3b4854616e7b87939393939393877a6d6154473a2e2114070000000000000000000000000000000000000000000000000000000000000000000000020a11171b1f262b2e2f32333433312e2d2a251f1c160c07010000000000000000000000000000000000000000000000000000000000000000000000000001070d151b1e24292c2d31343638393939383734312d2c29241d1a22272a2b2d2d2d2d2d2d2524211d181109000000000000000911181d2124252d2d2d2d2d2d2c2b28241c1f262b2e2f32353738393939383735322e2d2a261f1c170e090300000000000000000000000000030d161f272d32353639393635322d271f160d030000000000000003080b0d0e13131313131313130d0c0a0602000000000000000000000000000000000000000000000000000000000002060a0c0d13131313131313130e0d0b08030000000000000000000000000000000000000000000000000002060a0c0d13131313131313130c0c09060100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000000020b12191f2326272d2d2d2d2d2d2d282724202123242d2d2d2d2d2d2d2a2927221c150d050000000915212d38424c545a5c60606060606060585651545a5c60606060606060585651493f34291d1105000000000000000000000000000000000000000000000000000000000000030a1016191c1d20202020181714110c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4855606b7079797979797979716c62564b58646e737979797979797976695f53463a2d211407000d1a2733404d5a6673808d99a6b3c0cfdae6f3fcfffffbf2e9d9ccc0b3a6998d8073665a4d4033271a0d0013202d394653606c79868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686796c5f5246392c1f130013202d394653606c79868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686796c5f5246392c1f13000815212e3b4854616e7b86868686868686867a6d6154473a2e21140700000000000000000000000000000000000000000000000000000000000000000000000000060b0f151a1e2122252627262521211e1a14100b050000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f13191d20212427292b2c2c2c2b2a272421201d18130e171b1d1e202020202020181715110c06000000000000000000060c111517182020202020201f1e1c1810151a1f212226282a2b2c2c2c2b2a282522211e1a14100b0500000000000000000000000000000000040d151c2226292a2d2d2a2926221c150d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003060712131313131311110e0b0601000000000000000000000000060a0e1011131313131313100f0d0a050000000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130000000001080e13171a1a202020202020201b1a1814141717202020202020201e1d1a16110b040000000005101b26303a42494e50535353535353534b4a45494e50535353535353534b4a453f372d23180c010000000000000000000000000000000000000000000000000000000000040d151b212628292d2d2d2d2423211d17100800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202c38444f5960636c6c6c6c6c6c6c65625a5047525c64676c6c6c6c6c6c6c6c5f574d42362a1e1205000c1925323f4c5865727f8b98a9b3bec9d5e1eaf4f9f8f3e9e0d5c9bdb2a8988b7f7265584c3f3225190c0013202d3946535f6c7679797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797974695d5144382b1f120013202d3946535f6c7679797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797974695d5144382b1f12000714202d3a46525e6976797979797979797976685e5246392d20130700000000000000000000000000000000000000000000000000000000000000000000000000000003090e121415181a1a19181514120e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080d111314171b1d1e1f201f1f1d1b181413110d07010b0e10111313131313130b0b09050100000000000000000000000105090b0b13131313131312110f0c040a0f121415191b1d1f1f201f1f1d1b181514120e090300000000000000000000000000000000000000030a11161a1c1d20201d1c1a16110a030000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080b0e111112131312110f0c0908060300000000000000000406070b0f1213131211100e0c0b09060100000000000000000000000000000000000000000000000000000406070a0d0f11121313131212100e0c09060603000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c1012131f20202020201e1d1b17120c04000000000000000000040b11161a1d1e2020202020201d1c1916100a03000000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201300000000000003070b0d0e131313131313130e0e0c08080a0b1313131313131311100e0a06000000000000000a141e2830383e4143464646464646463f3d3a3e4143464646464646463f3d3a342d241b11060000000000000000000000000000000000000000000000000000000000000d161f262d3235363939393931302d28221a12080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c27333d474f55566060606060606058565048404a52585a606060606060605f534d453b31261a0e0200091623303c4956636f7c8997a1adb9c4cfd9e2e8ebebe7e1d7cec6b9ada196887c6f6255493c2f22160900121e2b37434f5a646c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6962584d4135291c1000121e2b37434f5a646c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6962584d4135291c100005121e2a36424d575e6c6c6c6c6c6c6c6c6c6c5e564c41362a1d11050000000000000000000000000000000000000000000000000000000000000000000000000000000000020608080b0d0e0d0b0807050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010407070b0e101212131312100e0b07060401000000020404060606060606000000000000000000000000000000000000000000060606060606050503000000020608080c0f111212131312100f0c080705020000000000000000000000000000000000000000000000050a0d0f101313100f0d0a05000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e121415181b1d1e1f201f1f1d1b191515120f0a0401000000070c101313181c1e1f201f1e1d1b181815120d060000000000000000000000000000000000000000000001070c10131416191c1d1f1f20201f1e1d1b191613120f0b060000000000000000000000000000000000000000000000000000000000000000000000000000030a11171c1f202c2d2d2d2d2d2b2a27231d160e0600000000000000050d151c2227292a2d2d2d2d2d2d292926211c150d040000000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c161e262d3235363939393939393932312e3235363939393939393932312e29231b120900000000000000000000000000000000000000000000000000000000000008111f2831383e4243464646463e3d39342c241a1006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212c353d44484a535353535353534b4a453f3840474b4d535353535353534846423b33291f140900000613202d394653606c7885929ea9b3bdc7d0d8dddfdedcd7cfc6bcb2a89e9184776c605346392d201306000f1b27333e49525a5f60606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060605f5d5850463b3025190d000f1b27333e49525a5f60606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060605f5d5850463b3025190d00020e1a25303b454d525f60606060606060605f524c443a3025190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f141a1e212125282a2b2c2c2c2b2a282622211f1b15110d08030b12181c1f2025292b2c2c2c2b2a272524221d18110901000000000000000000000000000000000000040a0f12181c1f202326282a2b2c2c2c2c2b2a282523201f1c17110f0a0300000000000000000000000000000000000000000000000000000000000000000000030c151c23282c2d3939393939393837332e2820180e040000000000040d171f272e3336373939393939393635322d261f160d0300000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201300000000000002070a0c0d131313130e0d0b080303070b0d0e131313130d0c0a06020000000000000000000000040c141b212628292d2d2d2d2d2d2d2524222628292d2d2d2d2d2d2d2524221d181109000000000000000000000000000000000000000000000000000000000000050f1a23313a42494e50535353534b49453e362c22170c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f1a232c33383c3d464646464646463e3d3a342e363b3f40464646464646463b3a36312921170d03000006121f2b3844505b6673808c97a1abb5bdc5ccd2d2d2d1cbc4bcb4aaa0968c7f72655b5044372b1f1205000a16212c3740494f53535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535352514d463e342a1f1408000a16212c3740494f53535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535352514d463e342a1f1408000009141f29333b42464853535353535353535346413a32281e13080000000000000000000000000000000000000000000000000000000000030608091313131313120707050100000000000000000000000000000003060809131313131313131313131313131313131313131313131313130b0a080400000000000000000000000000000306131313131313131308070502000000000000000000000005080a0b13131313130e0d0b0803000000000000000000000306080913131313131313130603000000000000000000000000000004090c0e0f13131313131313130908060300000000000000000000000000000000000000000000000000000000020507081213131313131313100706040000000000000000000000000000000000060c161b1f252a2d2e31343738393939383735322f2e2b26201d19130c151d23282c2d32353839393838363432312e29231b130900000000000000000000000000000000040a0f161b1d23292c2d303335373839393939383635322f2d2b28221c1b150e090300000000000000000000000000000000000000000000000000000000000000000a151e262e34383a45464646464644433f39322a20160c01000000000b151f2931393f424446464646464643423e3831281f150a00000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130000000000070e1316191a202020201b1a18140f0e13171a1a20202020191916120d070000000000000000000000030a1015191c1d20202020202020181815191c1d20202020202020181815110c06000000000000000000000000000000000000000000000000000000000000000b16212b35424c545a5c60606060575550483e34281d11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a21272c2f303939393939393932312e29242a2f3334393939393939392e2d2a261f170f06000000030f1c28333f4a54606d79859199a3abb3bbc0c4c5c5c4bfbab2aaa2989184796d6053493f33271b0f030005101b252e373e434646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464644413b342c22180d020005101b252e373e434646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464644413b342c22180d020000020d17212930363a3b4646464646464646463936302820160c02000000000000000000000000000000000000000000000000000000040a0f12151520202020201f1413110d08020000000000000000000000040a0f12151520202020202020202020202020202020202020202020202020171714110c0500000000000000000000060c101220202020202020201514120e090200000000000000060c1114171820202020201b1a18140f0801000000000000040a0f131516202020202020202012100c060000000000000000000002090f15191b1c20202020202020201615130f0a0400000000000000000000000000000000000000000000000002090e1114141f202020202020201d1312100c0700000000000000000000000000030a111720272b31363a3b3e4144444546464544423f3c3b37322c29241e191e272e34383a3e42454646454443413f3d3a342d251b11060000000000000000000000000000060b151b21272c2f34383a3d40424445464646454543413f3c3938332d2b26201a150b0600000000000000000000000000000000000000000000000000000000000006111c2630383f4446525353535353514f4b443c32281d120600000006111c27313b434a4f51535353535353504e49423a31261c1005000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000000010a12191f2325262d2d2d2d282724201a1a1f2426272d2d2d2d2625231e19120a01000000000000000000000005090d0f10131313131313130c0b090d0f10131313131313130c0b0905010000000000000000000000000000000000000000000000000000000000000004101c27333d47545e66696c6c6c6c64615a5045392d2114080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f161c2023232d2d2d2d2d2d2d2524211d191f2326272d2d2d2d2d2d2d22211e1a140d0600000000000b17222d3845515d67707d879299a2aaafb6b7b8b8b7b4aea8a19892867c6f665c5141382d22170b00000009131c252c3337393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393835302a221a100600000009131c252c3337393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393835302a221a100600000000050f171f252a2d2e39393939393939392e2d2a251e160e05000000000000000000000000000000000000000000000000000000060e151b1f21222c2d2d2d2d2c21201d19130c04000000000000000000060e151b1f21222d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2423211c17100800000000000000030a11171c1f2d2d2d2d2d2d2d2d21201e1a140d0500000000000810171d2123242d2d2d2d2d272724201a130b0200000000070f151b1f22222d2d2d2d2d2d2d2d1f1c17110a0300000000000000030c141b202528282d2d2d2d2d2d2d2c22211f1b150e0700000000000000000000000000000000000000000000050d141a1e20212c2d2d2d2d2d2d2d2a201f1c18120b0300000000000000000000030c151c232832373b4246484b4e505152535252504e4c4847433c39352f28222b30394045464b4f5152535251504e4b4a463f372d23180d010000000000000000000000020a111720262b323839404547494c4f50525253535251504e4c4946443f3837312b262017110a02000000000000000000000000000000000000000000000000000000000c17232e38424a50535f60606060605e5c564e44392e23170b0000000a16222e39434d555b5d6060606060605c5a544c42382d21160a000000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130000000a131c242a2f3233393939393433302b25242b3033343939393933322f2a231c130a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202c38444f5966707679797979716c6155493d3023170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b1014161720202020202020181715110e1317191a202020202020201514120e090300000000000006111c2935404b55606b717e8792989fa4acabacabaaaaa39f9691867d706a5f544b402f261b1106000000010a131b21272b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2b29251f18100800000000010a131b21272b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2b29251f181008000000000000050d141a1e20212d2d2d2d2d2d2d2d21201d19130c0500000000000000000000000000000000000000000000000000000006101820262b2e2f3939393939382e2d29251e160e040000000000000006101820262b2e2f3939393939393939393939393939393939393939393939393931302d28221a12080000000000030c151c23282c39393939393939392e2d2a251f170f0500000008121a22282d303139393939393433302b251d140b00000007101920272b2e2f39393939393939392c28231c150c030000000000020c151e252c31343539393939393939392f2e2b26201810070000000000000000000000000000000000000000050e171f252a2d2e3939393939393939372d2c28231c150c030000000000000000030d151e262e343d43474d5354585b5d5e5f5f5f5e5d5b5955534e4745413a3129343c424b5153585c5e5f5f5f5e5d5a585651493f34291d120600000000000000000000040b141c222832373d43484b515356595b5d5e5f5f5f5f5e5d5b585653504a47433c373127221b140b03000000000000000000000000000000000000000000000000000003101c28343f4a545c606c6c6c6c6c6c6b6760564b3f33271b0e0000010e1a27333f4a555f676a6c6c6c6c6c6c69665e54493e3226190d010000000000000000000000000000000003101d2a3643505d69768390908376695d5043362a1d100300000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000007121c252e353b3f404646464641403c362f2f363c3f4146464646403e3b352e251c0e0500000000000000000000060a0e1011121313131212100e0b07070501000000000000000000000000000000000000020507081313131313131313070705010000000000000000000916222f3c4854606b7682868686867e7164574b3e3124180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000407090a131313131313130b0b090502070b0d0d13131313131313080705020000000000000000000d18242f3a434f59626c717d858e939a9c9e9f9f9d9c98928d847c706b61584e42392e1d140a0000000000010910161b1e2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201f1f1c19140d06000000000000010910161b1e2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201f1f1c19140d06000000000000000002090e12141520202020202020201413110d0802000000000000000000000000000000000000000000000000000000040e18222a31373a3c4646464646453a3935302820160c020000000000040e18222a32373b3c464646464646464646464646464646464646464646464646463e3c39332c241a1005000000000a151e262e343846464646464646463b3a36302921170d020006101a242c34393d3e464646464641403c362f261d0d0300040f19222b32373b3c464646464646464638342e261e150a000000000009141e2730373d414246464646464646463c3b37322a22180d03000000000000000000000000000000000000020b17202930363a3b4546464646464646433a38342e271e150b00000000000000010b151f2730383f444e54575e6164676a6b6c6c6c6b6a6865625f5854524c433f353c464e545c6065686b6c6c6b6b696765625b51463a2e221509000000000000000000040d161d262d333c43474f54555c606366686a6b6c6c6c6c6b69686562605b54534e47423c332d261d150d030000000000000000000000000000000000000000000000000006121f2c3844505c666d7879797979797772675c4f43372a1d11000003101d2936424f5b6771777979797979797670665a4e4235291c0f030000000000000000000000000000000203101d2a3643505d69768390908376695d5043362a1d100302000000000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201300020e19242e3740474b4d535353534e4c4841383840474c4d535353534c4b4640372e20170d0200000000000000040b11161a1d1e1f2020201f1e1d1b181413110d0802000000000000000000000000000002090e12141520202020202020201413110d080200000000000006131f2b37434e5863707d8994998f82766c6155493d3023170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131d28313d47505a626b707b81878c8f919292918f8b86807a6f6a61594f463c30271d0b0200000000000000050a0f121313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131312100d0802000000000000000000050a0f121313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131312100d080200000000000000000000000205070813131313131313130707050100000000000000000000000000000000000000000000000000000000000a15202a343c4347485353535353524746413a32281e130800000000000a15202a343c434748535353535353535353535353535353535353535353535353534a49453e362c22170c00000006111c2630383f4453535353535353534846423b33291f1409000c17222c363e45494b53535353534e4c4841382f1f150b010a15202b343c4347495353535353535353443f3830261c1106000000040f1b25303942484d4f53535353535353534947433c342a1f150b0100000000000000000000000000000000000a141d29333b4246475253535353535353504644403930271c120700000000000007121d273139424a50586062696e71747777787979787775726f6a66605d56504540454e5860666d717578797978777674726d62564a3d3124180b0000000000000000030c161f282f383f444e54596063676d707375777879797978787674726f6c66625f58534d443f382f271f150d030000000000000000000000000000000000000000000000000713202d3a4653606d7886868686868684776b5e5144382b1e11000004111e2a3744515d6a77838686868686868276695c504336291d100300000000000000000000000000050a0f12101d2a3643505d69768390908376695d5043362a1d10120f0a0500000000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130007131f2a354049525759606060605b58534a41404a52585a60606060595751494032291e1408000000000000050e161c2227292a2c2c2d2c2c2b29282521201d19130f0a030000000000000000000000050d141a1e20212d2d2d2d2d2d2d2d21201d19130c0500000000000815212e3b47535f6a7683909d92867b6e615a5045392d211408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2b353f48505961696e757b7f8384858584827e7b736d6860584f473e342a1e150b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26313c464e53555f606060605f54524c443a3025190c03000000030f1b26323c464e535560606060606060606060606060606060606060606060606060575550483e33281c110400000c17232e38424a505f606060606060605f524d453b30251a0e05111d28343e4850555760606060605a58534a4131271d12070f1b27323c464e5455606060606060605f504a42382e23170c0000000915202c37424b53595b606060606060605f55534e463c31271d12070000000000000000000000000000000006111b262f3b454d52545f606060606060605d53514a42392e23180c0000000000020c18242f39434b545c606a6f757b7e8183848586858583817f7c78726d68625a514b4d57606a6f797e82848586858483817f7265584b3f3225180c00000000000000000b151e283139424a50585f626b6f75797d7f828385858686858483817f7c79746f6a625f575049413931271f150b010000000000000000000000000000000000000000000000091623303c4956636f7c89989393938d8174675a4e4134271b0e000004111e2a3744515d6a778490939393938f8376695c504336291d10030000000000000000000000010910161b1e20202a3643505d69768390908376695d5043362a20201e1b161009010000000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000a16232f3b47525c63666c6c6c6c67645c534547525c64676c6c6c6c66635b51443b3025190e0100000000040e1720272e3336373939393939383634312e2d2a251e1a150e06000000000000000000050f171f252a2d2e39393939393939392e2d2a251e160e05000000000916222f3c4955626f7c88959b8e8174695f53483e34281d110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d19232d363f474f575f61696e72767879787775726e69615e564e463e352c22190c0300000000000000000005090d0f101313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313130f0f0d09040000000000000000000000000205070813131313131311100e0b0600000407090a1313131313130e0d0b0803000000000000000000000001070c0f11121313131313070705010000000000000000000000000105090b0b13131313100f0d09050000000000000000000000000000000000000000000000000006121f2b37434e585f626c6c6c6c6c6b615e564c4135291e150b00000006121f2b37434e585f626c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c64615a5045392d2114080003101c28343f4a545c6c6c6c6c6c6c6c6c6c5e574d42362a1e120814212d3945505a61646c6c6c6c6c67645c5343392f23180c131f2b37434e5860626c6c6c6c6c6c6c6c5c544a3f34281c100300000c1925313d48535d65686c6c6c6c6c6c6c6c625f584e43392f24180e050000000000000000000000000000030c17222d38414d575e616c6c6c6c6c6c6c6c6a605c544a4034281c1004000000000a141e2935404b555d666d747c82878b8e909192929291908e8c88847f7a716d605d55535f696f7c848b8f9192929291908d86796c605346392d20130000000000000007121d273039434b545b606a6f767c8185898c8e90919292929291908e8b8985817c756e69605b534b433931271d12070000000000000000000000000000000000000000000004111d2935414c566673808c99aaa3998a7d7064574a3d3124170a000004111e2a3744515d6a7784909d9f9f9c8f8376695c504336291d100300000000000000000000010a131b21272b2d2d2d3643505d69768390908376695d5043362d2d2d2b27211b130a0100000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000c1925323f4b57636e7379797979746f64574d4c58646e7479797979736d63564c41362a1d1207000000000b16202932393f434445464646454543413e3a3936302b2620180f0900000000000000020d17212930363a3b4646464646464646463936302820160c02000005121e2a36424d576673808d9994887c6f62574d42362c22170c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111b242d353e454d53575f6266696b6c6c6a6965615e56524c443d342c231a10070000000000000000020a1015191c1c2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201c1b1915100902000000000000000002080e1114142020202020201e1d1a17110b0b101316162020202020201b1a18140f08010000000000000000050c12181b1e1f20202020201413110d0802000000000000000000060c11151718202020201c1c1915100a0200000000000000000000000000000000000000000000000815212e3a47535f6a6f7979797979786d685e52463d30271c120700000815212e3b47535f6a7679797979797979797979797979797979797979797979797979716c6155493c3023170a0006121f2c3844505c66767979797979797976695e52463a2d20140a1723303d4955616c717979797979746e64554b4034291c1015222e3b4754606a767979797979797976665c5044382c1f120600020e1b2834414d59656f7579797979797979796f6a5f554b40352920170b02000000000000000000000000000b151e27333f49535e696e7879797979797979766d665c5144382c1f120600000006111c26303845515d676d7880898f93999a9d9e9f9f9f9e9d9b9896918c857e756d675d58626e7b8691969b9e9f9f9e9e9c9386796c605346392d2013000000000000040d18232e39434b555d666c737c83898e9298999b9d9e9f9f9f9f9e9c9b9897918d88827b736c655d554b43392f24180e050000000000000000000000000000000000000000000713202c3945525d687683909da99f92867a6d6054473a2d211407000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000009131c252c33373939393943505d69768390908376695d50433939393937332c251c130900000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000d1a2633404d59667380868686868174695f534d5a677480868686867f73685e5246392f23180c00000006111c27323b434a4f51525353535251504e4b4746413a37312a221b120900000000000009141f29333b42464853535353535353535346413a32281e130800000714212d3a46535e697884919c8f82766a5f53453c31241a10060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b232c333b42464d5355595c5e5f5f5e5c5854524d46413a322b221a11080000000000000000040c141b212528292d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d292825211b140c03000000000000050d14191e20212d2d2d2d2d2d2a2a27221d16161b2022232d2d2d2d2d2d272724201a130b02000000000000060f171e23282a2b2d2d2d2d2d21201d19130c04000000000000000911181d2124252d2d2d2d292826211b140c04000000000000000000000000000000000000000000000915222f3c4855626f7c8786868686857a6d61594f42392e23180c03000915222f3c4855626f7c868686868686868686868686868686868686868686868686867e7164574a3e3124170b000713202d3a4653606d78868686868686867b6e6154483b2e2115121e2a36424d5764717e86868686868074675c5145382c1f1416222f3c4955626f7c86868686868686786d6053463a2d20130700020f1c2835424f5b68758286868686868686867c6f675d51453e32291d140a00000000000000000000000007121d27303944505b656e7b858686868686868683796d6053463a2d2013070000000b17232e3842505a606d79828d929b9fa4ababa39f9d9c9b9c9d9fa19e97928b82796d685f6a76828f98a1a8aaa39f9995949386796c605346392d20130000000000010c161f2834404b555d676d78808790949b9fa2a9a29e9c9b9a9a9b9d9fa3a9a19e9a948f877f776d675d554b40352920170d0200000000000000000000000000000000000000000714212d3a4754606d7a86939fa99c908376675d5145392c201306000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000005101b252e373e434646464646505d69768390908376695d504646464646433e372e251b1005000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000714202d3a4753606d7984919392877b6e62564c54606d7a85919392867a6e61554b4034291c100400000a16222e39434d555b5d5f5f605f5f5e5c5b5854524c47433c342d241b110800000000020e1a25303b454d525f60606060606060605f524c443a3025190d01000815212e3b4854616e7b8796988c7f7265584e433b33291f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009111a212931363c4247484c50515252514f4b4746423b363028201910080000000000000000020c161e262c3235363939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393635312c261e150c0200000000050e171e252a2d2e3939393939393736332e272021272c2f303939393939393433302b251d140b0100000000050f1821292f3437383939393939392d29241e160e04000000000009121b22292e3132393939393635322d261e160c000000000000000000000000000000000000000000000815212e3a47535f6a73808d9693978e81746b60544a4034281f1409000916232f3c4956626f7c8993939393939393939393939393939393939393939393938a7d7164574a3e3124170b000713202d3a4653606d79869393939393877b6e6154483b2e211514212d3a46535e6976828f9393939285796d6053473b30251a16222f3c4955626f7c88939393939386796d6053463a2d20130700000714212d3a4754606d7a849199939393999183796d605a50443b2f261b110600000000000000000000040d18232e39424e58606c77828f979393939392867b6e665c5144382c1f1206000003101c28343f4a54616c74818e949da4aca7a09d9992908f8f8f9192999a9e9f948f837a6d666f7c88949faaaea398928c88878886796c605346392d2013000000000008131e28313a45515c676d79828d92999fa6a39f9a97928f8e8d8e8e9092989b9fa3a69e99928c82796d675d51453f32291e140800000000000000000000000000000000000000000b1724313e4a5764717d8a99a4a9998c7f7366554b4135291d1104000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000a16212c3740494f5353535353535d69768390908376695d5353535353534f4940372c21160a000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130006131f2c3845515c67707d8a95998e8175685e52515d67717e8a96988d8073675c5145382c1f130600000e1a27333f4a555f676a6c6c6c6c6c6b696764615e56534e463e362d23190b0200000005121e2a36424d575e6c6c6c6c6c6c6c6c6c6c5e564c41362a1d1105000a1724313d4a5764707d8a9798887b6e6255524d453b30251a0e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f171f262a31373a3b3f4345464544423f3b3a36302a251e160e070000000000000000000a141e2830383d414346464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464642413d3730271e1409000000020d1720293036393b46464646464644433f3932292b32383b3d46464646464641403c362f261d1308000000010c17212a333a4044454646464646463935302820160c0200000006111b242d343a3d3e4646464643413e3830281e110700000000000000000000000000000000000000000006121f2b37434e58606d7984919e9f93887d6f665c51443b31261a0d04091623303c4956636f7c89969f9fa8a19e9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c978a7d7164574a3e3124170b000713202d3a4653606d7986939f9f9f94877b6e6154483b2e21151b27333f4953616e7b87939f9fa2978a7e7164574d42362a1e16222f3c4955626f7c88959f9f9f9386796d6053463a2d20130700000613202c3945525d686f7c87929fa69fa0958d81746c61564d41382d22170d030000000000000000010c161f2834404b545f6a727f8b949fa9a89e938b7e71695f544a4034281c1004000006121f2b3844505c66717e8b939ea6aea59d95908a86838282838486898d92979f959083786d73808d99a6b0a89f9286807c7a7b7d7063574a3d3024170a00000000010d19242f3a43505a606d79828f949fa3a7a099928e898583818181828386898e92999fa7a39f948f82796d605b51443b3025190e0200000000000000000000000000000000000006121e2b37424d576774818e9aaba297897c6f6256493c2f24180d01000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000f1b27333e49525a5f60606060606069768390908376696060606060605f5a52493e33271b0f000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130004101c2934404b55616b7683909d92867a6d61544c55606c7884919d9285796d6053473a2d2014070000101d2936434f5b6771777879797978787674716d68625f5850483e352b1d140a0000000714202d3a46525e6976797979797979797976685e5246392d201307000c1926333f4c5966727f8c999285796a63615e574d42362a1e1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d141a20262b2e2f33363839393736322e2d2a251f19130c0500000000000000000005101b26303a42494e4f5353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353534f4d49423930261b1004000008141e29323b414653535353535353514f4a443b32353d4448495353535353534e4c4841382f251a0f03000007121e29333c454b505253535353535346413a32281e13080000010c18222d363f454a4b535353534f4e49423a3023190f050000000000000000000000000000000000000000030f1b26313c45515d67707d8a939e9a9183786d60574d42362a1f160c0a1623303d495663707c899aa4aca196918f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8a7d7164574a3e3124170b000713202d3a4653606d798693a0aca194877b6e6154483b2e21151f2b3744505b65737f8c99a4afa99c8f8276695e52463a2d2016222f3c4955626f7c8895a2aca09386796d6053463a2d201307000004111d2935414c56606a727f8c949ea8a89d928a7d70695e53493f33271f150b010000000000000008131e28313a45515c666f7c86929fa6aba1968e81756c62574d42392e23180c0000000713202d3a4653606d7884919ea5afa69d938e837d797776757677797c80858c9298958e81747683909ca9aca0958a7e736f6e6e706b6155483c2f2316090000000004111d2935414c56616c74818e949ea6a69f959087817c79767474747577797d818790959ea5a69e948e81756d62564c41362a1e14080000000000000000000000000000000000000814212e3a47535f697884919eab9e9285796c605346392d20130700000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000000000000000121e2b37434f5a646c6c6c6c6c6c6c6c7683909083766c6c6c6c6c6c6c6c645a4f43372b1e12000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201300000c18232f39434f5964717e8a97998b7f7265554b505b65727e8b97978a7d7164574a3e2f24180c0000111e2a3744515d6a778385868686858483817e7a756e6a615a50473d2f261b110600000815212e3b4854616e7b86868686868686867a6d6154473a2e211407000e1a2734414d5a6774808d9a91847770706e695e52463a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e151a1e212226292b2c2c2b292521201e19140d0802000000000000000000000915212c38424c545a5c6060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060605c5a544c42372c21150900020e1925303b444c525f6060606060605d5b554d44393d474f54566060606060605a58534a41362b20140800000c18232f3a454e575c5e60606060605f524c443a3024190d010005111d29343f48505658606060605c5a544c42352b21160b0000000000000000000000000000000000000000000a15202935404b55616b75818e98a0958c7f72695f53463e31281e130815222f3b4855626e7b87939fa99e91848383838383838383838383838383838383827d706356493d3023160a000713202d3a4653606d798693a0aca194877b6e6154483b2e2115202d394653606c7884919eabb5ac9f93877b6e6154473d32271b222f3c4955626f7c8895a2aca09386796d6053463a2d2013070000010d19242f3a434e58606c77828f96a1aba49e92857b6e655b50443c31271d1207000000000000050e19242f3a434f59606d79839098a3aea39991847a6d605a50453c30271c12070000000b1824313e4b5764717e8a96a0acac9f948e8179716d67696869676d70747a7f869095938a7e7885929fabaa9d9184776c6261616361594f44382c201407000000000613202c3945525d68717e8a939da6a89f948f837c746f6c6668676768666d70757c838f939ea7a69e938b7f72685e52463b3025190d0100000000000000000000000000000000000815222f3b4855626e7b8896a1a89b8e8275665b5044382b1f120600000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000013202d3946535f6c767979797979797979839090837979797979797979766c5f5346392d2013000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000007121d27313e4653606d7984919c908376675d514953606d7985929b8e817468554b4035291d100400121f2c3945525f6c78859292999292918f8e8b87827c716c61594f41382d22170b00000815212e3b4854616e7b87939393939393877a6d6154473a2e211407000f1b2835424e5b6875818e9b91847d7d7d7b6e6154473b2e21140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e121415191d1e1f1f1e1c181414110e09020000000000000000000000000d1925323d49545e66696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c69655e54493d3125190d0005111e2a36414c565e6c6c6c6c6c6c6c6a675f554a3f444f5960636c6c6c6c6c6c67645c53483c3024180b00030f1b2834404b5760686b6c6c6c6c6c6c5d564c4135291d1105000915212e3a45505a62656c6c6c6c69665e54473d33271c10040000000000000000000000000000000000000000040c18242f39434f59616e7b85929f9f92867b6e615a50433a2f24190c14212e3a47535f6975818e97a29d9084787676767676767676767676767676767676706b6054483b2f221609000713202d3a4653606d798693a0aca194877b6e6154483b2e211d2935414c5563707d8996a0acacafa4998c7f7266584e43382c1d222f3c4955626f7c8895a2aca09386796d6053463a2d20130700000008131e28313d44505b656d7a849199a3ada1978f82776c60584e43392f24180e0500000000020b17202935414c56606b73808d95a0aaa69f92877d6f685d52483e332a1e150b00000005121e2a36424d576875818e9ba8afa49a8f82786d66605d555c555c6063676d727b838f9391857b8797a2ada79a8d8074675a545557554f473e33281c100400000004111d2935414c55606d7a85929ea5aca0968f82796e6a62605b545a5b545c60636a6e78818f959faba59f92857a6e61564c41362a1e11050000000000000000000000000000000003101c28343f4a5465727f8b98a8a7988b7e7165544a3f33281c0f0300000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000013202d394653606c798686868686868686909494908686868686868686796c605346392d2013000b1825323e4b5865717e8b98a4afa295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000008121d262c3844505c6674818e9b92867a6d605347515d6775828f9b918477675d5145392c1f130600121f2c3945525f6c7885929493939496999a99938e867e716b6053493f33271b0f03000815212e3b4854616e7b87949f9f9f9f94877a6d6154473a2e211407000f1c2936424f5c6975828f9c95918989897e7265584b3f3225180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020608080c10121312110f0c0807050200000000000000000000000000000f1c2835414e5a6670767979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797570655a4d4135281b0f000714202d3946525e68767979797979797771675b4f434854606b70797979797979746e64584c4033271a0d0004111e2a3744505c687278797979797976685d5246392d201307000b1724313d4a56626d7179797979767066594f44382c20150a00000000000000000000000000000000000000000007121d27313e46525e69727f8b959f988f82756c61554c4135291e14121e2b37424d57616e7b85929fa0958c80736c6969696969696969696969696969696360594f44382c201307000713202d3a4653606d798693a0aca194877b6e6154483b2e21202c3945515d6775818e9ba8a39fa3ab9d9184776a605448392f24222f3c4955626f7c8895a2aca09386796d6053463a2d201307000000010c161f27333f49535e686f7d87929fa6a99f948c7f726a5f554b40352920170b020000000a141d29333b45525d68707d87939fa7aa9f948c80736b60564c41362d21180c030000000714202d3a46525e697885919eabac9f93877c6f665c54514b4f4b5153555d60696e79818f949083909da9b3a4988b7e7165584b484a48443e352c21160b000000000613202c3945515d6773808d97a1ada69e91847a6d675f5853504a4e4e4b5153585f666d79839099a3ada2978d8174685e5246392d2014090000000000000000000000000000000006121f2c3844505c6675828f9ba8a095877b6e6154483b2d22170b0000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000013202d394653606c7986939393939393939c9f9f9c9393939393939386796c605346392d2013000b1825323e4b5865717e8b98a4aca295897c6f6256493c2f23160900000d1a2733404d5a6673808d99a6aca09386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c201300030e19242f3840474a5464717e8a9799897c6f6256494b5565727e8b9893867a6d6053473a2d20140700121f2c3945525f6c78858887868787898d92979f9892887d70655b5044372b1f1205000815212e3b4854616e7b8794a1acaca094877a6d6154473a2e21140700101c2936434f5c6976828f9ca09d96968b7e7265584b3f3225180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c6976828686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868275695c4f4236291c0f000814212e3b4754616e7a86868686868683776a5d5144495663707d8686868686868074675a4e4134271b0e0005121f2b3845525e6b788586868686867a6d6154473a2e211407000b1825323e4b5865717e8686868682766b6054483c32261b0f030000000000000000000000000000000000000000010b151f2a36424d56606c788390999e948a7e71675d51453c30261c111a26313c46525e68717e8a929c9f93887e716c605b535c5c5c5c5c5c5c5c5c5c5c56544f473d32271b1003000713202d3a4653606d798693a0aca194877b6e6154483b2e21212d3a4754606d7a86929fa3999299a3a096897c6f62554b403529222f3c4955626f7c8895a2aca09386796d6053463a2d20130700000000040d17222d38414c56606b737f8c949fa9a69f92867c6f675d51453e33291d140a000006111b262f3b45505a606d7a849199a4aea2989083786d60594f443a2f241b0f06000000000815212e3b4854616e7b8797a1adaa9d9083776a5f544b4540424045474b51575f676d78828f9590959fabb0a3968a7d7063574a3d3d3c38332c231a1005000000000714212d3a4754606d7a85929fa9aa9e94897d70685d554e46443f41414045464e545c676f7c87929faca99f92867a6e6154473c31261a0e020000000000000000000000000000000713202d3a4653606d7985929faa9d918477695e52463a2d1c11060000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000013202d394653606c798689898989898989909595908989898989898986796c605346392d2013000b1825323e4b5865717e8b989f9f9f95897c6f6256493c2f23160900000d1a2733404d5a6673808d999f9f9f9386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c20130007131f2b36404a52585a616e7b879a978a7e71645753595b626f7b889599887c6f6255493c2f221609000916232f3c4956626f7c7b7a7a7a7b7d808590959f9a9184796c605346392d201306000815212e3b4854616e7b8794a1aeada094877a6d6154473a2e21140700101d293643505c6976838f9ca9aaa3988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c6976828f939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393938f8275695c4f4236291c0f000814212e3b4754616e7a87939393939084776a5d5144495663707c89939393938d8174675a4e4134271b0e0004101d2935404b556c788592939393877b6e6154483b2e211508000613202d394653606c7883909994897d7063584e43372b1f1306000000000000000000000000000000000000000000030d1925303b44505b666f7c87929f9e91847a6d60584e42382e231715202a36414d56616c73808d939d9a92877e736c655d554e5050505050505050504948443d352b21160b00000713202d3a4653606d798693a0aca194877b6e6154483b2e212b37434e5865717e8b98a29f9286929fa89a8e8174675d5145382c222f3c4955626f7c8895a2aca09386796d6053463a2d201307000000000006111b262f3a444f59606c77828f97a1aba3999184796d605a50453b2f261b1106030c17222d38414d57616c75818e96a1aba59f92857b6e665c50473d32281e120900000000000916222f3c4955626f7c8895a9b3a79a8d817467584e4239352f34383a40454d555c666d7a85919d9fa7b1afa396897c706356493d302f2c28211a11080000000005111e2a36424d5765727f8b98a2aea99c8f82756b60564c433c38332d2e34383c424b555f6a74818e9ba8aea3988c7f7266574d42372b1e1205000000000000000000000000000000091623303c4956636f7c8998a2aa9a8d807467574d42362a1e0a000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000a1723303d4a5663707d7d7d7d7d7d7d7d839090837d7d7d7d7d7d7d7d7063564a3d3023170a000b1825323e4b5865717e8b9393939393897c6f6256493c2f23160900000d1a2733404d5a6673808d939393939386796d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000b1723303c47525c64676c6d798693998c7f7266595d64686c6d7a8799978a7d7164574a3e3124170b000815222e3b4754606a6f6e6d6d6d6e70737a83909da096897c6f6356493c30231609000815212e3b4854616e7b8794a1acaca094877a6d6154473a2e21140700101d293643505c6976838f9ca9b1a5988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c6976828f929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292928f8275695c4f4236291c0f000814212e3b4754616e7a87949f9f9d9084776a5d5144495663707c89969f9f9a8d8174675a4e4134271b0e0006131f2c3945515d677986939f9f95887b6e6255483b2f2215080005121f2b3744505b656f7c87939d9083766a5f53473b2e2115090000000000000000000000000000000000000000000009141f28333f4a545f6a74808d96a1978d80746a60544a3f34281f141925303b44505a606c77818e939c99928b80776d675f585045414343434343433d3b38322b23190f0400000713202d3a4653606d798693a0aca194877b6e6154483b2e212e3a47535f6a7683909daa9b8e828e97a19f9285796d6053473b30252f3c4955626f7c8895a2aca09386796d6053463a2d2013070000000000000a141d28323d44505b656d7a859199a4aba0968e81746c61574d41382d22170d0b151e27333f49535e69717e8a939ea8a89e938a7e71695e544a3f352b20160c0000000000000a1723303d4a5663707d8996a3b0a6998c7f7366594c402f2924292c2f353b434b545d68707d8a959fabb7afa396897c706356493d3023201c16100800000000000714202d3a46525e697683909daaada196897d7063594f433a312b282223282c3039434e58626f7c8895a0acaa9d908477695f53463a2d211407000000000000000000000000000004111d2935414c566673808c99aaa3988a7d7063574a3d30251a0e000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000916222f3c4854606b70707070707070768390908376707070707070706b6054483c2f221609000b1825323e4b5865717e868686868686867c6f6256493c2f23160900000d1a2733404d5a66738086868686868686786d6053463a2d201307000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000d1a26333f4c58646e7479797985929a8d8073675a646f747979778692988b7e7165584b3e3225180b0006131f2b38434e586062616160606163686f7c8899a4988b7e7265584b3f3225180c000815212e3b4854616e7b87949f9f9f9f94877a6d6154473a2e21140700101d293643505c6976838f9ca9aca5988b7e7265584b3f3225180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2935424f5c6875828585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858275685b4f4235281c0f000814212e3b4754616e7a8794a1aa9d9084776a5d5144495663707c8996a3a79a8d8174675a4e4134271b0e000714202d3a4753606d7a8699a4a295897c6f6256493c2f23160900030f1b27333f49535f6a75828f9b95887c6f6255493c31261a0e02000000000000000000000000000000000000000000020b17222d38424e58606d7984919e9f93877c6f665c50443b30251a141f29323e44505b656c78818d929f9f928c81796f6a625a514c433c34363636302f2c27211911070000000713202d3a4653606d798693a0aca194877b6e6154483b2e28343f4a54626e7b88959fa398897d85919ea2988a7e7164574d42362a2f3c4955626f7c8895a2aca09386796d6053463a2d201307000000000000020b162027333f49535e68707d87939fa6a89d928a7e70695e53493f33271f15121d27303944505b656e7b85929fa5aba0968e81746c61574d42382e23190d040000000000000a1724313d4a5764707d8a97a3b0a5988c7f7265594c3f2e23181c1f24293139424c56616c7683909da9b3afa396897c706356493d302316100b050000000000000814212e3b4754616e7b87959fabab9e9184786c6053463d31281f1c17181c1f27313c47535f6a7784919daaaca095887b6e6155483b2e22150600000000000000000000000000000713202c3945525d687683909da99f92867a6d6053473a2d201409000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000713202c38444f5960636363636363697683909083766963636363636360594f44382c201307000b1724313d4a56626c71797979797979796f6a6054473b2e22150800000c1926323f4b58636e737979797979797976665c5044382c1f1206000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000e1a2734414d5a67748086868689979a8d8174675b6874818686868999988b7f7265584c3f3225190c00030f1b27323d464e5456555453545456606c7986939f998c807366594d4033261a0d000815212e3b4854616e7b87939393939393877a6d6154473a2e21140700101d293643505c6976838f9c9f9f9f988b7e7265584b3f3225180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2834414d59656f75797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979756f65594d4134271b0e000814212e3b4754616e7a8794a1a99d9084776a5d5144495663707c8996a3a79a8d8174675a4e4134271b0e000714212e3a4754616d7a8794a0a396897c706356493d3023160a00000b17222d38414e58636f7c89959a8d807367574d42362a1e12050000000000000000000000000000000000000000000006111c262f3c45515d67707d8a949e999083786d60574d42362a1f15172027333f49535b666c74808b92989c938f847c716c605d554e463e362e292322201b160f07000000000713202d3a4653606d798693a0aca194877b6e6154483b2e2c3844505c6673808d9aa79f928679818e9baa9c8f8276695e52463a2d2f3c4955626f7c8895a2aca09386796d6053463a2d20130700000000000000040e17222d38414c56606b73808c949fa9a59e92857b6e655b50443c31271d18232e39424e58606c77828f97a2ada3999184796d605a50453b30261c1007000000000000000a1723303d4a5663707d8996abb5a6998d807366544a403428211e1a181f27303a44505a64707d8a97a2adafa396897c706356493d3023160a00000000000000000b1824313e4b5764717e8a97a7b1a79a8e8174665b5044382b1f160f0b0c10151f2b37434e586773808d9aa6b1a7988b7e7165584b3e2d22170b00000000000000000000000000000714212d3a4754606d7a86929fa99c8f8276675d5145392c1f1306000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000004101c27333d474f5456565656565d69768390908376695d5656565656544f473d33271c1004000915212e3a45505a62656c6c6c6c6c6c6c6260584e43382b1f130600000a17232f3b47525c63666c6c6c6c6c6c6c6c5c544a3f34281c1003000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000e1a2734414d5a6774808d939393a19a8e8174675b6874818e939394a3998c7f7366594c403326190d00000a162027333f49535b606060606062666e7b8799a4988c7f7265594c3f3226190c000815212e3b4854616e7b86868686868686867a6d6154473a2e21140700101d293643505c6976828f93939393938b7e7265584b3f3225180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925313d49545d65686c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c68655d53483d3125180c000814212e3b4754616e7a87949c9c9c9084776a5d5144495663707c89969c9c9a8d8174675a4e4134271b0e000815222e3b4855616e7b8894a1a3978a7d7064574a3d3124170a000006111b262f3c4854606b7783909d918478695f53463a2d21140700000000000000000000000000000000000000000000000a141d2935414b55616c75828f98a0958b7f72695e52463e31271d1217222d38414a545b606e737e8691969e9691867e756d675f58504840372e261c13100b0400000000000713202d3a4653606d798693a0aca194877b6e6154483b2e2d3a4653606d7985919ea99c8f82767e8a99a39f93877b6e6154483d322f3c4955626f7c8895a2aca09386796d6053463a2d201307000000000000000006111b262f3a444f59606d78828f97a1aca1978f82776c60584e43392f241f2834404b545f6a727f8c949fa9a69f92877c6f675d51483e33291e140a00000000000000000915222f3c4855626f7b8899a3afa89b8f8275665c51443a322d2b2627272628323e4653606d7985929fabafa396897c706356493d3023160a00000000000000010e1b2834414e5b6774818e9aa7b4aa978a7e7164544a3f3328190d040000040d1b26323d4a5764707d8a97aab4a79b8e81746853493f33271b0f03000000000000000000000000000b1724313e4a5764717d8a99a3a9988c7f7265554b4035291d1004000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000000000000000000b16212b353d44484a4a4a4a505d69768390908376695d504a4a4a4a48443d352b21160b000005111d29343f485056586060606060606056544e463d32271b0f03000007131f2a36404a52585a606060606060605f504a42382e23170c00000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000e1a2734414d5a6774808d9a9fa0a79b8e8174685b6874818e9b9fa0a6998c807366594d4033261a0d000005121f2b3744505b656c6d6c6c6d6f7278818e9ba095897c6f6356493c30231609000714202d3a46525e6976797979797979797976685e5246392d20130700101d293643505c697682868686868686867e7265584b3f3225180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915212c37424b54595c5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5b59534b42372c201509000814212e3b4754616e7a878f8f8f8f8f84776a5d5144495663707c898f8f8f8f8d8174675a4e4134271b0e000915222f3c4855626f7b8895a2a4978a7e7164574b3e3124180b000007111b252c38434f5966737f8c9996887b6e6155483b2e2215080000000000000000000000000000000000000000000000020b18242f3a43505a616e7b86929f9f92867b6e61594f43392f2418111b262f38424a505c636c717c848e939f98928b817a6f6a625a524940382e251c11080000000000000713202d3a4653606d798693a0aca194877b6e6154483b2e36414c5664707d8a97a1a8988c7f727a86929fa4998c7f7366594f43382f3c4955626f7c8895a2aca09386796d6053463a2d2013070000000000000000000a141d29323d44505c666e7b85929aa4a99f948c7f726a60554b40352928313a45515c666f7c86929fa6a99f948c7f736a60554b41362c21170c0200000000000000000714202d3a4753606d7a86929facab9e9285796d60564c443d3a373134333332323845515c6675828f9ca8afa396897c706356493d3023160a0000000000000005111e2a36414c566a7683909da9aea298887b6e6155483b2d221708000000000a15212e3b4854616e7b8798a2aeaa9d908377655b5044372b1f120500000000000000000000000006121e2b37424d576774818e9aaba197887c6f6255483c2f24180c00000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000000050f19232b33383c3d3d3d43505d69768390908376695d50433d3d3d3c38332b23190f050000010c18222d363f454a4b535353535353534947433d342b20160a000000020e19242e3840474b4d5353535353535353443f3830261c110600000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000e1a2734414d5a6774808d9aa7b3a79b8e8174685b6874818e9ba7b3a6998c807366594d4033261a0d00000613202d394653606c777979797a7b7e838e939e989083786c605346392d2013060005121e2a36424d575e6c6c6c6c6c6c6c6c6c6c5e564c41362a1d1105000f1c2835414e5a66707679797979797979726d62564a3d3124180b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101b26303942494d4f5252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252524f4d48423930251b0f04000714212d3a4754606d7a8283838383838174675b4e414855626f7c8283838383827f7265584c3f3225190c000916232f3c4956626f7c8995a2a5988b7e7265584b3f3225180c00010d18232d373f464956626f7c8999978a7d7164574a3e3124170b00000000000000000000000000000006060606060606060007131d28313e46535e69727f8c95a0988e81756b61554b4035291d14141d262f383f44525a616a6f7a818b92989f938e847c716c635b524a40372e231a0d0400000000000713202d3a4653606d798693a0aca194877b6e6154483b2e3946525e6875828f9ba9a196887b6f76828f9cab9e9184776b605448392f3c4955626f7c8895a2aca09386796d6053463a2d201307000000000000000000020b172028343f4a545e69707d88939fa7a69f92877c6f675d51453e332f3a434f59606d79839098a3ada2979082786c60584e433a2f241a0f0500000000000000000006131f2c3945515d677783909dabada1978a7e71685e564f484742424140403f3f3f404b546673808c99a6afa396897c706356493d3023160a000000000000000713202d3946525e687885929fabac9f9285796c605346392d201306000000000714212d3a46535e697985929facac9f9285796c605346392d2013060000000000000000000000000814212d3a47535f697884919eab9e9185786c605346392d20130700000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000005101a232c33393c3d3d3d43505d69768390908376695d50433630302f2c27211911080000000006111b242d343a3d3e464646464646463c3b38322b22190f040000000008121c262e363b3f40464646464646464638342e261e150a0000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000e1a2734414d5a6774808d9aa7aca79b8e8174685b6874818e9ba7aca6998c807366594d4033261a0d00000613202d394653606c7984868687888b90959a9590867c6f665b5044382b1f120600020e1a25303b454d525f60606060606060605f524c443a3025190d01000d1926323e49545e66696c6c6c6c6c6c6c65625b51453a2e22150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141e2730373d414246464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464642413d3730271e140900000713202c3945525d686d767676767676746f64584c4047535f6a6f767676767676726d62564a3e3125180b000a1723303d4a5663707d8996a3a5988c7f7265594c3f3226190c0006121e29353f49515759606d798692998c7f7366594c403326190d0000000000000000000002060a0c0d131313131313131313130c161f2a36424d57606d788390999e938a7d70675d51453c2f261b11141d262d33404850585f686d757e8690959d9691867e736d645c524940352c1f160c01000000000713202d3a4653606d798693a0aca194877b6e6154483b2e3a4754616d7a86929fab9e9184786a727f8b99a4a096897c6f63554b40353c4955626f7c8895a2aca09386796d6053463a2d20130700000000000000000000050e17232e38424d56616b73808d959fa9a3999184796d605a50453b35414c56606b73808d95a0aaa59f92857b6e665b50463d31281d12080000000000000000000004101d2935404b5566737f8c99a3aea99e91847a6d68615955534d4f4e4d4c4c4c4b4b4c5865727f8b98a5afa396897c706356493d3023160a000000000000000714212e3a4754616d7a8798a2aeaa9d918477665b5044382b1f12060000000005121e2a36424d576a7784919daaaea298877a6e6154473b2e2114080000000000000000000000000815222e3b4855616e7b8896a1ac9b8e8174655b5044372b1f120500000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000000000000000000b17222c363e44494a4a4a4a505d69768390908376695d5043362a2322201c160f0800000000000009121b22292e3132393939393939392f2e2b27201910070000000000000a141c242a2f323339393939393939392c28231c150c030000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000e1a2734414d5a6774808d9a9f9f9f9b8e8174685b6874818e9b9f9f9f998c807366594d4033261a0d000006121f2b3844505b6673808c9993999292908d89837c6f6a5f544a3f33281c0f03000009141f29333b42464853535353535353535346413a32281e130800000915212d38424c545a5c60606060606060585651493f34291d1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c151e262c3134353939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393534312c251e150c02000004111d2935414c565d6069696969696967645c53483c434e585f6269696969696965625b51463a2e221609000a1724313d4a5764707d8a97a3a6998c807366594d4033261a0d000916222e3a46515b62656c667885919a8d8174675a4e4134271b0e000000000000000000070d121619192020202020202020202020201a25313b44505c666f7c87939f9e9184796d60584e41382d22170b141c2228363e464e565d606c717b838d929f98928b80736e645b51473d31281e1308000000000713202d3a4653606d798693a0aca194877b6e6154483b37434e5865727f8c99a3a99a8d8074676e7b87939fa89a8e8174675d5145393c4955626f7c8895a2aca09386796d6053463a2d201307000000000000000000000006111c26303b444f59606d78839097a2aba0968e81746c61574d423b45525d68707d87939fa7a89d938a7e71695e544a3f342b1f160c0000000000000000000000000c18242f3b4854616e7b86929fa8ada19690827a706b65615f575c5a5a5959585858585865717e8b98a4afa396897c706356493d3023160a000000000000000915222f3c4855626f7b8895aab4a99c8f837669544a3f33281c0f0300000000020e1a2531434f5c6976828f9ca9b4aa95887b6f6255483c2f221509000000000000000000000003101c28343f4a5465727f8b98a8a49a8a7e716453493f33271b0f0300000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000004101c28333e48505557575757575d69768390908376695d5043362a1d1613100b0500000000000000000911181d2124252d2d2d2d2d2d2d23221f1b160f0700000000000000020a12191f2326272d2d2d2d2d2d2d2d1f1c17110a03000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000e1a2734414d5a6774808d93939393938e8174685b6874818e93939393938c807366594d4033261a0d0000030f1c28333f4a54616e7b87939f92878583817d786f6a5f584e42382d22170b000000020d17212930363a3b4646464646464646463936302820160c02000005101b26303a42494e50535353535353534b4a453f372d23180c0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c141b212528292c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c282725201b140c03000000010d1924303a444c52545c5c5c5c5c5c5b58534a41363c464e53555c5c5c5c5c5c585651493f34291e1206000b1824313e4b5764717e8a97a4a69a8d8073675a4d4034271a0d000b1825313e4a57626d7279797983909b8e8275685b4f4235281c0f00000000000000010a12191e2325262d2d2d2d2d2d2d2d2d2d2d2d2d2d28343f4a54606a74808d97a1968d80736a5f53493f33271e13111317242d343c444c525a62696e78808b92999f928c80736d63594f433a2f24190d010000000713202d3a4653606d798693a0aca194877b6e6154483b3b4754606a7784909daba197897c70636876838f9caa9f9285796d6053473b3c4955626f7c8895a2aca09386796d6053463a2d2013070000000000000000000000000a141e29323e44505c666e7b85929fa4a89d938a7e70695e544a45505a606d7a849199a4aba0968e81746c61574d42382d22190d040000000000000000000000000714202d3a46525e6974808d96a1a9a89f9590847d77726e696a6867666665656565646465717e8b98a4afa396897c706356493d3023160a000000000000000a1723303d4a5663707d8996a3b0a89b8e8275685b4f422d22170b000000000000091c2835424f5b6875828e9ba8b0a396897d7063564a3d3023170a000000000000000000000006121f2c3844505c6675828f9ba89f93877a6e6154473b2d22170b0000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000814202d3944505a6164646464646469768390908376695d5043362a1d1007040000000000000000000000060c11151718202020202020201615130f0a0400000000000000000000080e1317191a202020202020202012100c060000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000e1a2734414d5a677480868686868686868174685b68748186868686868686807366594d4033261a0d0000000b17222d3846535e6976828f9b8f82787774706c655f584e463c2f261c110600000000050f171f252a2d2e39393939393939392e2d2a251e160e05000000000a141e2830383e4143464646464646463f3d3a342d241b110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002091015191b1c1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1c1b18150f0902000000000008131e28323a4145475050505050504e4c4841382f343c4347485050505050504c4a463f372d23180d01000c1825323f4b5865727e8b98a5a79a8e8174675b4e4134281b0e000c1926323f4c5965727f86868689959c8f8275695c4f4236291c0f000000000000000a131c232a2f32333939393939393939393939393939392e38424e58606d7a85919e9f92877c6f655b50443a3025191d202021222a323a414550575f666d747e8792989c928c7f726b61564c4135291d13070000000713202d3a4653606d798693a0aca194877b6e6154483b404b55626f7c8995a0ab9e9184796d6064717e8b98a2a2988a7e7164574d423c4955626f7c8895a2aca09386796d6053463a2d201307000000000000000000000000020c172028343f4a545e69707d8a929da7a59e92857b6e665b504d57616c75818e96a1aba3999184796d605a50453b2f261c10070000000000000000000000000005121e2a36424d57606d79849197a1a9a79f969189837f7b78767574737372727271717171717e8b98a4afa396897c706356493d3023160a000000000000000a1724313d4a5764707d8a97a3b0a79a8e8174675b4e4134281b060000000000010e1b2834414e5b6774818e9aa7b0a3978a7d7064574a3d3124170a00000000000000000000000713202d3a4653606d7985929faa9d908377685e5246392d1b11060000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000a1623303c4955616c70707070707070768390908376695d5043362a1d1003000000000000000000000000000105090b0b13131313131313090806030000000000000000000000000002070a0c0d1313131313131313060300000000000000000714202d3a4753606d7a8693a0adac9f9286796c5f5346392c2013000d1a26333f4c58646e7479797979797979746f6459646f7479797979797979736e63574b3f3226190c00000006111c2a36424d5764717e8a9792877b6e6763605b534e463c342a1d140a000000000000050d141a1e20212d2d2d2d2d2d2d2d21201d19130c050000000000030c161e262d3235363939393939393932312e29231b120900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004090c0e0f1313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313130f0e0c090400000000000000020c1620283035393a43434343434341403c362f262a32373b3c4343434343433f3e3a342d251b110700000c1926323f4c5965727f8c98a5a89b8e8175685b4e4235281b0f000c1926323f4c5965727f8c93939d9f9c8f8276695c504336291d1000000000000007121c252e353b3e4046464646464646464646464646464646464645525d68717e8a949f999083776c60564c41362a24292c2d2e2f30302f353e454d545c606c717d8692999f93887d70685d52453a2f24180d0100000713202d3a4653606d798693a0aca194877b6e6154483b45515d6774818d9aa7a6998d8073665c606d7a85929faa9c8f8276695e53463c4955626f7c8895a2aca09386796d6053463a2d20130700000000000000000000000000050e17232e38424d57616c74808d959faaa2978f82786c6058535e69717e8a939ea8a69f92877c6f675d51483e33291d140a0000000000000000000000000000020e1a25303b45515d676f7c8591979ea5a8a09e95908b8885838281807f7f7f7e7e7e7e7d7d808d9aa7afa396897c706356493d3023160a000000000000000b1824313e4b5764717e8a97a4b1a79a8d8174675a4e4134271b0e0100000000010e1b2734414e5a6774818d9aa7b0a4978a7d7164574a3e3124170b0000000000000000000000091623303c4956636f7c8998a2aa998d807366564c41362a1e0a000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000a1724313d4a5764707d7d7d7d7d7d7d7d8391908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8693a0acac9f9286796c5f5346392c2013000b1723303c47525c64676c6c6c6c6c6c6c68645d535d64686c6c6c6c6c6c6c66635c52473b2f23170a000000000e1a25313b4653606d798592998c8073665c535049413c342a22190b020000000000000002090e12141520202020202020201413110d080200000000000000040c141b212628292d2d2d2d2d2d2d2524221d18110900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e161e24292c2d3636363636363433302b251d20262b2e2f36363636363632312e29231b13090000000d1a2633404d596673808c99a6a89c8f8275695c4f4236291c0f000c1926323f4c5965727f8c989faaa99c8f8376695c504336291d100000000000020d19232e3740464b4c535353535353535353535353535353535353534c56616c76828f989f948b7e71685e52463d302f35393a3b3c3c3d3d3c383b424a515a626b707e87939f9a92857a6d60554b4135291d110400000713202d3a4653606d798693a0aca194877b6e6154483b4753606d7985929fab9f94887b6e62545d6774818e9ba89f93877b6e6154483d4955626f7c8895a2aca09386796d6053463a2d201307000000000000000000000000000006111c26303b45505a606d78839098a2a99f948c7f726a605b656e7b85929fa5a99f948c7f726a60554b40362c21170b0200000000000000000000000000000009141f2935414b555f6a6f7c858f939c9fa4a79f9d989892908f8d8d8c8c8b8b8b8b8a8a8a8d929da9afa396897c706356493d3023160a000000000000000b1825313e4b5864717e8b97a4b1a79a8d8074675a4d4134271a0e0100000000010e1a2734414d5a6774808d9aa7b1a4978b7e7164584b3e3125180b0000000000000000000004111d2935414c566673808c99aaa298897d706356493d3025190d000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000013202d394653606c79868a8a8a8a8a8a8a9195908376695d5043362a1d1003000000000000000000000000000000000000000000010406070d0b0a08050000000003080b0d0e0d070604000000000000000000000000000000000000000000000714202d3a4753606d7a86939f9f9f9f9286796c5f5346392c20130007131f2b36404a52585a606060606060605b59534b53595b606060606060605957524a40352a1f13070000000009141f2c3845515c67748086868685796d6053463f382f2a22191007000000000000000000000205070813131313131313130707050100000000000000000000030a1015191c1d20202020202020181815110c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13191d2021292929292929282724201a13151b1f21222929292929292525221e181109010000000d1a2734404d5a6773808d9aa6a99c8f8376695c504336291d10000c1926323f4c5965727f8c98a5b2a99c8f8376695c504336291d10000000000006121e2a3540495157596060606060606060606060606060606060606060605a616e7b86929f9e92857a6d61594f42393a4045474848494a4a48443d3940445059616c73808c96a0978d8073675d5145392c20130600000713202d3a4653606d798693a0aca194877b6e615448424d5764717e8a97a2aa9c908376695f535563707d8996a1a49a8c7f7366594f444955626f7c8895a2aca09386796d6053463a2d2013070000000000000000000000000000000a151e29333e45515c666e7b85929fa5a69f92877c6f67606c77828f97a2ada1978f82776c60584e43392f241a0f0500000000000000000000000000000000020d18242f3a434e585f6a6f7a82898f93999c9fa2aaa29f9d9b9a999998989898979797979a9da4aeafa396897c706356493d3023160a000000000000000b1824313e4b5764717e8a97a4b1a79a8d8174675a4e4134271b0e0100000000010e1b2734414e5a6774818d9aa7b1a4978a7e7164574b3e3124180b000000000000000000000713202c3945525d687683909da99f9285796d6053463a2d201308000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000013202d394653606c7986939393939393939393908376695d5043362a1d10030000000000000000000000000000000000000001070d1113141a181715110c0601080f14181a1b191413100c0701000000000000000000000000000000000000000714202d3a4753606d798693939393939286796c5f5346392c201300030e19242f3840474c4d535353535353534e4d4841484d4e535353535353534d4b4740382e24190e020000000004101c2834404b55646e74797979786d665c5044382d261d18100700000000000000000000000000000000000000000000000000000000000000000000000000000005090d0f10131313131313130c0b090501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d1113141d1d1d1d1d1d1b1a18140f080a0f1215151d1d1d1d1d1d191816120d0700000000000e1b2734414e5a6774818d9aa7aa9d9083776a5d5044372a1d11000c1926323f4c5965727f8c98a5aca99c8f8376695c504336291d1000000000000a16232f3b46515b63666c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b69727f8c95a0978e81746b60544b40434b51535455565756554f473d343f47505a606d7884919e9f92857a6d6054473a2d21140700000713202d3a4653606d798693a0aca194877b6e61544846535e6976828f9ca9a2988b7e7165574d53606c7884919eac9e9184776b6054484955626f7c8895a2aca09386796d6053463a2d201307000000000000000000000000000000030c17212834404b545f69717e8a929da7a3999184796d6a727f8c949fa9a49e92857b6e655b50463c31281d120800000000000000000000000000000000000007131d28313c464e585f686d757c82878b8f929897999a9b9c9d9d9d9e9e9e9e9f9f9f9fa3abacb5afa396897c706356493d3023160a000000000000000a1724313d4a5764707d8a97a3b0a79a8e8174675b4e4134281b0e0100000000010e1b2834414e5b6774818e9aa7b0a3978a7d7064574a3d3124170a000000000000000000000714212d3a4754606d7a86929fa89c8f8275665c5145382c1f1306000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000013202d394653606c7986868686868686868686868276695d5043362a1d1003000000000000000000000000000000000000040c13181d2020272524211d17100b131a2024272726201f1c18120b030000000000000000000000000000000000000714202d3a4753606d798686868686868687796c5f5346392c2013000008121d262f363c3f414646464646464641403c373c404146464646464646403f3b352e261c12070000000000000c18232e3943525c64676c6c6c6b605c544a3f34281b140b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010407071010101010100e0d0b08030000030608091010101010100c0b0906010000000000000f1b2835424e5b6875818e9b9f9f9d9184776a5e5144372b1e11000c1926323f4c5965727f8c989f9f9f9c8f8376695c504336291d1000000000000c1925323e4b57636d737979797979797979797979797979797979797979797978736d7883919a9e93897d70665c51454b555d60616263636360594f4438353e44505c66727f8b98a2988a7e7164574b3e3124180b00000713202d3a4653606d798693a0aca194877b6e6154484953616e7b87939fac9f92867a6d605447505b6573808c99a6a096897c6f63554b4955626f7c8895a2aca09386796d6053463a2d20130700000000000000000000000000000000050f18232e39424d57616c74818e95a0aaa0968e81746f7c86929fa6a79d928a7d70695e53493f342b1f160c00000000000000000000000000000000000000010c161f2a343c464e565e616b6f757b7f8285888a8c8d8f8f9090919191919292929292999ba3acafa396897c706356493d3023160a000000000000000a1723303d4a5663707d8996a3b0a89b8e8175685b4e4235281b090000000000020f1b2835424e5b6875818e9ba8b0a3968a7d7063574a3d3024170a000000000000000000000b1724313e4a5764717d8a99a3a8988b7f7265544b4034281c1004000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000013202d3946535f6c7679797979797979797979797670665a4e4235291c0f030000000000000000000000000000000003090d161d24292c2d3431302d28221b141d252b303334332d2c29231d150d09030000000000000000000000000000000006131f2c3845515c67767979797979797979756a5e5245382c1f120000010b141d242b303334393939393939393534302b3034353939393939393933322f2a241c130a0000000000000007121d2730404a52585a6060605e53504a42382e23170a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2935424f5c6875818f939393939184786b5e5245382b1f12000c1926323f4c5965727f8c93939393938f8376695c504336291d1000000000000d192633404c5966737f868686868686868686868686868686868686868686868578666f7d88939f9d9184796d60574d515d676d6e6f6f70706b6055483d32343f4a54616e7b8899a49a8d8174675a4e4134271b0e01000713202d3a4653606d798693a0aca194877b6e615448505b6573808c9aa4a89b8e8174675d51454953616e7b88949fa89a8e8174675d514955626f7c8895a2aca09386796d6053463a2d201307000000000000000000000000000000000007121d27303b45505a606d79839098a2a89d938a7e79839098a3aaa0958d80746c61564d41382d22190d040000000000000000000000000000000000000000040d18222a343c444c52596063696e7276797b7d7f81828383848484848585858585868b909ba7afa396897c706356493d3023160a000000000000000916222f3c4955626f7c8895aab4a99c8f8276695c4f4330251a0e0200000000030f1c2936424f5c6975828f9ca8b5ab95897c6f6256493c2f23160900000000000000000006121e2b37424d576774818e9aaba196887b6e6255483b2e23180c00000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000000000000000121e2b37434f5a646c6c6c6c6c6c6c6c6c6c6c6c69665e544a3e32261a0d01000000000000000000000000000000060e151a1f282f35393a403e3d39342d241d262f363c4041403a38342f271f1a140d0500000000000000000000000000000004101c2934404b555c6c6c6c6c6c6c6c6c6c6a63594e42362a1d11000000020b12191f2326272d2d2d2d2d2d2d282724202427282d2d2d2d2d2d2d2626231f19120a0100000000000000000b151e2f3840474c4d5353535246443f3830261c11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c69768286868686868685786c5f5245392c1f12000c1926323f4c5965727f868686868686868276695c504336291d1000000000000d192633404c5966737f8c93939393939393939393939393939393939393939185786b6b74818e97a0968c7f73695f5353606d797b7b7c7d7d7063584e4338313a4653606d7986939f9c8f8276695c4f4336291c1003000713202d3a4653606d798693a0aca194877b6e61544853606c7884919eaca096897c7063554b4146535f697683909caa9f92857a6d60534955626f7c8895a2aca09386796d6053463a2d2013070000000000000000000000000000000000000b151e2a333e45515c676e7b86929fa5a59e9285818e95a0aaa3989183796d60594f443b2f261b1007000000000000000000000000000000000000000000050e171e252a323a41464f54575e6165666d6f717374757676777777787878787879797e8b98a4afa396897c706356493d3023160a000000000000000814212e3b4754616e7b8798a3aeaa9d9084776a574d42362a1e12050000000005111d2935414c566a7783909daaafa399877b6e6154483b2e2115080000000000000000000814212d3a47535f697784919eaa9e9184786a5f53473a2e1d120700000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000f1b27333e49525a5f60606060606060606060605d5a544c43382d22160a000000000000000000000000000000060f1820262b313a4045474d4b49453e362d222f3841484c4e4c47454039312a251f170f050000000000000000000000000000000c18232f39434b515f606060606060605f5e5951473d31261a0e0000000001080e13171a1a202020202020201b1a1814181a1b202020202020201a1917130e0700000000000000000000030c1d262f363c3f41464646453a38342e261e150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2835414e5a6670767979797979797873695d5144382b1e12000b1825313e4a57626d72797979797979797670665a4e4235291c0f00000000000d192633404c5966737f8c999999999999999da0a7a9a29f999999999999999185786b616d7a85929e9f92867b6e615a5c6976828788898a85786a605448423f404653606d798699a49c8f8376695c504336291d1003000713202d3a4653606d798693a0aca194877b6e61544c5663707d8996a1ab9e9184786c6053463a424d5765717e8b98a2a2988b7e7164574d55626f7c8895a2aca09386796d6053463a2d201307000000000000000000000000000000000000030c18212934404b555f69717e8b939ea7a297928e939da7a69f92867c6f675d51473e32291d140a000000000000000000000000000000000000000000020c1720293036393a3e3f44484d5354545c606264666768696a6a6a6b6b6b6b6c6c6c717e8b98a4afa396897c706356493d3023160a000000000000000713202d3a4653606d7986929facab9f928578695e52463a2d201407000000000713202d3946525d687885929eabac9f9286796d6053463a2d2013070000000000000000000815222e3b4855616e7b8896a0ab9a8e817467584e43372b1f0b0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000a16212c3740494f535353535353535353535353504e4a433a31271c11050000000000000000000000000000030e18212a31373e434b51535a585650483e322b34414a53585a5953514b433e36312921170d03000000000000000000000000000007121d2731394045535353535353535353524e473f352b20150900000000000003070b0d0e131313131313130e0e0c080c0e0e131313131313130d0c0a07020000000000000000000000000b141d242b303334393939382d2c28231c150c030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1926323e49545e66696c6c6c6c6c6c6c6961574c4135281c10000916222e3a46515b62656c6c6c6c6c6c6c69665e54493e3226190d00000000000d192633404c5966737f8c8c8c8c8c8c8c8c9095a0a297928c8c8c8c8c8c8c8c85786b5d68717e8b949f988f82766c61566673808d959697897c6f625b534d4c4d4f58626f7c8895ab9b8e8275685b4f4235281c0f02000713202d3a4653606d798693a0aca194877b6e6154525d6875818e9ba8a4998c7f73655b5044373b4754606d7a86929faa9c8f8276695e5355626f7c8895a2aca09386796d6053463a2d20130700000000000000000000000000000000000000060f18232f39434d57616c74818e95a0a9a29e9b9da5a99e948b7f726a5f554b40352c20170b0200000000000000000000000000000000000000000008131e29323a4146474b4c4d4e4f51524a50535557595a5c5c5d5d5e5e5e5e5f5f5f65717e8b98a4afa396897c706356493d3023160a0000000000000006121f2b3844505c667784909daaaea298877b6e6154483b2e21150a000000000714212e3a4754616d7a8797a1adaa9e918477665c5145382c1f1306000000000000000003101c28343f4a5465727e8b98a8a4998a7d7164574a3e31261a0f0000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000005101b252e373e4346464646464646464646464643423e3831281f150a0000000000000000000000000000000915202a333c424750555d606764615a50443a323d46535c646766605c554f46423b33291f14090000000000000000000000000000010b151f272f343846464646464646464645423d352d24190f0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b131a1f2426272d2d2d2b201f1c17110a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915212d38424c545a5c6060606060605f5d574f463b3024180c0006121e29353f49515759606060606060605c5a544c42382d21160a0000000000091623303c4956636f7d808080808080808083909d9f928580808080808080807f726556626c76828f989f948a7e71685d626f7c89959f9c8f82756d615e57595959616a73808d99a8998d8073665a4d4033271a0d00000713202d3a4653606d798693a0aca194877b6e615454606d7a86929fac9f93877b6e6153493f333945515d6775818e9ba89f93877b6e615355626f7c8895a2aca09386796d6053463a2d201307000000000000000000000000000000000000000007121d27313c45505a606d79839198a2adaba7a9ada1978f82776c60584e43392f231a0e05000000000000000000000000000000000000000000010d1925303a444c525457595a5b5c5d5e5b5953484a4c4e4f5050515151515252525965727f8c98a5afa396897c706356493d3023160a0000000000000003101c28343f4a546875818e9ba8b3aa978a7d7064574a3d32271b0d04000001081623303d495663707c8996a9b3a89c8f827569544b4034281c1004000000000000000006121f2c3844505c6675828f9ba89f93867a6d6054473a2d2114090000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000009131c252c33373939393939393939393939393635322d271f160d030000000000000000000000000000020e1a26313c454e535a61676d73716c61564c4137434e58646e74736d676159534d453b31251a0e020000000000000000000000000000030d151d23292c3939393939393939393836312b241b120800000000000000000000000104060712131313130908060300000000000000000000000000000000000000000000000000000001080e13171a1a2020201f1312100c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101b26303a42494e4f53535353535352514c463d342a1f130800010d18232d373f464a4c53535353535353504e49423a31261c100500000000000915222f3b4854606b6f7373737373737374818e9b9e91847873737373737373726d62575a626e7b86929f9e91857a6d60606a7783909a9e948c7f756e69676666676b707c86929fa096897c6f6356493c3023160900000713202d3a4653606d798693a0aca194877b6e61545865727e8b98a3a99c8f8276695e5341382d35414b5563707d8996a1a49a8c7f73655b55626f7c8895a2aca09386796d6053463a2d2013070000000000000000000000000000000000000000010b151f2a333e45515d676f7c86929facb8b4b8ab9e92857a6d655b50463c31271d11080000000000000000000000000000000000000000000005111d2a36414c565e6164656768696a6b68655d534840414243434444444545454d596673808c99a6afa295897c6f6256493c2f23160900000000000000000b17232e3f4b5865727e8b98a8b2a69a8d807367584e43372b1f15100c090e131e2a36414c5666727f8c99a5b3aa998c7f7366594c402e23180c0000000000000000000713202d3a4653606d7985929fa99d908376685d5245392c2013070000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000000010a131b21272b2d2d2d2d2d2d2d2d2d2d2d2d2a2926221c150d0400000000000000000000000000000006121e2b37424e575f626c7179807e71685d52453c4754606a74817f79706b615e574d42362a1e1205000000000000000000000000000000030b12181c1f2d2d2d2d2d2d2d2d2c2c2a26201912090000000000000000000001070d1013141e202020201615130f0a0400000000000000000000000000000000000000000000000000000003070b0d0e131313120706030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141e2830383e41434646464646464544413b342b22180d02000007111b252d353a3e3f4646464646464643423e3831281f150a0000000000000713202c38444f5960636666666666666874818e9b9e9184786b66666666666665625b51535f6973808c96a0978d80746a6063707d88939f9c918c817b7673727374777d859298a29e9184786d6053463a2d20130700000713202d3a4653606d798693a0aca194877b6e61545f6a7683909daaa2978a7e7164574d422f262f3a4653606c7884919eac9e9184786c6055626f7c8895a2aca09386796d6053463a2d201307000000000000000000000000000000000000000000030d18212935404b555f6a737f8c99a6b2bdb0a3968a7d70685e53493f342a1f150b00000000000000000000000000000000000000000000000713202d3946525e686d71727374767778756f65594d3d323536373737383835404b556774818e9aa7b2a995887b6e6255483b2f22150800000000000000000615222f3c4855626f7b8896a0acaa9d9184776a6054473c31271f1c181b1a1e242d3946525e6876838f9ca9aea298897c706356493d30231607000000000000000000091623303c4956636f7c8998a2aa998c807366564c4135291d11040000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000010910161b1e2020202020202020202020201d1c1a16110a03000000000000000000000000000000000814212e3a47535f6a6e767e848d857a6d60584e43505a626f7c888c847d756e695e53463a2d2114070000000000000000000000000000000001070c10132020202020202020201f1d1a150f0800000000000000000000040c12181d20202b2d2d2d2d22211f1b150e070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c161e262d323536393939393939393835302a22191006000000000a131b23292e3132393939393939393635322d261f160d03000000000000030f1b27323d474f545659595959595b6874818e9b9e9184786b5e5959595959595751494d57606d7984919e9f93877c6f66606b73808d939f9c938e8783807f8081848a9297a19f928a7d70665c5044382b1f120600000713202d3a4653606d798693a0aca194877b6e6154626f7c88959fab9f9285796d6053473b31202b3844505b6673808d99a7a096897c706355626f7c8895a2aca09386796d6053463a2d20130700000000000000000000000000000000000000000007121d27313c46505a606d7984919eaab7b9b1a4978b7e71695f554b40342820170b02000000000000000000000000000000000000000000000714212e3a4754616d7a7e7f8081828485817568584e43372e2c2823282c2f3945515d677783909daaada196877a6d6054473a2d21140700000000000000000815212e3a47535f6a7784919eabaca095887c6f62584e4339312c282327262b2f35414c56616d7a86929facab9f9285796d6053463a2d201307000000000000000004111d2935414c566673808c99aaa298897c6f6356493c3024190d010000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000000000000050a0f12131313131313131313131313100f0d0a050000000000000000000000000000000000000815222f3b4855626e7c828a91968d80746a5f534b55616c76839096918a827b6e6154483b2e21150800000000000000000000000000000000000000040613131313131313131312110e090400000000000000000000040d161d24292c2d38393939392f2e2b2620181007000000000000000000000004090d0f0f131313131313130d0c0a060200000000000000000000000105090b0b13131313100f0d0905000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c141b212628292d2d2d2d2d2d2c2b28241f1810070000000000010a11181e2225262d2d2d2d2d2d2d292926211c150d0400000000000000000b16212b353d4448494d4d4d4d4e5b6874818e9b9e9184786b5e514d4d4d4d4c4a463f45515c67707d89939e999083786d60606c77808c92989f9992908d8c8c8e91969e9f99928c80736b61544a3f34281c100300000713202d3a4653606d798693a0aca194877b6e615c6673808d9aa7a79a8d8174675c5145382c1f28333f4a54626e7b88959fa89b8e8174675d626f7c8895a2aca09386796d6053463a2d2013070000000000000000000000000000000000000000060f18242f39434e58626c75818e96a0acafacafac9f92867b6e675c51453e32291d140a000000000000000000000000000000000000000000000815212e3b4854616e7b878c8d8e8f909184786a6054473f3a38342e34383a404b55606d7a86929facab9e918578675d5145392c201306000000000000000006121f2b37434e586673808d99a3afa89b8e81756a5f554b433c38342e3431373a4145525d68737f8c99a3afa79b8e8175675c5145382c1f130600000000000000000713202c3945525d687683909da99f9285796d6053463a2d201308000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1a2734404d5a6773808d949e9f92877c6f625a515c67717e8a949f9e93867d7063574a3d3024170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f282f35393a45464646463c3b37322a22180e04000000000000000002091015191b1c20202020202020191916120d07000000000000000000060c11151718202020201d1c1915100a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a1015191c1c2020202020201f1e1c18130d060000000000000000070d12161819202020202020201d1c1916100a03000000000000000000040f19232b32383b3c404040414e5b6874818e9b9e9184786b5e51454040403f3e3a34404b55606b75818e97a0958c7f72695e656c777f868e92999b9c9a99999a9d9b99938f867f736e63594f42382e23170b0000000713202d3a4653606d798693a0aca194877b6e61606d7985929eaba095897c6f62554b4034291c222d3847535f697683909daa9f92857a6d60626f7c8895a2aca09386796d6053463a2d20130700000000000000000000000000000000000000030c18212935404b555f6a717e8b939ea8aba39fa3aba2989083796d60594f443b2f261c11060000000000000000000000000000000000000000000714212d3a46535e697884919a9b9c9d96897c6f625a504a464440434044464b515c67717e8b98a3aeaa9b8f827568554b4135291d11040000000000000000030f1a26313c4854616e7b87929faaac9f92877c6f675d554e46454041414142474c515b606d7a85929eabaca095897d7063554b4034281c100400000000000000000714212d3a4754606d7a86929fa89b8f8275665c5044382c1f1206000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000000000000000000000000000004080a0a131313130d0c0a070200000000000000000000000713202d3a4653606d78839097a2999083766c6156606d7984919e9f958d80736b6155483c2f23160900000000000000000002070c0f11121313130e0706040000000000000000000000000000000000000000000007121d28313940454751535353534947433c342a20150a00000000000000030c141b212528292d2d2d2d2d2d2d2625231e19120a010000000000000911181d2124252d2d2d2d292826211b140c0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005090d0f101313131313131212100c0802000000000000000000000106090b0c13131313131313100f0d0a0500000000000000000000000007111921272c2f30333335414e5b6874818e9b9e9184786b5e514538333332312e2e39434f59616d7a85929f9f92867b6e615b656c727b81868b8e9091929291908e8b87827c726d635c52473e30261c11060000000713202d3a4653606d798693a0aca194877b6e6164707d8a97a1ab9d9083776a605443392f23181c2b37424d5765727e8b98a3a2988b7e7164626f7c8895a2aca09386796d6053463a2d201307000000000000000000000000000000000000000b151e2a333c45515d676f7c86929fa5a79f999299a3aaa0958d80746b61564d42382d22170d04000000000000000000000000000000000000000005121e2a36424d576774818e9aa6a9a89b8e81756c605c5453514a504a5153555d606d7983919daaaea2988b7e7165584b3e2f24180d010000000000000000000a15212d3a46535e6975818e98a3aea3999083796d675f5853514b4e4e4e4d53555d606d74818e97a1ada69d9083776b605443392e23180c0000000000000000000b1724313e4a5764717d8a99a3a8988b7e7265544a3f34281c1003000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d10030000000000000000000000000000000000000000000000000000050b101416171f2020201a1917130e070000000000000000000006131f2c3845515c666e7b85929a9f948b7e71675e68737f8c96a1989083796d60594f44382c2014070000000000000000060d13181c1e1f2020201b1313100c0700000000000000000000000000000000000000010d18242f39434b51535e6060606055534e463c32261b0f040000000000020c151e262c3135363939393939393933322f2a231c130a000000000009121b22292e3132393939393635322d261e160c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f161b202223262835414e5b6874818e9b9e9184786b5e5145382b2626251d27303d46525e68717e8b949f988f82756c615b606a6e757a7e81838585868584817f7b756f6a635b524940352c1e140a000000000713202d3a4653606d798693a0aca194877b6e616875828f9ca9a3998c7f7265584e4331271d121a26313c4754606d7a86929faa9c8f837669626f7c8895a2aca09386796d6053463a2d20130700000000000000000000000000000000000007121d27303c45505a606d79839198a2aa9f9590869299a4a79d928a7d70695e544a3f332820160c0100000000000000000000000000000000000000020e1a25313c4855626f7c88949faaaa9e938a7e726d6662605c545d545c6062676d75808d95a0aca99f92867a6d6154473a2e2114070000000000000000000005121e2a36424d57616e7b86929fa6aba0958f82796f6a63605c555b5a5b575f62676d747f8c939ea9a99f948a7d7064594f4430271d1207000000000000000005121e2b37424d576774818e9aaba096887b6e6155483b2e23170c00000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d1003000000000000000000000000000000000000000000000000000810171c2023242c2d2d2d2726231f19120a01000000000000000004101c2834404b545e69707d88939f9e91857a6d616e7b86929f9f92867b6e665c51473e33281c1004000000000000000710171e24282b2c2d2d2d28201f1c18120b03000000000000000000000000000000000004101d2935404b555d606b6c6c6c6c625f584e43372b21160a000000000009141e2730373d414246464646464646403e3b352e251c120700000006111b242d343a3d3e4646464643413e3830281e1108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b0f1315161b2835414e5b6874818e9b9e9184786b5e5145382b1e1918151e2a36414c56606c778390999e938a7d70675d575f62686e717477787979787775726e69625f58514940372e231a0c02000000000713202d3a4653606d798693a0aca194877b6e616e7a86929fac9f92867a6d6154473d3221150b15202c3945525d6875818e9ba99f93877b6e626f7c8895a2aca09386796d6053463a2d2013070000000000000000000000000000000000060f18232e39434d57616c74818e95a0aaa29890837d87939fa7a49e92857b6e665b50443d32281e130800000000000000000000000000000000000000000915212e3b47535f6a76828f98a2aea59f92877f78726f6d666a696a666d6f7379818d929da7aca2978d8074685d5246392d20130700000000000000000000020e1a25313b46535f69737f8c949fa7a79f948f837c75706d676867676869696e737a818c919ca5aaa1978f82766c6155473d331e150b0000000000000000000714212d3a46535f697784919eaa9e918477695f53463a2d1c110600000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000000000000000000000000000000000006111a22282d30313939393933322f2a241c140a0000000000000000000c18232e39424d57616b73808d949f978d80746a74818e989d938a7e71695f544b40352c21160b0000000000000006101922292f343738393939352d2c28231d150c05000000000000000000000000000000000613202c3945515d676d78797979796f6a5f53473d32271b0f0100000004101b26303942494d4f535353535353534c4b4640372e23190d0200010c18222d363f454a4b53535353504e49423a30231a0f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000307090e1b2835414e5b6874818e9b9e9184786b5e5145382b1e120b0c1925303a44505b656f7c87929f9e9184796d605853565e6165686a6b6c6c6b6a6865615e57534e463f372e251c110800000000000713202d3a4653606d798693a0aca194877b6e66727f8c99a3a99b8f8275685e5246392d201304111d2935414c5663707d8a97a1a49a8c8073656f7c8895a2aca09386796d6053463a2d20130700000000000000000000000000000000030c17212834404b555f69717e8a939da7a59f92867b73808d95a0aaa1978f82786c60594f443a2f241910060000000000000000000000000000000000000006121f2b37434e58626f7c86929fa4aca399928b837f7b797777767777797c80858e939da4aea49a92857a6d61564c4135291d1105000000000000000000000009141f2a36424d57606d78828f959fa7a69f959087817d79777574747476787b80858e939ca3aaa29892857b6e615a5044352b210c030000000000000000000815222e3b4855616e7b8896a0ab9a8d817467574d42362a1e0a0000000000000000000000000004111e2a3744515d6a7784909daaa99c8f8376695c504336291d100300000000000000000000000000000000000000000000030a1117242c33393c3d46464646403f3b352e261c120700000000000000050c121d27303b454f59606d788290979f92877c6f7c87939f958e81746c61574d42392e231a110c060000000000020d17222b333b404445464646413a38342e271e170e060000000000000000000000000000000714202d3a4753606d7a84868686877c6f62594f44382c1d12070000000915212c37424c545a5c606060606060605957514940352a1e12060005111d29343f48505658606060605c5a544c42352b21160b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1b2835414e5b6874818e9b9e9184786b5e5145382b1e120008131e27333f49535f6a73808d96a0968d80736a5f534c5254585b5d5e5f5f5e5d5b5854524d47433c342d251c130a0000000000000713202d3a4653606d798693a0aca194877b6e6a7784919daba1978a7d7064564c41362a1e11050d19242f3a4653606d7984919eac9e9184786c6f7c8895a2aca09386796d6053463a2d201307000000000000000000000000000000000b151e29333b45515c676e7b86929fa5a89e938b7e716d79839098a3a99f948c7f736b60564c41352922180d03000000000000000000000000000000000000030f1b26323c47535f6a717e8b939aa2aaa39f95918c8886848483838485898c92979ea5aaa39f93887d70685e52443a3024190d010000000000000000000000030e1a26313b44505c666d7a8390959da5a7a099938e898683828181818385888c92979da5a7a09892867d70695e52483e3323190f00000000000000000003101c28343f4a5465727e8b98a8a3998a7d7064574a3d31261a0e0200000000000000000000000004111e2a3744515d6a7784909d9f9f9c8f8376695c504336291d1003000000000000000000000000000000000000000000040c151c2328363e44494a525353534d4b4740382e24190e0200000000000810171d1e252a333e44505c666e7b85929a9990827982909a989183796d605a50453c302a251e1d1710090000000007131e29333d454c50525353534e4645403930292018100800000000000000000000000000000613202c3945515d67707d8a949a8f82766b605448392f24180c0000000d1925313d49545e65696c6c6c6c6c6c6c66635b51463b2f23160a000915212e3a45505a62656c6c6c6c69665e54473d33271c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205070e1b2835414e5b6874818e9b9e9184786b5e5145382b1e1205020b17222d38414e58606d7984919e9f92877c6f655b5046474b4e5152525352514e4c4846423b37312a221c130a010000000000000713202d3a4653606d798693a0aca194877a6e6f7c8995a0ab9e9185796d6053463a3025190d0108131f2b3844505c6673808d9aa7a196897d706f7c8895a2aca09386796d6053463a2d20130700000000000000000000000000000007121c27303b45505a606d79839098a2aba0968e81756c666e7c86929fa6a69f92877c6f685d52453f342a1f150b010000000000000000000000000000000000000a15202b37434e58616c727f8892989fa3a7a09d99999291909090919298999ea2a9a69f98928b7f726c61564c4132281e13080000000000000000000000000009141f28343f4a545e686d7a838e929d9fa7a49f9b9892908e8e8d8e8f9197999ea1a9a29e9590867d706b60574d42362c22110800000000000000000006121f2c3844505c6675828f9ba89f92867a6d6054473a2d2114090000000000000000000000000004111e2a3744515d6a778490939393938f8376695c504336291d10030000000000000000000000000000000000000000060d161e262e343f485055575f6060605a57524a40352a1f13070000000008121a22282d3036393a3f4a545e69707d88939f948e828e949f92867c6f675d51483e3a3936302d28221b12090000000c18242f3b454f575d5f6060605b53514b423a322a221a11070000000000000000000000000004101d2935404b55616c75828f9c94897c6f63554b4035291d100400000f1b2835414d5a65707579797979797979736d63574b3e3225190c000b1724313d4a56626d7179797979767066594f44382c20150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090e1114141b2835414e5b6874818e9b9e9184786b5e5145382b1e12050006111b262f3c45515d67707d8a939e999083776c60564c413e41444546464544423f3b3a36302b262018100a01000000000000000713202d3a4653606d798693a0aca094877a6d74818d9aa8a79a8d8073665c504438291e13080003101c28343f4a54626e7b88959fa89b8e81746f7c8895a2aca09386796d6053463a2d2013070000000000000000000000000000050f18232e39424d57616c74808d95a0aaa39991847a6d605f6a727f8b949fa9a39991847a6d605a50463c31271d1207000000000000000000000000000000000000040f1a26313c46505a636d727e868e92999da0a8aba39f9e9d9c9d9e9fa2aaaaa29f9b948f867e726d62594f443a3020160c0200000000000000000000000000030b17232e38424c565e686d79818990959b9fa2aaa39f9d9b9a9a9b9c9ea1a9a49f9c97928c837b706b60594f453b30241a10000000000000000000000713202d3a4653606d7985929fa99c908376675d5145392c2013060000000000000000000000000004111e2a3744515d6a77838686868686868276695c504336291d100300000000000000000000000000000000000000070f18202830383f44515a61646c6c6c6c66635c52473b2f23170a00000005101a242c33393a4146474a4d5357606b73808c949e938e939e938b7f726a5f55534d4b4746413a39342c241b100600000f1c2834404c5761696b6c6c6c68605c544c443c342c2318120b030000000000000000000000010d18242f3943505a626f7c89949b8e8175675d5145392c1f130600000f1c2936424f5c697582868686868686867f7366594c403326190d000b1825323e4b5865717e8686868682766b6054483c32271b0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d14191e2021272835414e5b6874818e9b9e9184786b5e5145382b1e120500000a141d2935404b55616b75818e989f958b7e72685e52463d3037383939383735322e2d2a251f1a150e060000000000000000000713202d3a4653606d798693a0aca093877a6d7985919eab9f95887b6e62544a3f3428170d0200000b17232e3847535f6a7783909dab9f9285796f7b8895a2aca09386796d6053463a2d20130700000000000000000000000000020c17212834404a545f69717e8a929da7a69f92877c6f675d58606c77828f97a1aba1968e81756d62584e43392f23180f050000000000000000000000000000000000000a15202a343e48515b636c717b81878c919597999c9d9e9e9f9f9f9e9d9b9998928e89827b716c625b51473e32281e0e0400000000000000000000000000000006111c26303a444c565e676d747c83898e9298999b9d9e9f9f9f9f9e9d9b999993908b857f786e6960594f473d33291f120800000000000000000000091623303c4956636f7c8998a2a9998c7f7366554b4135291d1104000000000000000000000000020d17222b36424f5b6771777979797979797670665a4e4235291c0f030000000000000000000000000000000000000810192129323a424a505b636c7079797979736e63574b3f3226190c0000000c17222c363e45494c525457575f6165656d78828f9c9e9b9e9b8f82756d6865615e575754524c49453e362c22170c0000111e2b3744505d697378797979746d665e564e463e3528231c150c04000000000000000000000007121d28313e4754606a7683909c9285796d6053473a2d20140700000f1c2936424f5c6975828f93939393938c7f7366594c403326190d000613202d394653606c7883909994897d7063584e43372b1f130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e171f252a2d2e342d35414e5b6874818e9b9e9184786b5e5145382b1e12050000020b18242f39434f59616e7b85929f9f92857a6e61594f43392e232c2c2b2a282521201e1a140f0a03000000000000000000000713202d3a4653606d798693a0aca093867a6f7c8997a1aa9d9083766a5f5342382e23170500000006111c2b37434e5865727f8b99a3a2988a7e717b8895a1aca09386796d6053463a2d201307000000000000000000000000000a141e29333b44515c666e7b85929fa4a99f948c7f726a6055505b656e7a85929ea5a89e938b7e716a5f554b40342921170c020000000000000000000000000000000000030e18222d363f49515a61696e747b8084888b8d8f90919292929291908e8c8985817c766e69615a51493f352c20160c00000000000000000000000000000000000a141e28323a444c555c606b6f777d8185898c8e90919292929291908f8d8a86837e79726d665f574f473d352b20170d0000000000000000000004111d2935414c566673808c99aaa197897c6f6256493c2f24180d0100000000000000000000000007131e29333d454c555f676a6c6c6c6c6c6c69665e54493e3226190d01000000000000000000000000000000000007121a222b333b444c545c606d727e868686868073665a4d4033271a0d000005111d28333e485055565e616467696e7175787c808d99a6a8a6998c807c7875716e696764615e565550483e34281d110500121f2c3845525f6b788586868681786d685f584f473f342e271e160e0600000000000000000000010c161f2b37434e5864717e8a99988a7e7164574a3e3124170700000f1c2936424f5c6975828f9c9f9f9f998c7f7366594c403326190d0005121f2b3744505b656f7c87939d9083776a6054473b2e221509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d17202930363a3b413a38414e5b6874818e9b9e9184786b5e5145382b1e120500000007121d27313e46525e68727f8b959f978e81756b60554b4034281f201f1e1b191514120e09030000000000000000000000000713202d3a4653606d798693a0aca093867974808d9aa9a3988b7e7265584e4330261c1106000000000f1a26313c4754616d7a86929faa9b8f82757b8894a1aca09386796d6053463a2d20130700000000000000000000000006111c26303b454f59606d78839097a2ada1978f82786c60584e49535e68707e8a939da8a59f92867c6f675c51453e33291e140a00000000000000000000000000000000000006101b242e373f4850575e61696e73777b7e80828484858686858583827f7d79756f6b625f5750483f372d231a0e040000000000000000000000000000000000020c162029323a434b515960636b7075797c7f82838485868685858382807d7a76726d67605c544d453d352b23190e05000000000000000000000713202c3945525d687683909da99e9285796c605346392d201307000000000000000000000000000c18242f3b454f575d5f60606060606060605c5a544c42382d21160a00000000000000000000000000000000030b1218242c343d454d565d666d747f87929892857b6e6154473b2e21140800000814212d3945505a6164686d7174777b7e8185888d929ca8b3a89c928c8885817e7b7774716d6864615a5045392d211508000c1926323f4c5965727f8c93938e827a6f6a615951444039302820180f0700000000000000000000040d1b27323d4754606d7a86929a8d8174675a4e412f24180d01000f1c2936424f5c6975828f9ca8aca6998c7f7366594c403326190d00030f1b27333f49535f6a75828f9b95887c6f6255493c31261a0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f29323b4246474d4745404e5b6874818e9b9e9184786b5e5145382b1e1205000000010b151f2a36414d56606c788390999e93897d70675c51453c31261a0e110f0c0807050200000000000000000000000000000713202d3a4653606d798693a0afa39986797884919eab9f92867a6d6054473c3121150a00000000000a15202d3946525d6875828f9ba99f92867a7b8894a1aca09386796d6053463a2d2013070000000000000000000000050e17232e38424d57616b73808d959fa9a49e92857b6e665b5046414d56616c74818e96a0aba2989083796d605a50453b30261c110600000000000000000000000000000000000009121c25333d45454d52575f62666a6e71737577787879797978777573706d67636059534d453e362d251b110800000000000000000000000000000000000000050e1720333d454c504f54596063676d70727576787879797878777573706d6865605d55504a423c332b2319110700000000000000000000000714212d3a4754606d7a86929fa89b8e8175665b5044382b1f1206000000000000000000000000000f1c2834404c5761696b6c6c6c68605c544c504e49423a31261c1005000000000000000000000000000000050c151d2328363e464f575f686d78818c939993877d70695e52463a2d20140700000a1723303d4955616c71777a7e8184888b8e9297999e9ea1a9a39f9e9997918e8b8784817e7a77716c6155493d3024170a000b1825313e4a56626d75818f969490847c706b625b514a423a322a2119110600000000000000000915202b353f4745515d677683909c9083766a554b4035291d1004000f1c2936424f5c6975828f9ca8b2a6998c7f7366594c403326190d00000b17222d38414e58636f7c89959a8d807367574d42372b1e120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1925303b444d52545a53514b4e5b6874818e9b9e9184786b5e5145382b1e120500000000030d1925303b44505b666f7c87929f9e9184796d60574d42372b20160c02000000000000000000000000000000000000000713202d3a4653606d798693a0ac9f9286797c8996a1a89b8e8175685d5245392c201303000000000005111d2935414c5663707d8a97a1a2988a7d7b8794a1aca09386796d6053463a2d20130700000000000000000000020b172028343f4a545e69707d8a929da7a79d928a7d70695e544a3f3b44505a606d79849199a3aaa0958d80746c61574d42382e23170e0400000000000000000000000000000000000c18242f3a454f575c5f606059575f626466696a6b6b6c6c6c6b6a686663605d55544f47423c332d241b130900000000000000000000000000000000000000000c18242f3a454f575c5f606059555c606366686a6b6c6c6c6c6b6a686664615e5653514b443f38302a211911080000000000000000000000000a1724313d4a5764707d8a99a3a7988b7e7165544a3f33281c0f0300000000000000000000000000111e2b3744505d697378797979746d665e564e463e3528231c150c040000000000000000000000000000060e161e272e344048505960696e7a828e939f948c7f736b60574d42362a1e110500000b1724313e4a5764717e83878a8e9196989b9e9c97919197a1989292979c9e9b9896918e8a87837e7164574b3e3124180b000916222e3a46515b606d7a8491989691867d726d605c544c443c332b2317110a020000000000010e1a26313d4751595e556673808d99928578675d5145392c201306000f1c2936424f5c6975828f9ca8aa9f998c7f7366594c403326190d000006111b262f3c4854606b7783909d918478695f53473a2d2114080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36424d565e6167605c554e5b6874818e9b9e9184786b5e5145382b1e1205000000000008141f28333f4a545f6a73808d96a0968c8073695f53473e32281e1308000000000000000000000000000000000000000713202d3a4653606d798693a0ac9f928579808d9aa8a196897d7063564c4135291d11040000000000010d1924303a4653606d7985929eaa9b8e817a8794a0b5a09386796d6053463a2d201307000000000000000000000a141d29323b44505c666e7b85929ea4aaa0958d80746c61574d4238323e45515d676f7c87929fa7a79d928a7e70695e544a3f342820160c02000000000000000000000000000000030f1c2834404c5761686b6c6c66635b55585a5c5d5e5f565e61666a6c6c6a66605d564e463c322a211b12090100000000000000000000000000000000000000030f1c2834404c5761686b6c6c66635b5356595b5d5e5f565e61666a6c6c6a66605d564e463c342e261e180f0800000000000000000000000005121e2b37424d576774818d9aaba095877b6e6154483b2d22170b0000000000000000000000000000121f2c3845525f6b788586868681786d685f584f473f342e271e160e06000000000000000000000000070f18202830394045525a616b6f7b838f949d968f82776c60594f453b30251a0e0200000a1724313d4a5764707d8a939a9a9ea09e9a938f8a8585919e9286858a8f93999ea09e9a9a938a7d7164574a3e3124170b0006121e29353f45525d686f7c86929f9892877f746d665d564d453d3528231c140c030000000004111d2a36424e59636a6c6c727f8b9897867a6d6053473a2d201407000f1c2935424f5c6875828f9b9f9d93938c7f7366594c403326190d000007111b252c38444f596673808c9996887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a46525e696e746d675f585b6874818e9b9e9184786b5e5145382b1e12050000000000020b17222d38424e58606d7984919e9f92867b6e625a50443a3024190c030000000000000000000000000000000000000713202d3a4653606d798693a0ab9f92857884919eac9e9184786c6053463a2f24190d0100000000000008131f2c3844505c6673808d9aa79e9285798699a3afa09386796d6053463a2d20130700000000000000000006111c262f3b444f59606d78829097a1ada3989083796d605a50453b2f2935404b55606a73808c959faaa49f92857b6e665c50443d32281e130800000000000000000000000000000005111e2b3744505c6873787979736d63574b4d4f50555d60686d7276787977736d685f584e443b3025190e02000000000000000000000000000000000000000005111e2b3744505c6873787979736d6357494c4f50555d60686d7276787977736d685f584e443b3025190c06000000000000000000000000000714212d3a46535f697784919eaa9d918477695e52463a2d1c110600000000000000000000000000000c1926323f4c5965727f8c93938e827a6f6a615951444039302820180f0700000000000000000000071019212a323a434b515b636c717d8591959f9991847a6d655b50473d33291f14090000000713202d3a4653606d7985929f9f9c97928d87827d7883909c9285787d82878c91969b9f9f9285796d6053473a2d20140700010d18232935414c565f6a727e8b939e99938c81786d685f574f473f342e261e150c0300000006121f2c3845525e6a757979797e8a9794877b6e6154483b2e211508000e1b2835414e5b6874818e9b95898686867f7366594c403326190d00010d18232d373f464956636f7c8999978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7b80796f6a605b6874818e9b9e9184786b5e5145382b1e120500000000000006111c262f3c45515d67707d8a939e988f82766c61564c4135291e150a0000000000000000000000000000000000000713202d3a4653606d798693a0ab9e92857b8896a1a49a8c8073655b504437281e13080000000000000003101c28343f4a54626f7c8895a0a197897c86929faca09386796d6053463a2d2013070000000000000000050e17222d38424c56606b73808d949fa9a69f92867c6f675d51473e3329242f3a434e58606d78839098a2ada2979082786d60594f443a3025191006000000000000000000000000000005121f2c3845525f6b788586867f7366574d4e535a61676d727a7f83858584807a6f6a5f564d42362a1f1408000000000000000000000000000000000000000005121f2c3845525f6b788586867f7366574d4e535a61676d727a7f83858584807a6f6a5f564d42362a1f1408000000000000000000000000000815222e3b4855616e7b8896a0aa9a8d807467574d42362a1e0a0000000000000000000000000000000b1825313e4a56626d75818f969490847c706b625b514a423a322a211911060000000000000000040f19222b333c444c555c606d737e869297a09f92877c6f685d53493f352b20170d0200000006131f2c3845515c6775818e9a948f8a85807b76717783909d92857971767b80848a8f92998e8175675d5145382c1f13060000070d19242f3a434e58626d75818e95a09f928e827a6e69605951443f3830271e150b0000000613202c3946535f6c798786868a909a95887b6e6255483b2f221508000e1b2734414e5a6774818d9a9083797979736d63574b3e3225190c0006121e29353f49515759606d798692998c7f7366594c403326190d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b87837c726c656874818e9b9e9184786b5e5145382b1e1205000000000000000a141d2935404b55616c75828f989f948a7e71685d52453d30261c110600000000000000000000000000000000000713202d3a4653606d798693a0ab9e91847f8c99a89f93877b6e6153493f3327160c0100000000000000000c17232e3847535f6a7783909da9998c7f85929faba09386796d6053463a2d20130700000000000000020b162028333f4a545e68707d88939fa6a99e938b7f726a5f554b40352c201d28313d44505c666e7b86929fa6a99f948c80736b60564c41352922180d030000000000000000000000000004101d2a3743505d6a7683908f8276695e54585f626c71797f858c909292908c857c6f695e52463b3025190e020000000000000000000000000000000000000004101d2a3743505d6a7683908f8276695e54585f626c71797f858c909292908c857c6f695e52463b3025190e02000000000000000000000003101c28343f4a5465727e8b98a8a398897d7063564a3d30251a0e0000000000000000000000000000000916222e3a46515b606d7a8491989691867d726d605c544c443c332b2317110a020000000000000a16212b343d454d565e676d757f8a9298a19e938b7f726a60564c41382d23190e050000000004101c2834404b5564707d8a8d88837e79736e696a7784919d9886796d696e73787d82868c8a7d7064554b4035291d100400000008131e28313c46515b606d79839198a29d948f847b706b625b504a423930271d120700000613202c3946535f6c79869293979aa295887c6f6255493c2f221609000d1a2733404d5a6673808d99918578666c66635b51463b2f23160a000916222e3a46515b62656c667885919a8d8174675a4e4134271b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8790867f776e6974818e9b9e9184786b5e5145382b1e120500000000000000020b18242f3a43505a616e7b86929f9e92857a6d60594f42382e23170c03000000000000000000000000000000000713202d3a4653606d798693a0aa9e918482909caa9c8f8276695f5341382d22170400000000000000000006111c2b37434e5865727f8b99a39d908384919eaba09386796d6053463a2d201307000000000000000a141d28323a44505b666e7a85929aa4aba1968f82756d62584e43392f231a161f28343f4a545f69717e8b939ea9a69f93877d70685e52463f342a1f150b01000000000000000000000000020f1b2835424e5b6875818e92877b6e6663646a6f767e848c92989d9f9f9d9791857b6e61564d41362a1e110500000000000000000000000000000000000000020f1b2835424e5b6875818e92877b6e6663646a6f767e848c92989d9f9f9d9791857b6e61564d41362a1e1105000000000000000000000006121f2c3844505c6675828f9ba89f9286796d6053473a2d20140900000000000000000000000000000006121e29353f45525d686f7c86929f9892877f746d665d564d453d3528231c140c0300000000030f1b27323d464e575f686d79818c929fa3a0958e81756d62584e443a2f261b11080000000000000c18232e3a4653606d7984807b76716d66615f6b7884919e93877a6d6061666c70757a7f83796d6053463a2f24180c00000000010c161f2a343f45515d676e7c86929fa59f9691857d726d605c544b42392e23180c00000613202c3946535f6c7986929fa4a6a295887c6f6255493c2f221609000b1825323e4b5865717e8b989286796d605957514940352a1e1206000b1825313e4a57626d7279797983909b8e8275685b4f4235281c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8798928c827b7174818e9b9e9184786b5e5145382b1e1205000000000000000007131d28313e46525e69727f8c95a0978e81746b60544a3f34281f1409000000000000000000000000000000000713202d3a4653606d798693a0ab9e918587929fa2988b7e7164574d422f261b1106000000000000000000000f1b26313c4754616d7a86929f9f928785929eaba09386796d6053463a2d20130700000000000006111b262f3a444f59606c78828f97a1aca49991847a6d615b51463c31271d110d17232e38424d57626d75828f97a1ada49991847a6d615b51463c31271d1207000000000000000000000000000c1926333f4c5966727f8c998f8279727071757c838a91969fa2aaa3a3a9a1978e8174685e5246392d20140600000000000000000000000000000000000000000c1926333f4c5966727f8c998f8279727071757c838a91969fa2aaa3a3a9a1978e8174685e5246392d20140600000000000000000000000713202d3a4653606d7985929fa99c8f8276675d5145382c1f1306000000000000000000000000000000010d18232935414c565f6a727e8b939e99938c81786d685f574f473f342e261e150c0300000007131f2c38434e5860696e7a828e939ca4a2989183796d605b51463d32281d140a0000000000000007131f2c3845515c676d78746e6a64605c545f6b7885929e94877b6e61545b6063686e72776d675c5145382c1d12070000000000040d18222935404b555f6a717e8a939da7a09792877f746d665c544b4034281c1004000613202c3946535f6c7986929facafa295887c6f6255493c2f221609000916232f3c4956626f7c899a99897c6f6356494640372e23190d02000c1926323f4c5965727f86868689959c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b879298948f857e74818e9b9e9184786b5e5145382b1e12050000000000000000010c161f2a36424d57606d788390999f93887c6f665c50443b31251a0d040000000000000000000000000000000713202d3a4653606d798693a0ada197919299a39f9285796d6053473b3120140a00000000000000000000000a15202d3946525e6875828f9ba399929297a1ada09386796d6053463a2d2013070000000000040e17222d38414c56606b737f8c949fa9a79f93877d70685e52493f342a1f150b06111c26303c45505a616d7a85919ea4aba1968f82756d62584e43392f24180f060000000000000000000000000a1623303d495663707c8998948f837e7d7e828790949ea1a19e9996979a9f9f92877b6e6154473b2d22170b00000000000000000000000000000000000000000a1623303d495663707c8998948f837e7d7e828790949ea1a19e9996979a9f9f92877b6e6154473b2d22170b0000000000000000000000091623303c4956636f7c8997a2a9988c7f7265554b4035291d100400000000000000000000000000000000070d19242f3a434e58626d75818e95a09f928e827a6e69605951443f3830271e150b0000000915222e3b4854606a6f7b8490949ea5a49f92867c6e675d51493f342b20160b020000000000000004101c2834404b555c666c66625f575351505b657985929f95887b6e62555053565e61666a605c554b4034281c0b01000000000000071018242f39434e58616c74818e95a0a9a299928b80786d665c5145382c1f1306000613202c3946535f6c7986929facafa295887c6f6255493c2f221609000714202d3a4753606d7a8693998c807366594f44382c251c120700000c1926323f4c5965727f8c93939da09c8f8276695c504336291d10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c787f86909597928a81818e9b9e9184786b5e5145382b1e1205000000000000000000040d1a25303b44505c666f7c87939f9a9083786d60574d42362a1f160c0100000000000000000000000000000713202d3a4653606d798693a0b3a9a19e9fa3a89a8e8174675d5145392c1f1302000000000000000000000005111d2a36414c5664707d8a97a1a39f9ea1a9b3a09386796d6053463a2d20130700000000020c162027333f49535e686f7d87929fa6aa9f958d80736b60564c41372d22180d03000a151e2a333f46525e68707d8a929da8a89e938b7f726a5f554b40352921170d0300000000000000000000000713202d3a4653606d7985929f95908b898b8f93999fa39f97918c8a8a8e9299998c7f7265544a3f33281c0f03000000000000000000000000000000000000000713202d3a4653606d7985929f95908b898b8f93999fa39f97918c8a8a8e9299998c7f7265544a3f33281c0f0300000000000000000004111d2935414c566673808c99a9a197887c6f6255483c2f24180c00000000000000000000000000000000000008131e28313c46515b606d79839198a29d948f847b706b625b504a423930271d120700000916232f3c4956626f7c85919693939393928a7e716a5f554b40372d22190e040000000000000000000c18232e39434b545b605b54534e464653606c7986939f95897c6f625649464c5254595d53514b43392e23180c000000000000000007121d28313c46505a606d7983909893939393928d82796d6053463a2d201307000613202c3946535f6c7986929facaca295887c6f6255493c2f221609000613202c3945515d677783909d9083776b6054483d30261c110600000c1926323f4c5965727f8c989faaa99c8f8376695c504336291d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505b666c727c838c9299938e8e939e9e9184786b5e5145382b1e12050000000000000000000009141f28343f4a54606a74808d97a0958c7f72695e53463e31281d130700000000000000000000000000000713202d3a4653606d798693a0acb3adabacaca095897c6f62554b4035291d10040000000000000000000000010d1925303a4653606d7985929eabacabadb3aca09386796d6053463a2d2013070000000008131e28323a44505b656d7a849199a3aea2989083786d60594f443a30251b10060000030c18212a36414c56616b74808d95a0aba69f92867c6f675d51453e33291f1409000000000000000000000006131f2c3845515c6774818d98a09d9896979b9fa49f99928d85807d7d818792998f8276665b5044382b1f12060000000000000000000000000000000000000006131f2c3845515c6774818d98a09d9896979b9fa49f99928d85807d7d818792998f8276665b5044382b1f12060000000000000000000613202c3945525d687683909da99e9185786c605346392d201307000000000000000000000000000000000000010c161f2a343f45515d676e7c86929fa59f9691857d726d605c544b42392e23180c00000d1a2633404d59667380868686868686868680746c61574e43392f251b10070000000000000000000007121d273039424a5053504a47423c4753606d7a869aa496897c706356493d4146474c504645403930271d12070000000000000000010c161f2a343e45515c676e7b8586868686868686867a6e6154473b2e211408000613202c3946535f6c7986929f9f9f9f95887c6f6255493c2f2216090004101d2935404b556673808c9995897d7063584e42382e23170b00000c1926323f4c5965727f8c98a5b2a99c8f8376695c504336291d1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a545b606a6e787f8690959b9b9ea59e9184786b5e5145382b1e120500000000000000000000030b17232e38424e58606d7a84919e9f92867b6e615a50433a2f24180d01000000000000000000000000000713202d3a4653606d798693a0acacacacb5ab9d9184776a605443392f24180c0000000000000000000000000008131f2c3844515c6674808d9aa7b1acacacaca09386796d6053463a2d201307000000010d1924303a444e58606c77828f96a1aba59f92857b6e665c50473d32281e130900000000060f1925303a444f59606d79839199a3aea3989183796d605a50453b31261a0e020000000000000000000004101c2834404b55616e7b86929fa4a5a3a4a7a09d948f868079737070747d87939285796c605346392d2013060000000000000000000000000000000000000004101c2834404b55616e7b86929fa4a5a3a4a7a09d948f868079737070747d87939285796c605346392d2013060000000000000000000714212d3a4754606d7a86929fac9b8e8174655b5044372b1f120500000000000000000000000000000000000000040d18222935404b555f6a717e8a939da7a09792877f746d665c544b4034281c1004000c1925323f4b57636d737979797979797979746e645a50453c31281d12090000000000000000000000000b151e272f383f4446443f38373a4754616d7a8794a0978a7d7064574a3d36393b3f443a38342e271e150b00000000000000000000040d18222934404b555f696e78797979797979797976685e5246392d201407000613202c3946535f6c7986929393939393887c6f6255493c2f22160900010d18242f3b4855616e7b88949c8f82756a60544a3f34281c1003000c1926323f4c5965727f8c98a5aca99c8f8376695c504336291d1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d38424a50585f666d727c838c9299a0a79e9184786b5e5145382b1e1205000000000000000000000006111c26303d45515d67717e8a949e988f82756c61554b4035291d1104000000000000000000000000000713202d3a4653606d7986939f9f9f9f9f9fa3998c7f7266584e4331271d12070000000000000000000000000004101c2834404a54626f7c8895a09f9f9f9f9f9f9386796d6053463a2d20130700000004111d2935414c56606a727f8c949ea8a89e938a7e71695f544a3f352b20160c00000000000008131e29323e45515d676f7c87929fa69fa0958e81746c61574d42362a1e120500000000000000000000000c18232e3946525e69727f8b929b9e9f9e9b959089827b736d6763646b74818e98887b6e6255483b2f22150800000000000000000000000000000000000000000c18232e3946525e69727f8b929b9e9f9e9b959089827b736d6763646b74818e98887b6e6255483b2f2215080000000000000000000a1724313d4a5764707d8a99a3a49a8a7e716453493f33271b0f030000000000000000000000000000000000000000071018242f39434e58616c74818e95a0a9a299928b80786d665c5145382c1f1306000a16232f3b47525b63666c6c6c6c6c6c6c6c67645c52483e332a1f160c00000000000000000000000000030c151d262d33383938332d2e3b4854616e7b87949f978a7e7164574b3e312d2e33372d2c28231d150c030000000000000000000000060f18232f39434d575f616c6c6c6c6c6c6c6c6c6c5e564c41362a1e1105000613202c3946535f6c7987868686868686867c6f6255493c2f22160900000714212d3a47535f6975828f9c93877c6f665c5044382b1f1206000c1926323f4c5965727f8c989f9f9f9c8f8376695c504336291d10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f383f444e545c606a6f788087909593939184786b5e5145382b1e12050000000000000000000000000a141e2935414c55616c75828f9893948a7d70675d5145392c201306000000000000000000000000000713202d3a4653606d7986939393939393939392867b6e6154473d3221150b0100000000000000000000000000000c18232e394754606a778390939393939393939386796d6053463a2d2013070000000713202c3945525d686f7c879293939393968e81746c61574d42382e23190e04000000000000020c17202935404b55606a727f8c9493939393938a7e71695f53463a2d211407000000000000000000000007121d2a36424d56626d7380898f9292918f8a837d766e69605d5559626f7c89988a7d7063574a3d3024170a000000000000000000000000000000000000000007121d2a36424d56626d7380898f9292918f8a837d766e69605d5559626f7c89988a7d7063574a3d3024170a0000000000000000000e1b2734414e5a6774818d93939393877a6d6154473a2d22170b0000000000000000000000000000000000000000000007121d28313c46505a606d7983909893939393928d82796d6053463a2d2013070007131e2a35404952575960606060606060605a58524a40362c21180d040000000000000000000000000000030b141c22282b2d2b28222f3b4855626e7b889393938b7e7265584b3f322521262a201f1c18120b030000000000000000000000000007121d27313c454d53555f60606060606060605f524c443b3025190e020006121f2c3845525e6a757979797979797979766a6054473b2e221508000006121e2b37424d57626f7c89939a9083786d6053463a2d201307000c1926323f4c5965727f8c93939393938f8376695c504336291d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262d333c424a50585f666d737c838686868684786b5e5145382b1e1205000000000000000000000000020c19242f3a43505a616e7b8686868686847a6d6053473a2d201407000000000000000000000000000713202d3a4653606d78868686868686868686868275685e5246392d20140300000000000000000000000000000007121c2b37434e5865727f86868686868686868686786d6053463a2d2013070000000714212d3a4754606d7a848686868686868684796d605a50453b30261c11070000000000000000050e18242f39434e58606c788286868686868686857b6e6155483b2e2215080000000000000000000000000e1925303b44515b636e737d82858684827d78706b625f57514b53606d788686867f7265584c3f3225190c0000000000000000000000000000000000000000000e1925303b44515b636e737d82858684827d78706b625f57514b53606d788686867f7265584c3f3225190c000000000000000000111e2b3844515e6b778486868686868377685e5246392d1b110600000000000000000000000000000000000000000000010c161f2a343e45515c676e7b8586868686868686867a6e6154473b2e21140800020d19242e3740474b4d53535353535353534d4c4740382f241a0f0600000000000000000000000000000000020a11171c1f201f1c222f3c4955626f7c86868686867f7265594c3f322619191d1313100c07000000000000000000000000000000010b151f2a333c4246485253535353535353535346413b32291e1408000004111d2a36424e59636a6c6c6c6c6c6c6c6c6260584e43372b1f13060000020e1a26313c4754606a7581868686867f7265584c3f3225190c000c1926323f4c5965727f868686868686868276695c504336291d10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141c222830383f444e545c606a6f77797979797872685c5043372a1d11040000000000000000000000000008131e28313e46535f696e7979797979786d675d5145392c2013060000000000000000000000000006121f2c3844505c667679797979797979797979757065564d41362a1e1105000000000000000000000000000000000f1b27323c4a57626d727979797979797979797976665c5044382c1f12060000000713202c3945525d686d7879797979797979776d675d51483e33291e150a0000000000000000000007121d27313c44505b666c7679797979797979786e695f53463a2d21140700000000000000000000000009141f29323f49525c636b707578797875706c656059534d4544505c6674797979726d62564a3e3124180b00000000000000000000000000000000000000000009141f29323f49525c636b707578797875706c656059534d4544505c6674797979726d62564a3e3124180b000000000000000000111d2a37434f5c6772777979797979777167564c41362a1e0a000000000000000000000000000000000000000000000000040d18222934404b555f696e78797979797979797976685e5246392d201407000007121c252e353b3f404646464646464646413f3c362f261d120800000000000000000000000000000000000000060b0f12131215222e3b4754606a767979797979726d63574a3e3125180c11070604000000000000000000000000000000000000030d18212a31373a3b4546464646464646463b3936302920170d020000010e1a26313d4751595e5f6060606060606055544e463c32271b0f0300000009151f2b38434e58656f7579797979726d62564a3e3125180b000b1825313e4a57626d72797979797979797670665a4e4235291c0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171e262e343c424a51585f626a6c6c6c6c6b6860564b3f33271b0f0200000000000000000000000000010c161f2a36424d575f616c6c6c6c6c6b605d554b4035291d11040000000000000000000000000003101c28343f4a545c6c6c6c6c6c6c6c6c6c6c6c69655e54443b3025190e02000000000000000000000000000000000a15202e3a46515b62656c6c6c6c6c6c6c6c6c6c6c5c544a3f34281c100300000004111d2935414c565d606b6c6c6c6c6c6c6c6b605d554b40362c21170c0300000000000000000000010b151f28333f4a545b60696c6c6c6c6c6c6c6c615f574d42362a1e1205000000000000000000000000020d17202d37404952596063686b6c6b6864605b534f47423c3f4a545c6a6c6c6c65625b51463a2e221509000000000000000000000000000000000000000000020d17202d37404952596063686b6c6b6864605b534f47423c3f4a545c6a6c6c6c65625b51463a2e2215090000000000000000000f1b27333f4b5660676b6c6c6c6c6c6a675f55443a3025190d00000000000000000000000000000000000000000000000000060f18232f39434d575f616c6c6c6c6c6c6c6c6c6c5e564c41362a1e11050000000a131c242a2f323339393939393939393433302b241d140b0000000000000000000000000000000000000000000003060606131f2b37434e5860626c6c6c6c6c65635b51463a2e2216090400000000000000000000000000000000000000000000060f181f262b2d2e3939393939393939392e2d2a251e170e05000000000915202b353f474e5253535353535353534947433c342b20150a00000000030f1b27323d46535d65686c6c6c6c65625b51463a2e221609000916222e3a46515b62656c6c6c6c6c6c6c69665e54493e3226190d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c141c2328303940444e54555d606060605e5c564e443a2f23170b000000000000000000000000000000040d1a26313b454d53555f606060605e53514b433a2f24180d0100000000000000000000000000000c17232e38424a505f606060606060606060605c5a544c4232291f1408000000000000000000000000000000000004121e29353f49515759606060606060606060605f504a42382e23170c00000000010d1924303a444c52545e606060606060605e53514b433a2f241a0f06000000000000000000000000030d17222d38424a50535d606060606060605f55534d453b31261a0e0200000000000000000000000000050e1b252e3740474f54565c5f5f5e5c57535049413d373138424a50535f6060585651493f34291e120600000000000000000000000000000000000000000000050e1b252e3740474f54565c5f5f5e5c57535049413d373138424a50535f6060585651493f34291e12060000000000000000000b17232e3a444e565c5e60606060605d5b554d4332291e1308000000000000000000000000000000000000000000000000000007121d27313c454d53555f60606060606060605f524c443b3025190e02000000010a12191e2325262d2d2d2d2d2d2d2d2726241f19130b0200000000000000000000000000000000000000000000000000030f1b27323c464e54556060606060595751493f352a1e1206000000000000000000000000000000000000000000000000060e141a1e21222c2d2d2d2d2d2d2d2d21201e19140d050000000000040f19242d353d424546464646464646463c3b37322b22190f0400000000000a16202b34414b53595b60606060585651493f34291e12060006121e29353f49515759606060606060605c5a544c42382d21160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171e272e343c434749515353535351504b443c32281d12070000000000000000000000000000000009141f29333b4246485253535353514745403a31281d130700000000000000000000000000000006111c2630383f4453535353535353535353534f4d4942393020170d020000000000000000000000000000000000010d18232d373f464a4c5353535353535353535353443f3830261c1106000000000008131e28323a4145475153535353535353514745403a31281d1208000000000000000000000000000006111c262f383f44465053535353535353524846423b33291f140900000000000000000000000000000009131c252e353d4448494f5253514f4a46443f382f2b2630383f44465353534c4a463f372d23180d01000000000000000000000000000000000000000000000009131c252e353d4448494f5253514f4a46443f382f2b2630383f44465353534c4a463f372d23180d0100000000000000000006121d28323c444b4f515353535353504f4a433b3120170d020000000000000000000000000000000000000000000000000000010b151f2a333c4246485253535353535353535346413b32291e1408000000000000070d1316191a20202020202020201a1a17130e08010000000000000000000000000000000000000000000000000000000a15202b343c43474953535353534c4a463f372d23180d010000000000000000000000000000000000000000000000000003090e1214151f20202020202020201414110e08020000000000000008121b242b31363839393939393939392f2e2b2720191007000000000000040f19222f3941484d4e535353534c4a463f372d23180d0100010d18232d373f464a4c53535353535353504e49423a31261c1005000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c151c232832373b3c444646464645433f3a322a20160c0100000000000000000000000000000000030d17212931363a3b4646464646453a39352f281f160c01000000000000000000000000000000000a151e262e3438464646464646464646464642413d3730271e0e050000000000000000000000000000000000000007111b252d353a3e3f464646464646464646464638342e261e150a000000000000020c1620283035393a4546464646464646443a39352f281f160c000000000000000000000000000000000a141d262d3338394346464646464646453b3a36312921170d03000000000000000000000000000000010a131c232b33383c3d42454645423d3937332d261d1e262e34383a4646463f3e3a342d251b1106000000000000000000000000000000000000000000000000010a131c232b33383c3d42454645423d3937332d261d1e262e34383a4646463f3e3a342d251b110600000000000000000000010c16202a323a3f4344464646464644423e3931291f0e0500000000000000000000000000000000000000000000000000000000030d18212a31373a3b4546464646464646463b3936302920170d020000000000000002070a0c0d13131313131313130e0d0b07030000000000000000000000000000000000000000000000000000000000040e19222b32373b3c46464646463f3e3a352d251c11070000000000000000000000000000000000000000000000000000000002050708121313131313131313080705020000000000000000000009121920262a2c2c2d2d2d2d2d2d2d22221f1b150f07000000000000000007101d272f373d4042464646463f3e3a342d251b110700000007111b252d353a3e3f4646464646464643423e3831281f150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b121820262b2e2f37393939393837332f2820180f05000000000000000000000000000000000000060f171f262a2d2e3939393939382d2c29241d160d040000000000000000000000000000000000030c151c23282c39393939393939393939393635312c261e150c0000000000000000000000000000000000000000000a131b23292e313239393939393939393939392c28231c150c0300000000000000040e161e24292c2d3839393939393939382d2c29241d160d0400000000000000000000000000000000020b141c22282b2d3639393939393939392e2d2a261f170f060000000000000000000000000000000000010a111921272c2f303538393835312d2b27221b14151c23282c2d39393932312e29231b13090000000000000000000000000000000000000000000000000000010a111921272c2f303538393835312d2b27221b14151c23282c2d39393932312e29231b1309000000000000000000000000040e1820282e33373839393939393736332e271f170d000000000000000000000000000000000000000000000000000000000000060f181f262b2d2e3939393939393939392e2d2a251e170e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101920272b2e2f393939393932312e2a231c130a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f151a1d1f20202020202020201615130f0a04000000000000000000000b151d252c3134353939393932312e29231b130900000000000a131b23292e3132393939393939393635322d261f160d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c151b1f22222a2d2d2d2d2b2a27231d160f060000000000000000000000000000000000000000060d141a1e21222c2d2d2d2d2b20201d18130c0400000000000000000000000000000000000000030a11171c1f2d2d2d2d2d2d2d2d2d2d2d292825211b140c03000000000000000000000000000000000000000000010a11181e2225262d2d2d2d2d2d2d2d2d2d2d1f1c17110a03000000000000000000040c13191d20212b2d2d2d2d2d2d2d2b20201d18130c04000000000000000000000000000000000000020a11171c1f202a2d2d2d2d2d2d2d2c22211e1a140d060000000000000000000000000000000000000000070f161c202223292c2c2b2924201f1b17110a0a11171c1f202c2d2d2524221e1811090100000000000000000000000000000000000000000000000000000000070f161c202223292c2c2b2924201f1b17110a0a11171c1f202c2d2d2524221e1811090100000000000000000000000000060e161d23272a2b2d2d2d2d2d2a2926221c150d0500000000000000000000000000000000000000000000000000000000000000060e141a1e21222c2d2d2d2d2d2d2d2d21201e19140d0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e151b1f22222d2d2d2d2d2625221e18110a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004090e1112131313131313131309080603000000000000000000000000030b131a202427282d2d2d2d2525221e181109010000000000010a11181e2225262d2d2d2d2d2d2d292926211c150d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f1315161e202020201e1d1b17120c050000000000000000000000000000000000000000000003090e1214151f202020201e1413110d070100000000000000000000000000000000000000000000060c101220202020202020202020201c1b1915100902000000000000000000000000000000000000000000000000070d12161819202020202020202020202012100c0600000000000000000000000002080d1113141e202020202020201e1413110d0701000000000000000000000000000000000000000000060b0f12131d202020202020201f1514120e090300000000000000000000000000000000000000000000050b101316161c1f201e1c1713120f0b060000060c101213202020191815120d0600000000000000000000000000000000000000000000000000000000000000050b101316161c1f201e1c1713120f0b060000060c101213202020191815120d0600000000000000000000000000000000040c12171b1d1e20202020201d1d1a16110b0300000000000000000000000000000000000000000000000000000000000000000003090e1214151f20202020202020201414110e0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f1315162020202020191816120d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001090f14181b1b20202020191816120d07000000000000000000070d12161819202020202020201d1c1916100a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003060809111313131312110f0b07010000000000000000000000000000000000000000000000000002050708131313131312070604010000000000000000000000000000000000000000000000000000030613131313131313131313130f0f0d09040000000000000000000000000000000000000000000000000000000106090b0c13131313131313131313130603000000000000000000000000000000000104070712131313131313131107060401000000000000000000000000000000000000000000000000000306061013131313131313120807050200000000000000000000000000000000000000000000000000000407090a0f1213120f0a0605030000000000000306071313130c0b090601000000000000000000000000000000000000000000000000000000000000000000000407090a0f1213120f0a0605030000000000000306071313130c0b09060100000000000000000000000000000000000001060b0f1111131313131311100e0a06000000000000000000000000000000000000000000000000000000000000000000000000000205070812131313131313131308070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306080913131313130c0c09060100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004080c0e0f131313130c0b09060100000000000000000000000106090b0c13131313131313100f0d0a05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - m_StreamData: - offset: 0 - size: 0 - path: diff --git a/Samples~/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset.meta b/Samples~/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset.meta deleted file mode 100755 index 66e69d18..00000000 --- a/Samples~/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8f586378b4e144a9851e7b34d9b748ee -timeCreated: 1484171803 -licenseType: Pro -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Resources/LineBreaking Following Characters.txt b/Samples~/TextMesh Pro/Resources/LineBreaking Following Characters.txt deleted file mode 100755 index a52cc38f..00000000 --- a/Samples~/TextMesh Pro/Resources/LineBreaking Following Characters.txt +++ /dev/null @@ -1 +0,0 @@ -)]}〕〉》」』】〙〗〟’”⦆»ヽヾーァィゥェォッャュョヮヵヶぁぃぅぇぉっゃゅょゎゕゖㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇺㇻㇼㇽㇾㇿ々〻‐゠–〜?!‼⁇⁈⁉・、%,.:;。!?]):;=}¢°"†‡℃〆%,. \ No newline at end of file diff --git a/Samples~/TextMesh Pro/Resources/LineBreaking Following Characters.txt.meta b/Samples~/TextMesh Pro/Resources/LineBreaking Following Characters.txt.meta deleted file mode 100755 index 73ed6604..00000000 --- a/Samples~/TextMesh Pro/Resources/LineBreaking Following Characters.txt.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: fade42e8bc714b018fac513c043d323b -timeCreated: 1425440388 -licenseType: Store -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Resources/LineBreaking Leading Characters.txt b/Samples~/TextMesh Pro/Resources/LineBreaking Leading Characters.txt deleted file mode 100755 index ccbb4aed..00000000 --- a/Samples~/TextMesh Pro/Resources/LineBreaking Leading Characters.txt +++ /dev/null @@ -1 +0,0 @@ -([{〔〈《「『【〘〖〝‘“⦅«$—…‥〳〴〵\[({£¥"々〇$¥₩ # \ No newline at end of file diff --git a/Samples~/TextMesh Pro/Resources/LineBreaking Leading Characters.txt.meta b/Samples~/TextMesh Pro/Resources/LineBreaking Leading Characters.txt.meta deleted file mode 100755 index cc684b30..00000000 --- a/Samples~/TextMesh Pro/Resources/LineBreaking Leading Characters.txt.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d82c1b31c7e74239bff1220585707d2b -timeCreated: 1425440388 -licenseType: Store -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Resources/Sprite Assets.meta b/Samples~/TextMesh Pro/Resources/Sprite Assets.meta deleted file mode 100755 index 5171f1b6..00000000 --- a/Samples~/TextMesh Pro/Resources/Sprite Assets.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 512a49d95c0c4332bdd98131869c23c9 -folderAsset: yes -timeCreated: 1441876896 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset b/Samples~/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset deleted file mode 100755 index 98e6d277..00000000 --- a/Samples~/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset +++ /dev/null @@ -1,659 +0,0 @@ -%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: [] diff --git a/Samples~/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset.meta b/Samples~/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset.meta deleted file mode 100755 index c7ac83f4..00000000 --- a/Samples~/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: c41005c129ba4d66911b75229fd70b45 -timeCreated: 1480316912 -licenseType: Pro -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Resources/Style Sheets.meta b/Samples~/TextMesh Pro/Resources/Style Sheets.meta deleted file mode 100755 index 4958550d..00000000 --- a/Samples~/TextMesh Pro/Resources/Style Sheets.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 4aecb92fff08436c8303b10eab8da368 -folderAsset: yes -timeCreated: 1441876950 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset b/Samples~/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset deleted file mode 100755 index ceb609b2..00000000 --- a/Samples~/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset +++ /dev/null @@ -1,68 +0,0 @@ -%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: <#40ff80>* - m_ClosingDefinition: '*' - m_OpeningTagArray: 3c00000073000000690000007a000000650000003d00000032000000650000006d0000003e0000003c000000620000003e0000003c000000230000003400000030000000660000006600000038000000300000003e0000002a000000 - m_ClosingTagArray: 2a0000003c0000002f00000073000000690000007a000000650000003e0000003c0000002f000000620000003e0000003c0000002f000000630000006f0000006c0000006f000000720000003e000000 - - m_Name: Quote - m_HashCode: 92254330 - m_OpeningDefinition: - m_ClosingDefinition: - m_OpeningTagArray: 3c000000690000003e0000003c00000073000000690000007a000000650000003d0000003700000035000000250000003e0000003c0000006d000000610000007200000067000000690000006e0000003d0000003100000030000000250000003e000000 - m_ClosingTagArray: 3c0000002f000000690000003e0000003c0000002f00000073000000690000007a000000650000003e0000003c0000002f00000077000000690000006400000074000000680000003e0000003c0000002f0000006d000000610000007200000067000000690000006e0000003e000000 - - m_Name: Link - m_HashCode: 2687968 - m_OpeningDefinition: <#40a0ff> - m_ClosingDefinition: - m_OpeningTagArray: 3c000000750000003e0000003c000000230000003400000030000000610000003000000066000000660000003e0000003c0000006c000000690000006e0000006b0000003d0000002200000049000000440000005f0000003000000031000000220000003e000000 - m_ClosingTagArray: 3c0000002f000000750000003e0000003c0000002f000000630000006f0000006c0000006f000000720000003e0000003c0000002f0000006c000000690000006e0000006b0000003e000000 - - m_Name: Title - m_HashCode: 98732960 - m_OpeningDefinition: - m_ClosingDefinition: - m_OpeningTagArray: 3c00000073000000690000007a000000650000003d000000310000003200000035000000250000003e0000003c000000620000003e0000003c000000610000006c00000069000000670000006e0000003d00000063000000650000006e0000007400000065000000720000003e000000 - m_ClosingTagArray: 3c0000002f00000073000000690000007a000000650000003e0000003c0000002f000000620000003e0000003c0000002f000000610000006c00000069000000670000006e0000003e000000 - - m_Name: H2 - m_HashCode: 2426 - m_OpeningDefinition: <#4080FF> - m_ClosingDefinition: - m_OpeningTagArray: 3c00000073000000690000007a000000650000003d000000310000002e00000035000000650000006d0000003e0000003c000000620000003e0000003c000000230000003400000030000000380000003000000046000000460000003e000000 - m_ClosingTagArray: 3c0000002f00000073000000690000007a000000650000003e0000003c0000002f000000620000003e0000003c0000002f000000630000006f0000006c0000006f000000720000003e000000 - - m_Name: H3 - m_HashCode: 2427 - m_OpeningDefinition: <#FF8040> - m_ClosingDefinition: - m_OpeningTagArray: 3c00000073000000690000007a000000650000003d000000310000002e0000003100000037000000650000006d0000003e0000003c000000620000003e0000003c000000230000004600000046000000380000003000000034000000300000003e000000 - m_ClosingTagArray: 3c0000002f00000073000000690000007a000000650000003e0000003c0000002f000000620000003e0000003c0000002f000000630000006f0000006c0000006f000000720000003e000000 - - m_Name: C1 - m_HashCode: 2194 - m_OpeningDefinition: - m_ClosingDefinition: - m_OpeningTagArray: 3c000000630000006f0000006c0000006f000000720000003d000000230000006600000066000000660000006600000034000000300000003e000000 - m_ClosingTagArray: 3c0000002f000000630000006f0000006c0000006f000000720000003e000000 - - m_Name: C2 - m_HashCode: 2193 - m_OpeningDefinition: - m_ClosingDefinition: - m_OpeningTagArray: 3c000000630000006f0000006c0000006f000000720000003d000000230000006600000066000000340000003000000046000000460000003e0000003c00000073000000690000007a000000650000003d000000310000003200000035000000250000003e000000 - m_ClosingTagArray: 3c0000002f000000630000006f0000006c0000006f000000720000003e0000003c0000002f00000073000000690000007a000000650000003e000000 - - m_Name: C3 - m_HashCode: 2192 - m_OpeningDefinition: - m_ClosingDefinition: - m_OpeningTagArray: 3c000000630000006f0000006c0000006f000000720000003d000000230000003800000030000000410000003000000046000000460000003e0000003c000000620000003e000000 - m_ClosingTagArray: 3c0000002f000000630000006f0000006c0000006f000000720000003e0000003c0000002f000000620000003e000000 diff --git a/Samples~/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset.meta b/Samples~/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset.meta deleted file mode 100755 index 95fd96ed..00000000 --- a/Samples~/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f952c082cb03451daed3ee968ac6c63e -timeCreated: 1432805430 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Resources/TMP Settings.asset b/Samples~/TextMesh Pro/Resources/TMP Settings.asset deleted file mode 100755 index c09a92f1..00000000 --- a/Samples~/TextMesh Pro/Resources/TMP Settings.asset +++ /dev/null @@ -1,46 +0,0 @@ -%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 diff --git a/Samples~/TextMesh Pro/Resources/TMP Settings.asset.meta b/Samples~/TextMesh Pro/Resources/TMP Settings.asset.meta deleted file mode 100755 index 32db3845..00000000 --- a/Samples~/TextMesh Pro/Resources/TMP Settings.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3f5b5dff67a942289a9defa416b206f3 -timeCreated: 1436653997 -licenseType: Pro -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Shaders.meta b/Samples~/TextMesh Pro/Shaders.meta deleted file mode 100755 index 29a90a6a..00000000 --- a/Samples~/TextMesh Pro/Shaders.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e9f693669af91aa45ad615fc681ed29f -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader b/Samples~/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader deleted file mode 100755 index bab2b2c6..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader +++ /dev/null @@ -1,143 +0,0 @@ -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" -} diff --git a/Samples~/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader.meta b/Samples~/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader.meta deleted file mode 100755 index 0a416c85..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 48bb5f55d8670e349b6e614913f9d910 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader b/Samples~/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader deleted file mode 100755 index 006a271e..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader +++ /dev/null @@ -1,145 +0,0 @@ -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" -} diff --git a/Samples~/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader.meta b/Samples~/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader.meta deleted file mode 100755 index d5fb125e..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 1e3b057af24249748ff873be7fafee47 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Shaders/TMP_Bitmap.shader b/Samples~/TextMesh Pro/Shaders/TMP_Bitmap.shader deleted file mode 100755 index 8ce4937a..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_Bitmap.shader +++ /dev/null @@ -1,143 +0,0 @@ -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" -} diff --git a/Samples~/TextMesh Pro/Shaders/TMP_Bitmap.shader.meta b/Samples~/TextMesh Pro/Shaders/TMP_Bitmap.shader.meta deleted file mode 100755 index 7eb1870f..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_Bitmap.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 128e987d567d4e2c824d754223b3f3b0 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Shaders/TMP_SDF Overlay.shader b/Samples~/TextMesh Pro/Shaders/TMP_SDF Overlay.shader deleted file mode 100755 index c50c5930..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_SDF Overlay.shader +++ /dev/null @@ -1,317 +0,0 @@ -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" -} diff --git a/Samples~/TextMesh Pro/Shaders/TMP_SDF Overlay.shader.meta b/Samples~/TextMesh Pro/Shaders/TMP_SDF Overlay.shader.meta deleted file mode 100755 index 56284e9f..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_SDF Overlay.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: dd89cf5b9246416f84610a006f916af7 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Shaders/TMP_SDF SSD.shader b/Samples~/TextMesh Pro/Shaders/TMP_SDF SSD.shader deleted file mode 100755 index ed48574d..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_SDF SSD.shader +++ /dev/null @@ -1,310 +0,0 @@ -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" -} diff --git a/Samples~/TextMesh Pro/Shaders/TMP_SDF SSD.shader.meta b/Samples~/TextMesh Pro/Shaders/TMP_SDF SSD.shader.meta deleted file mode 100755 index 08cd8ae5..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_SDF SSD.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 14eb328de4b8eb245bb7cea29e4ac00b -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader b/Samples~/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader deleted file mode 100755 index 7019aaf4..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader +++ /dev/null @@ -1,247 +0,0 @@ -// 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" -} diff --git a/Samples~/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader.meta b/Samples~/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader.meta deleted file mode 100755 index 3cbdbbb4..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: bc1ede39bf3643ee8e493720e4259791 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader b/Samples~/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader deleted file mode 100755 index ce82bed5..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader +++ /dev/null @@ -1,240 +0,0 @@ -// 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" -} diff --git a/Samples~/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader.meta b/Samples~/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader.meta deleted file mode 100755 index e6b149e0..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: a02a7d8c237544f1962732b55a9aebf1 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader b/Samples~/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader deleted file mode 100755 index df4d5b0b..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader +++ /dev/null @@ -1,106 +0,0 @@ -// 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" -} diff --git a/Samples~/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader.meta b/Samples~/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader.meta deleted file mode 100755 index 9b84c13d..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: c8d12adcee749c344b8117cf7c7eb912 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader b/Samples~/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader deleted file mode 100755 index d3f5866c..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader +++ /dev/null @@ -1,240 +0,0 @@ -// 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" -} diff --git a/Samples~/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader.meta b/Samples~/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader.meta deleted file mode 100755 index 2ac6e76c..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: fe393ace9b354375a9cb14cdbbc28be4 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader b/Samples~/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader deleted file mode 100755 index be764aeb..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader +++ /dev/null @@ -1,138 +0,0 @@ -// 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" -} diff --git a/Samples~/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader.meta b/Samples~/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader.meta deleted file mode 100755 index bff8b7aa..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 85187c2149c549c5b33f0cdb02836b17 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Shaders/TMP_SDF-Surface.shader b/Samples~/TextMesh Pro/Shaders/TMP_SDF-Surface.shader deleted file mode 100755 index bcb2bb27..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_SDF-Surface.shader +++ /dev/null @@ -1,158 +0,0 @@ -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" -} - diff --git a/Samples~/TextMesh Pro/Shaders/TMP_SDF-Surface.shader.meta b/Samples~/TextMesh Pro/Shaders/TMP_SDF-Surface.shader.meta deleted file mode 100755 index 26e814c2..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_SDF-Surface.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: f7ada0af4f174f0694ca6a487b8f543d -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Shaders/TMP_SDF.shader b/Samples~/TextMesh Pro/Shaders/TMP_SDF.shader deleted file mode 100755 index 011ee199..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_SDF.shader +++ /dev/null @@ -1,317 +0,0 @@ -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" -} diff --git a/Samples~/TextMesh Pro/Shaders/TMP_SDF.shader.meta b/Samples~/TextMesh Pro/Shaders/TMP_SDF.shader.meta deleted file mode 100755 index e1cf3f38..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_SDF.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 68e6db2ebdc24f95958faec2be5558d6 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Shaders/TMP_Sprite.shader b/Samples~/TextMesh Pro/Shaders/TMP_Sprite.shader deleted file mode 100755 index e8283a78..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_Sprite.shader +++ /dev/null @@ -1,116 +0,0 @@ -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 - } - } -} diff --git a/Samples~/TextMesh Pro/Shaders/TMP_Sprite.shader.meta b/Samples~/TextMesh Pro/Shaders/TMP_Sprite.shader.meta deleted file mode 100755 index 50ba195e..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMP_Sprite.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: cf81c85f95fe47e1a27f6ae460cf182c -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Shaders/TMPro.cginc b/Samples~/TextMesh Pro/Shaders/TMPro.cginc deleted file mode 100755 index 58981304..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMPro.cginc +++ /dev/null @@ -1,84 +0,0 @@ -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); -} - diff --git a/Samples~/TextMesh Pro/Shaders/TMPro.cginc.meta b/Samples~/TextMesh Pro/Shaders/TMPro.cginc.meta deleted file mode 100755 index 0d6eb56c..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMPro.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 407bc68d299748449bbf7f48ee690f8d -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Shaders/TMPro_Mobile.cginc b/Samples~/TextMesh Pro/Shaders/TMPro_Mobile.cginc deleted file mode 100755 index 5969fec1..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMPro_Mobile.cginc +++ /dev/null @@ -1,157 +0,0 @@ -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; -} diff --git a/Samples~/TextMesh Pro/Shaders/TMPro_Mobile.cginc.meta b/Samples~/TextMesh Pro/Shaders/TMPro_Mobile.cginc.meta deleted file mode 100755 index 4415e507..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMPro_Mobile.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: c334973cef89a9840b0b0c507e0377ab -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Shaders/TMPro_Properties.cginc b/Samples~/TextMesh Pro/Shaders/TMPro_Properties.cginc deleted file mode 100755 index 2e962588..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMPro_Properties.cginc +++ /dev/null @@ -1,85 +0,0 @@ -// 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; diff --git a/Samples~/TextMesh Pro/Shaders/TMPro_Properties.cginc.meta b/Samples~/TextMesh Pro/Shaders/TMPro_Properties.cginc.meta deleted file mode 100755 index 7b37f2f1..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMPro_Properties.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 3997e2241185407d80309a82f9148466 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Shaders/TMPro_Surface.cginc b/Samples~/TextMesh Pro/Shaders/TMPro_Surface.cginc deleted file mode 100755 index 622ae875..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMPro_Surface.cginc +++ /dev/null @@ -1,101 +0,0 @@ -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; -} diff --git a/Samples~/TextMesh Pro/Shaders/TMPro_Surface.cginc.meta b/Samples~/TextMesh Pro/Shaders/TMPro_Surface.cginc.meta deleted file mode 100755 index 41ef4b10..00000000 --- a/Samples~/TextMesh Pro/Shaders/TMPro_Surface.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: d930090c0cd643c7b55f19a38538c162 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Sprites.meta b/Samples~/TextMesh Pro/Sprites.meta deleted file mode 100755 index 8b699e5f..00000000 --- a/Samples~/TextMesh Pro/Sprites.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d0603b6d5186471b96c778c3949c7ce2 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Sprites/EmojiOne Attribution.txt b/Samples~/TextMesh Pro/Sprites/EmojiOne Attribution.txt deleted file mode 100755 index 10c4be3a..00000000 --- a/Samples~/TextMesh Pro/Sprites/EmojiOne Attribution.txt +++ /dev/null @@ -1,3 +0,0 @@ -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. \ No newline at end of file diff --git a/Samples~/TextMesh Pro/Sprites/EmojiOne Attribution.txt.meta b/Samples~/TextMesh Pro/Sprites/EmojiOne Attribution.txt.meta deleted file mode 100755 index 0d30e653..00000000 --- a/Samples~/TextMesh Pro/Sprites/EmojiOne Attribution.txt.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 381dcb09d5029d14897e55f98031fca5 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Sprites/EmojiOne.json b/Samples~/TextMesh Pro/Sprites/EmojiOne.json deleted file mode 100755 index 16c800d5..00000000 --- a/Samples~/TextMesh Pro/Sprites/EmojiOne.json +++ /dev/null @@ -1,156 +0,0 @@ -{"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$" -} -} diff --git a/Samples~/TextMesh Pro/Sprites/EmojiOne.json.meta b/Samples~/TextMesh Pro/Sprites/EmojiOne.json.meta deleted file mode 100755 index 762cf15c..00000000 --- a/Samples~/TextMesh Pro/Sprites/EmojiOne.json.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8f05276190cf498a8153f6cbe761d4e6 -timeCreated: 1480316860 -licenseType: Pro -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/TextMesh Pro/Sprites/EmojiOne.png b/Samples~/TextMesh Pro/Sprites/EmojiOne.png deleted file mode 100755 index c0de66d0..00000000 Binary files a/Samples~/TextMesh Pro/Sprites/EmojiOne.png and /dev/null differ diff --git a/Samples~/TextMesh Pro/Sprites/EmojiOne.png.meta b/Samples~/TextMesh Pro/Sprites/EmojiOne.png.meta deleted file mode 100755 index c9fa1a7d..00000000 --- a/Samples~/TextMesh Pro/Sprites/EmojiOne.png.meta +++ /dev/null @@ -1,431 +0,0 @@ -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: diff --git a/Samples~/Tutorials.meta b/Samples~/Tutorials.meta new file mode 100644 index 00000000..928832f9 --- /dev/null +++ b/Samples~/Tutorials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c9f2d6ef70abc463ebc7991740a7a2da +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/Common.meta b/Samples~/Tutorials/Common.meta new file mode 100644 index 00000000..ed7e1b36 --- /dev/null +++ b/Samples~/Tutorials/Common.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 21a1eb3ec8c64c74aa9f49e60a88cdd0 +timeCreated: 1699872417 \ No newline at end of file diff --git a/Samples~/Tutorials/Common/Prefabs.meta b/Samples~/Tutorials/Common/Prefabs.meta new file mode 100644 index 00000000..bf89a498 --- /dev/null +++ b/Samples~/Tutorials/Common/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 208a6534ac4e7457cbad4a4213812385 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/Common/Prefabs/BackButton Variant.prefab b/Samples~/Tutorials/Common/Prefabs/BackButton Variant.prefab new file mode 100644 index 00000000..2537876a --- /dev/null +++ b/Samples~/Tutorials/Common/Prefabs/BackButton Variant.prefab @@ -0,0 +1,180 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &2077889055688358992 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Name + value: BackButton Variant + objectReference: {fileID: 0} + - target: {fileID: 1318710709471227853, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: e45f8efa737754a9ba34ae95cccf6c0a, type: 3} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 6989715253502653982} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: ChangeToScene + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName + value: TezosSDK.SceneSwitcher, com.trilitech.tezos-unity-sdk.examples + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_text + value: Back + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_margin.x + value: 52.461063 + objectReference: {fileID: 0} + - target: {fileID: 5147201652801728400, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_IgnoreLayout + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5147201652801728400, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_PreferredWidth + value: 128.6 + objectReference: {fileID: 0} + - target: {fileID: 5147201652801728400, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_PreferredHeight + value: 45 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.x + value: 128.6 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.y + value: 45 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.x + value: 80 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.y + value: 53 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7079743632293708895, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.x + value: 135 + objectReference: {fileID: 0} + - target: {fileID: 7079743632293708895, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.y + value: 96 + objectReference: {fileID: 0} + - target: {fileID: 7079743632293708895, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalScale.x + value: 0.21348758 + objectReference: {fileID: 0} + - target: {fileID: 7079743632293708895, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalScale.y + value: 0.21015184 + objectReference: {fileID: 0} + - target: {fileID: 7079743632293708895, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalScale.z + value: 0.26685947 + objectReference: {fileID: 0} + - target: {fileID: 7079743632293708895, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.x + value: 16 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + insertIndex: -1 + addedObject: {fileID: 6989715253502653982} + m_SourcePrefab: {fileID: 100100000, guid: 94498300266eb49a892996f452021967, type: 3} +--- !u!1 &1164501840344136735 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + m_PrefabInstance: {fileID: 2077889055688358992} + m_PrefabAsset: {fileID: 0} +--- !u!114 &6989715253502653982 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1164501840344136735} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 842e51e8a7e934b0893788a3450063d0, type: 3} + m_Name: + m_EditorClassIdentifier: + sceneNameToLoad: _Tutorials diff --git a/Samples~/Tutorials/Common/Prefabs/BackButton Variant.prefab.meta b/Samples~/Tutorials/Common/Prefabs/BackButton Variant.prefab.meta new file mode 100644 index 00000000..e5a82994 --- /dev/null +++ b/Samples~/Tutorials/Common/Prefabs/BackButton Variant.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1f2b41cbbfea5425799913991573c5b0 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/Common/Prefabs/Button.prefab b/Samples~/Tutorials/Common/Prefabs/Button.prefab new file mode 100644 index 00000000..9b7819c0 --- /dev/null +++ b/Samples~/Tutorials/Common/Prefabs/Button.prefab @@ -0,0 +1,366 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &936468721780244559 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6401922062934067754} + - component: {fileID: 5147201652801728400} + - component: {fileID: 8965144968412777379} + - component: {fileID: 7732450146962834345} + - component: {fileID: 1540125019509689424} + m_Layer: 5 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6401922062934067754 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 936468721780244559} + 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: 2005557680631230608} + - {fileID: 7079743632293708895} + 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: 70} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &5147201652801728400 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 936468721780244559} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 300 + m_PreferredHeight: 65 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!222 &8965144968412777379 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 936468721780244559} + m_CullTransparentMesh: 1 +--- !u!114 &7732450146962834345 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 936468721780244559} + 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: f8f8f8eb4d49f47a0b0ae6d9b46fa215, type: 3} + 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!114 &1540125019509689424 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 936468721780244559} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, 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.8207547, g: 0.8207547, b: 0.8207547, a: 1} + m_PressedColor: {r: 0.6415094, g: 0.6415094, b: 0.6415094, 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: 1 + m_TargetGraphic: {fileID: 7732450146962834345} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 0} + m_TargetAssemblyTypeName: TezosSDK.Contract.Scripts.DeployContract, com.trilitech.tezos-unity-sdk.examples + m_MethodName: HandleDeploy + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &2389523062456160829 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2005557680631230608} + - component: {fileID: 4684327008696188159} + - component: {fileID: 3971503951144205198} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2005557680631230608 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2389523062456160829} + 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: 6401922062934067754} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4684327008696188159 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2389523062456160829} + m_CullTransparentMesh: 1 +--- !u!114 &3971503951144205198 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2389523062456160829} + 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: Button Text + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, 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: 28 + m_fontSizeBase: 28 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + 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: 73.27911, y: 0, z: 11.504868, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &7621771466054847559 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7079743632293708895} + - component: {fileID: 717909306628368824} + - component: {fileID: 1318710709471227853} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7079743632293708895 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7621771466054847559} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.3182, y: 1.3182, z: 1.3182} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6401922062934067754} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 25, y: 0} + m_SizeDelta: {x: 25, y: 25} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &717909306628368824 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7621771466054847559} + m_CullTransparentMesh: 1 +--- !u!114 &1318710709471227853 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7621771466054847559} + 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: 72e3141756a48445e8c4827ae6f64cb4, 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 diff --git a/Samples~/Tutorials/Common/Prefabs/Button.prefab.meta b/Samples~/Tutorials/Common/Prefabs/Button.prefab.meta new file mode 100644 index 00000000..fbd75647 --- /dev/null +++ b/Samples~/Tutorials/Common/Prefabs/Button.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 94498300266eb49a892996f452021967 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/Common/Prefabs/InputField.prefab b/Samples~/Tutorials/Common/Prefabs/InputField.prefab new file mode 100644 index 00000000..aae696f1 --- /dev/null +++ b/Samples~/Tutorials/Common/Prefabs/InputField.prefab @@ -0,0 +1,554 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3328893343001565082 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6187166967369713273} + - component: {fileID: 5964153369183590822} + - component: {fileID: 8079072980993121254} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6187166967369713273 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3328893343001565082} + 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: 8646082594808785307} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5964153369183590822 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3328893343001565082} + m_CullTransparentMesh: 1 +--- !u!114 &8079072980993121254 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3328893343001565082} + 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: "...\u200B" + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, 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: 21 + m_fontSizeBase: 21 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 0 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 1 + checkPaddingRequired: 0 + m_isRichText: 0 + 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, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &3364973223500751354 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7846136485843893983} + - component: {fileID: 699256348679428172} + - component: {fileID: 5292472767057669639} + - component: {fileID: 8392114598185720377} + - component: {fileID: 6870115187569944361} + - component: {fileID: 8428563095172928411} + m_Layer: 5 + m_Name: InputField + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7846136485843893983 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3364973223500751354} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.1, y: 1.1, z: 1.1} + m_ConstrainProportionsScale: 1 + m_Children: + - {fileID: 8646082594808785307} + 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.5, y: 0.5} +--- !u!222 &699256348679428172 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3364973223500751354} + m_CullTransparentMesh: 1 +--- !u!114 &5292472767057669639 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3364973223500751354} + 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: dfba7daef3c114d23b1f3d2637bbe1c7, type: 3} + 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!114 &8392114598185720377 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3364973223500751354} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 0 + 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: 1, g: 0.91753155, b: 0.5235849, 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.7830189, g: 0.7830189, b: 0.7830189, a: 1} + 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: 1 + m_TargetGraphic: {fileID: 5292472767057669639} + m_TextViewport: {fileID: 8646082594808785307} + m_TextComponent: {fileID: 8079072980993121254} + m_Placeholder: {fileID: 2550843436257289650} + m_VerticalScrollbar: {fileID: 0} + m_VerticalScrollbarEventHandler: {fileID: 0} + m_LayoutGroup: {fileID: 0} + m_ScrollSensitivity: 1 + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 0 + m_HideMobileInput: 0 + m_HideSoftKeyboard: 0 + m_CharacterValidation: 0 + m_RegexValue: + m_GlobalPointSize: 21 + m_CharacterLimit: 0 + m_OnEndEdit: + m_PersistentCalls: + m_Calls: [] + m_OnSubmit: + m_PersistentCalls: + m_Calls: [] + m_OnSelect: + m_PersistentCalls: + m_Calls: [] + m_OnDeselect: + m_PersistentCalls: + m_Calls: [] + m_OnTextSelection: + m_PersistentCalls: + m_Calls: [] + m_OnEndTextSelection: + m_PersistentCalls: + m_Calls: [] + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_OnTouchScreenKeyboardStatusChanged: + m_PersistentCalls: + m_Calls: [] + m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_CustomCaretColor: 0 + m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} + m_Text: ... + m_CaretBlinkRate: 0.85 + m_CaretWidth: 1 + m_ReadOnly: 1 + m_RichText: 0 + m_GlobalFontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_OnFocusSelectAll: 1 + m_ResetOnDeActivation: 1 + m_RestoreOriginalTextOnEscape: 1 + m_isRichTextEditingAllowed: 0 + m_LineLimit: 0 + m_InputValidator: {fileID: 0} +--- !u!114 &6870115187569944361 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3364973223500751354} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &8428563095172928411 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3364973223500751354} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: 70 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &4034708156529246692 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6235854019241607560} + - component: {fileID: 5684548345411598723} + - component: {fileID: 2550843436257289650} + - component: {fileID: 5613054766911356236} + m_Layer: 5 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6235854019241607560 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4034708156529246692} + 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: 8646082594808785307} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5684548345411598723 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4034708156529246692} + m_CullTransparentMesh: 1 +--- !u!114 &2550843436257289650 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4034708156529246692} + m_Enabled: 0 + 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: --- + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 2150773298 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} + 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: 21 + m_fontSizeBase: 21 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 2 + 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: 0 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 1 + 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, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &5613054766911356236 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4034708156529246692} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 1 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &6884742199544090605 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8646082594808785307} + - component: {fileID: 2445382797224756613} + m_Layer: 5 + m_Name: Text Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8646082594808785307 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6884742199544090605} + 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: 6235854019241607560} + - {fileID: 6187166967369713273} + m_Father: {fileID: 7846136485843893983} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2445382797224756613 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6884742199544090605} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: {x: -8, y: -5, z: -8, w: -5} + m_Softness: {x: 0, y: 0} diff --git a/Samples~/Tutorials/Common/Prefabs/InputField.prefab.meta b/Samples~/Tutorials/Common/Prefabs/InputField.prefab.meta new file mode 100644 index 00000000..df9834b3 --- /dev/null +++ b/Samples~/Tutorials/Common/Prefabs/InputField.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0e307dc14287b4d4b9e5bd605a0a359a +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/Common/Prefabs/SceneTitle.prefab b/Samples~/Tutorials/Common/Prefabs/SceneTitle.prefab new file mode 100644 index 00000000..15cdf16a --- /dev/null +++ b/Samples~/Tutorials/Common/Prefabs/SceneTitle.prefab @@ -0,0 +1,136 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &5567652871723151339 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 530061126213206716} + - component: {fileID: 6824070947073267412} + - component: {fileID: 3235416565408652923} + m_Layer: 5 + m_Name: SceneTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &530061126213206716 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5567652871723151339} + 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} + 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: 1} +--- !u!222 &6824070947073267412 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5567652871723151339} + m_CullTransparentMesh: 1 +--- !u!114 &3235416565408652923 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5567652871723151339} + 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: Contract & Minting + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, 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: 28 + m_fontSizeBase: 28 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + 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, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} diff --git a/Samples~/Tutorials/Common/Prefabs/SceneTitle.prefab.meta b/Samples~/Tutorials/Common/Prefabs/SceneTitle.prefab.meta new file mode 100644 index 00000000..290ab491 --- /dev/null +++ b/Samples~/Tutorials/Common/Prefabs/SceneTitle.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d34ae9cbb074c4b209fd7e798d21b9d7 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/Common/Prefabs/TezosAuthenticator Tutorial Variant.prefab b/Samples~/Tutorials/Common/Prefabs/TezosAuthenticator Tutorial Variant.prefab new file mode 100644 index 00000000..ae3030d1 --- /dev/null +++ b/Samples~/Tutorials/Common/Prefabs/TezosAuthenticator Tutorial Variant.prefab @@ -0,0 +1,247 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &2858323117973673825 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2221511951727132525, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511951727132527, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_margin.x + value: 36.324215 + objectReference: {fileID: 0} + - target: {fileID: 2221511951727132527, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_fontStyle + value: 32 + objectReference: {fileID: 0} + - target: {fileID: 2221511952331529762, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_Name + value: TezosAuthenticator Tutorial Variant + objectReference: {fileID: 0} + - target: {fileID: 2221511952331529762, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2221511952331529785, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 2221511952331529790, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AdditionalShaderChannelsFlag + value: 25 + objectReference: {fileID: 0} + - target: {fileID: 2221511952733773067, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952733773067, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952733773067, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952733773067, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952751916817, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952751916817, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952751916817, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952751916817, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952828651888, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 2221511952828651888, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 2221511952828651888, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 2221511952828651888, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_SizeDelta.x + value: 202 + objectReference: {fileID: 0} + - target: {fileID: 2221511952828651888, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_SizeDelta.y + value: 64 + objectReference: {fileID: 0} + - target: {fileID: 2221511952828651888, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalScale.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 2221511952828651888, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalScale.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 2221511952828651888, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalScale.z + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 2221511952828651888, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2221511952828651888, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchoredPosition.y + value: 64 + objectReference: {fileID: 0} + - target: {fileID: 2221511952828651888, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_ConstrainProportionsScale + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2221511952828651889, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2221511952828651890, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 08973aa58de0c47f685495834972712a, type: 3} + - target: {fileID: 2221511952828651890, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_Color.b + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2221511952828651890, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_Color.g + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2221511952828651890, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_Color.r + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2221511952828651890, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2427647086758772485, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3121589126738375249, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_Name + value: TezosAuthenticator + objectReference: {fileID: 0} + - target: {fileID: 3121589126738375253, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3121589126738375253, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3121589126738375253, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3121589126738375253, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3121589126738375253, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3121589126738375253, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3121589126738375253, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3121589126738375253, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3121589126738375253, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3121589126738375253, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3121589126738375253, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3121589126738375253, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3121589126738375253, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3121589126738375253, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3121589126738375253, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3121589126738375253, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3121589126738375253, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3121589126738375253, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3121589126738375253, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3121589126738375253, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8967202891732467080, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalScale.x + value: 0.53630847 + objectReference: {fileID: 0} + - target: {fileID: 8967202891732467080, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalScale.y + value: 0.53630847 + objectReference: {fileID: 0} + - target: {fileID: 8967202891732467080, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_LocalScale.z + value: 0.53630847 + objectReference: {fileID: 0} + - target: {fileID: 8967202891732467080, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 95be21708b9eb431e99da6aa7b6d7c60, type: 3} diff --git a/Samples~/Tutorials/Common/Prefabs/TezosAuthenticator Tutorial Variant.prefab.meta b/Samples~/Tutorials/Common/Prefabs/TezosAuthenticator Tutorial Variant.prefab.meta new file mode 100644 index 00000000..d914e897 --- /dev/null +++ b/Samples~/Tutorials/Common/Prefabs/TezosAuthenticator Tutorial Variant.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 88403be39bf2846f3a3d1ff42ec2ceb5 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/Common/Prefabs/TezosLogo.prefab b/Samples~/Tutorials/Common/Prefabs/TezosLogo.prefab new file mode 100644 index 00000000..7265156b --- /dev/null +++ b/Samples~/Tutorials/Common/Prefabs/TezosLogo.prefab @@ -0,0 +1,98 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &9006142010399846645 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5977092460330271763} + - component: {fileID: 3041173437388172235} + - component: {fileID: 2808117369757479246} + - component: {fileID: 3322429447680256897} + m_Layer: 5 + m_Name: TezosLogo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5977092460330271763 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9006142010399846645} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.39998302, y: 0.39998302, z: 0.39998302} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: -0.000015258789, y: -15.000122} + m_SizeDelta: {x: 264, y: 93} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &3041173437388172235 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9006142010399846645} + m_CullTransparentMesh: 1 +--- !u!114 &2808117369757479246 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9006142010399846645} + 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: 1910d1f1c8bca4ccdaded51f598034f7, 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!114 &3322429447680256897 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9006142010399846645} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 1 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 diff --git a/Samples~/Tutorials/Common/Prefabs/TezosLogo.prefab.meta b/Samples~/Tutorials/Common/Prefabs/TezosLogo.prefab.meta new file mode 100644 index 00000000..aa5374ee --- /dev/null +++ b/Samples~/Tutorials/Common/Prefabs/TezosLogo.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f8b57b9bad7d046ab86713b0d785a4c6 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/Common/Scripts.meta b/Samples~/Tutorials/Common/Scripts.meta new file mode 100644 index 00000000..5295508f --- /dev/null +++ b/Samples~/Tutorials/Common/Scripts.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2a3e96a748674af390b61712f2c4473e +timeCreated: 1699872436 \ No newline at end of file diff --git a/Samples~/Tutorials/Common/Scripts/ContractInfoUI.cs b/Samples~/Tutorials/Common/Scripts/ContractInfoUI.cs new file mode 100644 index 00000000..15c73b65 --- /dev/null +++ b/Samples~/Tutorials/Common/Scripts/ContractInfoUI.cs @@ -0,0 +1,57 @@ +using TezosSDK.Tezos; +using TMPro; +using UnityEngine; +using UnityEngine.UI; + +namespace TezosSDK.Tutorials.Common +{ + + public class ContractInfoUI : MonoBehaviour + { + [SerializeField] private TMP_InputField addressText; + private const string NOT_CONNECTED_TEXT = "Not connected"; + + private void Start() + { + // Subscribe to wallet events + TezosManager.Instance.EventManager.WalletConnected += OnWalletConnected; + TezosManager.Instance.EventManager.WalletDisconnected += OnWalletDisconnected; + } + + private void OnDestroy() + { + TezosManager.Instance.EventManager.WalletConnected -= OnWalletConnected; + TezosManager.Instance.EventManager.WalletDisconnected -= OnWalletDisconnected; + } + + private void OnWalletConnected(WalletInfo walletInfo) + { + var contractAddress = TezosManager.Instance.Tezos.TokenContract.Address; + addressText.text = string.IsNullOrEmpty(contractAddress) ? "Not deployed" : contractAddress; + UpdateLayout(); + } + + private void OnWalletDisconnected(WalletInfo walletInfo) + { + addressText.text = NOT_CONNECTED_TEXT; + UpdateLayout(); + } + + public void SetAddress(string address) + { + addressText.text = address; + UpdateLayout(); + } + + private void UpdateLayout() // Update layout to fit the new text + { + var layoutGroup = GetComponent(); + + if (layoutGroup != null) + { + LayoutRebuilder.MarkLayoutForRebuild(layoutGroup.GetComponent()); + } + } + } + +} \ No newline at end of file diff --git a/Runtime/Scripts/Tezos/TezosSingleton.cs.meta b/Samples~/Tutorials/Common/Scripts/ContractInfoUI.cs.meta similarity index 83% rename from Runtime/Scripts/Tezos/TezosSingleton.cs.meta rename to Samples~/Tutorials/Common/Scripts/ContractInfoUI.cs.meta index 5f24a61f..e7f1e44b 100644 --- a/Runtime/Scripts/Tezos/TezosSingleton.cs.meta +++ b/Samples~/Tutorials/Common/Scripts/ContractInfoUI.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 972cdfdcf3e1247e2829dc4d7d30ff21 +guid: 538a5dd3c87867141bdf9c44a80d7c4e MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Samples~/Tutorials/Common/Scripts/SceneSwitcher.cs b/Samples~/Tutorials/Common/Scripts/SceneSwitcher.cs new file mode 100644 index 00000000..fd0e9648 --- /dev/null +++ b/Samples~/Tutorials/Common/Scripts/SceneSwitcher.cs @@ -0,0 +1,23 @@ +using TezosSDK.Tezos; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace TezosSDK.Tutorials.Common +{ + + public class SceneSwitcher : MonoBehaviour + { + [SerializeField] private string sceneNameToLoad; + + public void ChangeToScene() + { + if (TezosManager.Instance) + { + TezosManager.Instance.Wallet.Disconnect(); + } + + SceneManager.LoadScene(sceneNameToLoad); + } + } + +} \ No newline at end of file diff --git a/Samples~/Tutorials/Common/Scripts/SceneSwitcher.cs.meta b/Samples~/Tutorials/Common/Scripts/SceneSwitcher.cs.meta new file mode 100644 index 00000000..16ec8b8d --- /dev/null +++ b/Samples~/Tutorials/Common/Scripts/SceneSwitcher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 842e51e8a7e934b0893788a3450063d0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/Common/Scripts/WalletInfoUI.cs b/Samples~/Tutorials/Common/Scripts/WalletInfoUI.cs new file mode 100644 index 00000000..c3c44722 --- /dev/null +++ b/Samples~/Tutorials/Common/Scripts/WalletInfoUI.cs @@ -0,0 +1,42 @@ +using TezosSDK.Tezos; +using TMPro; +using UnityEngine; + +namespace TezosSDK.Tutorials.Common +{ + + public class WalletInfoUI : MonoBehaviour + { + [SerializeField] private TMP_InputField addressText; + private const string NOT_CONNECTED_TEXT = "Not connected"; + + private void Start() + { + addressText.text = NOT_CONNECTED_TEXT; + + // Subscribe to events + TezosManager.Instance.EventManager.WalletConnected += OnWalletConnected; + TezosManager.Instance.EventManager.WalletDisconnected += OnWalletDisconnected; + } + + private void OnDestroy() + { + TezosManager.Instance.EventManager.WalletConnected -= OnWalletConnected; + TezosManager.Instance.EventManager.WalletDisconnected -= OnWalletDisconnected; + } + + private void OnWalletConnected(WalletInfo walletInfo) + { + // We can get the address from the wallet + addressText.text = TezosManager.Instance.Wallet.GetWalletAddress(); + // Or from the event data + addressText.text = walletInfo.Address; + } + + private void OnWalletDisconnected(WalletInfo walletInfo) + { + addressText.text = NOT_CONNECTED_TEXT; + } + } + +} \ No newline at end of file diff --git a/Samples~/Tutorials/Common/Scripts/WalletInfoUI.cs.meta b/Samples~/Tutorials/Common/Scripts/WalletInfoUI.cs.meta new file mode 100644 index 00000000..fd4ac275 --- /dev/null +++ b/Samples~/Tutorials/Common/Scripts/WalletInfoUI.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c2b57f5a36d54fa4ae0a5c9c4577e583 +timeCreated: 1699118016 \ No newline at end of file diff --git a/Samples~/Tutorials/Common/Scripts/WebpageHandler.cs b/Samples~/Tutorials/Common/Scripts/WebpageHandler.cs new file mode 100644 index 00000000..de624f5f --- /dev/null +++ b/Samples~/Tutorials/Common/Scripts/WebpageHandler.cs @@ -0,0 +1,16 @@ +using UnityEngine; + +namespace TezosSDK.Tutorials.Common +{ + + public class WebpageHandler : MonoBehaviour + { + [SerializeField] private string webpage; + + public void OpenWebpage() + { + Application.OpenURL(webpage); + } + } + +} \ No newline at end of file diff --git a/Samples~/Tutorials/Common/Scripts/WebpageHandler.cs.meta b/Samples~/Tutorials/Common/Scripts/WebpageHandler.cs.meta new file mode 100644 index 00000000..f17b3df2 --- /dev/null +++ b/Samples~/Tutorials/Common/Scripts/WebpageHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1fa822b2f81b348448fb3d72180901f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/ContractAndMinting.meta b/Samples~/Tutorials/ContractAndMinting.meta new file mode 100644 index 00000000..5d0701ac --- /dev/null +++ b/Samples~/Tutorials/ContractAndMinting.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 40bde7edb12c0a84c95e8c881035cc44 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/ContractAndMinting/Scripts.meta b/Samples~/Tutorials/ContractAndMinting/Scripts.meta new file mode 100644 index 00000000..f61c3218 --- /dev/null +++ b/Samples~/Tutorials/ContractAndMinting/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f6842becfe4946e409129dd243fe9769 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/ContractAndMinting/Scripts/DeployContract.cs b/Samples~/Tutorials/ContractAndMinting/Scripts/DeployContract.cs new file mode 100644 index 00000000..f56f50ad --- /dev/null +++ b/Samples~/Tutorials/ContractAndMinting/Scripts/DeployContract.cs @@ -0,0 +1,28 @@ +using TezosSDK.Tezos; +using TezosSDK.Tutorials.Common; +using TMPro; +using UnityEngine; + +namespace TezosSDK.Tutorials.ContractAndMinting +{ + + public class DeployContract : MonoBehaviour + { + [SerializeField] private TMP_InputField tokensCountText; + [SerializeField] private ContractInfoUI contractInfoUI; + + public void HandleDeploy() + { + // Deploy the contract + // The contract will be deployed to the active address + TezosManager.Instance.Tezos.TokenContract.Deploy(OnContractDeployed); + } + + private void OnContractDeployed(string contractAddress) + { + contractInfoUI.SetAddress(contractAddress); + tokensCountText.text = "0"; + } + } + +} \ No newline at end of file diff --git a/Samples~/Tutorials/ContractAndMinting/Scripts/DeployContract.cs.meta b/Samples~/Tutorials/ContractAndMinting/Scripts/DeployContract.cs.meta new file mode 100644 index 00000000..afac24fc --- /dev/null +++ b/Samples~/Tutorials/ContractAndMinting/Scripts/DeployContract.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a88565b3f7deba244b4c7acdb4d7d114 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/ContractAndMinting/Scripts/MintToken.cs b/Samples~/Tutorials/ContractAndMinting/Scripts/MintToken.cs new file mode 100644 index 00000000..88e73b0f --- /dev/null +++ b/Samples~/Tutorials/ContractAndMinting/Scripts/MintToken.cs @@ -0,0 +1,122 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using TezosSDK.Tezos; +using TezosSDK.Tezos.API; +using TezosSDK.Tezos.API.Models.Filters; +using TezosSDK.Tezos.API.Models.Tokens; +using TezosSDK.Tutorials.Common; +using TMPro; +using UnityEngine; +using Logger = TezosSDK.Helpers.Logger; +using Random = System.Random; + +namespace TezosSDK.Tutorials.ContractAndMinting +{ + + public class MintToken : MonoBehaviour + { + [SerializeField] private TMP_InputField tokensCountText; + [SerializeField] private ContractInfoUI contractInfoUI; + + private void Start() + { + TezosManager.Instance.EventManager.WalletConnected += OnWalletConnected; + } + + private void OnDestroy() + { + TezosManager.Instance.EventManager.WalletConnected -= OnWalletConnected; + } + + private void OnWalletConnected(WalletInfo _) + { + GetTokensCount(); + } + + public void HandleMint() + { + var tokenMetadata = CreateRandomTokenMetadata(); + var destinationAddress = TezosManager.Instance.Wallet.GetWalletAddress(); + var randomAmount = new Random().Next(1, 1024); + + TezosManager.Instance.Tezos.TokenContract.Mint(OnTokenMinted, tokenMetadata, destinationAddress, + randomAmount); + } + + private TokenMetadata CreateRandomTokenMetadata() + { + var randomInt = new Random().Next(1, int.MaxValue); + + // to preview: https://ipfs.io/ipfs/QmX4t8ikQgjvLdqTtL51v6iVun9tNE7y7Txiw4piGQVNgK + const string _image_address = "ipfs://QmX4t8ikQgjvLdqTtL51v6iVun9tNE7y7Txiw4piGQVNgK"; + + return new TokenMetadata + { + Name = $"testName_{randomInt}", + Description = $"testDescription_{randomInt}", + Symbol = $"TST_{randomInt}", + Decimals = "0", + DisplayUri = _image_address, + ArtifactUri = _image_address, + ThumbnailUri = _image_address + }; + } + + private IEnumerator GetContractsRoutine() + { + Logger.LogDebug("No contract address found. Checking originated contracts..."); + return TezosManager.Instance.Tezos.GetOriginatedContracts(OnContractsFetched); + } + + private void GetTokensCount() + { + StartCoroutine(string.IsNullOrEmpty(TezosManager.Instance.Tezos.TokenContract.Address) + // if we don't have a contract address, get the originated (deployed) contracts + ? GetContractsRoutine() + // otherwise, get the tokens for the deployed contract + : GetTokensForContractRoutine()); + } + + private IEnumerator GetTokensForContractRoutine() + { + return TezosManager.Instance.Tezos.API.GetTokensForContract(OnTokensFetched, + TezosManager.Instance.Tezos.TokenContract.Address, false, 10_000, + new TokensForContractOrder.Default(0)); + } + + private void OnContractsFetched(IEnumerable contracts) + { + var allTokenContracts = contracts.ToList(); + + if (!allTokenContracts.Any()) + { + Logger.LogDebug("No contracts found"); + tokensCountText.text = "No contracts found."; + return; + } + + var contract = allTokenContracts.First(); + Logger.LogDebug($"Found {allTokenContracts.Count} contracts. Using {contract.Address}"); + TezosManager.Instance.Tezos.TokenContract = contract; // set the TokenContract on the Tezos instance + + contractInfoUI.SetAddress(contract.Address); + StartCoroutine(GetTokensForContractRoutine()); + } + + private void OnTokenMinted(TokenBalance tokenBalance) + { + Logger.LogDebug($"Successfully minted token with Token ID {tokenBalance.TokenId}"); + GetTokensCount(); + } + + private void OnTokensFetched(IEnumerable tokens) + { + var tokenList = tokens.ToList(); + + Logger.LogDebug($"Found {tokenList.Count} tokens"); + tokensCountText.text = tokenList.Count.ToString(); + } + } + +} \ No newline at end of file diff --git a/Samples~/Tutorials/ContractAndMinting/Scripts/MintToken.cs.meta b/Samples~/Tutorials/ContractAndMinting/Scripts/MintToken.cs.meta new file mode 100644 index 00000000..1711eb04 --- /dev/null +++ b/Samples~/Tutorials/ContractAndMinting/Scripts/MintToken.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6aa56a7846d1f9f4b913d26abc8fb04c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/ContractAndMinting/Scripts/UIController.cs b/Samples~/Tutorials/ContractAndMinting/Scripts/UIController.cs new file mode 100644 index 00000000..f830aed6 --- /dev/null +++ b/Samples~/Tutorials/ContractAndMinting/Scripts/UIController.cs @@ -0,0 +1,33 @@ +using TezosSDK.Tezos; +using UnityEngine; + +namespace TezosSDK.Tutorials.ContractAndMinting +{ + + public class UIController : MonoBehaviour + { + [SerializeField] private GameObject buttons; + [SerializeField] private GameObject tokensCount; + + private void Start() + { + tokensCount.SetActive(false); + buttons.SetActive(false); + + var messageReceiver = TezosManager.Instance.EventManager; + + messageReceiver.WalletConnected += _ => + { + tokensCount.SetActive(true); + buttons.SetActive(true); + }; + + messageReceiver.WalletDisconnected += _ => + { + tokensCount.SetActive(false); + buttons.SetActive(false); + }; + } + } + +} \ No newline at end of file diff --git a/Samples~/Tutorials/ContractAndMinting/Scripts/UIController.cs.meta b/Samples~/Tutorials/ContractAndMinting/Scripts/UIController.cs.meta new file mode 100644 index 00000000..f314c51f --- /dev/null +++ b/Samples~/Tutorials/ContractAndMinting/Scripts/UIController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 11ce214d1eca9644abcb1121db8f8103 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/ContractAndMinting/_ContractAndMinting.unity b/Samples~/Tutorials/ContractAndMinting/_ContractAndMinting.unity new file mode 100644 index 00000000..f9c89be6 --- /dev/null +++ b/Samples~/Tutorials/ContractAndMinting/_ContractAndMinting.unity @@ -0,0 +1,2290 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &198723255 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 198723258} + - component: {fileID: 198723257} + - component: {fileID: 198723256} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &198723256 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 198723255} + m_Enabled: 1 +--- !u!20 &198723257 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 198723255} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.015686275, g: 0.07058824, b: 0.20392157, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 20.9 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &198723258 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 198723255} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + 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!224 &268644386 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + m_PrefabInstance: {fileID: 8824744816541705848} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &370623530 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1591891772} + m_Modifications: + - target: {fileID: 3364973223500751354, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Name + value: Address + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} +--- !u!224 &370623531 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 370623530} + m_PrefabAsset: {fileID: 0} +--- !u!114 &370623532 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 370623530} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &435845803 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 435845804} + - component: {fileID: 435845806} + - component: {fileID: 435845805} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &435845804 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 435845803} + 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: 508134940} + 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 &435845805 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 435845803} + 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: 'Tokens Count:' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4293059298 + m_fontColor: {r: 0.8867924, g: 0.8867924, b: 0.8867924, 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: 24 + m_fontSizeBase: 24 + 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, w: 0} + 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 &435845806 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 435845803} + m_CullTransparentMesh: 1 +--- !u!1 &508134939 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 508134940} + - component: {fileID: 508134941} + m_Layer: 5 + m_Name: TokensCount + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &508134940 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 508134939} + 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: 435845804} + - {fileID: 1638362983} + m_Father: {fileID: 1296785125} + 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 &508134941 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 508134939} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 40 + m_Bottom: 50 + m_ChildAlignment: 4 + m_Spacing: 12 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 1 + m_ReverseArrangement: 0 +--- !u!1 &614724571 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 614724572} + - component: {fileID: 614724574} + - component: {fileID: 614724573} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &614724572 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 614724571} + 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: 1591891772} + 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 &614724573 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 614724571} + 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: 'Contract Address:' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4293059298 + m_fontColor: {r: 0.8867924, g: 0.8867924, b: 0.8867924, 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: 24 + m_fontSizeBase: 24 + 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, w: 0} + 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 &614724574 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 614724571} + m_CullTransparentMesh: 1 +--- !u!224 &628158555 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + m_PrefabInstance: {fileID: 6031431476831076923} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &641921256 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4898021624847171558, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_Name + value: TezosManager + objectReference: {fileID: 0} + - target: {fileID: 4898021624847171558, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7709730176731183433, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: appName + value: Contract & Minting Tutorial + objectReference: {fileID: 0} + - target: {fileID: 7709730176731183433, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: logLevel + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 7709730176731183433, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: authManager + value: + objectReference: {fileID: 0} + - target: {fileID: 7709730176731183433, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: appDescription + value: Tezos SDK - Contract & Minting Tutorial + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} +--- !u!1001 &786503225 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1296785125} + m_Modifications: + - target: {fileID: 1164501840344136735, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_Name + value: BackButton Variant + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_SizeDelta.x + value: 128.6 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_SizeDelta.y + value: 45 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_AnchoredPosition.x + value: 80 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_AnchoredPosition.y + value: 114.5 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} +--- !u!224 &786503226 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + m_PrefabInstance: {fileID: 786503225} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &1082137394 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 2117647284} + m_Modifications: + - target: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Name + value: MintTokenButton + objectReference: {fileID: 0} + - target: {fileID: 1318710709471227853, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: a16ea38d0e70d4fa18bfe4e7db808d16, type: 3} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 1082137397} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: HandleMint + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName + value: TezosSDK.Contract.Scripts.MintToken, com.trilitech.tezos-unity-sdk.examples + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_text + value: Mint Token + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + insertIndex: -1 + addedObject: {fileID: 1082137397} + m_SourcePrefab: {fileID: 100100000, guid: 94498300266eb49a892996f452021967, type: 3} +--- !u!224 &1082137395 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + m_PrefabInstance: {fileID: 1082137394} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1082137396 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + m_PrefabInstance: {fileID: 1082137394} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1082137397 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1082137396} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6aa56a7846d1f9f4b913d26abc8fb04c, type: 3} + m_Name: + m_EditorClassIdentifier: + tokensCountText: {fileID: 1638362984} + contractInfoUI: {fileID: 1591891773} +--- !u!1 &1296785121 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1296785125} + - component: {fileID: 1296785124} + - component: {fileID: 1296785123} + - component: {fileID: 1296785122} + - component: {fileID: 1296785126} + - component: {fileID: 1296785128} + - component: {fileID: 1296785127} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1296785122 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1296785121} + 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 &1296785123 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1296785121} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1920, y: 1080} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0.5 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &1296785124 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1296785121} + 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 &1296785125 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1296785121} + 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: 628158555} + - {fileID: 268644386} + - {fileID: 1579681118} + - {fileID: 1591891772} + - {fileID: 508134940} + - {fileID: 2117647284} + - {fileID: 786503226} + 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 &1296785126 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1296785121} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11ce214d1eca9644abcb1121db8f8103, type: 3} + m_Name: + m_EditorClassIdentifier: + buttons: {fileID: 2117647283} + tokensCount: {fileID: 508134939} +--- !u!114 &1296785127 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1296785121} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &1296785128 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1296785121} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 30 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &1370975386 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1370975389} + - component: {fileID: 1370975388} + - component: {fileID: 1370975387} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1370975387 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1370975386} + 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 &1370975388 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1370975386} + 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 &1370975389 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1370975386} + 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 &1579681117 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1579681118} + - component: {fileID: 1579681119} + - component: {fileID: 1579681120} + m_Layer: 5 + m_Name: WalletInfo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1579681118 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1579681117} + 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: 1897975899} + - {fileID: 2929778604342342378} + m_Father: {fileID: 1296785125} + 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 &1579681119 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1579681117} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c2b57f5a36d54fa4ae0a5c9c4577e583, type: 3} + m_Name: + m_EditorClassIdentifier: + addressText: {fileID: 2929778604342342379} +--- !u!114 &1579681120 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1579681117} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 80 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 12 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 1 + m_ReverseArrangement: 0 +--- !u!1 &1591891771 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1591891772} + - component: {fileID: 1591891773} + - component: {fileID: 1591891774} + m_Layer: 5 + m_Name: ContractInfo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1591891772 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1591891771} + 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: 614724572} + - {fileID: 370623531} + m_Father: {fileID: 1296785125} + 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 &1591891773 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1591891771} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 538a5dd3c87867141bdf9c44a80d7c4e, type: 3} + m_Name: + m_EditorClassIdentifier: + addressText: {fileID: 370623532} +--- !u!114 &1591891774 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1591891771} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 12 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 1 + m_ReverseArrangement: 0 +--- !u!1001 &1638362982 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 508134940} + m_Modifications: + - target: {fileID: 3364973223500751354, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Name + value: TokensCount + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalScale.x + value: 1.0999999 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalScale.y + value: 1.0999999 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalScale.z + value: 1.0999999 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Interactable + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} +--- !u!224 &1638362983 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 1638362982} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1638362984 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 1638362982} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1831117431 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + m_PrefabInstance: {fileID: 1936630446698240131} + m_PrefabAsset: {fileID: 0} +--- !u!224 &1831117432 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + m_PrefabInstance: {fileID: 1936630446698240131} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1831117438 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1831117431} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a88565b3f7deba244b4c7acdb4d7d114, type: 3} + m_Name: + m_EditorClassIdentifier: + tokensCountText: {fileID: 1638362984} + contractInfoUI: {fileID: 1591891773} +--- !u!1 &1897975898 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1897975899} + - component: {fileID: 1897975901} + - component: {fileID: 1897975900} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1897975899 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1897975898} + 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: 1579681118} + 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 &1897975900 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1897975898} + 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: 'Wallet Address:' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4293059298 + m_fontColor: {r: 0.8867924, g: 0.8867924, b: 0.8867924, 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: 24 + m_fontSizeBase: 24 + 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, w: 0} + 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 &1897975901 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1897975898} + m_CullTransparentMesh: 1 +--- !u!1 &2117647283 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2117647284} + - component: {fileID: 2117647285} + m_Layer: 5 + m_Name: Buttons + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2117647284 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2117647283} + 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: 1831117432} + - {fileID: 1082137395} + m_Father: {fileID: 1296785125} + 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 &2117647285 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2117647283} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 1 + m_Spacing: 25 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1001 &1936630446698240131 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 2117647284} + m_Modifications: + - target: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Name + value: DeployContractButton + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 1831117438} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_text + value: Deploy Contract + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + insertIndex: -1 + addedObject: {fileID: 1831117438} + m_SourcePrefab: {fileID: 100100000, guid: 94498300266eb49a892996f452021967, type: 3} +--- !u!1001 &2929778604342342377 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1579681118} + m_Modifications: + - target: {fileID: 3364973223500751354, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Name + value: Address + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} +--- !u!224 &2929778604342342378 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 2929778604342342377} + m_PrefabAsset: {fileID: 0} +--- !u!114 &2929778604342342379 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 2929778604342342377} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &4563075105779453124 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4142934398137355793, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 4142934398137355793, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934398137355793, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 4142934398137355793, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934398137355793, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 4142934398137355793, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934398137355793, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchoredPosition.y + value: 76 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911491, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_Name + value: TezosAuthenticator + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: + - {fileID: 4142934399314389004, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + - {fileID: 439788787956918372, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} +--- !u!1001 &6031431476831076923 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1296785125} + m_Modifications: + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_Pivot.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_SizeDelta.x + value: 264 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_SizeDelta.y + value: 93 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchoredPosition.x + value: -0.000015258789 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchoredPosition.y + value: -90 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9006142010399846645, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_Name + value: TezosLogo + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} +--- !u!1001 &8824744816541705848 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1296785125} + m_Modifications: + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_Pivot.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5567652871723151339, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_Name + value: SceneTitle + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 641921256} + - {fileID: 4563075105779453124} + - {fileID: 1296785125} + - {fileID: 1370975389} + - {fileID: 198723258} diff --git a/Samples~/Contracts/FA2/errors.jsligo.meta b/Samples~/Tutorials/ContractAndMinting/_ContractAndMinting.unity.meta similarity index 74% rename from Samples~/Contracts/FA2/errors.jsligo.meta rename to Samples~/Tutorials/ContractAndMinting/_ContractAndMinting.unity.meta index 051b5428..2f65e5a7 100644 --- a/Samples~/Contracts/FA2/errors.jsligo.meta +++ b/Samples~/Tutorials/ContractAndMinting/_ContractAndMinting.unity.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 399c5de95771d4511897fa83614443d1 +guid: e9dd91fe1b9365c4cba3a4352aed05db DefaultImporter: externalObjects: {} userData: diff --git a/Samples~/Tutorials/IPFSUpload.meta b/Samples~/Tutorials/IPFSUpload.meta new file mode 100644 index 00000000..fe159e11 --- /dev/null +++ b/Samples~/Tutorials/IPFSUpload.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4364ed4a1515d3b448b31fb2e0a6112b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/IPFSUpload/Scripts.meta b/Samples~/Tutorials/IPFSUpload/Scripts.meta new file mode 100644 index 00000000..5be7eace --- /dev/null +++ b/Samples~/Tutorials/IPFSUpload/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 85c16feb7f1b1364d8f812aef5cc44cb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/IPFSUpload/Scripts/UploadImageButton.cs b/Samples~/Tutorials/IPFSUpload/Scripts/UploadImageButton.cs new file mode 100644 index 00000000..35ca2ce9 --- /dev/null +++ b/Samples~/Tutorials/IPFSUpload/Scripts/UploadImageButton.cs @@ -0,0 +1,30 @@ +using TezosSDK.FileUploaders; +using TezosSDK.Tezos; +using UnityEngine; +using Logger = TezosSDK.Helpers.Logger; + +namespace TezosSDK.Tutorials.IPFSUpload +{ + + public class UploadImageButton : MonoBehaviour + { + public void HandleUploadClick() + { + if (string.IsNullOrEmpty(TezosManager.Instance.Config.PinataApiKey)) + { + Logger.LogError("Can not proceed without Pinata API key."); + return; + } + + var uploader = UploaderFactory.GetPinataUploader(TezosManager.Instance.Config.PinataApiKey); + + var uploadCoroutine = uploader.UploadFile(ipfsUrl => + { + Logger.LogDebug($"File uploaded, url is {ipfsUrl}"); + }); + + StartCoroutine(uploadCoroutine); + } + } + +} \ No newline at end of file diff --git a/Samples~/Tutorials/IPFSUpload/Scripts/UploadImageButton.cs.meta b/Samples~/Tutorials/IPFSUpload/Scripts/UploadImageButton.cs.meta new file mode 100644 index 00000000..fe6c339e --- /dev/null +++ b/Samples~/Tutorials/IPFSUpload/Scripts/UploadImageButton.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c0d0ca02990fd0241b66ac5d9201398b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/IPFSUpload/_IPFSUpload.unity b/Samples~/Tutorials/IPFSUpload/_IPFSUpload.unity new file mode 100644 index 00000000..e762d07b --- /dev/null +++ b/Samples~/Tutorials/IPFSUpload/_IPFSUpload.unity @@ -0,0 +1,1393 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &118175340 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 118175341} + - component: {fileID: 118175343} + - component: {fileID: 118175342} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &118175341 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 118175340} + 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: 1998131612} + 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 &118175342 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 118175340} + 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: 'Account Address:' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4293059298 + m_fontColor: {r: 0.8867924, g: 0.8867924, b: 0.8867924, 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: 24 + m_fontSizeBase: 24 + 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, w: 0} + 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 &118175343 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 118175340} + m_CullTransparentMesh: 1 +--- !u!1001 &225636476 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1053552311} + m_Modifications: + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_Pivot.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_SizeDelta.x + value: 264 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_SizeDelta.y + value: 93 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchoredPosition.x + value: -0.000015258789 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchoredPosition.y + value: -90 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9006142010399846645, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_Name + value: TezosLogo + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} +--- !u!224 &225636477 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + m_PrefabInstance: {fileID: 225636476} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1053552304 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1053552311} + - component: {fileID: 1053552310} + - component: {fileID: 1053552309} + - component: {fileID: 1053552308} + - component: {fileID: 1053552306} + - component: {fileID: 1053552305} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1053552305 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1053552304} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &1053552306 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1053552304} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 10 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &1053552308 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1053552304} + 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 &1053552309 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1053552304} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1920, y: 1080} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0.5 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &1053552310 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1053552304} + 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 &1053552311 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1053552304} + 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: 225636477} + - {fileID: 1101959958} + - {fileID: 1998131612} + - {fileID: 1876916418} + - {fileID: 1626103097} + 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!1001 &1101959957 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1053552311} + m_Modifications: + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_Pivot.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3235416565408652923, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_text + value: IPFS Upload + objectReference: {fileID: 0} + - target: {fileID: 5567652871723151339, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_Name + value: SceneTitle + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} +--- !u!224 &1101959958 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + m_PrefabInstance: {fileID: 1101959957} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &1127831727 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4142934398137355793, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchoredPosition.y + value: 158 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911491, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_Name + value: TezosAuthenticator + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} +--- !u!1001 &1423356360 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1998131612} + m_Modifications: + - target: {fileID: 3364973223500751354, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Name + value: Address + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.x + value: 93.525 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Interactable + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} +--- !u!224 &1423356361 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 1423356360} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1423356362 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 1423356360} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1574774375 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1574774378} + - component: {fileID: 1574774377} + - component: {fileID: 1574774376} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1574774376 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574774375} + 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 &1574774377 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574774375} + 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 &1574774378 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574774375} + 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!1001 &1626103096 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1053552311} + m_Modifications: + - target: {fileID: 1164501840344136735, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_Name + value: BackButton Variant + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_SizeDelta.x + value: 128.6 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_SizeDelta.y + value: 45 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_AnchoredPosition.x + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_AnchoredPosition.y + value: 237 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} +--- !u!224 &1626103097 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + m_PrefabInstance: {fileID: 1626103096} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &1675135059 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4898021624847171558, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_Name + value: TezosManager + objectReference: {fileID: 0} + - target: {fileID: 7709730176731183433, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: appName + value: IPFS Tutorial + objectReference: {fileID: 0} + - target: {fileID: 7709730176731183433, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: appDescription + value: Tezos SDK - IPFS Tutorial + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} +--- !u!1001 &1876916417 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1053552311} + m_Modifications: + - target: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Name + value: UploadButton + objectReference: {fileID: 0} + - target: {fileID: 1318710709471227853, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: a25f34f8e1bff4b13a67670f63e5694e, type: 3} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 1876916420} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: HandleUploadClick + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName + value: TezosSDK.IPFSUpload.Scripts.UIController, com.trilitech.tezos-unity-sdk.examples + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_text + value: Select file + objectReference: {fileID: 0} + - target: {fileID: 5147201652801728400, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_PreferredWidth + value: 214.52 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + insertIndex: -1 + addedObject: {fileID: 1876916420} + m_SourcePrefab: {fileID: 100100000, guid: 94498300266eb49a892996f452021967, type: 3} +--- !u!224 &1876916418 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + m_PrefabInstance: {fileID: 1876916417} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1876916419 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + m_PrefabInstance: {fileID: 1876916417} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1876916420 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1876916419} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c0d0ca02990fd0241b66ac5d9201398b, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1998131611 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1998131612} + - component: {fileID: 1998131614} + - component: {fileID: 1998131613} + m_Layer: 5 + m_Name: AccountAddress + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1998131612 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1998131611} + 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: 1 + m_Children: + - {fileID: 118175341} + - {fileID: 1423356361} + m_Father: {fileID: 1053552311} + 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 &1998131613 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1998131611} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c2b57f5a36d54fa4ae0a5c9c4577e583, type: 3} + m_Name: + m_EditorClassIdentifier: + addressText: {fileID: 1423356362} +--- !u!114 &1998131614 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1998131611} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 120 + m_Bottom: 70 + m_ChildAlignment: 4 + m_Spacing: 20 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 1 + m_ReverseArrangement: 0 +--- !u!1 &2104003297 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2104003300} + - component: {fileID: 2104003299} + - component: {fileID: 2104003298} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &2104003298 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2104003297} + m_Enabled: 1 +--- !u!20 &2104003299 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2104003297} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.015686275, g: 0.07058824, b: 0.20392157, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &2104003300 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2104003297} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + 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!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1675135059} + - {fileID: 1127831727} + - {fileID: 1053552311} + - {fileID: 1574774378} + - {fileID: 2104003300} diff --git a/Samples~/Contracts/FA2/ledger.jsligo.meta b/Samples~/Tutorials/IPFSUpload/_IPFSUpload.unity.meta similarity index 74% rename from Samples~/Contracts/FA2/ledger.jsligo.meta rename to Samples~/Tutorials/IPFSUpload/_IPFSUpload.unity.meta index 541cc899..d38cf666 100644 --- a/Samples~/Contracts/FA2/ledger.jsligo.meta +++ b/Samples~/Tutorials/IPFSUpload/_IPFSUpload.unity.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f1600b1ab43fa49d5bbf6d9ab37b97d3 +guid: 095e89258d8b60e4b96fe19df514b893 DefaultImporter: externalObjects: {} userData: diff --git a/Samples~/Tutorials/TezosSDK.Tutorials.asmdef b/Samples~/Tutorials/TezosSDK.Tutorials.asmdef new file mode 100644 index 00000000..943fe567 --- /dev/null +++ b/Samples~/Tutorials/TezosSDK.Tutorials.asmdef @@ -0,0 +1,17 @@ +{ + "name": "TezosSDK.Tutorials", + "rootNamespace": "", + "references": [ + "GUID:0c0f402fc1cb344ef87d37f5a81f2739", + "GUID:6055be8ebefd69e48b49212b09b47b2f" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Runtime/Plugins/Newtonsoft.Json AOT/Newtonsoft.Json.deps.json.meta b/Samples~/Tutorials/TezosSDK.Tutorials.asmdef.meta similarity index 59% rename from Runtime/Plugins/Newtonsoft.Json AOT/Newtonsoft.Json.deps.json.meta rename to Samples~/Tutorials/TezosSDK.Tutorials.asmdef.meta index 43b463f1..941001ab 100644 --- a/Runtime/Plugins/Newtonsoft.Json AOT/Newtonsoft.Json.deps.json.meta +++ b/Samples~/Tutorials/TezosSDK.Tutorials.asmdef.meta @@ -1,10 +1,7 @@ - fileFormatVersion: 2 -guid: f38361229b98405e8509995e7cfb1334 - -TextScriptImporter: +guid: 749f3fae27ebf4b78aff349446b1e3eb +AssemblyDefinitionImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: - diff --git a/Samples~/Tutorials/TransferToken.meta b/Samples~/Tutorials/TransferToken.meta new file mode 100644 index 00000000..17923b58 --- /dev/null +++ b/Samples~/Tutorials/TransferToken.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 092a2a65c68578342ad3ddf800b18be0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/TransferToken/Scripts.meta b/Samples~/Tutorials/TransferToken/Scripts.meta new file mode 100644 index 00000000..9096627e --- /dev/null +++ b/Samples~/Tutorials/TransferToken/Scripts.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: df837810e4b442639a932eddee52817c +timeCreated: 1699882772 \ No newline at end of file diff --git a/Samples~/Tutorials/TransferToken/Scripts/TransferButton.cs b/Samples~/Tutorials/TransferToken/Scripts/TransferButton.cs new file mode 100644 index 00000000..33bc90ca --- /dev/null +++ b/Samples~/Tutorials/TransferToken/Scripts/TransferButton.cs @@ -0,0 +1,27 @@ +using TezosSDK.Tezos; +using TMPro; +using UnityEngine; +using Logger = TezosSDK.Helpers.Logger; + +namespace TezosSDK.Tutorials.TransferToken +{ + + public class TransferButton : MonoBehaviour + { + [SerializeField] private TMP_InputField id; + [SerializeField] private TMP_InputField address; + [SerializeField] private TMP_InputField amount; + + public void HandleTransfer() + { + TezosManager.Instance.Tezos.TokenContract.Transfer(TransferCompleted, address.text, int.Parse(id.text), + int.Parse(amount.text)); + } + + private void TransferCompleted(string txHash) + { + Logger.LogDebug($"Transfer complete with transaction hash {txHash}"); + } + } + +} \ No newline at end of file diff --git a/Samples~/Tutorials/TransferToken/Scripts/TransferButton.cs.meta b/Samples~/Tutorials/TransferToken/Scripts/TransferButton.cs.meta new file mode 100644 index 00000000..f8427d94 --- /dev/null +++ b/Samples~/Tutorials/TransferToken/Scripts/TransferButton.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f24ae5b698df054d997300eb79c77ea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/TransferToken/Scripts/TransferTokenHandler.cs b/Samples~/Tutorials/TransferToken/Scripts/TransferTokenHandler.cs new file mode 100644 index 00000000..6cd67237 --- /dev/null +++ b/Samples~/Tutorials/TransferToken/Scripts/TransferTokenHandler.cs @@ -0,0 +1,78 @@ +using System.Collections.Generic; +using System.Linq; +using TezosSDK.Tezos; +using TezosSDK.Tezos.API.Models.Filters; +using TezosSDK.Tezos.API.Models.Tokens; +using TezosSDK.Tutorials.Common; +using TMPro; +using UnityEngine; + +namespace TezosSDK.Tutorials.TransferToken +{ + + public class TransferTokenHandler : MonoBehaviour + { + [SerializeField] private TMP_InputField availableTokensTMP; + [SerializeField] private ContractInfoUI contractInfoUI; + + private void Start() + { + // Subscribe to account connection events + TezosManager.Instance.EventManager.WalletConnected += OnWalletConnected; + } + + private void OnDestroy() + { + TezosManager.Instance.EventManager.WalletConnected -= OnWalletConnected; + } + + private void OnWalletConnected(WalletInfo _) + { + var contractAddress = TezosManager.Instance.Tezos.TokenContract.Address; + + if (!string.IsNullOrEmpty(contractAddress)) + { + GetContractTokenIds(contractAddress); + return; + } + + var getOriginatedContractsRoutine = TezosManager.Instance.Tezos.GetOriginatedContracts(contracts => + { + var tokenContracts = contracts.ToList(); + + if (!tokenContracts.Any()) + { + var activeAddress = TezosManager.Instance.Tezos.Wallet.GetWalletAddress(); + + availableTokensTMP.text = $"{activeAddress} didn't deploy any contract yet."; + return; + } + + var initializedContract = tokenContracts.First(); + TezosManager.Instance.Tezos.TokenContract = initializedContract; + + contractInfoUI.SetAddress(initializedContract.Address); + GetContractTokenIds(initializedContract.Address); + }); + + StartCoroutine(getOriginatedContractsRoutine); + } + + private void GetContractTokenIds(string contractAddress) + { + var tokensForContractCoroutine = TezosManager.Instance.Tezos.API.GetTokensForContract(Callback, + contractAddress, false, 10_000, new TokensForContractOrder.Default(0)); + + StartCoroutine(tokensForContractCoroutine); + return; + + void Callback(IEnumerable tokens) + { + // Join the token IDs with ", " as the separator + var idsResult = string.Join(", ", tokens.Select(token => token.TokenId)); + availableTokensTMP.text = idsResult; + } + } + } + +} \ No newline at end of file diff --git a/Samples~/Tutorials/TransferToken/Scripts/TransferTokenHandler.cs.meta b/Samples~/Tutorials/TransferToken/Scripts/TransferTokenHandler.cs.meta new file mode 100644 index 00000000..0964dee7 --- /dev/null +++ b/Samples~/Tutorials/TransferToken/Scripts/TransferTokenHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0ae70f1f9bba6fe48a637be051d8b44f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/TransferToken/_TransferToken.unity b/Samples~/Tutorials/TransferToken/_TransferToken.unity new file mode 100644 index 00000000..64742c21 --- /dev/null +++ b/Samples~/Tutorials/TransferToken/_TransferToken.unity @@ -0,0 +1,3433 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &15169302 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1696474290} + m_Modifications: + - target: {fileID: 3364973223500751354, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Name + value: Address + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalScale.x + value: 0.8 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalScale.y + value: 0.8 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalScale.z + value: 0.8 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.x + value: 83.595 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8646082594808785307, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.y + value: -0.5 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} +--- !u!224 &15169303 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 15169302} + m_PrefabAsset: {fileID: 0} +--- !u!114 &15169304 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 15169302} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &151451852 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 3364973223500751354, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 1960938254} + m_PrefabAsset: {fileID: 0} +--- !u!1 &240873541 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 240873542} + - component: {fileID: 240873544} + - component: {fileID: 240873543} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &240873542 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 240873541} + 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: 1726869612} + 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 &240873543 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 240873541} + 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: 'Destination Address:' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4293059298 + m_fontColor: {r: 0.8867924, g: 0.8867924, b: 0.8867924, 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: 24 + m_fontSizeBase: 24 + 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, w: 0} + 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 &240873544 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 240873541} + m_CullTransparentMesh: 1 +--- !u!1 &267114282 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 267114283} + - component: {fileID: 267114285} + - component: {fileID: 267114284} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &267114283 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 267114282} + 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: 1989819492} + 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 &267114284 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 267114282} + 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: 'Token Amount:' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4293059298 + m_fontColor: {r: 0.8867924, g: 0.8867924, b: 0.8867924, 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: 24 + m_fontSizeBase: 24 + 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, w: 0} + 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 &267114285 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 267114282} + m_CullTransparentMesh: 1 +--- !u!1 &342570176 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + m_PrefabInstance: {fileID: 998600352} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &362827688 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1119381571} + m_Modifications: + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_Pivot.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3235416565408652923, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_text + value: Token Transfer + objectReference: {fileID: 0} + - target: {fileID: 5567652871723151339, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_Name + value: SceneTitle + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} +--- !u!224 &362827689 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + m_PrefabInstance: {fileID: 362827688} + m_PrefabAsset: {fileID: 0} +--- !u!1 &572998140 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 572998141} + - component: {fileID: 572998143} + m_Layer: 5 + m_Name: AvailableTokens + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &572998141 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 572998140} + 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: 576686553} + - {fileID: 1206131575} + m_Father: {fileID: 1119381571} + 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 &572998143 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 572998140} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 24 + m_ChildAlignment: 4 + m_Spacing: 10 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 1 + m_ReverseArrangement: 0 +--- !u!1 &576686552 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 576686553} + - component: {fileID: 576686555} + - component: {fileID: 576686554} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &576686553 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576686552} + 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: 572998141} + 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 &576686554 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576686552} + 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: "List of all token ID\u2019s for this contract:" + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4293059298 + m_fontColor: {r: 0.8867924, g: 0.8867924, b: 0.8867924, 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: 24 + m_fontSizeBase: 24 + 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, w: 0} + 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 &576686555 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576686552} + m_CullTransparentMesh: 1 +--- !u!1001 &636428783 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 933068179} + m_Modifications: + - target: {fileID: 3364973223500751354, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Name + value: IDs + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalScale.x + value: 0.8 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalScale.y + value: 0.8 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalScale.z + value: 0.8 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.x + value: 77.520004 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8079072980993121254, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_text + value: "Token to transfer...\u200B" + objectReference: {fileID: 0} + - target: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Text + value: Token to transfer... + objectReference: {fileID: 0} + - target: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_ReadOnly + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_ContentType + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_KeyboardType + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_CharacterValidation + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 8646082594808785307, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.y + value: -0.5 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 3364973223500751354, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + insertIndex: -1 + addedObject: {fileID: 1982732372} + m_SourcePrefab: {fileID: 100100000, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} +--- !u!224 &636428784 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 636428783} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &648692383 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4898021624847171558, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_Name + value: TezosManager + objectReference: {fileID: 0} + - target: {fileID: 7709730176731183433, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: appName + value: Token Transfer Tutorial + objectReference: {fileID: 0} + - target: {fileID: 7709730176731183433, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: pinataApiKey + value: + objectReference: {fileID: 0} + - target: {fileID: 7709730176731183433, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: appDescription + value: Tezos SDK - Token Transfer Tutorial + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} +--- !u!1 &710514098 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 710514101} + - component: {fileID: 710514100} + - component: {fileID: 710514099} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &710514099 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 710514098} + m_Enabled: 1 +--- !u!20 &710514100 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 710514098} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.015686275, g: 0.07058824, b: 0.20392157, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &710514101 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 710514098} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + 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 &820174041 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 820174042} + - component: {fileID: 820174044} + - component: {fileID: 820174043} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &820174042 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 820174041} + 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: 2032403283} + 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 &820174043 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 820174041} + 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: 'Contract Address:' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4293059298 + m_fontColor: {r: 0.8867924, g: 0.8867924, b: 0.8867924, 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: 24 + m_fontSizeBase: 24 + 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, w: 0} + 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 &820174044 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 820174041} + m_CullTransparentMesh: 1 +--- !u!1 &850216070 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 3364973223500751354, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 1956876218} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &925221462 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1119381571} + m_Modifications: + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_Pivot.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_SizeDelta.x + value: 264 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_SizeDelta.y + value: 93 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchoredPosition.x + value: -0.000015258789 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchoredPosition.y + value: -66 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9006142010399846645, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_Name + value: TezosLogo + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} +--- !u!224 &925221463 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + m_PrefabInstance: {fileID: 925221462} + m_PrefabAsset: {fileID: 0} +--- !u!1 &933068178 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 933068179} + - component: {fileID: 933068181} + m_Layer: 5 + m_Name: TokenID + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &933068179 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 933068178} + 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: 2066763132} + - {fileID: 636428784} + m_Father: {fileID: 1119381571} + 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 &933068181 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 933068178} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 5 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 1 + m_ReverseArrangement: 0 +--- !u!1001 &998600352 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1119381571} + m_Modifications: + - target: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Name + value: TransferButton + objectReference: {fileID: 0} + - target: {fileID: 1318710709471227853, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 2ed7fd6abe05a4e989fab9be05800cb0, type: 3} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 998600358} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: HandleTransfer + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName + value: TezosSDK.Transfer.Scripts.Transfer, com.trilitech.tezos-unity-sdk.examples + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_text + value: Transfer + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_margin.x + value: 69.90821 + objectReference: {fileID: 0} + - target: {fileID: 5147201652801728400, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_PreferredWidth + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7079743632293708895, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.x + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 7079743632293708895, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.y + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 7079743632293708895, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalScale.x + value: 0.8172049 + objectReference: {fileID: 0} + - target: {fileID: 7079743632293708895, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalScale.y + value: 0.8172049 + objectReference: {fileID: 0} + - target: {fileID: 7079743632293708895, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalScale.z + value: 0.8172049 + objectReference: {fileID: 0} + - target: {fileID: 7079743632293708895, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.x + value: 19 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + insertIndex: -1 + addedObject: {fileID: 998600358} + m_SourcePrefab: {fileID: 100100000, guid: 94498300266eb49a892996f452021967, type: 3} +--- !u!224 &998600353 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + m_PrefabInstance: {fileID: 998600352} + m_PrefabAsset: {fileID: 0} +--- !u!114 &998600358 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 342570176} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7f24ae5b698df054d997300eb79c77ea, type: 3} + m_Name: + m_EditorClassIdentifier: + id: {fileID: 1982732375} + address: {fileID: 1956876227} + amount: {fileID: 1960938263} +--- !u!1 &1119381565 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1119381571} + - component: {fileID: 1119381570} + - component: {fileID: 1119381569} + - component: {fileID: 1119381568} + - component: {fileID: 1119381567} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1119381567 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1119381565} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: -70 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 20 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &1119381568 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1119381565} + 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 &1119381569 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1119381565} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1920, y: 1080} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0.5 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &1119381570 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1119381565} + 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 &1119381571 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1119381565} + 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: 925221463} + - {fileID: 362827689} + - {fileID: 1696474290} + - {fileID: 2032403283} + - {fileID: 572998141} + - {fileID: 1468263888} + - {fileID: 933068179} + - {fileID: 1726869612} + - {fileID: 1989819492} + - {fileID: 998600353} + - {fileID: 1413406309} + 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!1 &1136409611 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1136409612} + - component: {fileID: 1136409614} + - component: {fileID: 1136409613} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1136409612 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1136409611} + 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: 1696474290} + 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 &1136409613 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1136409611} + 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: 'Wallet Address:' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4293059298 + m_fontColor: {r: 0.8867924, g: 0.8867924, b: 0.8867924, 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: 24 + m_fontSizeBase: 24 + 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, w: 0} + 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 &1136409614 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1136409611} + m_CullTransparentMesh: 1 +--- !u!1001 &1171746546 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4142934398137355793, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchoredPosition.y + value: 75.33334 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911491, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_Name + value: TezosAuthenticator + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} +--- !u!1001 &1206131574 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 572998141} + m_Modifications: + - target: {fileID: 3364973223500751354, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Name + value: AvailableTokens + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalScale.x + value: 0.8 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalScale.y + value: 0.8 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalScale.z + value: 0.8 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.x + value: 193.46 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Interactable + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_OnFocusSelectAll + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8646082594808785307, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.y + value: -0.5000038 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} +--- !u!224 &1206131575 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 1206131574} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1206131577 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 1206131574} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1319569652 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1319569653} + - component: {fileID: 1319569654} + m_Layer: 0 + m_Name: TransferTokenHandler + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1319569653 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1319569652} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 114.80118, y: 232.58029, z: -0.7754162} + 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!114 &1319569654 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1319569652} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0ae70f1f9bba6fe48a637be051d8b44f, type: 3} + m_Name: + m_EditorClassIdentifier: + availableTokensTMP: {fileID: 1206131577} + contractInfoUI: {fileID: 2032403284} +--- !u!1001 &1413406308 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1119381571} + m_Modifications: + - target: {fileID: 1164501840344136735, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_Name + value: BackButton Variant + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_SizeDelta.x + value: 128.6 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_SizeDelta.y + value: 45 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_AnchoredPosition.x + value: 80 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_AnchoredPosition.y + value: 114 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} +--- !u!224 &1413406309 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + m_PrefabInstance: {fileID: 1413406308} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1468263887 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1468263888} + - component: {fileID: 1468263890} + - component: {fileID: 1468263889} + m_Layer: 5 + m_Name: TransferTokenHeading + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1468263888 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1468263887} + 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: 1119381571} + 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 &1468263889 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1468263887} + 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: 'Transfer Token:' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, 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: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + 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, w: 0} + 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 &1468263890 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1468263887} + m_CullTransparentMesh: 1 +--- !u!1 &1696474289 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1696474290} + - component: {fileID: 1696474292} + - component: {fileID: 1696474291} + m_Layer: 5 + m_Name: WalletInfo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1696474290 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1696474289} + 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: 1136409612} + - {fileID: 15169303} + m_Father: {fileID: 1119381571} + 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 &1696474291 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1696474289} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c2b57f5a36d54fa4ae0a5c9c4577e583, type: 3} + m_Name: + m_EditorClassIdentifier: + addressText: {fileID: 15169304} +--- !u!114 &1696474292 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1696474289} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 40 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 10 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 1 + m_ReverseArrangement: 0 +--- !u!1 &1726869611 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1726869612} + - component: {fileID: 1726869614} + m_Layer: 5 + m_Name: DestinationAddress + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1726869612 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1726869611} + 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: 240873542} + - {fileID: 1956876219} + m_Father: {fileID: 1119381571} + 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 &1726869614 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1726869611} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 5 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 1 + m_ReverseArrangement: 0 +--- !u!1 &1828532142 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1828532145} + - component: {fileID: 1828532144} + - component: {fileID: 1828532143} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1828532143 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1828532142} + 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 &1828532144 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1828532142} + 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 &1828532145 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1828532142} + 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!1001 &1956876218 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1726869612} + m_Modifications: + - target: {fileID: 3364973223500751354, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Name + value: DestinationAddress + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalScale.x + value: 0.8 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalScale.y + value: 0.8 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalScale.z + value: 0.8 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.x + value: 110.27 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8079072980993121254, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_text + value: "Destination address...\u200B" + objectReference: {fileID: 0} + - target: {fileID: 8079072980993121254, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_isRichText + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Text + value: Destination address... + objectReference: {fileID: 0} + - target: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_ReadOnly + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_RichText + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_ContentType + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_KeyboardType + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_CharacterValidation + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 8646082594808785307, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.y + value: -0.5 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 3364973223500751354, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + insertIndex: -1 + addedObject: {fileID: 1956876224} + m_SourcePrefab: {fileID: 100100000, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} +--- !u!224 &1956876219 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 1956876218} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1956876224 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 850216070} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: 40 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 0 +--- !u!114 &1956876227 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 1956876218} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 850216070} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &1960938254 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1989819492} + m_Modifications: + - target: {fileID: 3364973223500751354, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Name + value: TokenAmount + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalScale.x + value: 0.8 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalScale.y + value: 0.8 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalScale.z + value: 0.8 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.x + value: 84.212 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8079072980993121254, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_text + value: "Amount to transfer...\u200B" + objectReference: {fileID: 0} + - target: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Text + value: Amount to transfer... + objectReference: {fileID: 0} + - target: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_ReadOnly + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_ContentType + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_KeyboardType + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_CharacterValidation + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 8646082594808785307, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.y + value: -0.5 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 3364973223500751354, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + insertIndex: -1 + addedObject: {fileID: 1960938260} + m_SourcePrefab: {fileID: 100100000, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} +--- !u!224 &1960938255 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 1960938254} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1960938260 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 151451852} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: 40 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 0 +--- !u!114 &1960938263 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 1960938254} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 151451852} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1982732368 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 3364973223500751354, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 636428783} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1982732372 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1982732368} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: 40 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 0 +--- !u!114 &1982732375 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 636428783} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1982732368} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1989819491 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1989819492} + - component: {fileID: 1989819494} + m_Layer: 5 + m_Name: TokenAmount + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1989819492 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1989819491} + 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: 267114283} + - {fileID: 1960938255} + m_Father: {fileID: 1119381571} + 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 &1989819494 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1989819491} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 5 + m_ChildAlignment: 4 + m_Spacing: 5 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 1 + m_ReverseArrangement: 0 +--- !u!1 &2032403282 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2032403283} + - component: {fileID: 2032403285} + - component: {fileID: 2032403284} + m_Layer: 5 + m_Name: ContractInfo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2032403283 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2032403282} + 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: 820174042} + - {fileID: 2127567761} + m_Father: {fileID: 1119381571} + 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 &2032403284 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2032403282} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 538a5dd3c87867141bdf9c44a80d7c4e, type: 3} + m_Name: + m_EditorClassIdentifier: + addressText: {fileID: 2127567762} +--- !u!114 &2032403285 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2032403282} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 10 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 1 + m_ReverseArrangement: 0 +--- !u!1 &2066763131 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2066763132} + - component: {fileID: 2066763134} + - component: {fileID: 2066763133} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2066763132 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2066763131} + 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: 933068179} + 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 &2066763133 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2066763131} + 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: 'Token ID:' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4293059298 + m_fontColor: {r: 0.8867924, g: 0.8867924, b: 0.8867924, 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: 24 + m_fontSizeBase: 24 + 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, w: 0} + 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 &2066763134 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2066763131} + m_CullTransparentMesh: 1 +--- !u!1001 &2127567760 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 2032403283} + m_Modifications: + - target: {fileID: 3364973223500751354, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Name + value: Address + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalScale.x + value: 0.8 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalScale.y + value: 0.8 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalScale.z + value: 0.8 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.x + value: 95.62 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8646082594808785307, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.y + value: -0.5 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} +--- !u!224 &2127567761 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 2127567760} + m_PrefabAsset: {fileID: 0} +--- !u!114 &2127567762 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 2127567760} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 648692383} + - {fileID: 1171746546} + - {fileID: 1119381571} + - {fileID: 1828532145} + - {fileID: 710514101} + - {fileID: 1319569653} diff --git a/Samples~/Contracts/FA2/marketplace.jsligo.meta b/Samples~/Tutorials/TransferToken/_TransferToken.unity.meta similarity index 74% rename from Samples~/Contracts/FA2/marketplace.jsligo.meta rename to Samples~/Tutorials/TransferToken/_TransferToken.unity.meta index e61b2be6..bdd2cc04 100644 --- a/Samples~/Contracts/FA2/marketplace.jsligo.meta +++ b/Samples~/Tutorials/TransferToken/_TransferToken.unity.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 76fd72a9b0ac148d0b70ecd5accadadb +guid: f0d2fec66dceea1449fbacf6373a8819 DefaultImporter: externalObjects: {} userData: diff --git a/Samples~/Tutorials/WalletConnection.meta b/Samples~/Tutorials/WalletConnection.meta new file mode 100644 index 00000000..0436edc3 --- /dev/null +++ b/Samples~/Tutorials/WalletConnection.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c3d64bbbf0b324289874167c23290480 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/WalletConnection/Scripts.meta b/Samples~/Tutorials/WalletConnection/Scripts.meta new file mode 100644 index 00000000..9509d209 --- /dev/null +++ b/Samples~/Tutorials/WalletConnection/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9e9e94c70650a411bb0d274085a88a4d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/WalletConnection/Scripts/MetadataInfoUI.cs b/Samples~/Tutorials/WalletConnection/Scripts/MetadataInfoUI.cs new file mode 100644 index 00000000..4e54befc --- /dev/null +++ b/Samples~/Tutorials/WalletConnection/Scripts/MetadataInfoUI.cs @@ -0,0 +1,20 @@ +using TezosSDK.Tezos; +using TMPro; +using UnityEngine; + +namespace TezosSDK.Tutorials.WalletConnection +{ + + public class MetadataInfoUI : MonoBehaviour + { + [SerializeField] private TextMeshProUGUI nameText; + [SerializeField] private TextMeshProUGUI descriptionText; + + private void Start() + { + nameText.text = TezosManager.Instance.DAppMetadata.Name; + descriptionText.text = TezosManager.Instance.DAppMetadata.Description; + } + } + +} \ No newline at end of file diff --git a/Samples~/Tutorials/WalletConnection/Scripts/MetadataInfoUI.cs.meta b/Samples~/Tutorials/WalletConnection/Scripts/MetadataInfoUI.cs.meta new file mode 100644 index 00000000..de7bb8fc --- /dev/null +++ b/Samples~/Tutorials/WalletConnection/Scripts/MetadataInfoUI.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 84440628294a487cb1d954711b70e254 +timeCreated: 1699115866 \ No newline at end of file diff --git a/Samples~/Tutorials/WalletConnection/Scripts/WalletBalanceUI.cs b/Samples~/Tutorials/WalletConnection/Scripts/WalletBalanceUI.cs new file mode 100644 index 00000000..85f9a6a9 --- /dev/null +++ b/Samples~/Tutorials/WalletConnection/Scripts/WalletBalanceUI.cs @@ -0,0 +1,39 @@ +using TezosSDK.Tezos; +using TMPro; +using UnityEngine; + +namespace TezosSDK.Tutorials.WalletConnection +{ + + public class WalletBalanceUI : MonoBehaviour + { + [SerializeField] private TextMeshProUGUI balanceText; + private readonly string _notConnectedText = "Not connected"; + + private void Start() + { + // Subscribe to wallet events + TezosManager.Instance.EventManager.WalletConnected += OnWalletConnected; + TezosManager.Instance.EventManager.WalletDisconnected += OnWalletDisconnected; + } + + private void OnWalletConnected(WalletInfo _) + { + // OnBalanceFetched will be called when the balance is fetched + var routine = TezosManager.Instance.Tezos.GetCurrentWalletBalance(OnBalanceFetched); + StartCoroutine(routine); + } + + private void OnWalletDisconnected(WalletInfo _) + { + balanceText.text = _notConnectedText; + } + + private void OnBalanceFetched(ulong balance) + { + // Balance is in microtez, so we divide it by 1.000.000 to get tez + balanceText.text = $"{balance / 1000000f}"; + } + } + +} \ No newline at end of file diff --git a/Samples~/Tutorials/WalletConnection/Scripts/WalletBalanceUI.cs.meta b/Samples~/Tutorials/WalletConnection/Scripts/WalletBalanceUI.cs.meta new file mode 100644 index 00000000..5cc2ae21 --- /dev/null +++ b/Samples~/Tutorials/WalletConnection/Scripts/WalletBalanceUI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 736fb07cdc37f497c99ad62d481e0124 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/WalletConnection/Scripts/WalletConnectionHandler.cs b/Samples~/Tutorials/WalletConnection/Scripts/WalletConnectionHandler.cs new file mode 100644 index 00000000..8a4108f4 --- /dev/null +++ b/Samples~/Tutorials/WalletConnection/Scripts/WalletConnectionHandler.cs @@ -0,0 +1,49 @@ +using TezosSDK.Tezos; +using TMPro; +using UnityEngine; + +namespace TezosSDK.Tutorials.WalletConnection +{ + + public class WalletConnectionHandler : MonoBehaviour + { + [SerializeField] private TMP_InputField nameText; + [SerializeField] private TMP_InputField descriptionText; + [SerializeField] private TMP_InputField balanceText; + + private void Start() + { + nameText.text = TezosManager.Instance.DAppMetadata.Name; + descriptionText.text = TezosManager.Instance.DAppMetadata.Description; + + // Subscribe to wallet events + TezosManager.Instance.EventManager.WalletConnected += OnWalletConnected; + TezosManager.Instance.EventManager.WalletDisconnected += OnWalletDisconnected; + } + + private void OnDestroy() + { + TezosManager.Instance.EventManager.WalletConnected -= OnWalletConnected; + TezosManager.Instance.EventManager.WalletDisconnected -= OnWalletDisconnected; + } + + private void OnWalletConnected(WalletInfo _) + { + // OnBalanceFetched will be called when the balance is fetched + var routine = TezosManager.Instance.Tezos.GetCurrentWalletBalance(OnBalanceFetched); + StartCoroutine(routine); + } + + private void OnWalletDisconnected(WalletInfo _) + { + balanceText.text = ""; + } + + private void OnBalanceFetched(ulong balance) + { + // Balance is in microtez, so we divide it by 1.000.000 to get tez + balanceText.text = $"{balance / 1000000f}"; + } + } + +} \ No newline at end of file diff --git a/Samples~/Tutorials/WalletConnection/Scripts/WalletConnectionHandler.cs.meta b/Samples~/Tutorials/WalletConnection/Scripts/WalletConnectionHandler.cs.meta new file mode 100644 index 00000000..01698833 --- /dev/null +++ b/Samples~/Tutorials/WalletConnection/Scripts/WalletConnectionHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c2a36d53f31d743519d294b510b0ab5d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/WalletConnection/_WalletConnection.unity b/Samples~/Tutorials/WalletConnection/_WalletConnection.unity new file mode 100644 index 00000000..8e4b46ab --- /dev/null +++ b/Samples~/Tutorials/WalletConnection/_WalletConnection.unity @@ -0,0 +1,2223 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 0 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &200609608 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 2096369276} + m_Modifications: + - target: {fileID: 3364973223500751354, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Name + value: Name + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Interactable + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} +--- !u!224 &200609609 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 200609608} + m_PrefabAsset: {fileID: 0} +--- !u!114 &200609610 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 200609608} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &256253092 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3340385179467995793, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4898021624847171558, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: m_Name + value: TezosManager + objectReference: {fileID: 0} + - target: {fileID: 7709730176731183433, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: appName + value: Wallet Connection Tutorial + objectReference: {fileID: 0} + - target: {fileID: 7709730176731183433, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} + propertyPath: appDescription + value: Tezos SDK - Wallet Connection Tutorial + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 05a6ebf6c729446cc8458943256b9209, type: 3} +--- !u!1 &316893590 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 316893591} + - component: {fileID: 316893592} + m_Layer: 5 + m_Name: AppDescription + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &316893591 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 316893590} + 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: 2111168815} + - {fileID: 1577874651} + m_Father: {fileID: 745196880} + 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 &316893592 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 316893590} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 15 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 1 + m_ReverseArrangement: 0 +--- !u!1 &380583644 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 380583645} + - component: {fileID: 380583646} + m_Layer: 5 + m_Name: WalletBalance + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &380583645 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 380583644} + 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: 752896581} + - {fileID: 1312977929} + m_Father: {fileID: 745196880} + 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 &380583646 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 380583644} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 15 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 1 + m_ReverseArrangement: 0 +--- !u!1 &485983063 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 485983066} + - component: {fileID: 485983065} + - component: {fileID: 485983064} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &485983064 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485983063} + 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 &485983065 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485983063} + 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 &485983066 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485983063} + 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 &699638673 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 699638674} + - component: {fileID: 699638676} + - component: {fileID: 699638675} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &699638674 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 699638673} + 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: 1405690746} + 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 &699638675 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 699638673} + 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: Connected Wallet Address + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4293059298 + m_fontColor: {r: 0.8867924, g: 0.8867924, b: 0.8867924, 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: 24 + m_fontSizeBase: 24 + 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, w: 0} + 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 &699638676 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 699638673} + m_CullTransparentMesh: 1 +--- !u!1 &745196875 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 745196880} + - component: {fileID: 745196879} + - component: {fileID: 745196878} + - component: {fileID: 745196877} + - component: {fileID: 745196876} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &745196876 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 745196875} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 30 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 1 + m_ReverseArrangement: 0 +--- !u!114 &745196877 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 745196875} + 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 &745196878 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 745196875} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1920, y: 1080} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0.5 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &745196879 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 745196875} + 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 &745196880 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 745196875} + 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: 928608098} + - {fileID: 1456134155} + - {fileID: 2096369276} + - {fileID: 316893591} + - {fileID: 1405690746} + - {fileID: 380583645} + - {fileID: 2142219099} + 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!1 &752896580 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 752896581} + - component: {fileID: 752896583} + - component: {fileID: 752896582} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &752896581 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 752896580} + 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: 380583645} + 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 &752896582 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 752896580} + 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: Wallet Balance + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4293059298 + m_fontColor: {r: 0.8867924, g: 0.8867924, b: 0.8867924, 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: 24 + m_fontSizeBase: 24 + 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, w: 0} + 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 &752896583 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 752896580} + m_CullTransparentMesh: 1 +--- !u!1001 &844174480 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4142934398137355793, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchoredPosition.y + value: 113 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911491, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_Name + value: TezosAuthenticator + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4142934399787911512, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 88403be39bf2846f3a3d1ff42ec2ceb5, type: 3} +--- !u!1001 &928608097 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 745196880} + m_Modifications: + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_Pivot.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_SizeDelta.x + value: 264 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_SizeDelta.y + value: 93 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchoredPosition.x + value: -0.000015258789 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchoredPosition.y + value: -15.000122 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9006142010399846645, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_Name + value: TezosLogo + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} +--- !u!224 &928608098 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + m_PrefabInstance: {fileID: 928608097} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1162443709 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1162443710} + - component: {fileID: 1162443711} + m_Layer: 0 + m_Name: WalletConnectionHandler + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1162443710 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1162443709} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 177.64992, y: 54.07103, z: -0.9072242} + 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!114 &1162443711 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1162443709} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c2a36d53f31d743519d294b510b0ab5d, type: 3} + m_Name: + m_EditorClassIdentifier: + nameText: {fileID: 200609610} + descriptionText: {fileID: 1577874652} + balanceText: {fileID: 1312977930} +--- !u!1001 &1312977928 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 380583645} + m_Modifications: + - target: {fileID: 3364973223500751354, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Name + value: Balance + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Interactable + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} +--- !u!224 &1312977929 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 1312977928} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1312977930 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 1312977928} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1405690745 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1405690746} + - component: {fileID: 1405690747} + - component: {fileID: 1405690748} + m_Layer: 5 + m_Name: WalletInfo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1405690746 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1405690745} + 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: 699638674} + - {fileID: 1672542699} + m_Father: {fileID: 745196880} + 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 &1405690747 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1405690745} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 15 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 1 + m_ReverseArrangement: 0 +--- !u!114 &1405690748 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1405690745} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c2b57f5a36d54fa4ae0a5c9c4577e583, type: 3} + m_Name: + m_EditorClassIdentifier: + addressText: {fileID: 1672542700} +--- !u!1001 &1456134154 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 745196880} + m_Modifications: + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_Pivot.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3235416565408652923, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_text + value: Wallet Connection + objectReference: {fileID: 0} + - target: {fileID: 5567652871723151339, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_Name + value: SceneTitle + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} +--- !u!224 &1456134155 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + m_PrefabInstance: {fileID: 1456134154} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &1577874650 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 316893591} + m_Modifications: + - target: {fileID: 3364973223500751354, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Name + value: Desc + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Interactable + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} +--- !u!224 &1577874651 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 1577874650} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1577874652 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 1577874650} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &1672542698 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1405690746} + m_Modifications: + - target: {fileID: 3364973223500751354, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Name + value: Address + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} +--- !u!224 &1672542699 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 7846136485843893983, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 1672542698} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1672542700 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8392114598185720377, guid: 0e307dc14287b4d4b9e5bd605a0a359a, type: 3} + m_PrefabInstance: {fileID: 1672542698} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1993746647 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1993746648} + - component: {fileID: 1993746650} + - component: {fileID: 1993746649} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1993746648 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1993746647} + 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: 2096369276} + 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 &1993746649 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1993746647} + 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: App Name + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4293059298 + m_fontColor: {r: 0.8867924, g: 0.8867924, b: 0.8867924, 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: 24 + m_fontSizeBase: 24 + 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, w: 0} + 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 &1993746650 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1993746647} + m_CullTransparentMesh: 1 +--- !u!1 &2096369275 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2096369276} + - component: {fileID: 2096369277} + m_Layer: 5 + m_Name: AppName + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2096369276 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2096369275} + 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: 1993746648} + - {fileID: 200609609} + m_Father: {fileID: 745196880} + 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 &2096369277 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2096369275} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 60 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 15 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 1 + m_ReverseArrangement: 0 +--- !u!1 &2100795518 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2100795521} + - component: {fileID: 2100795520} + - component: {fileID: 2100795519} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &2100795519 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2100795518} + m_Enabled: 1 +--- !u!20 &2100795520 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2100795518} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.015686275, g: 0.07058824, b: 0.20392157, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &2100795521 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2100795518} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -10} + 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 &2111168814 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2111168815} + - component: {fileID: 2111168817} + - component: {fileID: 2111168816} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2111168815 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2111168814} + 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: 316893591} + 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 &2111168816 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2111168814} + 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: App Description + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4293059298 + m_fontColor: {r: 0.8867924, g: 0.8867924, b: 0.8867924, 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: 24 + m_fontSizeBase: 24 + 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, w: 0} + 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 &2111168817 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2111168814} + m_CullTransparentMesh: 1 +--- !u!1001 &2142219098 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 745196880} + m_Modifications: + - target: {fileID: 1164501840344136735, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_Name + value: BackButton Variant + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_SizeDelta.x + value: 128.6 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_SizeDelta.y + value: 45 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_AnchoredPosition.x + value: 80 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_AnchoredPosition.y + value: 174 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} +--- !u!224 &2142219099 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 4903882491096610426, guid: 1f2b41cbbfea5425799913991573c5b0, type: 3} + m_PrefabInstance: {fileID: 2142219098} + m_PrefabAsset: {fileID: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 256253092} + - {fileID: 844174480} + - {fileID: 745196880} + - {fileID: 485983066} + - {fileID: 2100795521} + - {fileID: 1162443710} diff --git a/Samples~/Tutorials/WalletConnection/_WalletConnection.unity.meta b/Samples~/Tutorials/WalletConnection/_WalletConnection.unity.meta new file mode 100644 index 00000000..99a58a7c --- /dev/null +++ b/Samples~/Tutorials/WalletConnection/_WalletConnection.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5c600a12387934620bb6b09572cc6cd5 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Tutorials/_Tutorials.unity b/Samples~/Tutorials/_Tutorials.unity new file mode 100644 index 00000000..c3b60ca5 --- /dev/null +++ b/Samples~/Tutorials/_Tutorials.unity @@ -0,0 +1,1938 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 0 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &17892391 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + m_PrefabInstance: {fileID: 961532414} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &167949022 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 745196880} + m_Modifications: + - target: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Name + value: ContractAndMintButton + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 695133860} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: ChangeToScene + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName + value: TezosSDK.SceneSwitcher, com.trilitech.tezos-unity-sdk.examples + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_text + value: Contract & Minting + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_margin.x + value: 0.5889587 + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_margin.z + value: 1.1205443 + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_HorizontalAlignment + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7621771466054847559, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + insertIndex: -1 + addedObject: {fileID: 695133860} + m_SourcePrefab: {fileID: 100100000, guid: 94498300266eb49a892996f452021967, type: 3} +--- !u!224 &167949023 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + m_PrefabInstance: {fileID: 167949022} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &262971677 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1380312809} + m_Modifications: + - target: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Name + value: DiscordButton + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Colors.m_PressedColor.b + value: 0.41509432 + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Colors.m_PressedColor.g + value: 0.41509432 + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Colors.m_PressedColor.r + value: 0.41509432 + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Colors.m_HighlightedColor.b + value: 0.6103151 + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Colors.m_HighlightedColor.g + value: 0.6103151 + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Colors.m_HighlightedColor.r + value: 0.6132076 + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 262971680} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: OpenWebpage + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName + value: TezosSDK.WebpageHandler, com.trilitech.tezos-unity-sdk.examples + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_text + value: Discord + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_margin.x + value: 0.5889587 + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_margin.z + value: 1.1205443 + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_HorizontalAlignment + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 5147201652801728400, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_PreferredWidth + value: 207.2 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7621771466054847559, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7732450146962834345, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 5da0899bf713f4d0ebc0ad8c4360165e, type: 3} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + insertIndex: -1 + addedObject: {fileID: 262971680} + m_SourcePrefab: {fileID: 100100000, guid: 94498300266eb49a892996f452021967, type: 3} +--- !u!224 &262971678 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + m_PrefabInstance: {fileID: 262971677} + m_PrefabAsset: {fileID: 0} +--- !u!1 &262971679 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + m_PrefabInstance: {fileID: 262971677} + m_PrefabAsset: {fileID: 0} +--- !u!114 &262971680 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 262971679} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1fa822b2f81b348448fb3d72180901f2, type: 3} + m_Name: + m_EditorClassIdentifier: + webpage: https://discord.gg/tezos +--- !u!1 &485983063 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 485983066} + - component: {fileID: 485983065} + - component: {fileID: 485983064} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &485983064 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485983063} + 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 &485983065 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485983063} + 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 &485983066 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485983063} + 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!1001 &568131422 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 745196880} + m_Modifications: + - target: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Name + value: IPFSButton + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 1105651185} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: ChangeToScene + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName + value: TezosSDK.SceneSwitcher, com.trilitech.tezos-unity-sdk.examples + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_text + value: IPFS Upload + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_margin.x + value: 0.5889587 + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_margin.z + value: 1.1205443 + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_HorizontalAlignment + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7621771466054847559, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + insertIndex: -1 + addedObject: {fileID: 1105651185} + m_SourcePrefab: {fileID: 100100000, guid: 94498300266eb49a892996f452021967, type: 3} +--- !u!224 &568131423 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + m_PrefabInstance: {fileID: 568131422} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &585805504 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1380312809} + m_Modifications: + - target: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Name + value: GrantsButton + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Colors.m_PressedColor.b + value: 0.41509432 + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Colors.m_PressedColor.g + value: 0.41509432 + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Colors.m_PressedColor.r + value: 0.41509432 + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Colors.m_HighlightedColor.b + value: 0.6103151 + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Colors.m_HighlightedColor.g + value: 0.6103151 + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Colors.m_HighlightedColor.r + value: 0.6132076 + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 585805507} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: OpenWebpage + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName + value: TezosSDK.WebpageHandler, com.trilitech.tezos-unity-sdk.examples + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_text + value: Tezos Grants + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_margin.x + value: 0.5889587 + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_margin.z + value: 1.1205443 + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_HorizontalAlignment + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 5147201652801728400, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_PreferredWidth + value: 207.2 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7621771466054847559, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7732450146962834345, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 5da0899bf713f4d0ebc0ad8c4360165e, type: 3} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + insertIndex: -1 + addedObject: {fileID: 585805507} + m_SourcePrefab: {fileID: 100100000, guid: 94498300266eb49a892996f452021967, type: 3} +--- !u!224 &585805505 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + m_PrefabInstance: {fileID: 585805504} + m_PrefabAsset: {fileID: 0} +--- !u!1 &585805506 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + m_PrefabInstance: {fileID: 585805504} + m_PrefabAsset: {fileID: 0} +--- !u!114 &585805507 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 585805506} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1fa822b2f81b348448fb3d72180901f2, type: 3} + m_Name: + m_EditorClassIdentifier: + webpage: https://grants.tezos.foundation/ +--- !u!1 &695133855 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + m_PrefabInstance: {fileID: 167949022} + m_PrefabAsset: {fileID: 0} +--- !u!114 &695133860 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 695133855} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 842e51e8a7e934b0893788a3450063d0, type: 3} + m_Name: + m_EditorClassIdentifier: + sceneNameToLoad: _ContractAndMinting +--- !u!1 &745196875 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 745196880} + - component: {fileID: 745196879} + - component: {fileID: 745196878} + - component: {fileID: 745196877} + - component: {fileID: 745196876} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &745196876 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 745196875} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 30 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 1 + m_ReverseArrangement: 0 +--- !u!114 &745196877 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 745196875} + 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 &745196878 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 745196875} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1920, y: 1080} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0.5 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &745196879 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 745196875} + 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 &745196880 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 745196875} + 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: 928608098} + - {fileID: 1456134155} + - {fileID: 1817128527} + - {fileID: 1030459747} + - {fileID: 167949023} + - {fileID: 961532415} + - {fileID: 568131423} + - {fileID: 1380312809} + 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!1001 &928608097 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 745196880} + m_Modifications: + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_Pivot.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_SizeDelta.x + value: 264 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_SizeDelta.y + value: 93 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchoredPosition.x + value: -0.000015258789 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_AnchoredPosition.y + value: -15 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9006142010399846645, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + propertyPath: m_Name + value: TezosLogo + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} +--- !u!224 &928608098 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 5977092460330271763, guid: f8b57b9bad7d046ab86713b0d785a4c6, type: 3} + m_PrefabInstance: {fileID: 928608097} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &961532414 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 745196880} + m_Modifications: + - target: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Name + value: TransferTokenButton + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 961532420} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: ChangeToScene + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName + value: TezosSDK.SceneSwitcher, com.trilitech.tezos-unity-sdk.examples + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_text + value: Transfer Token + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_margin.x + value: 0.5889587 + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_margin.z + value: 1.1205443 + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_HorizontalAlignment + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7621771466054847559, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + insertIndex: -1 + addedObject: {fileID: 961532420} + m_SourcePrefab: {fileID: 100100000, guid: 94498300266eb49a892996f452021967, type: 3} +--- !u!224 &961532415 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + m_PrefabInstance: {fileID: 961532414} + m_PrefabAsset: {fileID: 0} +--- !u!114 &961532420 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 17892391} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 842e51e8a7e934b0893788a3450063d0, type: 3} + m_Name: + m_EditorClassIdentifier: + sceneNameToLoad: _TransferToken +--- !u!1001 &1030459746 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 745196880} + m_Modifications: + - target: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Name + value: WalletConnectionButton + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 1030459749} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: ChangeToScene + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName + value: TezosSDK.SceneSwitcher, com.trilitech.tezos-unity-sdk.examples + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_text + value: Wallet Connection + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_margin.x + value: 0.5889587 + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_margin.z + value: 1.1205443 + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_HorizontalAlignment + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7621771466054847559, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + insertIndex: -1 + addedObject: {fileID: 1030459749} + m_SourcePrefab: {fileID: 100100000, guid: 94498300266eb49a892996f452021967, type: 3} +--- !u!224 &1030459747 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + m_PrefabInstance: {fileID: 1030459746} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1030459748 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + m_PrefabInstance: {fileID: 1030459746} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1030459749 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1030459748} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 842e51e8a7e934b0893788a3450063d0, type: 3} + m_Name: + m_EditorClassIdentifier: + sceneNameToLoad: _WalletConnection +--- !u!1 &1105651180 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + m_PrefabInstance: {fileID: 568131422} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1105651185 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1105651180} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 842e51e8a7e934b0893788a3450063d0, type: 3} + m_Name: + m_EditorClassIdentifier: + sceneNameToLoad: _IPFSUpload +--- !u!1 &1380312808 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1380312809} + - component: {fileID: 1380312810} + m_Layer: 5 + m_Name: BottomGroup + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1380312809 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1380312808} + 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: 262971678} + - {fileID: 1743440119} + - {fileID: 585805505} + m_Father: {fileID: 745196880} + 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 &1380312810 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1380312808} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 100 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 20 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 1 + m_ReverseArrangement: 0 +--- !u!1001 &1456134154 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 745196880} + m_Modifications: + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_Pivot.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3235416565408652923, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_text + value: Tezos SDK for Unity + objectReference: {fileID: 0} + - target: {fileID: 5567652871723151339, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + propertyPath: m_Name + value: SceneTitle + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} +--- !u!224 &1456134155 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 530061126213206716, guid: d34ae9cbb074c4b209fd7e798d21b9d7, type: 3} + m_PrefabInstance: {fileID: 1456134154} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &1743440118 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1380312809} + m_Modifications: + - target: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Name + value: DocsButton + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Colors.m_PressedColor.b + value: 0.41509432 + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Colors.m_PressedColor.g + value: 0.41509432 + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Colors.m_PressedColor.r + value: 0.41509432 + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Colors.m_HighlightedColor.b + value: 0.6103151 + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Colors.m_HighlightedColor.g + value: 0.6103151 + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Colors.m_HighlightedColor.r + value: 0.6132076 + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 1743440121} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: OpenWebpage + objectReference: {fileID: 0} + - target: {fileID: 1540125019509689424, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName + value: TezosSDK.WebpageHandler, com.trilitech.tezos-unity-sdk.examples + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_text + value: Docs + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_margin.x + value: 0.5889587 + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_margin.z + value: 1.1205443 + objectReference: {fileID: 0} + - target: {fileID: 3971503951144205198, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_HorizontalAlignment + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 5147201652801728400, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_PreferredWidth + value: 207.2 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7621771466054847559, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7732450146962834345, guid: 94498300266eb49a892996f452021967, type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 5da0899bf713f4d0ebc0ad8c4360165e, type: 3} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + insertIndex: -1 + addedObject: {fileID: 1743440121} + m_SourcePrefab: {fileID: 100100000, guid: 94498300266eb49a892996f452021967, type: 3} +--- !u!224 &1743440119 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 6401922062934067754, guid: 94498300266eb49a892996f452021967, type: 3} + m_PrefabInstance: {fileID: 1743440118} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1743440120 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 936468721780244559, guid: 94498300266eb49a892996f452021967, type: 3} + m_PrefabInstance: {fileID: 1743440118} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1743440121 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1743440120} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1fa822b2f81b348448fb3d72180901f2, type: 3} + m_Name: + m_EditorClassIdentifier: + webpage: https://opentezos.com/gaming/unity-sdk/ +--- !u!1 &1817128526 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1817128527} + - component: {fileID: 1817128528} + m_Layer: 5 + m_Name: Spacer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1817128527 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1817128526} + 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: 745196880} + 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 &1817128528 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1817128526} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: 40 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &2100795518 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2100795521} + - component: {fileID: 2100795520} + - component: {fileID: 2100795519} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &2100795519 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2100795518} + m_Enabled: 1 +--- !u!20 &2100795520 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2100795518} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.015686275, g: 0.07058824, b: 0.20392157, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &2100795521 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2100795518} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -10} + 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!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 745196880} + - {fileID: 485983066} + - {fileID: 2100795521} diff --git a/Samples~/Tutorials/_Tutorials.unity.meta b/Samples~/Tutorials/_Tutorials.unity.meta new file mode 100644 index 00000000..a29b75f5 --- /dev/null +++ b/Samples~/Tutorials/_Tutorials.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3106a3bbcd8164bf881ca98458ff88f0 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ScriptableObjects.meta b/ScriptableObjects.meta new file mode 100644 index 00000000..ce245aca --- /dev/null +++ b/ScriptableObjects.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 70900a9098d840fcb1996361fcc2f0b6 +timeCreated: 1704711425 \ No newline at end of file diff --git a/ScriptableObjects/SDKConfig.meta b/ScriptableObjects/SDKConfig.meta new file mode 100644 index 00000000..d0775247 --- /dev/null +++ b/ScriptableObjects/SDKConfig.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: fe19c7f85e6849ff9b8054822d48096b +timeCreated: 1704711437 \ No newline at end of file diff --git a/ScriptableObjects/SDKConfig/DefaultTezosDataProviderConfig.asset b/ScriptableObjects/SDKConfig/DefaultTezosDataProviderConfig.asset new file mode 100644 index 00000000..f6db4b02 --- /dev/null +++ b/ScriptableObjects/SDKConfig/DefaultTezosDataProviderConfig.asset @@ -0,0 +1,18 @@ +%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: 302ae0521ba8483487d9f920d803356a, type: 3} + m_Name: DefaultTezosDataProviderConfig + m_EditorClassIdentifier: + network: 1 + baseUrlFormat: https://api.{network}.tzkt.io/v1/ + requestTimeoutSeconds: 45 + documentationUrl: https://api.tzkt.io/ diff --git a/CHANGELOG.md.meta b/ScriptableObjects/SDKConfig/DefaultTezosDataProviderConfig.asset.meta similarity index 52% rename from CHANGELOG.md.meta rename to ScriptableObjects/SDKConfig/DefaultTezosDataProviderConfig.asset.meta index ad4871bd..8890d400 100644 --- a/CHANGELOG.md.meta +++ b/ScriptableObjects/SDKConfig/DefaultTezosDataProviderConfig.asset.meta @@ -1,7 +1,8 @@ fileFormatVersion: 2 -guid: a7c48d72816b54510ab5bd2c714f06d5 -TextScriptImporter: +guid: 8db273370a9fc4fbf9bf668dde7d9b72 +NativeFormatImporter: externalObjects: {} + mainObjectFileID: 11400000 userData: assetBundleName: assetBundleVariant: diff --git a/ScriptableObjects/SDKConfig/DefaultTezosSDKConfig.asset b/ScriptableObjects/SDKConfig/DefaultTezosSDKConfig.asset new file mode 100644 index 00000000..8e2936f4 --- /dev/null +++ b/ScriptableObjects/SDKConfig/DefaultTezosSDKConfig.asset @@ -0,0 +1,19 @@ +%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: 0c1ac3fcdbc344e5b0626e4c44285e35, type: 3} + m_Name: DefaultTezosSDKConfig + m_EditorClassIdentifier: + network: 1 + rpcUrlFormat: https://{network}.tezos.marigold.dev + requestTimeoutSeconds: 45 + pinataApiKey: + dataProviderConfig: {fileID: 11400000, guid: 8db273370a9fc4fbf9bf668dde7d9b72, type: 2} diff --git a/Runtime/Plugins/Newtonsoft.Json AOT/Newtonsoft.Json.xml.meta b/ScriptableObjects/SDKConfig/DefaultTezosSDKConfig.asset.meta similarity index 52% rename from Runtime/Plugins/Newtonsoft.Json AOT/Newtonsoft.Json.xml.meta rename to ScriptableObjects/SDKConfig/DefaultTezosSDKConfig.asset.meta index 58456b85..e3177dff 100644 --- a/Runtime/Plugins/Newtonsoft.Json AOT/Newtonsoft.Json.xml.meta +++ b/ScriptableObjects/SDKConfig/DefaultTezosSDKConfig.asset.meta @@ -1,7 +1,8 @@ fileFormatVersion: 2 -guid: 46f8b3146f2c9614bb247ec0d102bf14 -TextScriptImporter: +guid: 9b177380eac964750bfb2ad37a50c9cc +NativeFormatImporter: externalObjects: {} + mainObjectFileID: 11400000 userData: assetBundleName: assetBundleVariant: diff --git a/Tests/Editor/EditmodeTests.cs b/Tests/Editor/EditmodeTests.cs index eee704a9..d03e966b 100644 --- a/Tests/Editor/EditmodeTests.cs +++ b/Tests/Editor/EditmodeTests.cs @@ -1,13 +1,15 @@ using NUnit.Framework; -namespace Tests.Editor +namespace TezosSDK.Tests.Editor { - public class EditmodeTests - { - // A Test behaves as an ordinary method - [Test] - public void EditmodeTestsSimplePasses() - { - } - } -} + + public class EditmodeTests + { + // A Test behaves as an ordinary method + [Test] + public void EditmodeTestsSimplePasses() + { + } + } + +} \ No newline at end of file diff --git a/Tests/Editor/Editor.asmdef b/Tests/Editor/TezosSDK.EditorTests.asmdef similarity index 72% rename from Tests/Editor/Editor.asmdef rename to Tests/Editor/TezosSDK.EditorTests.asmdef index 36c78ad3..24530e89 100644 --- a/Tests/Editor/Editor.asmdef +++ b/Tests/Editor/TezosSDK.EditorTests.asmdef @@ -1,10 +1,10 @@ { - "name": "Editor", + "name": "TezosSDK.EditorTests", "rootNamespace": "", "references": [ - "UnityEngine.TestRunner", - "UnityEditor.TestRunner", - "com.trilitech.tezos-unity-sdk" + "GUID:27619889b8ba8c24980f49ee34dbb44a", + "GUID:0acc523941302664db1f4e527237feb3", + "GUID:0c0f402fc1cb344ef87d37f5a81f2739" ], "includePlatforms": [ "Editor" diff --git a/Tests/Editor/Editor.asmdef.meta b/Tests/Editor/TezosSDK.EditorTests.asmdef.meta similarity index 100% rename from Tests/Editor/Editor.asmdef.meta rename to Tests/Editor/TezosSDK.EditorTests.asmdef.meta diff --git a/Tests/Runtime/ApiTests.cs b/Tests/Runtime/ApiTests.cs index cd805098..68bac657 100644 --- a/Tests/Runtime/ApiTests.cs +++ b/Tests/Runtime/ApiTests.cs @@ -1,169 +1,161 @@ -using System.Collections; -using System.Linq; -using Beacon.Sdk.Beacon.Permission; -using NUnit.Framework; -using TezosSDK.Tezos; -using TezosSDK.Tezos.API; -using TezosSDK.Tezos.API.Models.Filters; -using UnityEngine; -using UnityEngine.TestTools; - -namespace Tests.Runtime +namespace TezosSDK.Tests.Runtime { - public class ApiTests - { - private static IDataProviderConfig GetDataProviderConfig() - { - return new TzKTProviderConfig(); - } - - // A UnityTest behaves like a coroutine in Play Mode. In Edit Mode you can use - // `yield return null;` to skip a frame. - [UnityTest] - public IEnumerator GetTokensForOwnerTest() - { - TezosConfig.Instance.Network = NetworkType.mainnet; - var api = new TezosAPI(GetDataProviderConfig()); - const int expectedItems = 5; - - yield return api.GetTokensForOwner( - callback: tokenBalances => { Assert.AreEqual(expectedItems, tokenBalances.Count()); }, - owner: "KT18p94vjkkHYY3nPmernmgVR7HdZFzE7NAk", - withMetadata: false, - maxItems: expectedItems, - orderBy: new TokensForOwnerOrder.ByLastTimeAsc(0)); - } - - [UnityTest] - public IEnumerator GetOwnersForTokenTest() - { - TezosConfig.Instance.Network = NetworkType.mainnet; - var api = new TezosAPI(GetDataProviderConfig()); - const int expectedItems = 5; - - yield return api.GetOwnersForToken( - callback: tokenBalances => { Assert.AreEqual(expectedItems, tokenBalances.Count()); }, - contractAddress: "KT1BRADdqGk2eLmMqvyWzqVmPQ1RCBCbW5dY", - tokenId: 1, - maxItems: expectedItems, - orderBy: new OwnersForTokenOrder.Default(0)); - } - - [UnityTest] - public IEnumerator GetOwnersForContractTest() - { - TezosConfig.Instance.Network = NetworkType.mainnet; - var api = new TezosAPI(GetDataProviderConfig()); - const int expectedItems = 5; - - yield return api.GetOwnersForContract( - callback: tokenBalances => { Assert.AreEqual(expectedItems, tokenBalances.Count()); }, - contractAddress: "KT1BRADdqGk2eLmMqvyWzqVmPQ1RCBCbW5dY", - maxItems: expectedItems, - orderBy: new OwnersForContractOrder.Default(0)); - } - - [UnityTest] - public IEnumerator IsHolderOfContractTest() - { - TezosConfig.Instance.Network = NetworkType.mainnet; - var api = new TezosAPI(GetDataProviderConfig()); - - yield return api.IsHolderOfContract( - callback: isHolder => { Assert.AreEqual(true, isHolder); }, - wallet: "tz1TiZ74DtsT74VyWfbAuSis5KcncH1WvNB9", - contractAddress: "KT1BRADdqGk2eLmMqvyWzqVmPQ1RCBCbW5dY"); - } - - [UnityTest] - public IEnumerator IsHolderOfTokenTest() - { - TezosConfig.Instance.Network = NetworkType.mainnet; - var api = new TezosAPI(GetDataProviderConfig()); - - yield return api.IsHolderOfToken( - callback: isHolder => { Assert.AreEqual(true, isHolder); }, - wallet: "tz1TiZ74DtsT74VyWfbAuSis5KcncH1WvNB9", - contractAddress: "KT1BRADdqGk2eLmMqvyWzqVmPQ1RCBCbW5dY", - tokenId: 1); - } - - [UnityTest] - public IEnumerator GetTokenMetadataTest() - { - TezosConfig.Instance.Network = NetworkType.mainnet; - var api = new TezosAPI(GetDataProviderConfig()); - - yield return api.GetTokenMetadata( - callback: metadata => { Assert.IsFalse(string.IsNullOrEmpty(metadata.ToString())); }, - contractAddress: "KT1BRADdqGk2eLmMqvyWzqVmPQ1RCBCbW5dY", - tokenId: 1); - } - - [UnityTest] - public IEnumerator GetContractMetadataTest() - { - TezosConfig.Instance.Network = NetworkType.mainnet; - var api = new TezosAPI(GetDataProviderConfig()); - - yield return api.GetContractMetadata( - callback: metadata => { Assert.IsFalse(string.IsNullOrEmpty(metadata.ToString())); }, - contractAddress: "KT1BRADdqGk2eLmMqvyWzqVmPQ1RCBCbW5dY"); - } - - [UnityTest] - public IEnumerator GetTokensForContractTest() - { - TezosConfig.Instance.Network = NetworkType.mainnet; - var api = new TezosAPI(GetDataProviderConfig()); - const int expectedItems = 5; - - yield return api.GetTokensForContract( - callback: tokens => { Assert.AreEqual(expectedItems, tokens.Count()); }, - contractAddress: "KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton", - withMetadata: true, - maxItems: expectedItems, - orderBy: new TokensForContractOrder.Default(0)); - } - - [UnityTest] - public IEnumerator GetOperationStatusTest() - { - TezosConfig.Instance.Network = NetworkType.ghostnet; - var api = new TezosAPI(GetDataProviderConfig()); - const bool expectedResult = true; - - yield return api.GetOperationStatus(status => { Assert.AreEqual(expectedResult, status); }, - "oo4gj5tfvnE1LKsRp6BSm7VB5LAoqzogJXPwGWSYBjmUgNsmk8M"); - } - - [UnityTest] - public IEnumerator GetLatestBlockLevelTest() - { - TezosConfig.Instance.Network = NetworkType.mainnet; - var api = new TezosAPI(GetDataProviderConfig()); - - yield return api.GetLatestBlockLevel(latestBlockLevel => { Assert.IsTrue(latestBlockLevel > 0); }); - } - - [UnityTest] - public IEnumerator GetOriginatedContractsForOwnerTest() - { - TezosConfig.Instance.Network = NetworkType.ghostnet; - var api = new TezosAPI(GetDataProviderConfig()); - var codeHash = Resources.Load("Contracts/FA2TokenContractCodeHash") - .text; + public class ApiTests + { + // private static IDataProviderConfig GetDataProviderConfig() + // { + // return new TzKTProviderConfig(); + // } + // + // // A UnityTest behaves like a coroutine in Play Mode. In Edit Mode you can use + // // `yield return null;` to skip a frame. + // [UnityTest] + // public IEnumerator GetTokensForOwnerTest() + // { + // TezosConfig.Instance.Network = NetworkType.mainnet; + // var api = new TezosAPI(GetDataProviderConfig()); + // const int expectedItems = 5; + // + // yield return api.GetTokensForOwner( + // callback: tokenBalances => { Assert.AreEqual(expectedItems, tokenBalances.Count()); }, + // owner: "KT18p94vjkkHYY3nPmernmgVR7HdZFzE7NAk", + // withMetadata: false, + // maxItems: expectedItems, + // orderBy: new TokensForOwnerOrder.ByLastTimeAsc(0)); + // } + // + // [UnityTest] + // public IEnumerator GetOwnersForTokenTest() + // { + // TezosConfig.Instance.Network = NetworkType.mainnet; + // var api = new TezosAPI(GetDataProviderConfig()); + // const int expectedItems = 5; + // + // yield return api.GetOwnersForToken( + // callback: tokenBalances => { Assert.AreEqual(expectedItems, tokenBalances.Count()); }, + // contractAddress: "KT1BRADdqGk2eLmMqvyWzqVmPQ1RCBCbW5dY", + // tokenId: 1, + // maxItems: expectedItems, + // orderBy: new OwnersForTokenOrder.Default(0)); + // } + // + // [UnityTest] + // public IEnumerator GetOwnersForContractTest() + // { + // TezosConfig.Instance.Network = NetworkType.mainnet; + // var api = new TezosAPI(GetDataProviderConfig()); + // const int expectedItems = 5; + // + // yield return api.GetOwnersForContract( + // callback: tokenBalances => { Assert.AreEqual(expectedItems, tokenBalances.Count()); }, + // contractAddress: "KT1BRADdqGk2eLmMqvyWzqVmPQ1RCBCbW5dY", + // maxItems: expectedItems, + // orderBy: new OwnersForContractOrder.Default(0)); + // } + // + // [UnityTest] + // public IEnumerator IsHolderOfContractTest() + // { + // TezosConfig.Instance.Network = NetworkType.mainnet; + // var api = new TezosAPI(GetDataProviderConfig()); + // + // yield return api.IsHolderOfContract( + // callback: isHolder => { Assert.AreEqual(true, isHolder); }, + // wallet: "tz1TiZ74DtsT74VyWfbAuSis5KcncH1WvNB9", + // contractAddress: "KT1BRADdqGk2eLmMqvyWzqVmPQ1RCBCbW5dY"); + // } + // + // [UnityTest] + // public IEnumerator IsHolderOfTokenTest() + // { + // TezosConfig.Instance.Network = NetworkType.mainnet; + // var api = new TezosAPI(GetDataProviderConfig()); + // + // yield return api.IsHolderOfToken( + // callback: isHolder => { Assert.AreEqual(true, isHolder); }, + // wallet: "tz1TiZ74DtsT74VyWfbAuSis5KcncH1WvNB9", + // contractAddress: "KT1BRADdqGk2eLmMqvyWzqVmPQ1RCBCbW5dY", + // tokenId: 1); + // } + // + // [UnityTest] + // public IEnumerator GetTokenMetadataTest() + // { + // TezosConfig.Instance.Network = NetworkType.mainnet; + // var api = new TezosAPI(GetDataProviderConfig()); + // + // yield return api.GetTokenMetadata( + // callback: metadata => { Assert.IsFalse(string.IsNullOrEmpty(metadata.ToString())); }, + // contractAddress: "KT1BRADdqGk2eLmMqvyWzqVmPQ1RCBCbW5dY", + // tokenId: 1); + // } + // + // [UnityTest] + // public IEnumerator GetContractMetadataTest() + // { + // TezosConfig.Instance.Network = NetworkType.mainnet; + // var api = new TezosAPI(GetDataProviderConfig()); + // + // yield return api.GetContractMetadata( + // callback: metadata => { Assert.IsFalse(string.IsNullOrEmpty(metadata.ToString())); }, + // contractAddress: "KT1BRADdqGk2eLmMqvyWzqVmPQ1RCBCbW5dY"); + // } + // + // [UnityTest] + // public IEnumerator GetTokensForContractTest() + // { + // TezosConfig.Instance.Network = NetworkType.mainnet; + // var api = new TezosAPI(GetDataProviderConfig()); + // const int expectedItems = 5; + // + // yield return api.GetTokensForContract( + // callback: tokens => { Assert.AreEqual(expectedItems, tokens.Count()); }, + // contractAddress: "KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton", + // withMetadata: true, + // maxItems: expectedItems, + // orderBy: new TokensForContractOrder.Default(0)); + // } + // + // [UnityTest] + // public IEnumerator GetOperationStatusTest() + // { + // TezosConfig.Instance.Network = NetworkType.ghostnet; + // var api = new TezosAPI(GetDataProviderConfig()); + // const bool expectedResult = true; + // + // yield return api.GetOperationStatus(status => { Assert.AreEqual(expectedResult, status); }, + // "oo4gj5tfvnE1LKsRp6BSm7VB5LAoqzogJXPwGWSYBjmUgNsmk8M"); + // } + // + // [UnityTest] + // public IEnumerator GetLatestBlockLevelTest() + // { + // TezosConfig.Instance.Network = NetworkType.mainnet; + // var api = new TezosAPI(GetDataProviderConfig()); + // + // yield return api.GetLatestBlockLevel(latestBlockLevel => { Assert.IsTrue(latestBlockLevel > 0); }); + // } + // + // [UnityTest] + // public IEnumerator GetOriginatedContractsForOwnerTest() + // { + // TezosConfig.Instance.Network = NetworkType.ghostnet; + // var api = new TezosAPI(GetDataProviderConfig()); + // + // var codeHash = Resources.Load("Contracts/FA2TokenContractCodeHash") + // .text; + // + // yield return api.GetOriginatedContractsForOwner( + // callback: originatedContracts => + // { + // Assert.IsTrue(originatedContracts.Any()); + // }, + // creator: "tz1Xqbt2AZcSqRXxBZp6fBnnm1eEm9JxJPRB", + // codeHash: codeHash, + // maxItems: 1000, + // orderBy: new OriginatedContractsForOwnerOrder.ByLastActivityTimeDesc(0)); + // } + } - yield return api.GetOriginatedContractsForOwner( - callback: originatedContracts => - { - Assert.IsTrue(originatedContracts.Any()); - }, - creator: "tz1Xqbt2AZcSqRXxBZp6fBnnm1eEm9JxJPRB", - codeHash: codeHash, - maxItems: 1000, - orderBy: new OriginatedContractsForOwnerOrder.ByLastActivityTimeDesc(0)); - } - } } \ No newline at end of file diff --git a/Tests/Runtime/Runtime.asmdef b/Tests/Runtime/TezosSDK.RuntimeTests.asmdef similarity index 67% rename from Tests/Runtime/Runtime.asmdef rename to Tests/Runtime/TezosSDK.RuntimeTests.asmdef index f845c1ff..99fde880 100644 --- a/Tests/Runtime/Runtime.asmdef +++ b/Tests/Runtime/TezosSDK.RuntimeTests.asmdef @@ -1,9 +1,10 @@ { - "name": "Runtime", + "name": "TezosSDK.RuntimeTests", + "rootNamespace": "", "references": [ - "UnityEngine.TestRunner", - "UnityEditor.TestRunner", - "com.trilitech.tezos-unity-sdk" + "GUID:27619889b8ba8c24980f49ee34dbb44a", + "GUID:0acc523941302664db1f4e527237feb3", + "GUID:0c0f402fc1cb344ef87d37f5a81f2739" ], "includePlatforms": [], "excludePlatforms": [], diff --git a/Tests/Runtime/Runtime.asmdef.meta b/Tests/Runtime/TezosSDK.RuntimeTests.asmdef.meta similarity index 100% rename from Tests/Runtime/Runtime.asmdef.meta rename to Tests/Runtime/TezosSDK.RuntimeTests.asmdef.meta diff --git a/Tests/Runtime/TokenContractTests.cs b/Tests/Runtime/TokenContractTests.cs index a5b7b978..aaf2d14b 100644 --- a/Tests/Runtime/TokenContractTests.cs +++ b/Tests/Runtime/TokenContractTests.cs @@ -1,26 +1,29 @@ -// using System.Collections; -// using System.Linq; -// using System.Threading.Tasks; -// using Beacon.Sdk.Beacon.Permission; -// using TezosSDK.Tezos; -// using TezosSDK.Tezos.API; -// using TezosSDK.Tezos.API.Models; -// using TezosSDK.Tezos.API.Models.Filters; -// using UnityEngine; -// using UnityEngine.TestTools; -// -// namespace Tests.Runtime -// { -// public class TokenContractTests -// { -// [UnityTest] -// public IEnumerator DeployContractTest() -// { -// TezosConfig.Instance.Network = NetworkType.ghostnet; -// var tokenContract = new TokenContract(); -// var deployTask = tokenContract.Deploy(); -// yield return new WaitUntil(() => deployTask.IsCompleted); -// var result = deployTask.Result; -// } -// } -// } \ No newline at end of file +using System.Collections; +using System.Linq; +using System.Threading.Tasks; +using Beacon.Sdk.Beacon.Permission; +using TezosSDK.Tezos; +using TezosSDK.Tezos.API; +using TezosSDK.Tezos.API.Models; +using TezosSDK.Tezos.API.Models.Filters; +using UnityEngine; +using UnityEngine.TestTools; + +namespace Tests.Runtime +{ + public class TokenContractTests + { + [UnityTest] + public IEnumerator DeployContractTest() + { + // TezosConfig.Instance.Network = NetworkType.ghostnet; + // var tokenContract = new TokenContract(); + // var deployTask = tokenContract.Deploy(); + // yield return new WaitUntil(() => deployTask.IsCompleted); + // var result = deployTask.Result; + + yield return null; + } + } +} + diff --git a/WebGLFrontend/output/StreamingAssets/webgl-frontend.js b/WebGLFrontend/output/StreamingAssets/webgl-frontend.js index 18f907a0..7b5cbd92 100644 --- a/WebGLFrontend/output/StreamingAssets/webgl-frontend.js +++ b/WebGLFrontend/output/StreamingAssets/webgl-frontend.js @@ -1,2 +1,2 @@ /*! For license information please see webgl-frontend.js.LICENSE.txt */ -(()=>{var e={8099:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n(7117);function r(e,t,n){return void 0===t&&(t=new Uint8Array(2)),void 0===n&&(n=0),t[n+0]=e>>>8,t[n+1]=e>>>0,t}function o(e,t,n){return void 0===t&&(t=new Uint8Array(2)),void 0===n&&(n=0),t[n+0]=e>>>0,t[n+1]=e>>>8,t}function s(e,t){return void 0===t&&(t=0),e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]}function a(e,t){return void 0===t&&(t=0),(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0}function c(e,t){return void 0===t&&(t=0),e[t+3]<<24|e[t+2]<<16|e[t+1]<<8|e[t]}function l(e,t){return void 0===t&&(t=0),(e[t+3]<<24|e[t+2]<<16|e[t+1]<<8|e[t])>>>0}function u(e,t,n){return void 0===t&&(t=new Uint8Array(4)),void 0===n&&(n=0),t[n+0]=e>>>24,t[n+1]=e>>>16,t[n+2]=e>>>8,t[n+3]=e>>>0,t}function h(e,t,n){return void 0===t&&(t=new Uint8Array(4)),void 0===n&&(n=0),t[n+0]=e>>>0,t[n+1]=e>>>8,t[n+2]=e>>>16,t[n+3]=e>>>24,t}function d(e,t,n){return void 0===t&&(t=new Uint8Array(8)),void 0===n&&(n=0),u(e/4294967296>>>0,t,n),u(e>>>0,t,n+4),t}function f(e,t,n){return void 0===t&&(t=new Uint8Array(8)),void 0===n&&(n=0),h(e>>>0,t,n),h(e/4294967296>>>0,t,n+4),t}t.readInt16BE=function(e,t){return void 0===t&&(t=0),(e[t+0]<<8|e[t+1])<<16>>16},t.readUint16BE=function(e,t){return void 0===t&&(t=0),(e[t+0]<<8|e[t+1])>>>0},t.readInt16LE=function(e,t){return void 0===t&&(t=0),(e[t+1]<<8|e[t])<<16>>16},t.readUint16LE=function(e,t){return void 0===t&&(t=0),(e[t+1]<<8|e[t])>>>0},t.writeUint16BE=r,t.writeInt16BE=r,t.writeUint16LE=o,t.writeInt16LE=o,t.readInt32BE=s,t.readUint32BE=a,t.readInt32LE=c,t.readUint32LE=l,t.writeUint32BE=u,t.writeInt32BE=u,t.writeUint32LE=h,t.writeInt32LE=h,t.readInt64BE=function(e,t){void 0===t&&(t=0);var n=s(e,t),i=s(e,t+4);return 4294967296*n+i-4294967296*(i>>31)},t.readUint64BE=function(e,t){return void 0===t&&(t=0),4294967296*a(e,t)+a(e,t+4)},t.readInt64LE=function(e,t){void 0===t&&(t=0);var n=c(e,t);return 4294967296*c(e,t+4)+n-4294967296*(n>>31)},t.readUint64LE=function(e,t){void 0===t&&(t=0);var n=l(e,t);return 4294967296*l(e,t+4)+n},t.writeUint64BE=d,t.writeInt64BE=d,t.writeUint64LE=f,t.writeInt64LE=f,t.readUintBE=function(e,t,n){if(void 0===n&&(n=0),e%8!=0)throw new Error("readUintBE supports only bitLengths divisible by 8");if(e/8>t.length-n)throw new Error("readUintBE: array is too short for the given bitLength");for(var i=0,r=1,o=e/8+n-1;o>=n;o--)i+=t[o]*r,r*=256;return i},t.readUintLE=function(e,t,n){if(void 0===n&&(n=0),e%8!=0)throw new Error("readUintLE supports only bitLengths divisible by 8");if(e/8>t.length-n)throw new Error("readUintLE: array is too short for the given bitLength");for(var i=0,r=1,o=n;o=r;s--)n[s]=t/o&255,o*=256;return n},t.writeUintLE=function(e,t,n,r){if(void 0===n&&(n=new Uint8Array(e/8)),void 0===r&&(r=0),e%8!=0)throw new Error("writeUintLE supports only bitLengths divisible by 8");if(!i.isSafeInteger(t))throw new Error("writeUintLE value must be an integer");for(var o=1,s=r;s{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n(8099),r=n(7309);t.BLOCK_SIZE=128,t.DIGEST_LENGTH=64,t.KEY_LENGTH=64,t.PERSONALIZATION_LENGTH=16,t.SALT_LENGTH=16,t.MAX_LEAF_SIZE=Math.pow(2,32)-1,t.MAX_FANOUT=255,t.MAX_MAX_DEPTH=255;var o=new Uint32Array([4089235720,1779033703,2227873595,3144134277,4271175723,1013904242,1595750129,2773480762,2917565137,1359893119,725511199,2600822924,4215389547,528734635,327033209,1541459225]),s=[[0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30],[28,20,8,16,18,30,26,12,2,24,0,4,22,14,10,6],[22,16,24,0,10,4,30,26,20,28,6,12,14,2,18,8],[14,18,6,2,26,24,22,28,4,12,10,20,8,0,30,16],[18,0,10,14,4,8,20,30,28,2,22,24,12,16,6,26],[4,24,12,20,0,22,16,6,8,26,14,10,30,28,2,18],[24,10,2,30,28,26,8,20,0,14,12,6,18,4,16,22],[26,22,14,28,24,2,6,18,10,0,30,8,16,12,4,20],[12,30,28,18,22,6,0,16,24,4,26,14,2,8,20,10],[20,4,16,8,14,12,2,10,30,22,18,28,6,24,26,0],[0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30],[28,20,8,16,18,30,26,12,2,24,0,4,22,14,10,6]],a=function(){function e(e,n){if(void 0===e&&(e=64),this.digestLength=e,this.blockSize=t.BLOCK_SIZE,this._state=new Int32Array(o),this._buffer=new Uint8Array(t.BLOCK_SIZE),this._bufferLength=0,this._ctr=new Uint32Array(4),this._flag=new Uint32Array(4),this._lastNode=!1,this._finished=!1,this._vtmp=new Uint32Array(32),this._mtmp=new Uint32Array(32),e<1||e>t.DIGEST_LENGTH)throw new Error("blake2b: wrong digest length");n&&this.validateConfig(n);var r=0;n&&n.key&&(r=n.key.length);var s=1,a=1;n&&n.tree&&(s=n.tree.fanout,a=n.tree.maxDepth),this._state[0]^=e|r<<8|s<<16|a<<24,n&&n.tree&&(this._state[1]^=n.tree.leafSize,this._state[2]^=n.tree.nodeOffsetLowBits,this._state[3]^=n.tree.nodeOffsetHighBits,this._state[4]^=n.tree.nodeDepth|n.tree.innerDigestLength<<8,this._lastNode=n.tree.lastNode),n&&n.salt&&(this._state[8]^=i.readUint32LE(n.salt,0),this._state[9]^=i.readUint32LE(n.salt,4),this._state[10]^=i.readUint32LE(n.salt,8),this._state[11]^=i.readUint32LE(n.salt,12)),n&&n.personalization&&(this._state[12]^=i.readUint32LE(n.personalization,0),this._state[13]^=i.readUint32LE(n.personalization,4),this._state[14]^=i.readUint32LE(n.personalization,8),this._state[15]^=i.readUint32LE(n.personalization,12)),this._initialState=new Uint32Array(this._state),n&&n.key&&r>0&&(this._paddedKey=new Uint8Array(t.BLOCK_SIZE),this._paddedKey.set(n.key),this._buffer.set(this._paddedKey),this._bufferLength=t.BLOCK_SIZE)}return e.prototype.reset=function(){return this._state.set(this._initialState),this._paddedKey?(this._buffer.set(this._paddedKey),this._bufferLength=t.BLOCK_SIZE):this._bufferLength=0,r.wipe(this._ctr),r.wipe(this._flag),this._finished=!1,this},e.prototype.validateConfig=function(e){if(e.key&&e.key.length>t.KEY_LENGTH)throw new Error("blake2b: wrong key length");if(e.salt&&e.salt.length!==t.SALT_LENGTH)throw new Error("blake2b: wrong salt length");if(e.personalization&&e.personalization.length!==t.PERSONALIZATION_LENGTH)throw new Error("blake2b: wrong personalization length");if(e.tree){if(e.tree.fanout<0||e.tree.fanout>t.MAX_FANOUT)throw new Error("blake2b: wrong tree fanout");if(e.tree.maxDepth<0||e.tree.maxDepth>t.MAX_MAX_DEPTH)throw new Error("blake2b: wrong tree depth");if(e.tree.leafSize<0||e.tree.leafSize>t.MAX_LEAF_SIZE)throw new Error("blake2b: wrong leaf size");if(e.tree.innerDigestLength<0||e.tree.innerDigestLength>t.DIGEST_LENGTH)throw new Error("blake2b: wrong tree inner digest length")}},e.prototype.update=function(e,n){if(void 0===n&&(n=e.length),this._finished)throw new Error("blake2b: can't update because hash was finished.");var i=t.BLOCK_SIZE-this._bufferLength,r=0;if(0===n)return this;if(n>i){for(var o=0;ot.BLOCK_SIZE;){for(o=0;o>>16,I=65535&p,A=p>>>16;S+=g>>>16,I+=65535&y,A+=y>>>16,I+=(S+=(E+=65535&g)>>>16)>>>16,E=65535&(f=65535&E|S<<16),S=f>>>16,I=65535&(p=65535&I|(A+=I>>>16)<<16),A=p>>>16,S+=l>>>16,I+=65535&u,A+=u>>>16,f=65535&(E+=65535&l)|(S+=E>>>16)<<16,E=w^=p=65535&(I+=S>>>16)|(A+=I>>>16)<<16,w=v^=f,v=E,E=65535&b,S=b>>>16,I=65535&m,A=m>>>16,S+=v>>>16,I+=65535&w,A+=w>>>16,E=(g^=b=65535&(E+=65535&v)|(S+=E>>>16)<<16)<<8|(y^=m=65535&(I+=S>>>16)|(A+=I>>>16)<<16)>>>24,g=y<<8|g>>>24,y=E,E=65535&f,S=f>>>16,I=65535&p,A=p>>>16,S+=g>>>16,I+=65535&y,A+=y>>>16,I+=(S+=(E+=65535&g)>>>16)>>>16,E=65535&(f=65535&E|S<<16),S=f>>>16,I=65535&(p=65535&I|(A+=I>>>16)<<16),A=p>>>16,S+=h>>>16,I+=65535&d,A+=d>>>16,E=(v^=f=65535&(E+=65535&h)|(S+=E>>>16)<<16)<<16|(w^=p=65535&(I+=S>>>16)|(A+=I>>>16)<<16)>>>16,v=w<<16|v>>>16,w=E,E=65535&b,S=b>>>16,I=65535&m,A=m>>>16,S+=v>>>16,I+=65535&w,A+=w>>>16,E=(y^=m=65535&(I+=(S+=(E+=65535&v)>>>16)>>>16)|(A+=I>>>16)<<16)<<1|(g^=b=65535&E|S<<16)>>>31,g=g<<1|y>>>31,y=E,e[t]=f,e[o]=p,e[n]=g,e[s]=y,e[i]=b,e[a]=m,e[r]=v,e[c]=w},e.prototype._incrementCounter=function(e){for(var t=0;t<3;t++){var n=this._ctr[t]+e;if(this._ctr[t]=n>>>0,this._ctr[t]===n)return;e=1}},e.prototype._processBlock=function(e){this._incrementCounter(e);var t=this._vtmp;t.set(this._state),t.set(o,16),t[24]^=this._ctr[0],t[25]^=this._ctr[1],t[26]^=this._ctr[2],t[27]^=this._ctr[3],t[28]^=this._flag[0],t[29]^=this._flag[1],t[30]^=this._flag[2],t[31]^=this._flag[3];for(var n=this._mtmp,r=0;r<32;r++)n[r]=i.readUint32LE(this._buffer,4*r);for(var a=0;a<12;a++)this._G(t,0,8,16,24,1,9,17,25,n[s[a][0]],n[s[a][0]+1],n[s[a][1]],n[s[a][1]+1]),this._G(t,2,10,18,26,3,11,19,27,n[s[a][2]],n[s[a][2]+1],n[s[a][3]],n[s[a][3]+1]),this._G(t,4,12,20,28,5,13,21,29,n[s[a][4]],n[s[a][4]+1],n[s[a][5]],n[s[a][5]+1]),this._G(t,6,14,22,30,7,15,23,31,n[s[a][6]],n[s[a][6]+1],n[s[a][7]],n[s[a][7]+1]),this._G(t,0,10,20,30,1,11,21,31,n[s[a][8]],n[s[a][8]+1],n[s[a][9]],n[s[a][9]+1]),this._G(t,2,12,22,24,3,13,23,25,n[s[a][10]],n[s[a][10]+1],n[s[a][11]],n[s[a][11]+1]),this._G(t,4,14,16,26,5,15,17,27,n[s[a][12]],n[s[a][12]+1],n[s[a][13]],n[s[a][13]+1]),this._G(t,6,8,18,28,7,9,19,29,n[s[a][14]],n[s[a][14]+1],n[s[a][15]],n[s[a][15]+1]);for(r=0;r<16;r++)this._state[r]^=t[r]^t[r+16]},e}();t.BLAKE2b=a,t.hash=function(e,n,i){void 0===n&&(n=t.DIGEST_LENGTH);var r=new a(n,i);r.update(e);var o=r.digest();return r.clean(),o}},3683:(e,t)=>{"use strict";t.z=function(){for(var e=0,t=0;t{"use strict";var i=n(5439),r=n(3027),o=n(7309),s=n(8099),a=n(4153);t.Cv=32,t.WH=12,t.pg=16;var c=new Uint8Array(16),l=function(){function e(e){if(this.nonceLength=t.WH,this.tagLength=t.pg,e.length!==t.Cv)throw new Error("ChaCha20Poly1305 needs 32-byte key");this._key=new Uint8Array(e)}return e.prototype.seal=function(e,t,n,r){if(e.length>16)throw new Error("ChaCha20Poly1305: incorrect nonce length");var s=new Uint8Array(16);s.set(e,s.length-e.length);var a=new Uint8Array(32);i.stream(this._key,s,a,4);var c,l=t.length+this.tagLength;if(r){if(r.length!==l)throw new Error("ChaCha20Poly1305: incorrect destination length");c=r}else c=new Uint8Array(l);return i.streamXOR(this._key,s,t,c,4),this._authenticate(c.subarray(c.length-this.tagLength,c.length),a,c.subarray(0,c.length-this.tagLength),n),o.wipe(s),c},e.prototype.open=function(e,t,n,r){if(e.length>16)throw new Error("ChaCha20Poly1305: incorrect nonce length");if(t.length0&&a.update(c.subarray(i.length%16))),a.update(n),n.length%16>0&&a.update(c.subarray(n.length%16));var l=new Uint8Array(8);i&&s.writeUint64LE(i.length,l),a.update(l),s.writeUint64LE(n.length,l),a.update(l);for(var u=a.digest(),h=0;h{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n(8099),r=n(7309),o=20;function s(e,t,n){for(var r=1634760805,s=857760878,a=2036477234,c=1797285236,l=n[3]<<24|n[2]<<16|n[1]<<8|n[0],u=n[7]<<24|n[6]<<16|n[5]<<8|n[4],h=n[11]<<24|n[10]<<16|n[9]<<8|n[8],d=n[15]<<24|n[14]<<16|n[13]<<8|n[12],f=n[19]<<24|n[18]<<16|n[17]<<8|n[16],p=n[23]<<24|n[22]<<16|n[21]<<8|n[20],g=n[27]<<24|n[26]<<16|n[25]<<8|n[24],y=n[31]<<24|n[30]<<16|n[29]<<8|n[28],b=t[3]<<24|t[2]<<16|t[1]<<8|t[0],m=t[7]<<24|t[6]<<16|t[5]<<8|t[4],v=t[11]<<24|t[10]<<16|t[9]<<8|t[8],w=t[15]<<24|t[14]<<16|t[13]<<8|t[12],E=r,S=s,I=a,A=c,R=l,x=u,M=h,T=d,k=f,O=p,U=g,C=y,P=b,N=m,K=v,L=w,q=0;q>>16|P<<16)|0)>>>20|R<<12,x=(x^=O=O+(N=(N^=S=S+x|0)>>>16|N<<16)|0)>>>20|x<<12,M=(M^=U=U+(K=(K^=I=I+M|0)>>>16|K<<16)|0)>>>20|M<<12,T=(T^=C=C+(L=(L^=A=A+T|0)>>>16|L<<16)|0)>>>20|T<<12,M=(M^=U=U+(K=(K^=I=I+M|0)>>>24|K<<8)|0)>>>25|M<<7,T=(T^=C=C+(L=(L^=A=A+T|0)>>>24|L<<8)|0)>>>25|T<<7,x=(x^=O=O+(N=(N^=S=S+x|0)>>>24|N<<8)|0)>>>25|x<<7,R=(R^=k=k+(P=(P^=E=E+R|0)>>>24|P<<8)|0)>>>25|R<<7,x=(x^=U=U+(L=(L^=E=E+x|0)>>>16|L<<16)|0)>>>20|x<<12,M=(M^=C=C+(P=(P^=S=S+M|0)>>>16|P<<16)|0)>>>20|M<<12,T=(T^=k=k+(N=(N^=I=I+T|0)>>>16|N<<16)|0)>>>20|T<<12,R=(R^=O=O+(K=(K^=A=A+R|0)>>>16|K<<16)|0)>>>20|R<<12,T=(T^=k=k+(N=(N^=I=I+T|0)>>>24|N<<8)|0)>>>25|T<<7,R=(R^=O=O+(K=(K^=A=A+R|0)>>>24|K<<8)|0)>>>25|R<<7,M=(M^=C=C+(P=(P^=S=S+M|0)>>>24|P<<8)|0)>>>25|M<<7,x=(x^=U=U+(L=(L^=E=E+x|0)>>>24|L<<8)|0)>>>25|x<<7;i.writeUint32LE(E+r|0,e,0),i.writeUint32LE(S+s|0,e,4),i.writeUint32LE(I+a|0,e,8),i.writeUint32LE(A+c|0,e,12),i.writeUint32LE(R+l|0,e,16),i.writeUint32LE(x+u|0,e,20),i.writeUint32LE(M+h|0,e,24),i.writeUint32LE(T+d|0,e,28),i.writeUint32LE(k+f|0,e,32),i.writeUint32LE(O+p|0,e,36),i.writeUint32LE(U+g|0,e,40),i.writeUint32LE(C+y|0,e,44),i.writeUint32LE(P+b|0,e,48),i.writeUint32LE(N+m|0,e,52),i.writeUint32LE(K+v|0,e,56),i.writeUint32LE(L+w|0,e,60)}function a(e,t,n,i,o){if(void 0===o&&(o=0),32!==e.length)throw new Error("ChaCha: key size must be 32 bytes");if(i.length>>=8,t++;if(i>0)throw new Error("ChaCha: counter overflow")}t.streamXOR=a,t.stream=function(e,t,n,i){return void 0===i&&(i=0),r.wipe(n),a(e,t,n,n,i)}},4153:(e,t)=>{"use strict";function n(e,t){if(e.length!==t.length)return 0;for(var n=0,i=0;i>>8}Object.defineProperty(t,"__esModule",{value:!0}),t.select=function(e,t,n){return~(e-1)&t|e-1&n},t.lessOrEqual=function(e,t){return(0|e)-(0|t)-1>>>31&1},t.compare=n,t.equal=function(e,t){return 0!==e.length&&0!==t.length&&0!==n(e,t)}},1050:(e,t,n)=>{"use strict";t.zh=t.SH=t.Xx=t._w=t.aP=t.KS=t.jQ=void 0;const i=n(1416),r=n(3350),o=n(7309);function s(e){const t=new Float64Array(16);if(e)for(let n=0;n>16&1),n[e-1]&=65535;n[15]=i[15]-32767-(n[14]>>16&1);const e=n[15]>>16&1;n[14]&=65535,y(i,n,1-e)}for(let t=0;t<16;t++)e[2*t]=255&i[t],e[2*t+1]=i[t]>>8}function m(e,t){let n=0;for(let i=0;i<32;i++)n|=e[i]^t[i];return(1&n-1>>>8)-1}function v(e,t){const n=new Uint8Array(32),i=new Uint8Array(32);return b(n,e),b(i,t),m(n,i)}function w(e){const t=new Uint8Array(32);return b(t,e),1&t[0]}function E(e,t,n){for(let i=0;i<16;i++)e[i]=t[i]+n[i]}function S(e,t,n){for(let i=0;i<16;i++)e[i]=t[i]-n[i]}function I(e,t,n){let i,r,o=0,s=0,a=0,c=0,l=0,u=0,h=0,d=0,f=0,p=0,g=0,y=0,b=0,m=0,v=0,w=0,E=0,S=0,I=0,A=0,R=0,x=0,M=0,T=0,k=0,O=0,U=0,C=0,P=0,N=0,K=0,L=n[0],q=n[1],z=n[2],V=n[3],F=n[4],j=n[5],D=n[6],B=n[7],W=n[8],J=n[9],Z=n[10],Q=n[11],H=n[12],G=n[13],Y=n[14],X=n[15];i=t[0],o+=i*L,s+=i*q,a+=i*z,c+=i*V,l+=i*F,u+=i*j,h+=i*D,d+=i*B,f+=i*W,p+=i*J,g+=i*Z,y+=i*Q,b+=i*H,m+=i*G,v+=i*Y,w+=i*X,i=t[1],s+=i*L,a+=i*q,c+=i*z,l+=i*V,u+=i*F,h+=i*j,d+=i*D,f+=i*B,p+=i*W,g+=i*J,y+=i*Z,b+=i*Q,m+=i*H,v+=i*G,w+=i*Y,E+=i*X,i=t[2],a+=i*L,c+=i*q,l+=i*z,u+=i*V,h+=i*F,d+=i*j,f+=i*D,p+=i*B,g+=i*W,y+=i*J,b+=i*Z,m+=i*Q,v+=i*H,w+=i*G,E+=i*Y,S+=i*X,i=t[3],c+=i*L,l+=i*q,u+=i*z,h+=i*V,d+=i*F,f+=i*j,p+=i*D,g+=i*B,y+=i*W,b+=i*J,m+=i*Z,v+=i*Q,w+=i*H,E+=i*G,S+=i*Y,I+=i*X,i=t[4],l+=i*L,u+=i*q,h+=i*z,d+=i*V,f+=i*F,p+=i*j,g+=i*D,y+=i*B,b+=i*W,m+=i*J,v+=i*Z,w+=i*Q,E+=i*H,S+=i*G,I+=i*Y,A+=i*X,i=t[5],u+=i*L,h+=i*q,d+=i*z,f+=i*V,p+=i*F,g+=i*j,y+=i*D,b+=i*B,m+=i*W,v+=i*J,w+=i*Z,E+=i*Q,S+=i*H,I+=i*G,A+=i*Y,R+=i*X,i=t[6],h+=i*L,d+=i*q,f+=i*z,p+=i*V,g+=i*F,y+=i*j,b+=i*D,m+=i*B,v+=i*W,w+=i*J,E+=i*Z,S+=i*Q,I+=i*H,A+=i*G,R+=i*Y,x+=i*X,i=t[7],d+=i*L,f+=i*q,p+=i*z,g+=i*V,y+=i*F,b+=i*j,m+=i*D,v+=i*B,w+=i*W,E+=i*J,S+=i*Z,I+=i*Q,A+=i*H,R+=i*G,x+=i*Y,M+=i*X,i=t[8],f+=i*L,p+=i*q,g+=i*z,y+=i*V,b+=i*F,m+=i*j,v+=i*D,w+=i*B,E+=i*W,S+=i*J,I+=i*Z,A+=i*Q,R+=i*H,x+=i*G,M+=i*Y,T+=i*X,i=t[9],p+=i*L,g+=i*q,y+=i*z,b+=i*V,m+=i*F,v+=i*j,w+=i*D,E+=i*B,S+=i*W,I+=i*J,A+=i*Z,R+=i*Q,x+=i*H,M+=i*G,T+=i*Y,k+=i*X,i=t[10],g+=i*L,y+=i*q,b+=i*z,m+=i*V,v+=i*F,w+=i*j,E+=i*D,S+=i*B,I+=i*W,A+=i*J,R+=i*Z,x+=i*Q,M+=i*H,T+=i*G,k+=i*Y,O+=i*X,i=t[11],y+=i*L,b+=i*q,m+=i*z,v+=i*V,w+=i*F,E+=i*j,S+=i*D,I+=i*B,A+=i*W,R+=i*J,x+=i*Z,M+=i*Q,T+=i*H,k+=i*G,O+=i*Y,U+=i*X,i=t[12],b+=i*L,m+=i*q,v+=i*z,w+=i*V,E+=i*F,S+=i*j,I+=i*D,A+=i*B,R+=i*W,x+=i*J,M+=i*Z,T+=i*Q,k+=i*H,O+=i*G,U+=i*Y,C+=i*X,i=t[13],m+=i*L,v+=i*q,w+=i*z,E+=i*V,S+=i*F,I+=i*j,A+=i*D,R+=i*B,x+=i*W,M+=i*J,T+=i*Z,k+=i*Q,O+=i*H,U+=i*G,C+=i*Y,P+=i*X,i=t[14],v+=i*L,w+=i*q,E+=i*z,S+=i*V,I+=i*F,A+=i*j,R+=i*D,x+=i*B,M+=i*W,T+=i*J,k+=i*Z,O+=i*Q,U+=i*H,C+=i*G,P+=i*Y,N+=i*X,i=t[15],w+=i*L,E+=i*q,S+=i*z,I+=i*V,A+=i*F,R+=i*j,x+=i*D,M+=i*B,T+=i*W,k+=i*J,O+=i*Z,U+=i*Q,C+=i*H,P+=i*G,N+=i*Y,K+=i*X,o+=38*E,s+=38*S,a+=38*I,c+=38*A,l+=38*R,u+=38*x,h+=38*M,d+=38*T,f+=38*k,p+=38*O,g+=38*U,y+=38*C,b+=38*P,m+=38*N,v+=38*K,r=1,i=o+r+65535,r=Math.floor(i/65536),o=i-65536*r,i=s+r+65535,r=Math.floor(i/65536),s=i-65536*r,i=a+r+65535,r=Math.floor(i/65536),a=i-65536*r,i=c+r+65535,r=Math.floor(i/65536),c=i-65536*r,i=l+r+65535,r=Math.floor(i/65536),l=i-65536*r,i=u+r+65535,r=Math.floor(i/65536),u=i-65536*r,i=h+r+65535,r=Math.floor(i/65536),h=i-65536*r,i=d+r+65535,r=Math.floor(i/65536),d=i-65536*r,i=f+r+65535,r=Math.floor(i/65536),f=i-65536*r,i=p+r+65535,r=Math.floor(i/65536),p=i-65536*r,i=g+r+65535,r=Math.floor(i/65536),g=i-65536*r,i=y+r+65535,r=Math.floor(i/65536),y=i-65536*r,i=b+r+65535,r=Math.floor(i/65536),b=i-65536*r,i=m+r+65535,r=Math.floor(i/65536),m=i-65536*r,i=v+r+65535,r=Math.floor(i/65536),v=i-65536*r,i=w+r+65535,r=Math.floor(i/65536),w=i-65536*r,o+=r-1+37*(r-1),r=1,i=o+r+65535,r=Math.floor(i/65536),o=i-65536*r,i=s+r+65535,r=Math.floor(i/65536),s=i-65536*r,i=a+r+65535,r=Math.floor(i/65536),a=i-65536*r,i=c+r+65535,r=Math.floor(i/65536),c=i-65536*r,i=l+r+65535,r=Math.floor(i/65536),l=i-65536*r,i=u+r+65535,r=Math.floor(i/65536),u=i-65536*r,i=h+r+65535,r=Math.floor(i/65536),h=i-65536*r,i=d+r+65535,r=Math.floor(i/65536),d=i-65536*r,i=f+r+65535,r=Math.floor(i/65536),f=i-65536*r,i=p+r+65535,r=Math.floor(i/65536),p=i-65536*r,i=g+r+65535,r=Math.floor(i/65536),g=i-65536*r,i=y+r+65535,r=Math.floor(i/65536),y=i-65536*r,i=b+r+65535,r=Math.floor(i/65536),b=i-65536*r,i=m+r+65535,r=Math.floor(i/65536),m=i-65536*r,i=v+r+65535,r=Math.floor(i/65536),v=i-65536*r,i=w+r+65535,r=Math.floor(i/65536),w=i-65536*r,o+=r-1+37*(r-1),e[0]=o,e[1]=s,e[2]=a,e[3]=c,e[4]=l,e[5]=u,e[6]=h,e[7]=d,e[8]=f,e[9]=p,e[10]=g,e[11]=y,e[12]=b,e[13]=m,e[14]=v,e[15]=w}function A(e,t){I(e,t,t)}function R(e,t){const n=s();let i;for(i=0;i<16;i++)n[i]=t[i];for(i=253;i>=0;i--)A(n,n),2!==i&&4!==i&&I(n,n,t);for(i=0;i<16;i++)e[i]=n[i]}function x(e,t){const n=s(),i=s(),r=s(),o=s(),a=s(),c=s(),l=s(),h=s(),d=s();S(n,e[1],e[0]),S(d,t[1],t[0]),I(n,n,d),E(i,e[0],e[1]),E(d,t[0],t[1]),I(i,i,d),I(r,e[3],t[3]),I(r,r,u),I(o,e[2],t[2]),E(o,o,o),S(a,i,n),S(c,o,r),E(l,o,r),E(h,i,n),I(e[0],a,c),I(e[1],h,l),I(e[2],l,c),I(e[3],a,h)}function M(e,t,n){for(let i=0;i<4;i++)y(e[i],t[i],n)}function T(e,t){const n=s(),i=s(),r=s();R(r,t[2]),I(n,t[0],r),I(i,t[1],r),b(e,i),e[31]^=w(n)<<7}function k(e,t,n){p(e[0],a),p(e[1],c),p(e[2],c),p(e[3],a);for(let i=255;i>=0;--i){const r=n[i/8|0]>>(7&i)&1;M(e,t,r),x(t,e),x(e,e),M(e,t,r)}}function O(e,t){const n=[s(),s(),s(),s()];p(n[0],h),p(n[1],d),p(n[2],c),I(n[3],h,d),k(e,n,t)}function U(e){if(e.length!==t.aP)throw new Error(`ed25519: seed must be ${t.aP} bytes`);const n=(0,r.hash)(e);n[0]&=248,n[31]&=127,n[31]|=64;const i=new Uint8Array(32),o=[s(),s(),s(),s()];O(o,n),T(i,o);const a=new Uint8Array(64);return a.set(e),a.set(i,32),{publicKey:i,secretKey:a}}t._w=U;const C=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function P(e,t){let n,i,r,o;for(i=63;i>=32;--i){for(n=0,r=i-32,o=i-12;r>4)*C[r],n=t[r]>>8,t[r]&=255;for(r=0;r<32;r++)t[r]-=n*C[r];for(i=0;i<32;i++)t[i+1]+=t[i]>>8,e[i]=255&t[i]}function N(e){const t=new Float64Array(64);for(let n=0;n<64;n++)t[n]=e[n];for(let t=0;t<64;t++)e[t]=0;P(e,t)}function K(e,t){const n=s(),i=s(),r=s(),o=s(),u=s(),h=s(),d=s();return p(e[2],c),function(e,t){for(let n=0;n<16;n++)e[n]=t[2*n]+(t[2*n+1]<<8);e[15]&=32767}(e[1],t),A(r,e[1]),I(o,r,l),S(r,r,e[2]),E(o,e[2],o),A(u,o),A(h,u),I(d,h,u),I(n,d,r),I(n,n,o),function(e,t){const n=s();let i;for(i=0;i<16;i++)n[i]=t[i];for(i=250;i>=0;i--)A(n,n),1!==i&&I(n,n,t);for(i=0;i<16;i++)e[i]=n[i]}(n,n),I(n,n,r),I(n,n,o),I(n,n,o),I(e[0],n,o),A(i,e[0]),I(i,i,o),v(i,r)&&I(e[0],e[0],f),A(i,e[0]),I(i,i,o),v(i,r)?-1:(w(e[0])===t[31]>>7&&S(e[0],a,e[0]),I(e[3],e[0],e[1]),0)}t.Xx=function(e,t){const n=new Float64Array(64),i=[s(),s(),s(),s()],o=(0,r.hash)(e.subarray(0,32));o[0]&=248,o[31]&=127,o[31]|=64;const a=new Uint8Array(64);a.set(o.subarray(32),32);const c=new r.SHA512;c.update(a.subarray(32)),c.update(t);const l=c.digest();c.clean(),N(l),O(i,l),T(a,i),c.reset(),c.update(a.subarray(0,32)),c.update(e.subarray(32)),c.update(t);const u=c.digest();N(u);for(let e=0;e<32;e++)n[e]=l[e];for(let e=0;e<32;e++)for(let t=0;t<32;t++)n[e+t]+=u[e]*o[t];return P(a.subarray(32),n),a},t.SH=function(e){let t=[s(),s(),s(),s()];if(K(t,e))throw new Error("Ed25519: invalid public key");let n=s(),i=s(),r=t[1];E(n,c,r),S(i,c,r),R(i,i),I(n,n,i);let o=new Uint8Array(32);return b(o,n),o},t.zh=function(e){const t=(0,r.hash)(e.subarray(0,32));t[0]&=248,t[31]&=127,t[31]|=64;const n=new Uint8Array(t.subarray(0,32));return(0,o.wipe)(t),n}},9984:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isSerializableHash=function(e){return void 0!==e.saveState&&void 0!==e.restoreState&&void 0!==e.cleanSavedState}},512:(e,t,n)=>{"use strict";var i=n(5629),r=n(7309),o=function(){function e(e,t,n,r){void 0===n&&(n=new Uint8Array(0)),this._counter=new Uint8Array(1),this._hash=e,this._info=r;var o=i.hmac(this._hash,n,t);this._hmac=new i.HMAC(e,o),this._buffer=new Uint8Array(this._hmac.digestLength),this._bufpos=this._buffer.length}return e.prototype._fillBuffer=function(){this._counter[0]++;var e=this._counter[0];if(0===e)throw new Error("hkdf: cannot expand more");this._hmac.reset(),e>1&&this._hmac.update(this._buffer),this._info&&this._hmac.update(this._info),this._hmac.update(this._counter),this._hmac.finish(this._buffer),this._bufpos=0},e.prototype.expand=function(e){for(var t=new Uint8Array(e),n=0;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n(9984),r=n(4153),o=n(7309),s=function(){function e(e,t){this._finished=!1,this._inner=new e,this._outer=new e,this.blockSize=this._outer.blockSize,this.digestLength=this._outer.digestLength;var n=new Uint8Array(this.blockSize);t.length>this.blockSize?this._inner.update(t).finish(n).clean():n.set(t);for(var r=0;r{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.mul=Math.imul||function(e,t){var n=65535&e,i=65535&t;return n*i+((e>>>16&65535)*i+n*(t>>>16&65535)<<16>>>0)|0},t.add=function(e,t){return e+t|0},t.sub=function(e,t){return e-t|0},t.rotl=function(e,t){return e<>>32-t},t.rotr=function(e,t){return e<<32-t|e>>>t},t.isInteger=Number.isInteger||function(e){return"number"==typeof e&&isFinite(e)&&Math.floor(e)===e},t.MAX_SAFE_INTEGER=9007199254740991,t.isSafeInteger=function(e){return t.isInteger(e)&&e>=-t.MAX_SAFE_INTEGER&&e<=t.MAX_SAFE_INTEGER}},19:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.openBox=t.box=t.precomputeSharedKey=t.generateKeyPair=void 0;const i=n(7664),r=n(7025),o=n(7801),s=n(7309);var a=n(7664);Object.defineProperty(t,"generateKeyPair",{enumerable:!0,get:function(){return a.generateKeyPair}});const c=new Uint8Array(16);function l(e,t){const n=(0,i.scalarMult)(t,e);return(0,r.hsalsa)(n,c,n),n}t.precomputeSharedKey=l,t.box=function(e,t,n,i){const r=l(e,t),a=(0,o.secretBox)(r,n,i);return(0,s.wipe)(r),a},t.openBox=function(e,t,n,i){const r=l(e,t),a=(0,o.openSecretBox)(r,n,i);return(0,s.wipe)(r),a}},450:function(e,t,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(e,t,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(t,n);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,i,r)}:function(e,t,n,i){void 0===i&&(i=n),e[i]=t[n]}),r=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||i(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),r(n(19),t),r(n(7801),t)},7801:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.generateKey=t.openSecretBox=t.secretBox=void 0;const i=n(7025),r=n(3027),o=n(7309),s=n(1416);t.secretBox=function(e,t,n){if(24!==t.length)throw new Error("secretBox nonce must be 24 bytes");const s=new Uint8Array(64),a=new Uint8Array(32);a.set(t),(0,i.stream)(e,a,s,8);const c=new Uint8Array(16+n.length);for(let e=0;e<32&&e32&&(0,i.streamXOR)(e,a,n.subarray(32),c.subarray(48),8);const l=(0,r.oneTimeAuth)(s.subarray(0,32),c.subarray(16));for(let e=0;e32&&(0,i.streamXOR)(e,a,l.subarray(32),u.subarray(32),8),(0,o.wipe)(c),(0,o.wipe)(s),(0,o.wipe)(a),u},t.generateKey=function(e){return(0,s.randomBytes)(32,e)}},3027:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n(4153),r=n(7309);t.DIGEST_LENGTH=16;var o=function(){function e(e){this.digestLength=t.DIGEST_LENGTH,this._buffer=new Uint8Array(16),this._r=new Uint16Array(10),this._h=new Uint16Array(10),this._pad=new Uint16Array(8),this._leftover=0,this._fin=0,this._finished=!1;var n=e[0]|e[1]<<8;this._r[0]=8191&n;var i=e[2]|e[3]<<8;this._r[1]=8191&(n>>>13|i<<3);var r=e[4]|e[5]<<8;this._r[2]=7939&(i>>>10|r<<6);var o=e[6]|e[7]<<8;this._r[3]=8191&(r>>>7|o<<9);var s=e[8]|e[9]<<8;this._r[4]=255&(o>>>4|s<<12),this._r[5]=s>>>1&8190;var a=e[10]|e[11]<<8;this._r[6]=8191&(s>>>14|a<<2);var c=e[12]|e[13]<<8;this._r[7]=8065&(a>>>11|c<<5);var l=e[14]|e[15]<<8;this._r[8]=8191&(c>>>8|l<<8),this._r[9]=l>>>5&127,this._pad[0]=e[16]|e[17]<<8,this._pad[1]=e[18]|e[19]<<8,this._pad[2]=e[20]|e[21]<<8,this._pad[3]=e[22]|e[23]<<8,this._pad[4]=e[24]|e[25]<<8,this._pad[5]=e[26]|e[27]<<8,this._pad[6]=e[28]|e[29]<<8,this._pad[7]=e[30]|e[31]<<8}return e.prototype._blocks=function(e,t,n){for(var i=this._fin?0:2048,r=this._h[0],o=this._h[1],s=this._h[2],a=this._h[3],c=this._h[4],l=this._h[5],u=this._h[6],h=this._h[7],d=this._h[8],f=this._h[9],p=this._r[0],g=this._r[1],y=this._r[2],b=this._r[3],m=this._r[4],v=this._r[5],w=this._r[6],E=this._r[7],S=this._r[8],I=this._r[9];n>=16;){var A=e[t+0]|e[t+1]<<8;r+=8191&A;var R=e[t+2]|e[t+3]<<8;o+=8191&(A>>>13|R<<3);var x=e[t+4]|e[t+5]<<8;s+=8191&(R>>>10|x<<6);var M=e[t+6]|e[t+7]<<8;a+=8191&(x>>>7|M<<9);var T=e[t+8]|e[t+9]<<8;c+=8191&(M>>>4|T<<12),l+=T>>>1&8191;var k=e[t+10]|e[t+11]<<8;u+=8191&(T>>>14|k<<2);var O=e[t+12]|e[t+13]<<8;h+=8191&(k>>>11|O<<5);var U=e[t+14]|e[t+15]<<8,C=0,P=C;P+=r*p,P+=o*(5*I),P+=s*(5*S),P+=a*(5*E),C=(P+=c*(5*w))>>>13,P&=8191,P+=l*(5*v),P+=u*(5*m),P+=h*(5*b),P+=(d+=8191&(O>>>8|U<<8))*(5*y);var N=C+=(P+=(f+=U>>>5|i)*(5*g))>>>13;N+=r*g,N+=o*p,N+=s*(5*I),N+=a*(5*S),C=(N+=c*(5*E))>>>13,N&=8191,N+=l*(5*w),N+=u*(5*v),N+=h*(5*m),N+=d*(5*b),C+=(N+=f*(5*y))>>>13,N&=8191;var K=C;K+=r*y,K+=o*g,K+=s*p,K+=a*(5*I),C=(K+=c*(5*S))>>>13,K&=8191,K+=l*(5*E),K+=u*(5*w),K+=h*(5*v),K+=d*(5*m);var L=C+=(K+=f*(5*b))>>>13;L+=r*b,L+=o*y,L+=s*g,L+=a*p,C=(L+=c*(5*I))>>>13,L&=8191,L+=l*(5*S),L+=u*(5*E),L+=h*(5*w),L+=d*(5*v);var q=C+=(L+=f*(5*m))>>>13;q+=r*m,q+=o*b,q+=s*y,q+=a*g,C=(q+=c*p)>>>13,q&=8191,q+=l*(5*I),q+=u*(5*S),q+=h*(5*E),q+=d*(5*w);var z=C+=(q+=f*(5*v))>>>13;z+=r*v,z+=o*m,z+=s*b,z+=a*y,C=(z+=c*g)>>>13,z&=8191,z+=l*p,z+=u*(5*I),z+=h*(5*S),z+=d*(5*E);var V=C+=(z+=f*(5*w))>>>13;V+=r*w,V+=o*v,V+=s*m,V+=a*b,C=(V+=c*y)>>>13,V&=8191,V+=l*g,V+=u*p,V+=h*(5*I),V+=d*(5*S);var F=C+=(V+=f*(5*E))>>>13;F+=r*E,F+=o*w,F+=s*v,F+=a*m,C=(F+=c*b)>>>13,F&=8191,F+=l*y,F+=u*g,F+=h*p,F+=d*(5*I);var j=C+=(F+=f*(5*S))>>>13;j+=r*S,j+=o*E,j+=s*w,j+=a*v,C=(j+=c*m)>>>13,j&=8191,j+=l*b,j+=u*y,j+=h*g,j+=d*p;var D=C+=(j+=f*(5*I))>>>13;D+=r*I,D+=o*S,D+=s*E,D+=a*w,C=(D+=c*v)>>>13,D&=8191,D+=l*m,D+=u*b,D+=h*y,D+=d*g,r=P=8191&(C=(C=((C+=(D+=f*p)>>>13)<<2)+C|0)+(P&=8191)|0),o=N+=C>>>=13,s=K&=8191,a=L&=8191,c=q&=8191,l=z&=8191,u=V&=8191,h=F&=8191,d=j&=8191,f=D&=8191,t+=16,n-=16}this._h[0]=r,this._h[1]=o,this._h[2]=s,this._h[3]=a,this._h[4]=c,this._h[5]=l,this._h[6]=u,this._h[7]=h,this._h[8]=d,this._h[9]=f},e.prototype.finish=function(e,t){void 0===t&&(t=0);var n,i,r,o,s=new Uint16Array(10);if(this._leftover){for(o=this._leftover,this._buffer[o++]=1;o<16;o++)this._buffer[o]=0;this._fin=1,this._blocks(this._buffer,0,16)}for(n=this._h[1]>>>13,this._h[1]&=8191,o=2;o<10;o++)this._h[o]+=n,n=this._h[o]>>>13,this._h[o]&=8191;for(this._h[0]+=5*n,n=this._h[0]>>>13,this._h[0]&=8191,this._h[1]+=n,n=this._h[1]>>>13,this._h[1]&=8191,this._h[2]+=n,s[0]=this._h[0]+5,n=s[0]>>>13,s[0]&=8191,o=1;o<10;o++)s[o]=this._h[o]+n,n=s[o]>>>13,s[o]&=8191;for(s[9]-=8192,i=(1^n)-1,o=0;o<10;o++)s[o]&=i;for(i=~i,o=0;o<10;o++)this._h[o]=this._h[o]&i|s[o];for(this._h[0]=65535&(this._h[0]|this._h[1]<<13),this._h[1]=65535&(this._h[1]>>>3|this._h[2]<<10),this._h[2]=65535&(this._h[2]>>>6|this._h[3]<<7),this._h[3]=65535&(this._h[3]>>>9|this._h[4]<<4),this._h[4]=65535&(this._h[4]>>>12|this._h[5]<<1|this._h[6]<<14),this._h[5]=65535&(this._h[6]>>>2|this._h[7]<<11),this._h[6]=65535&(this._h[7]>>>5|this._h[8]<<8),this._h[7]=65535&(this._h[8]>>>8|this._h[9]<<5),r=this._h[0]+this._pad[0],this._h[0]=65535&r,o=1;o<8;o++)r=(this._h[o]+this._pad[o]|0)+(r>>>16)|0,this._h[o]=65535&r;return e[t+0]=this._h[0]>>>0,e[t+1]=this._h[0]>>>8,e[t+2]=this._h[1]>>>0,e[t+3]=this._h[1]>>>8,e[t+4]=this._h[2]>>>0,e[t+5]=this._h[2]>>>8,e[t+6]=this._h[3]>>>0,e[t+7]=this._h[3]>>>8,e[t+8]=this._h[4]>>>0,e[t+9]=this._h[4]>>>8,e[t+10]=this._h[5]>>>0,e[t+11]=this._h[5]>>>8,e[t+12]=this._h[6]>>>0,e[t+13]=this._h[6]>>>8,e[t+14]=this._h[7]>>>0,e[t+15]=this._h[7]>>>8,this._finished=!0,this},e.prototype.update=function(e){var t,n=0,i=e.length;if(this._leftover){(t=16-this._leftover)>i&&(t=i);for(var r=0;r=16&&(t=i-i%16,this._blocks(e,n,t),n+=t,i-=t),i){for(r=0;r{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.randomStringForEntropy=t.randomString=t.randomUint32=t.randomBytes=t.defaultRandomSource=void 0;const i=n(6008),r=n(8099),o=n(7309);function s(e,n=t.defaultRandomSource){return n.randomBytes(e)}t.defaultRandomSource=new i.SystemRandomSource,t.randomBytes=s,t.randomUint32=function(e=t.defaultRandomSource){const n=s(4,e),i=(0,r.readUint32LE)(n);return(0,o.wipe)(n),i};const a="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";function c(e,n=a,i=t.defaultRandomSource){if(n.length<2)throw new Error("randomString charset is too short");if(n.length>256)throw new Error("randomString charset is too long");let r="";const c=n.length,l=256-256%c;for(;e>0;){const t=s(Math.ceil(256*e/l),i);for(let i=0;i0;i++){const o=t[i];o{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.BrowserRandomSource=void 0;t.BrowserRandomSource=class{constructor(){this.isAvailable=!1,this.isInstantiated=!1;const e="undefined"!=typeof self?self.crypto||self.msCrypto:null;e&&void 0!==e.getRandomValues&&(this._crypto=e,this.isAvailable=!0,this.isInstantiated=!0)}randomBytes(e){if(!this.isAvailable||!this._crypto)throw new Error("Browser random byte generator is not available.");const t=new Uint8Array(e);for(let e=0;e{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.NodeRandomSource=void 0;const i=n(7309);t.NodeRandomSource=class{constructor(){this.isAvailable=!1,this.isInstantiated=!1;{const e=n(5883);e&&e.randomBytes&&(this._crypto=e,this.isAvailable=!0,this.isInstantiated=!0)}}randomBytes(e){if(!this.isAvailable||!this._crypto)throw new Error("Node.js random byte generator is not available.");let t=this._crypto.randomBytes(e);if(t.length!==e)throw new Error("NodeRandomSource: got fewer bytes than requested");const n=new Uint8Array(e);for(let e=0;e{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SystemRandomSource=void 0;const i=n(5455),r=n(8871);t.SystemRandomSource=class{constructor(){return this.isAvailable=!1,this.name="",this._source=new i.BrowserRandomSource,this._source.isAvailable?(this.isAvailable=!0,void(this.name="Browser")):(this._source=new r.NodeRandomSource,this._source.isAvailable?(this.isAvailable=!0,void(this.name="Node")):void 0)}randomBytes(e){if(!this.isAvailable)throw new Error("System random byte generator is not available.");return this._source.randomBytes(e)}}},7318:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n(8099),r=n(7309),o=20;function s(e,t,n){for(var r,s=1634760805,a=n[3]<<24|n[2]<<16|n[1]<<8|n[0],c=n[7]<<24|n[6]<<16|n[5]<<8|n[4],l=n[11]<<24|n[10]<<16|n[9]<<8|n[8],u=n[15]<<24|n[14]<<16|n[13]<<8|n[12],h=857760878,d=t[3]<<24|t[2]<<16|t[1]<<8|t[0],f=t[7]<<24|t[6]<<16|t[5]<<8|t[4],p=t[11]<<24|t[10]<<16|t[9]<<8|t[8],g=t[15]<<24|t[14]<<16|t[13]<<8|t[12],y=2036477234,b=n[19]<<24|n[18]<<16|n[17]<<8|n[16],m=n[23]<<24|n[22]<<16|n[21]<<8|n[20],v=n[27]<<24|n[26]<<16|n[25]<<8|n[24],w=n[31]<<24|n[30]<<16|n[29]<<8|n[28],E=1797285236,S=s,I=a,A=c,R=l,x=u,M=h,T=d,k=f,O=p,U=g,C=y,P=b,N=m,K=v,L=w,q=E,z=0;z>>25)+S|0)<<9|r>>>23)+x|0)<<13|r>>>19)+O|0)<<18|r>>>14,M^=(r=(I^=(r=(K^=(r=(U^=(r=M+I|0)<<7|r>>>25)+M|0)<<9|r>>>23)+U|0)<<13|r>>>19)+K|0)<<18|r>>>14,C^=(r=(T^=(r=(A^=(r=(L^=(r=C+T|0)<<7|r>>>25)+C|0)<<9|r>>>23)+L|0)<<13|r>>>19)+A|0)<<18|r>>>14,q^=(r=(P^=(r=(k^=(r=(R^=(r=q+P|0)<<7|r>>>25)+q|0)<<9|r>>>23)+R|0)<<13|r>>>19)+k|0)<<18|r>>>14,S^=(r=(R^=(r=(A^=(r=(I^=(r=S+R|0)<<7|r>>>25)+S|0)<<9|r>>>23)+I|0)<<13|r>>>19)+A|0)<<18|r>>>14,M^=(r=(x^=(r=(k^=(r=(T^=(r=M+x|0)<<7|r>>>25)+M|0)<<9|r>>>23)+T|0)<<13|r>>>19)+k|0)<<18|r>>>14,C^=(r=(U^=(r=(O^=(r=(P^=(r=C+U|0)<<7|r>>>25)+C|0)<<9|r>>>23)+P|0)<<13|r>>>19)+O|0)<<18|r>>>14,q^=(r=(L^=(r=(K^=(r=(N^=(r=q+L|0)<<7|r>>>25)+q|0)<<9|r>>>23)+N|0)<<13|r>>>19)+K|0)<<18|r>>>14;i.writeUint32LE(S+s|0,e,0),i.writeUint32LE(I+a|0,e,4),i.writeUint32LE(A+c|0,e,8),i.writeUint32LE(R+l|0,e,12),i.writeUint32LE(x+u|0,e,16),i.writeUint32LE(M+h|0,e,20),i.writeUint32LE(T+d|0,e,24),i.writeUint32LE(k+f|0,e,28),i.writeUint32LE(O+p|0,e,32),i.writeUint32LE(U+g|0,e,36),i.writeUint32LE(C+y|0,e,40),i.writeUint32LE(P+b|0,e,44),i.writeUint32LE(N+m|0,e,48),i.writeUint32LE(K+v|0,e,52),i.writeUint32LE(L+w|0,e,56),i.writeUint32LE(q+E|0,e,60)}function a(e,t,n,i,o){if(void 0===o&&(o=0),32!==e.length)throw new Error("Salsa20: key size must be 32 bytes");if(i.length>>=8,t++;if(i>0)throw new Error("Salsa20: counter overflow")}t.streamXOR=a,t.stream=function(e,t,n,i){return void 0===i&&(i=0),r.wipe(n),a(e,t,n,n,i)}},3294:(e,t,n)=>{"use strict";var i=n(8099),r=n(7309);t.k=32,t.cn=64;var o=function(){function e(){this.digestLength=t.k,this.blockSize=t.cn,this._state=new Int32Array(8),this._temp=new Int32Array(64),this._buffer=new Uint8Array(128),this._bufferLength=0,this._bytesHashed=0,this._finished=!1,this.reset()}return e.prototype._initState=function(){this._state[0]=1779033703,this._state[1]=3144134277,this._state[2]=1013904242,this._state[3]=2773480762,this._state[4]=1359893119,this._state[5]=2600822924,this._state[6]=528734635,this._state[7]=1541459225},e.prototype.reset=function(){return this._initState(),this._bufferLength=0,this._bytesHashed=0,this._finished=!1,this},e.prototype.clean=function(){r.wipe(this._buffer),r.wipe(this._temp),this.reset()},e.prototype.update=function(e,t){if(void 0===t&&(t=e.length),this._finished)throw new Error("SHA256: can't update because hash was finished.");var n=0;if(this._bytesHashed+=t,this._bufferLength>0){for(;this._bufferLength0;)this._buffer[this._bufferLength++]=e[n++],t--;this._bufferLength===this.blockSize&&(a(this._temp,this._state,this._buffer,0,this.blockSize),this._bufferLength=0)}for(t>=this.blockSize&&(n=a(this._temp,this._state,e,n,t),t%=this.blockSize);t>0;)this._buffer[this._bufferLength++]=e[n++],t--;return this},e.prototype.finish=function(e){if(!this._finished){var t=this._bytesHashed,n=this._bufferLength,r=t/536870912|0,o=t<<3,s=t%64<56?64:128;this._buffer[n]=128;for(var c=n+1;c0?new Uint8Array(this._buffer):void 0,bufferLength:this._bufferLength,bytesHashed:this._bytesHashed}},e.prototype.restoreState=function(e){return this._state.set(e.state),this._bufferLength=e.bufferLength,e.buffer&&this._buffer.set(e.buffer),this._bytesHashed=e.bytesHashed,this._finished=!1,this},e.prototype.cleanSavedState=function(e){r.wipe(e.state),e.buffer&&r.wipe(e.buffer),e.bufferLength=0,e.bytesHashed=0},e}();t.mE=o;var s=new Int32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function a(e,t,n,r,o){for(;o>=64;){for(var a=t[0],c=t[1],l=t[2],u=t[3],h=t[4],d=t[5],f=t[6],p=t[7],g=0;g<16;g++){var y=r+4*g;e[g]=i.readUint32BE(n,y)}for(g=16;g<64;g++){var b=e[g-2],m=(b>>>17|b<<15)^(b>>>19|b<<13)^b>>>10,v=((b=e[g-15])>>>7|b<<25)^(b>>>18|b<<14)^b>>>3;e[g]=(m+e[g-7]|0)+(v+e[g-16]|0)}for(g=0;g<64;g++){m=(((h>>>6|h<<26)^(h>>>11|h<<21)^(h>>>25|h<<7))+(h&d^~h&f)|0)+(p+(s[g]+e[g]|0)|0)|0,v=((a>>>2|a<<30)^(a>>>13|a<<19)^(a>>>22|a<<10))+(a&c^a&l^c&l)|0;p=f,f=d,d=h,h=u+m|0,u=l,l=c,c=a,a=m+v|0}t[0]+=a,t[1]+=c,t[2]+=l,t[3]+=u,t[4]+=h,t[5]+=d,t[6]+=f,t[7]+=p,r+=64,o-=64}return r}t.vp=function(e){var t=new o;t.update(e);var n=t.digest();return t.clean(),n}},3350:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n(8099),r=n(7309);t.DIGEST_LENGTH=64,t.BLOCK_SIZE=128;var o=function(){function e(){this.digestLength=t.DIGEST_LENGTH,this.blockSize=t.BLOCK_SIZE,this._stateHi=new Int32Array(8),this._stateLo=new Int32Array(8),this._tempHi=new Int32Array(16),this._tempLo=new Int32Array(16),this._buffer=new Uint8Array(256),this._bufferLength=0,this._bytesHashed=0,this._finished=!1,this.reset()}return e.prototype._initState=function(){this._stateHi[0]=1779033703,this._stateHi[1]=3144134277,this._stateHi[2]=1013904242,this._stateHi[3]=2773480762,this._stateHi[4]=1359893119,this._stateHi[5]=2600822924,this._stateHi[6]=528734635,this._stateHi[7]=1541459225,this._stateLo[0]=4089235720,this._stateLo[1]=2227873595,this._stateLo[2]=4271175723,this._stateLo[3]=1595750129,this._stateLo[4]=2917565137,this._stateLo[5]=725511199,this._stateLo[6]=4215389547,this._stateLo[7]=327033209},e.prototype.reset=function(){return this._initState(),this._bufferLength=0,this._bytesHashed=0,this._finished=!1,this},e.prototype.clean=function(){r.wipe(this._buffer),r.wipe(this._tempHi),r.wipe(this._tempLo),this.reset()},e.prototype.update=function(e,n){if(void 0===n&&(n=e.length),this._finished)throw new Error("SHA512: can't update because hash was finished.");var i=0;if(this._bytesHashed+=n,this._bufferLength>0){for(;this._bufferLength0;)this._buffer[this._bufferLength++]=e[i++],n--;this._bufferLength===this.blockSize&&(a(this._tempHi,this._tempLo,this._stateHi,this._stateLo,this._buffer,0,this.blockSize),this._bufferLength=0)}for(n>=this.blockSize&&(i=a(this._tempHi,this._tempLo,this._stateHi,this._stateLo,e,i,n),n%=this.blockSize);n>0;)this._buffer[this._bufferLength++]=e[i++],n--;return this},e.prototype.finish=function(e){if(!this._finished){var t=this._bytesHashed,n=this._bufferLength,r=t/536870912|0,o=t<<3,s=t%128<112?128:256;this._buffer[n]=128;for(var c=n+1;c0?new Uint8Array(this._buffer):void 0,bufferLength:this._bufferLength,bytesHashed:this._bytesHashed}},e.prototype.restoreState=function(e){return this._stateHi.set(e.stateHi),this._stateLo.set(e.stateLo),this._bufferLength=e.bufferLength,e.buffer&&this._buffer.set(e.buffer),this._bytesHashed=e.bytesHashed,this._finished=!1,this},e.prototype.cleanSavedState=function(e){r.wipe(e.stateHi),r.wipe(e.stateLo),e.buffer&&r.wipe(e.buffer),e.bufferLength=0,e.bytesHashed=0},e}();t.SHA512=o;var s=new Int32Array([1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591]);function a(e,t,n,r,o,a,c){for(var l,u,h,d,f,p,g,y,b=n[0],m=n[1],v=n[2],w=n[3],E=n[4],S=n[5],I=n[6],A=n[7],R=r[0],x=r[1],M=r[2],T=r[3],k=r[4],O=r[5],U=r[6],C=r[7];c>=128;){for(var P=0;P<16;P++){var N=8*P+a;e[P]=i.readUint32BE(o,N),t[P]=i.readUint32BE(o,N+4)}for(P=0;P<80;P++){var K,L,q=b,z=m,V=v,F=w,j=E,D=S,B=I,W=R,J=x,Z=M,Q=T,H=k,G=O,Y=U;if(f=65535&(u=C),p=u>>>16,g=65535&(l=A),y=l>>>16,f+=65535&(u=(k>>>14|E<<18)^(k>>>18|E<<14)^(E>>>9|k<<23)),p+=u>>>16,g+=65535&(l=(E>>>14|k<<18)^(E>>>18|k<<14)^(k>>>9|E<<23)),y+=l>>>16,f+=65535&(u=k&O^~k&U),p+=u>>>16,g+=65535&(l=E&S^~E&I),y+=l>>>16,l=s[2*P],f+=65535&(u=s[2*P+1]),p+=u>>>16,g+=65535&l,y+=l>>>16,l=e[P%16],p+=(u=t[P%16])>>>16,g+=65535&l,y+=l>>>16,g+=(p+=(f+=65535&u)>>>16)>>>16,f=65535&(u=d=65535&f|p<<16),p=u>>>16,g=65535&(l=h=65535&g|(y+=g>>>16)<<16),y=l>>>16,f+=65535&(u=(R>>>28|b<<4)^(b>>>2|R<<30)^(b>>>7|R<<25)),p+=u>>>16,g+=65535&(l=(b>>>28|R<<4)^(R>>>2|b<<30)^(R>>>7|b<<25)),y+=l>>>16,p+=(u=R&x^R&M^x&M)>>>16,g+=65535&(l=b&m^b&v^m&v),y+=l>>>16,K=65535&(g+=(p+=(f+=65535&u)>>>16)>>>16)|(y+=g>>>16)<<16,L=65535&f|p<<16,f=65535&(u=Q),p=u>>>16,g=65535&(l=F),y=l>>>16,p+=(u=d)>>>16,g+=65535&(l=h),y+=l>>>16,m=q,v=z,w=V,E=F=65535&(g+=(p+=(f+=65535&u)>>>16)>>>16)|(y+=g>>>16)<<16,S=j,I=D,A=B,b=K,x=W,M=J,T=Z,k=Q=65535&f|p<<16,O=H,U=G,C=Y,R=L,P%16==15)for(N=0;N<16;N++)l=e[N],f=65535&(u=t[N]),p=u>>>16,g=65535&l,y=l>>>16,l=e[(N+9)%16],f+=65535&(u=t[(N+9)%16]),p+=u>>>16,g+=65535&l,y+=l>>>16,h=e[(N+1)%16],f+=65535&(u=((d=t[(N+1)%16])>>>1|h<<31)^(d>>>8|h<<24)^(d>>>7|h<<25)),p+=u>>>16,g+=65535&(l=(h>>>1|d<<31)^(h>>>8|d<<24)^h>>>7),y+=l>>>16,h=e[(N+14)%16],p+=(u=((d=t[(N+14)%16])>>>19|h<<13)^(h>>>29|d<<3)^(d>>>6|h<<26))>>>16,g+=65535&(l=(h>>>19|d<<13)^(d>>>29|h<<3)^h>>>6),y+=l>>>16,y+=(g+=(p+=(f+=65535&u)>>>16)>>>16)>>>16,e[N]=65535&g|y<<16,t[N]=65535&f|p<<16}f=65535&(u=R),p=u>>>16,g=65535&(l=b),y=l>>>16,l=n[0],p+=(u=r[0])>>>16,g+=65535&l,y+=l>>>16,y+=(g+=(p+=(f+=65535&u)>>>16)>>>16)>>>16,n[0]=b=65535&g|y<<16,r[0]=R=65535&f|p<<16,f=65535&(u=x),p=u>>>16,g=65535&(l=m),y=l>>>16,l=n[1],p+=(u=r[1])>>>16,g+=65535&l,y+=l>>>16,y+=(g+=(p+=(f+=65535&u)>>>16)>>>16)>>>16,n[1]=m=65535&g|y<<16,r[1]=x=65535&f|p<<16,f=65535&(u=M),p=u>>>16,g=65535&(l=v),y=l>>>16,l=n[2],p+=(u=r[2])>>>16,g+=65535&l,y+=l>>>16,y+=(g+=(p+=(f+=65535&u)>>>16)>>>16)>>>16,n[2]=v=65535&g|y<<16,r[2]=M=65535&f|p<<16,f=65535&(u=T),p=u>>>16,g=65535&(l=w),y=l>>>16,l=n[3],p+=(u=r[3])>>>16,g+=65535&l,y+=l>>>16,y+=(g+=(p+=(f+=65535&u)>>>16)>>>16)>>>16,n[3]=w=65535&g|y<<16,r[3]=T=65535&f|p<<16,f=65535&(u=k),p=u>>>16,g=65535&(l=E),y=l>>>16,l=n[4],p+=(u=r[4])>>>16,g+=65535&l,y+=l>>>16,y+=(g+=(p+=(f+=65535&u)>>>16)>>>16)>>>16,n[4]=E=65535&g|y<<16,r[4]=k=65535&f|p<<16,f=65535&(u=O),p=u>>>16,g=65535&(l=S),y=l>>>16,l=n[5],p+=(u=r[5])>>>16,g+=65535&l,y+=l>>>16,y+=(g+=(p+=(f+=65535&u)>>>16)>>>16)>>>16,n[5]=S=65535&g|y<<16,r[5]=O=65535&f|p<<16,f=65535&(u=U),p=u>>>16,g=65535&(l=I),y=l>>>16,l=n[6],p+=(u=r[6])>>>16,g+=65535&l,y+=l>>>16,y+=(g+=(p+=(f+=65535&u)>>>16)>>>16)>>>16,n[6]=I=65535&g|y<<16,r[6]=U=65535&f|p<<16,f=65535&(u=C),p=u>>>16,g=65535&(l=A),y=l>>>16,l=n[7],p+=(u=r[7])>>>16,g+=65535&l,y+=l>>>16,y+=(g+=(p+=(f+=65535&u)>>>16)>>>16)>>>16,n[7]=A=65535&g|y<<16,r[7]=C=65535&f|p<<16,a+=128,c-=128}return a}t.hash=function(e){var t=new o;t.update(e);var n=t.digest();return t.clean(),n}},6249:(e,t)=>{"use strict";var n="utf8: invalid string",i="utf8: invalid source encoding";function r(e){for(var t=0,i=0;i=e.length-1)throw new Error(n);i++,t+=4}}return t}t.cv=function(e){for(var t=new Uint8Array(r(e)),n=0,i=0;i>6,t[n++]=128|63&o):o<55296?(t[n++]=224|o>>12,t[n++]=128|o>>6&63,t[n++]=128|63&o):(i++,o=(1023&o)<<10,o|=1023&e.charCodeAt(i),o+=65536,t[n++]=240|o>>18,t[n++]=128|o>>12&63,t[n++]=128|o>>6&63,t[n++]=128|63&o)}return t}},7309:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.wipe=function(e){for(var t=0;t{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.X25519Session=t.SECRET_SEED_LENGTH=t.SAVED_STATE_LENGTH=t.ACCEPT_MESSAGE_LENGTH=t.OFFER_MESSAGE_LENGTH=void 0;const i=n(1416),r=n(7309),o=n(7664),s=n(4826);t.OFFER_MESSAGE_LENGTH=o.PUBLIC_KEY_LENGTH,t.ACCEPT_MESSAGE_LENGTH=o.PUBLIC_KEY_LENGTH,t.SAVED_STATE_LENGTH=o.SECRET_KEY_LENGTH,t.SECRET_SEED_LENGTH=o.SECRET_KEY_LENGTH;t.X25519Session=class{constructor(e,n){this.offerMessageLength=t.OFFER_MESSAGE_LENGTH,this.acceptMessageLength=t.ACCEPT_MESSAGE_LENGTH,this.sharedKeyLength=o.SHARED_KEY_LENGTH,this.savedStateLength=t.SAVED_STATE_LENGTH,this._seed=e||(0,i.randomBytes)(o.SECRET_KEY_LENGTH,n)}saveState(){return new Uint8Array(this._seed)}restoreState(e){return this._seed=new Uint8Array(e),this}clean(){this._seed&&(0,r.wipe)(this._seed),this._keyPair&&((0,r.wipe)(this._keyPair.secretKey),(0,r.wipe)(this._keyPair.publicKey)),this._sharedKey&&(0,r.wipe)(this._sharedKey),this._sessionKeys&&((0,r.wipe)(this._sessionKeys.receive),(0,r.wipe)(this._sessionKeys.send))}offer(){return this._keyPair=(0,o.generateKeyPairFromSeed)(this._seed),new Uint8Array(this._keyPair.publicKey)}accept(e){if(this._keyPair)throw new Error("X25519Session: accept shouldn't be called by offering party");if(e.length!==this.offerMessageLength)throw new Error("X25519Session: incorrect offer message length");if(this._sharedKey)throw new Error("X25519Session: accept was already called");const t=(0,o.generateKeyPairFromSeed)(this._seed);return this._sharedKey=(0,o.sharedKey)(t.secretKey,e),this._sessionKeys=(0,s.clientSessionKeysFromSharedKey)(this._sharedKey,t.publicKey,e),(0,r.wipe)(t.secretKey),t.publicKey}finish(e){if(e.length!==this.acceptMessageLength)throw new Error("X25519Session: incorrect accept message length");if(!this._keyPair)throw new Error("X25519Session: no offer state");if(this._sharedKey)throw new Error("X25519Session: finish was already called");return this._sharedKey=(0,o.sharedKey)(this._keyPair.secretKey,e),this._sessionKeys=(0,s.serverSessionKeysFromSharedKey)(this._sharedKey,this._keyPair.publicKey,e),this}getSharedKey(){if(!this._sharedKey)throw new Error("X25519Session: no shared key established");return new Uint8Array(this._sharedKey)}getSessionKeys(){if(!this._sessionKeys)throw new Error("X25519Session: no shared key established");return{receive:new Uint8Array(this._sessionKeys.receive),send:new Uint8Array(this._sessionKeys.send)}}}},4826:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.clientSessionKeys=t.serverSessionKeys=t.clientSessionKeysFromSharedKey=t.serverSessionKeysFromSharedKey=t.X25519Session=void 0;const i=n(1322),r=n(7664);var o=n(6273);Object.defineProperty(t,"X25519Session",{enumerable:!0,get:function(){return o.X25519Session}});const s=32;function a(e,t,n,r=i.BLAKE2b){const o=new r;if(o.digestLength!==2*s)throw new Error("X25519: incorrect digest length");const a=o.update(e).update(n).update(t).digest();return{send:a.subarray(0,s),receive:a.subarray(s)}}function c(e,t,n,r=i.BLAKE2b){const o=new r;if(o.digestLength!==2*s)throw new Error("X25519: incorrect digest length");const a=o.update(e).update(t).update(n).digest();return{receive:a.subarray(0,s),send:a.subarray(s)}}t.serverSessionKeysFromSharedKey=a,t.clientSessionKeysFromSharedKey=c,t.serverSessionKeys=function(e,t,n=i.BLAKE2b){return a((0,r.sharedKey)(e.secretKey,t),e.publicKey,t,n)},t.clientSessionKeys=function(e,t,n=i.BLAKE2b){return c((0,r.sharedKey)(e.secretKey,t),e.publicKey,t,n)}},7664:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.sharedKey=t.generateKeyPair=t.generateKeyPairFromSeed=t.scalarMultBase=t.scalarMult=t.SHARED_KEY_LENGTH=t.SECRET_KEY_LENGTH=t.PUBLIC_KEY_LENGTH=void 0;const i=n(1416),r=n(7309);function o(e){const t=new Float64Array(16);if(e)for(let n=0;n=0;--e){const t=n[e>>>3]>>>(7&e)&1;l(r,s,t),l(p,g,t),u(y,r,p),h(r,r,p),u(p,s,g),h(s,s,g),f(g,y),f(b,r),d(r,p,r),d(p,s,y),u(y,r,p),h(r,r,p),f(s,r),h(p,g,b),d(r,p,a),u(r,r,g),d(p,p,r),d(r,g,b),d(g,s,i),f(s,y),l(r,s,t),l(p,g,t)}for(let e=0;e<16;e++)i[e+16]=r[e],i[e+32]=p[e],i[e+48]=s[e],i[e+64]=g[e];const m=i.subarray(32),v=i.subarray(16);!function(e,t){const n=o();for(let e=0;e<16;e++)n[e]=t[e];for(let e=253;e>=0;e--)f(n,n),2!==e&&4!==e&&d(n,n,t);for(let t=0;t<16;t++)e[t]=n[t]}(m,m),d(v,v,m);const w=new Uint8Array(32);return function(e,t){const n=o(),i=o();for(let e=0;e<16;e++)i[e]=t[e];c(i),c(i),c(i);for(let e=0;e<2;e++){n[0]=i[0]-65517;for(let e=1;e<15;e++)n[e]=i[e]-65535-(n[e-1]>>16&1),n[e-1]&=65535;n[15]=i[15]-32767-(n[14]>>16&1);const e=n[15]>>16&1;n[14]&=65535,l(i,n,1-e)}for(let t=0;t<16;t++)e[2*t]=255&i[t],e[2*t+1]=i[t]>>8}(w,v),w}function g(e){return p(e,s)}function y(e){if(e.length!==t.SECRET_KEY_LENGTH)throw new Error(`x25519: seed must be ${t.SECRET_KEY_LENGTH} bytes`);const n=new Uint8Array(e);return{publicKey:g(n),secretKey:n}}t.scalarMult=p,t.scalarMultBase=g,t.generateKeyPairFromSeed=y,t.generateKeyPair=function(e){const t=(0,i.randomBytes)(32,e),n=y(t);return(0,r.wipe)(t),n},t.sharedKey=function(e,n,i=!1){if(e.length!==t.PUBLIC_KEY_LENGTH)throw new Error("X25519: incorrect secret key length");if(n.length!==t.PUBLIC_KEY_LENGTH)throw new Error("X25519: incorrect public key length");const r=p(e,n);if(i){let e=0;for(let t=0;t{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n(8099),r=n(7318),o=n(7309);function s(e,t,n,i,s){if(void 0===s&&(s=0),0===s){if(24!==t.length)throw new Error("XSalsa20 nonce must be 24 bytes")}else if(32!==t.length)throw new Error("XSalsa20 nonce with counter must be 32 bytes");var a=c(e,t.subarray(0,16),new Uint8Array(32)),l=r.streamXOR(a,t.subarray(16),n,i,s);return o.wipe(a),l}t.streamXOR=s,t.stream=function(e,t,n,i){return void 0===i&&(i=0),o.wipe(n),s(e,t,n,n,i)};var a=20;function c(e,t,n){for(var r,o=1634760805,s=e[3]<<24|e[2]<<16|e[1]<<8|e[0],c=e[7]<<24|e[6]<<16|e[5]<<8|e[4],l=e[11]<<24|e[10]<<16|e[9]<<8|e[8],u=e[15]<<24|e[14]<<16|e[13]<<8|e[12],h=857760878,d=t[3]<<24|t[2]<<16|t[1]<<8|t[0],f=t[7]<<24|t[6]<<16|t[5]<<8|t[4],p=t[11]<<24|t[10]<<16|t[9]<<8|t[8],g=t[15]<<24|t[14]<<16|t[13]<<8|t[12],y=2036477234,b=e[19]<<24|e[18]<<16|e[17]<<8|e[16],m=e[23]<<24|e[22]<<16|e[21]<<8|e[20],v=e[27]<<24|e[26]<<16|e[25]<<8|e[24],w=e[31]<<24|e[30]<<16|e[29]<<8|e[28],E=1797285236,S=0;S>>25)+o|0)<<9|r>>>23)+u|0)<<13|r>>>19)+p|0)<<18|r>>>14,h^=(r=(s^=(r=(v^=(r=(g^=(r=h+s|0)<<7|r>>>25)+h|0)<<9|r>>>23)+g|0)<<13|r>>>19)+v|0)<<18|r>>>14,y^=(r=(d^=(r=(c^=(r=(w^=(r=y+d|0)<<7|r>>>25)+y|0)<<9|r>>>23)+w|0)<<13|r>>>19)+c|0)<<18|r>>>14,E^=(r=(b^=(r=(f^=(r=(l^=(r=E+b|0)<<7|r>>>25)+E|0)<<9|r>>>23)+l|0)<<13|r>>>19)+f|0)<<18|r>>>14,o^=(r=(l^=(r=(c^=(r=(s^=(r=o+l|0)<<7|r>>>25)+o|0)<<9|r>>>23)+s|0)<<13|r>>>19)+c|0)<<18|r>>>14,h^=(r=(u^=(r=(f^=(r=(d^=(r=h+u|0)<<7|r>>>25)+h|0)<<9|r>>>23)+d|0)<<13|r>>>19)+f|0)<<18|r>>>14,y^=(r=(g^=(r=(p^=(r=(b^=(r=y+g|0)<<7|r>>>25)+y|0)<<9|r>>>23)+b|0)<<13|r>>>19)+p|0)<<18|r>>>14,E^=(r=(w^=(r=(v^=(r=(m^=(r=E+w|0)<<7|r>>>25)+E|0)<<9|r>>>23)+m|0)<<13|r>>>19)+v|0)<<18|r>>>14;return i.writeUint32LE(o,n,0),i.writeUint32LE(h,n,4),i.writeUint32LE(y,n,8),i.writeUint32LE(E,n,12),i.writeUint32LE(d,n,16),i.writeUint32LE(f,n,20),i.writeUint32LE(p,n,24),i.writeUint32LE(g,n,28),n}t.hsalsa=c},926:(e,t,n)=>{"use strict";function i(){return(null===n.g||void 0===n.g?void 0:n.g.crypto)||(null===n.g||void 0===n.g?void 0:n.g.msCrypto)||{}}function r(){const e=i();return e.subtle||e.webkitSubtle}Object.defineProperty(t,"__esModule",{value:!0}),t.isBrowserCryptoAvailable=t.getSubtleCrypto=t.getBrowerCrypto=void 0,t.getBrowerCrypto=i,t.getSubtleCrypto=r,t.isBrowserCryptoAvailable=function(){return!!i()&&!!r()}},8618:(e,t,n)=>{"use strict";var i=n(4155);function r(){return"undefined"==typeof document&&"undefined"!=typeof navigator&&"ReactNative"===navigator.product}function o(){return void 0!==i&&void 0!==i.versions&&void 0!==i.versions.node}Object.defineProperty(t,"__esModule",{value:!0}),t.isBrowser=t.isNode=t.isReactNative=void 0,t.isReactNative=r,t.isNode=o,t.isBrowser=function(){return!r()&&!o()}},1468:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const i=n(655);i.__exportStar(n(926),t),i.__exportStar(n(8618),t)},8200:(e,t,n)=>{"use strict";n.d(t,{q:()=>i});class i{}},997:(e,t,n)=>{"use strict";n.r(t),n.d(t,{IEvents:()=>i.q});var i=n(8200)},2568:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.HEARTBEAT_EVENTS=t.HEARTBEAT_INTERVAL=void 0;const i=n(6736);t.HEARTBEAT_INTERVAL=i.FIVE_SECONDS,t.HEARTBEAT_EVENTS={pulse:"heartbeat_pulse"}},3401:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(655).__exportStar(n(2568),t)},8969:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.HeartBeat=void 0;const i=n(655),r=n(7187),o=n(6736),s=n(1614),a=n(3401);class c extends s.IHeartBeat{constructor(e){super(e),this.events=new r.EventEmitter,this.interval=a.HEARTBEAT_INTERVAL,this.interval=(null==e?void 0:e.interval)||a.HEARTBEAT_INTERVAL}static init(e){return i.__awaiter(this,void 0,void 0,(function*(){const t=new c(e);return yield t.init(),t}))}init(){return i.__awaiter(this,void 0,void 0,(function*(){yield this.initialize()}))}stop(){clearInterval(this.intervalRef)}on(e,t){this.events.on(e,t)}once(e,t){this.events.once(e,t)}off(e,t){this.events.off(e,t)}removeListener(e,t){this.events.removeListener(e,t)}initialize(){return i.__awaiter(this,void 0,void 0,(function*(){this.intervalRef=setInterval((()=>this.pulse()),o.toMiliseconds(this.interval))}))}pulse(){this.events.emit(a.HEARTBEAT_EVENTS.pulse)}}t.HeartBeat=c},159:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const i=n(655);i.__exportStar(n(8969),t),i.__exportStar(n(1614),t),i.__exportStar(n(3401),t)},4174:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.IHeartBeat=void 0;const i=n(997);class r extends i.IEvents{constructor(e){super()}}t.IHeartBeat=r},1614:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(655).__exportStar(n(4174),t)},5150:(e,t,n)=>{"use strict";const i=n(655),r=n(3954),o=i.__importDefault(n(653)),s=n(9728);class a{constructor(){this.localStorage=o.default}getKeys(){return i.__awaiter(this,void 0,void 0,(function*(){return Object.keys(this.localStorage)}))}getEntries(){return i.__awaiter(this,void 0,void 0,(function*(){return Object.entries(this.localStorage).map(s.parseEntry)}))}getItem(e){return i.__awaiter(this,void 0,void 0,(function*(){const t=this.localStorage.getItem(e);if(null!==t)return r.safeJsonParse(t)}))}setItem(e,t){return i.__awaiter(this,void 0,void 0,(function*(){this.localStorage.setItem(e,r.safeJsonStringify(t))}))}removeItem(e){return i.__awaiter(this,void 0,void 0,(function*(){this.localStorage.removeItem(e)}))}}t.ZP=a},653:(e,t,n)=>{"use strict";!function(){let t;function i(){}t=i,t.prototype.getItem=function(e){return this.hasOwnProperty(e)?String(this[e]):null},t.prototype.setItem=function(e,t){this[e]=String(t)},t.prototype.removeItem=function(e){delete this[e]},t.prototype.clear=function(){const e=this;Object.keys(e).forEach((function(t){e[t]=void 0,delete e[t]}))},t.prototype.key=function(e){return e=e||0,Object.keys(this)[e]},t.prototype.__defineGetter__("length",(function(){return Object.keys(this).length})),void 0!==n.g&&n.g.localStorage?e.exports=n.g.localStorage:"undefined"!=typeof window&&window.localStorage?e.exports=window.localStorage:e.exports=new i}()},9728:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const i=n(655);i.__exportStar(n(9076),t),i.__exportStar(n(496),t)},9076:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.IKeyValueStorage=void 0;t.IKeyValueStorage=class{}},496:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parseEntry=void 0;const i=n(3954);t.parseEntry=function(e){var t;return[e[0],i.safeJsonParse(null!==(t=e[1])&&void 0!==t?t:"")]}},5727:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.PINO_CUSTOM_CONTEXT_KEY=t.PINO_LOGGER_DEFAULTS=void 0,t.PINO_LOGGER_DEFAULTS={level:"info"},t.PINO_CUSTOM_CONTEXT_KEY="custom_context"},9107:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.pino=void 0;const i=n(655),r=i.__importDefault(n(6559));Object.defineProperty(t,"pino",{enumerable:!0,get:function(){return r.default}}),i.__exportStar(n(5727),t),i.__exportStar(n(8048),t)},8048:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.generateChildLogger=t.formatChildLoggerContext=t.getLoggerContext=t.setBrowserLoggerContext=t.getBrowserLoggerContext=t.getDefaultLoggerOptions=void 0;const i=n(5727);function r(e,t=i.PINO_CUSTOM_CONTEXT_KEY){return e[t]||""}function o(e,t,n=i.PINO_CUSTOM_CONTEXT_KEY){return e[n]=t,e}function s(e,t=i.PINO_CUSTOM_CONTEXT_KEY){let n="";return n=void 0===e.bindings?r(e,t):e.bindings().context||"",n}function a(e,t,n=i.PINO_CUSTOM_CONTEXT_KEY){const r=s(e,n);return r.trim()?`${r}/${t}`:t}t.getDefaultLoggerOptions=function(e){return Object.assign(Object.assign({},e),{level:(null==e?void 0:e.level)||i.PINO_LOGGER_DEFAULTS.level})},t.getBrowserLoggerContext=r,t.setBrowserLoggerContext=o,t.getLoggerContext=s,t.formatChildLoggerContext=a,t.generateChildLogger=function(e,t,n=i.PINO_CUSTOM_CONTEXT_KEY){const r=a(e,t,n);return o(e.child({context:r}),r,n)}},1882:()=>{},3014:()=>{},6900:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const i=n(655);i.__exportStar(n(6869),t),i.__exportStar(n(8033),t)},6869:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ONE_THOUSAND=t.ONE_HUNDRED=void 0,t.ONE_HUNDRED=100,t.ONE_THOUSAND=1e3},8033:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ONE_YEAR=t.FOUR_WEEKS=t.THREE_WEEKS=t.TWO_WEEKS=t.ONE_WEEK=t.THIRTY_DAYS=t.SEVEN_DAYS=t.FIVE_DAYS=t.THREE_DAYS=t.ONE_DAY=t.TWENTY_FOUR_HOURS=t.TWELVE_HOURS=t.SIX_HOURS=t.THREE_HOURS=t.ONE_HOUR=t.SIXTY_MINUTES=t.THIRTY_MINUTES=t.TEN_MINUTES=t.FIVE_MINUTES=t.ONE_MINUTE=t.SIXTY_SECONDS=t.THIRTY_SECONDS=t.TEN_SECONDS=t.FIVE_SECONDS=t.ONE_SECOND=void 0,t.ONE_SECOND=1,t.FIVE_SECONDS=5,t.TEN_SECONDS=10,t.THIRTY_SECONDS=30,t.SIXTY_SECONDS=60,t.ONE_MINUTE=t.SIXTY_SECONDS,t.FIVE_MINUTES=5*t.ONE_MINUTE,t.TEN_MINUTES=10*t.ONE_MINUTE,t.THIRTY_MINUTES=30*t.ONE_MINUTE,t.SIXTY_MINUTES=60*t.ONE_MINUTE,t.ONE_HOUR=t.SIXTY_MINUTES,t.THREE_HOURS=3*t.ONE_HOUR,t.SIX_HOURS=6*t.ONE_HOUR,t.TWELVE_HOURS=12*t.ONE_HOUR,t.TWENTY_FOUR_HOURS=24*t.ONE_HOUR,t.ONE_DAY=t.TWENTY_FOUR_HOURS,t.THREE_DAYS=3*t.ONE_DAY,t.FIVE_DAYS=5*t.ONE_DAY,t.SEVEN_DAYS=7*t.ONE_DAY,t.THIRTY_DAYS=30*t.ONE_DAY,t.ONE_WEEK=t.SEVEN_DAYS,t.TWO_WEEKS=2*t.ONE_WEEK,t.THREE_WEEKS=3*t.ONE_WEEK,t.FOUR_WEEKS=4*t.ONE_WEEK,t.ONE_YEAR=365*t.ONE_DAY},6736:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const i=n(655);i.__exportStar(n(4273),t),i.__exportStar(n(7001),t),i.__exportStar(n(2939),t),i.__exportStar(n(6900),t)},2939:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(655).__exportStar(n(8766),t)},8766:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.IWatch=void 0;t.IWatch=class{}},3207:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.fromMiliseconds=t.toMiliseconds=void 0;const i=n(6900);t.toMiliseconds=function(e){return e*i.ONE_THOUSAND},t.fromMiliseconds=function(e){return Math.floor(e/i.ONE_THOUSAND)}},3873:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.delay=void 0,t.delay=function(e){return new Promise((t=>{setTimeout((()=>{t(!0)}),e)}))}},4273:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const i=n(655);i.__exportStar(n(3873),t),i.__exportStar(n(3207),t)},7001:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Watch=void 0;class n{constructor(){this.timestamps=new Map}start(e){if(this.timestamps.has(e))throw new Error(`Watch already started for label: ${e}`);this.timestamps.set(e,{started:Date.now()})}stop(e){const t=this.get(e);if(void 0!==t.elapsed)throw new Error(`Watch already stopped for label: ${e}`);const n=Date.now()-t.started;this.timestamps.set(e,{started:t.started,elapsed:n})}get(e){const t=this.timestamps.get(e);if(void 0===t)throw new Error(`No timestamp found for label: ${e}`);return t}elapsed(e){const t=this.get(e);return t.elapsed||Date.now()-t.started}}t.Watch=n,t.default=n},2873:(e,t)=>{"use strict";function n(e){let t;return"undefined"!=typeof window&&void 0!==window[e]&&(t=window[e]),t}function i(e){const t=n(e);if(!t)throw new Error(`${e} is not defined in Window`);return t}Object.defineProperty(t,"__esModule",{value:!0}),t.getLocalStorage=t.getLocalStorageOrThrow=t.getCrypto=t.getCryptoOrThrow=t.getLocation=t.getLocationOrThrow=t.getNavigator=t.getNavigatorOrThrow=t.getDocument=t.getDocumentOrThrow=t.getFromWindowOrThrow=t.getFromWindow=void 0,t.getFromWindow=n,t.getFromWindowOrThrow=i,t.getDocumentOrThrow=function(){return i("document")},t.getDocument=function(){return n("document")},t.getNavigatorOrThrow=function(){return i("navigator")},t.getNavigator=function(){return n("navigator")},t.getLocationOrThrow=function(){return i("location")},t.getLocation=function(){return n("location")},t.getCryptoOrThrow=function(){return i("crypto")},t.getCrypto=function(){return n("crypto")},t.getLocalStorageOrThrow=function(){return i("localStorage")},t.getLocalStorage=function(){return n("localStorage")}},5755:(e,t,n)=>{"use strict";t.D=void 0;const i=n(2873);t.D=function(){let e,t;try{e=i.getDocumentOrThrow(),t=i.getLocationOrThrow()}catch(e){return null}function n(...t){const n=e.getElementsByTagName("meta");for(let e=0;ei.getAttribute(e))).filter((e=>!!e&&t.includes(e)));if(r.length&&r){const e=i.getAttribute("content");if(e)return e}}return""}const r=function(){let t=n("name","og:site_name","og:title","twitter:title");return t||(t=e.title),t}();return{description:n("description","og:description","twitter:description","keywords"),url:t.origin,icons:function(){const n=e.getElementsByTagName("link"),i=[];for(let e=0;e-1){const e=r.getAttribute("href");if(e)if(-1===e.toLowerCase().indexOf("https:")&&-1===e.toLowerCase().indexOf("http:")&&0!==e.indexOf("//")){let n=t.protocol+"//"+t.host;if(0===e.indexOf("/"))n+=e;else{const i=t.pathname.split("/");i.pop();n+=i.join("/")+"/"+e}i.push(n)}else if(0===e.indexOf("//")){const n=t.protocol+e;i.push(n)}else i.push(e)}}return i}(),name:r}}},9282:(e,t,n)=>{"use strict";var i=n(4155),r=n(5108);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}var s,a,c=n(2136).codes,l=c.ERR_AMBIGUOUS_ARGUMENT,u=c.ERR_INVALID_ARG_TYPE,h=c.ERR_INVALID_ARG_VALUE,d=c.ERR_INVALID_RETURN_VALUE,f=c.ERR_MISSING_ARGS,p=n(5961),g=n(9539).inspect,y=n(9539).types,b=y.isPromise,m=y.isRegExp,v=Object.assign?Object.assign:n(8091).assign,w=Object.is?Object.is:n(609);new Map;function E(){var e=n(9158);s=e.isDeepEqual,a=e.isDeepStrictEqual}var S=!1,I=e.exports=M,A={};function R(e){if(e.message instanceof Error)throw e.message;throw new p(e)}function x(e,t,n,i){if(!n){var r=!1;if(0===t)r=!0,i="No value argument passed to `assert.ok()`";else if(i instanceof Error)throw i;var o=new p({actual:n,expected:!0,message:i,operator:"==",stackStartFn:e});throw o.generatedMessage=r,o}}function M(){for(var e=arguments.length,t=new Array(e),n=0;n1?n-1:0),r=1;r1?n-1:0),r=1;r1?n-1:0),r=1;r1?n-1:0),r=1;r{"use strict";var i=n(4155);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){for(var n=0;ne.length)&&(n=e.length),e.substring(n-t.length,n)===t}var y="",b="",m="",v="",w={deepStrictEqual:"Expected values to be strictly deep-equal:",strictEqual:"Expected values to be strictly equal:",strictEqualObject:'Expected "actual" to be reference-equal to "expected":',deepEqual:"Expected values to be loosely deep-equal:",equal:"Expected values to be loosely equal:",notDeepStrictEqual:'Expected "actual" not to be strictly deep-equal to:',notStrictEqual:'Expected "actual" to be strictly unequal to:',notStrictEqualObject:'Expected "actual" not to be reference-equal to "expected":',notDeepEqual:'Expected "actual" not to be loosely deep-equal to:',notEqual:'Expected "actual" to be loosely unequal to:',notIdentical:"Values identical but not reference-equal:"};function E(e){var t=Object.keys(e),n=Object.create(Object.getPrototypeOf(e));return t.forEach((function(t){n[t]=e[t]})),Object.defineProperty(n,"message",{value:e.message}),n}function S(e){return f(e,{compact:!1,customInspect:!1,depth:1e3,maxArrayLength:1/0,showHidden:!1,breakLength:1/0,showProxy:!1,sorted:!0,getters:!0})}function I(e,t,n){var r="",o="",s=0,a="",c=!1,l=S(e),u=l.split("\n"),h=S(t).split("\n"),f=0,p="";if("strictEqual"===n&&"object"===d(e)&&"object"===d(t)&&null!==e&&null!==t&&(n="strictEqualObject"),1===u.length&&1===h.length&&u[0]!==h[0]){var E=u[0].length+h[0].length;if(E<=10){if(!("object"===d(e)&&null!==e||"object"===d(t)&&null!==t||0===e&&0===t))return"".concat(w[n],"\n\n")+"".concat(u[0]," !== ").concat(h[0],"\n")}else if("strictEqualObject"!==n){if(E<(i.stderr&&i.stderr.isTTY?i.stderr.columns:80)){for(;u[0][f]===h[0][f];)f++;f>2&&(p="\n ".concat(function(e,t){if(t=Math.floor(t),0==e.length||0==t)return"";var n=e.length*t;for(t=Math.floor(Math.log(t)/Math.log(2));t;)e+=e,t--;return e+e.substring(0,n-e.length)}(" ",f),"^"),f=0)}}}for(var I=u[u.length-1],A=h[h.length-1];I===A&&(f++<2?a="\n ".concat(I).concat(a):r=I,u.pop(),h.pop(),0!==u.length&&0!==h.length);)I=u[u.length-1],A=h[h.length-1];var R=Math.max(u.length,h.length);if(0===R){var x=l.split("\n");if(x.length>30)for(x[26]="".concat(y,"...").concat(v);x.length>27;)x.pop();return"".concat(w.notIdentical,"\n\n").concat(x.join("\n"),"\n")}f>3&&(a="\n".concat(y,"...").concat(v).concat(a),c=!0),""!==r&&(a="\n ".concat(r).concat(a),r="");var M=0,T=w[n]+"\n".concat(b,"+ actual").concat(v," ").concat(m,"- expected").concat(v),k=" ".concat(y,"...").concat(v," Lines skipped");for(f=0;f1&&f>2&&(O>4?(o+="\n".concat(y,"...").concat(v),c=!0):O>3&&(o+="\n ".concat(h[f-2]),M++),o+="\n ".concat(h[f-1]),M++),s=f,r+="\n".concat(m,"-").concat(v," ").concat(h[f]),M++;else if(h.length1&&f>2&&(O>4?(o+="\n".concat(y,"...").concat(v),c=!0):O>3&&(o+="\n ".concat(u[f-2]),M++),o+="\n ".concat(u[f-1]),M++),s=f,o+="\n".concat(b,"+").concat(v," ").concat(u[f]),M++;else{var U=h[f],C=u[f],P=C!==U&&(!g(C,",")||C.slice(0,-1)!==U);P&&g(U,",")&&U.slice(0,-1)===C&&(P=!1,C+=","),P?(O>1&&f>2&&(O>4?(o+="\n".concat(y,"...").concat(v),c=!0):O>3&&(o+="\n ".concat(u[f-2]),M++),o+="\n ".concat(u[f-1]),M++),s=f,o+="\n".concat(b,"+").concat(v," ").concat(C),r+="\n".concat(m,"-").concat(v," ").concat(U),M+=2):(o+=r,r="",1!==O&&0!==f||(o+="\n ".concat(C),M++))}if(M>20&&f30)for(A[26]="".concat(y,"...").concat(v);A.length>27;)A.pop();n=1===A.length?s(this,h(t).call(this,"".concat(g," ").concat(A[0]))):s(this,h(t).call(this,"".concat(g,"\n\n").concat(A.join("\n"),"\n")))}else{var R=S(l),x="",M=w[o];"notDeepEqual"===o||"notEqual"===o?(R="".concat(w[o],"\n\n").concat(R)).length>1024&&(R="".concat(R.slice(0,1021),"...")):(x="".concat(S(u)),R.length>512&&(R="".concat(R.slice(0,509),"...")),x.length>512&&(x="".concat(x.slice(0,509),"...")),"deepEqual"===o||"equal"===o?R="".concat(M,"\n\n").concat(R,"\n\nshould equal\n\n"):x=" ".concat(o," ").concat(x)),n=s(this,h(t).call(this,"".concat(R).concat(x)))}return Error.stackTraceLimit=f,n.generatedMessage=!r,Object.defineProperty(a(n),"name",{value:"AssertionError [ERR_ASSERTION]",enumerable:!1,writable:!0,configurable:!0}),n.code="ERR_ASSERTION",n.actual=l,n.expected=u,n.operator=o,Error.captureStackTrace&&Error.captureStackTrace(a(n),c),n.stack,n.name="AssertionError",s(n)}var n,c,l;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(t,e),n=t,c=[{key:"toString",value:function(){return"".concat(this.name," [").concat(this.code,"]: ").concat(this.message)}},{key:f.custom,value:function(e,t){return f(this,function(e){for(var t=1;t{"use strict";function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function r(e,t){return!t||"object"!==i(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function o(e){return o=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},o(e)}function s(e,t){return s=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},s(e,t)}var a,c,l={};function u(e,t,n){n||(n=Error);var i=function(n){function i(n,s,a){var c;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,i),c=r(this,o(i).call(this,function(e,n,i){return"string"==typeof t?t:t(e,n,i)}(n,s,a))),c.code=e,c}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&s(e,t)}(i,n),i}(n);l[e]=i}function h(e,t){if(Array.isArray(e)){var n=e.length;return e=e.map((function(e){return String(e)})),n>2?"one of ".concat(t," ").concat(e.slice(0,n-1).join(", "),", or ")+e[n-1]:2===n?"one of ".concat(t," ").concat(e[0]," or ").concat(e[1]):"of ".concat(t," ").concat(e[0])}return"of ".concat(t," ").concat(String(e))}u("ERR_AMBIGUOUS_ARGUMENT",'The "%s" argument is ambiguous. %s',TypeError),u("ERR_INVALID_ARG_TYPE",(function(e,t,r){var o,s,c,l;if(void 0===a&&(a=n(9282)),a("string"==typeof e,"'name' must be a string"),"string"==typeof t&&(s="not ",t.substr(!c||c<0?0:+c,s.length)===s)?(o="must not be",t=t.replace(/^not /,"")):o="must be",function(e,t,n){return(void 0===n||n>e.length)&&(n=e.length),e.substring(n-t.length,n)===t}(e," argument"))l="The ".concat(e," ").concat(o," ").concat(h(t,"type"));else{var u=function(e,t,n){return"number"!=typeof n&&(n=0),!(n+t.length>e.length)&&-1!==e.indexOf(t,n)}(e,".")?"property":"argument";l='The "'.concat(e,'" ').concat(u," ").concat(o," ").concat(h(t,"type"))}return l+=". Received type ".concat(i(r))}),TypeError),u("ERR_INVALID_ARG_VALUE",(function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"is invalid";void 0===c&&(c=n(9539));var r=c.inspect(t);return r.length>128&&(r="".concat(r.slice(0,128),"...")),"The argument '".concat(e,"' ").concat(i,". Received ").concat(r)}),TypeError,RangeError),u("ERR_INVALID_RETURN_VALUE",(function(e,t,n){var r;return r=n&&n.constructor&&n.constructor.name?"instance of ".concat(n.constructor.name):"type ".concat(i(n)),"Expected ".concat(e,' to be returned from the "').concat(t,'"')+" function but got ".concat(r,".")}),TypeError),u("ERR_MISSING_ARGS",(function(){for(var e=arguments.length,t=new Array(e),i=0;i0,"At least one arg needs to be specified");var r="The ",o=t.length;switch(t=t.map((function(e){return'"'.concat(e,'"')})),o){case 1:r+="".concat(t[0]," argument");break;case 2:r+="".concat(t[0]," and ").concat(t[1]," arguments");break;default:r+=t.slice(0,o-1).join(", "),r+=", and ".concat(t[o-1]," arguments")}return"".concat(r," must be specified")}),TypeError),e.exports.codes=l},9158:(e,t,n)=>{"use strict";function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=[],i=!0,r=!1,o=void 0;try{for(var s,a=e[Symbol.iterator]();!(i=(s=a.next()).done)&&(n.push(s.value),!t||n.length!==t);i=!0);}catch(e){r=!0,o=e}finally{try{i||null==a.return||a.return()}finally{if(r)throw o}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}var o=void 0!==/a/g.flags,s=function(e){var t=[];return e.forEach((function(e){return t.push(e)})),t},a=function(e){var t=[];return e.forEach((function(e,n){return t.push([n,e])})),t},c=Object.is?Object.is:n(609),l=Object.getOwnPropertySymbols?Object.getOwnPropertySymbols:function(){return[]},u=Number.isNaN?Number.isNaN:n(360);function h(e){return e.call.bind(e)}var d=h(Object.prototype.hasOwnProperty),f=h(Object.prototype.propertyIsEnumerable),p=h(Object.prototype.toString),g=n(9539).types,y=g.isAnyArrayBuffer,b=g.isArrayBufferView,m=g.isDate,v=g.isMap,w=g.isRegExp,E=g.isSet,S=g.isNativeError,I=g.isBoxedPrimitive,A=g.isNumberObject,R=g.isStringObject,x=g.isBooleanObject,M=g.isBigIntObject,T=g.isSymbolObject,k=g.isFloat32Array,O=g.isFloat64Array;function U(e){if(0===e.length||e.length>10)return!0;for(var t=0;t57)return!0}return 10===e.length&&e>=Math.pow(2,32)}function C(e){return Object.keys(e).filter(U).concat(l(e).filter(Object.prototype.propertyIsEnumerable.bind(e)))}function P(e,t){if(e===t)return 0;for(var n=e.length,i=t.length,r=0,o=Math.min(n,i);r{e.exports=n(1609)},5448:(e,t,n)=>{"use strict";var i=n(4867),r=n(6026),o=n(4372),s=n(5327),a=n(4097),c=n(4109),l=n(7985),u=n(5061),h=n(5655),d=n(5263);e.exports=function(e){return new Promise((function(t,n){var f,p=e.data,g=e.headers,y=e.responseType;function b(){e.cancelToken&&e.cancelToken.unsubscribe(f),e.signal&&e.signal.removeEventListener("abort",f)}i.isFormData(p)&&delete g["Content-Type"];var m=new XMLHttpRequest;if(e.auth){var v=e.auth.username||"",w=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";g.Authorization="Basic "+btoa(v+":"+w)}var E=a(e.baseURL,e.url);function S(){if(m){var i="getAllResponseHeaders"in m?c(m.getAllResponseHeaders()):null,o={data:y&&"text"!==y&&"json"!==y?m.response:m.responseText,status:m.status,statusText:m.statusText,headers:i,config:e,request:m};r((function(e){t(e),b()}),(function(e){n(e),b()}),o),m=null}}if(m.open(e.method.toUpperCase(),s(E,e.params,e.paramsSerializer),!0),m.timeout=e.timeout,"onloadend"in m?m.onloadend=S:m.onreadystatechange=function(){m&&4===m.readyState&&(0!==m.status||m.responseURL&&0===m.responseURL.indexOf("file:"))&&setTimeout(S)},m.onabort=function(){m&&(n(u("Request aborted",e,"ECONNABORTED",m)),m=null)},m.onerror=function(){n(u("Network Error",e,null,m)),m=null},m.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",i=e.transitional||h.transitional;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(u(t,e,i.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",m)),m=null},i.isStandardBrowserEnv()){var I=(e.withCredentials||l(E))&&e.xsrfCookieName?o.read(e.xsrfCookieName):void 0;I&&(g[e.xsrfHeaderName]=I)}"setRequestHeader"in m&&i.forEach(g,(function(e,t){void 0===p&&"content-type"===t.toLowerCase()?delete g[t]:m.setRequestHeader(t,e)})),i.isUndefined(e.withCredentials)||(m.withCredentials=!!e.withCredentials),y&&"json"!==y&&(m.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&m.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&m.upload&&m.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(f=function(e){m&&(n(!e||e&&e.type?new d("canceled"):e),m.abort(),m=null)},e.cancelToken&&e.cancelToken.subscribe(f),e.signal&&(e.signal.aborted?f():e.signal.addEventListener("abort",f))),p||(p=null),m.send(p)}))}},1609:(e,t,n)=>{"use strict";var i=n(4867),r=n(1849),o=n(321),s=n(7185);var a=function e(t){var n=new o(t),a=r(o.prototype.request,n);return i.extend(a,o.prototype,n),i.extend(a,n),a.create=function(n){return e(s(t,n))},a}(n(5655));a.Axios=o,a.Cancel=n(5263),a.CancelToken=n(4972),a.isCancel=n(6502),a.VERSION=n(7288).version,a.all=function(e){return Promise.all(e)},a.spread=n(8713),a.isAxiosError=n(6268),e.exports=a,e.exports.default=a},5263:e=>{"use strict";function t(e){this.message=e}t.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},t.prototype.__CANCEL__=!0,e.exports=t},4972:(e,t,n)=>{"use strict";var i=n(5263);function r(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var n=this;this.promise.then((function(e){if(n._listeners){var t,i=n._listeners.length;for(t=0;t{"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},321:(e,t,n)=>{"use strict";var i=n(4867),r=n(5327),o=n(782),s=n(3572),a=n(7185),c=n(4875),l=c.validators;function u(e){this.defaults=e,this.interceptors={request:new o,response:new o}}u.prototype.request=function(e){"string"==typeof e?(e=arguments[1]||{}).url=arguments[0]:e=e||{},(e=a(this.defaults,e)).method?e.method=e.method.toLowerCase():this.defaults.method?e.method=this.defaults.method.toLowerCase():e.method="get";var t=e.transitional;void 0!==t&&c.assertOptions(t,{silentJSONParsing:l.transitional(l.boolean),forcedJSONParsing:l.transitional(l.boolean),clarifyTimeoutError:l.transitional(l.boolean)},!1);var n=[],i=!0;this.interceptors.request.forEach((function(t){"function"==typeof t.runWhen&&!1===t.runWhen(e)||(i=i&&t.synchronous,n.unshift(t.fulfilled,t.rejected))}));var r,o=[];if(this.interceptors.response.forEach((function(e){o.push(e.fulfilled,e.rejected)})),!i){var u=[s,void 0];for(Array.prototype.unshift.apply(u,n),u=u.concat(o),r=Promise.resolve(e);u.length;)r=r.then(u.shift(),u.shift());return r}for(var h=e;n.length;){var d=n.shift(),f=n.shift();try{h=d(h)}catch(e){f(e);break}}try{r=s(h)}catch(e){return Promise.reject(e)}for(;o.length;)r=r.then(o.shift(),o.shift());return r},u.prototype.getUri=function(e){return e=a(this.defaults,e),r(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")},i.forEach(["delete","get","head","options"],(function(e){u.prototype[e]=function(t,n){return this.request(a(n||{},{method:e,url:t,data:(n||{}).data}))}})),i.forEach(["post","put","patch"],(function(e){u.prototype[e]=function(t,n,i){return this.request(a(i||{},{method:e,url:t,data:n}))}})),e.exports=u},782:(e,t,n)=>{"use strict";var i=n(4867);function r(){this.handlers=[]}r.prototype.use=function(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){i.forEach(this.handlers,(function(t){null!==t&&e(t)}))},e.exports=r},4097:(e,t,n)=>{"use strict";var i=n(1793),r=n(7303);e.exports=function(e,t){return e&&!i(t)?r(e,t):t}},5061:(e,t,n)=>{"use strict";var i=n(481);e.exports=function(e,t,n,r,o){var s=new Error(e);return i(s,t,n,r,o)}},3572:(e,t,n)=>{"use strict";var i=n(4867),r=n(8527),o=n(6502),s=n(5655),a=n(5263);function c(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new a("canceled")}e.exports=function(e){return c(e),e.headers=e.headers||{},e.data=r.call(e,e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),i.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||s.adapter)(e).then((function(t){return c(e),t.data=r.call(e,t.data,t.headers,e.transformResponse),t}),(function(t){return o(t)||(c(e),t&&t.response&&(t.response.data=r.call(e,t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))}},481:e=>{"use strict";e.exports=function(e,t,n,i,r){return e.config=t,n&&(e.code=n),e.request=i,e.response=r,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}},e}},7185:(e,t,n)=>{"use strict";var i=n(4867);e.exports=function(e,t){t=t||{};var n={};function r(e,t){return i.isPlainObject(e)&&i.isPlainObject(t)?i.merge(e,t):i.isPlainObject(t)?i.merge({},t):i.isArray(t)?t.slice():t}function o(n){return i.isUndefined(t[n])?i.isUndefined(e[n])?void 0:r(void 0,e[n]):r(e[n],t[n])}function s(e){if(!i.isUndefined(t[e]))return r(void 0,t[e])}function a(n){return i.isUndefined(t[n])?i.isUndefined(e[n])?void 0:r(void 0,e[n]):r(void 0,t[n])}function c(n){return n in t?r(e[n],t[n]):n in e?r(void 0,e[n]):void 0}var l={url:s,method:s,data:s,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:c};return i.forEach(Object.keys(e).concat(Object.keys(t)),(function(e){var t=l[e]||o,r=t(e);i.isUndefined(r)&&t!==c||(n[e]=r)})),n}},6026:(e,t,n)=>{"use strict";var i=n(5061);e.exports=function(e,t,n){var r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(i("Request failed with status code "+n.status,n.config,null,n.request,n)):e(n)}},8527:(e,t,n)=>{"use strict";var i=n(4867),r=n(5655);e.exports=function(e,t,n){var o=this||r;return i.forEach(n,(function(n){e=n.call(o,e,t)})),e}},5655:(e,t,n)=>{"use strict";var i=n(4155),r=n(4867),o=n(6016),s=n(481),a={"Content-Type":"application/x-www-form-urlencoded"};function c(e,t){!r.isUndefined(e)&&r.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var l,u={transitional:{silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==i&&"[object process]"===Object.prototype.toString.call(i))&&(l=n(5448)),l),transformRequest:[function(e,t){return o(t,"Accept"),o(t,"Content-Type"),r.isFormData(e)||r.isArrayBuffer(e)||r.isBuffer(e)||r.isStream(e)||r.isFile(e)||r.isBlob(e)?e:r.isArrayBufferView(e)?e.buffer:r.isURLSearchParams(e)?(c(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):r.isObject(e)||t&&"application/json"===t["Content-Type"]?(c(t,"application/json"),function(e,t,n){if(r.isString(e))try{return(t||JSON.parse)(e),r.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||u.transitional,n=t&&t.silentJSONParsing,i=t&&t.forcedJSONParsing,o=!n&&"json"===this.responseType;if(o||i&&r.isString(e)&&e.length)try{return JSON.parse(e)}catch(e){if(o){if("SyntaxError"===e.name)throw s(e,this,"E_JSON_PARSE");throw e}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],(function(e){u.headers[e]={}})),r.forEach(["post","put","patch"],(function(e){u.headers[e]=r.merge(a)})),e.exports=u},7288:e=>{e.exports={version:"0.24.0"}},1849:e=>{"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),i=0;i{"use strict";var i=n(4867);function r(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,t,n){if(!t)return e;var o;if(n)o=n(t);else if(i.isURLSearchParams(t))o=t.toString();else{var s=[];i.forEach(t,(function(e,t){null!=e&&(i.isArray(e)?t+="[]":e=[e],i.forEach(e,(function(e){i.isDate(e)?e=e.toISOString():i.isObject(e)&&(e=JSON.stringify(e)),s.push(r(t)+"="+r(e))})))})),o=s.join("&")}if(o){var a=e.indexOf("#");-1!==a&&(e=e.slice(0,a)),e+=(-1===e.indexOf("?")?"?":"&")+o}return e}},7303:e=>{"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},4372:(e,t,n)=>{"use strict";var i=n(4867);e.exports=i.isStandardBrowserEnv()?{write:function(e,t,n,r,o,s){var a=[];a.push(e+"="+encodeURIComponent(t)),i.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),i.isString(r)&&a.push("path="+r),i.isString(o)&&a.push("domain="+o),!0===s&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},1793:e=>{"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},6268:e=>{"use strict";e.exports=function(e){return"object"==typeof e&&!0===e.isAxiosError}},7985:(e,t,n)=>{"use strict";var i=n(4867);e.exports=i.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function r(e){var i=e;return t&&(n.setAttribute("href",i),i=n.href),n.setAttribute("href",i),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return e=r(window.location.href),function(t){var n=i.isString(t)?r(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return!0}},6016:(e,t,n)=>{"use strict";var i=n(4867);e.exports=function(e,t){i.forEach(e,(function(n,i){i!==t&&i.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[i])}))}},4109:(e,t,n)=>{"use strict";var i=n(4867),r=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,n,o,s={};return e?(i.forEach(e.split("\n"),(function(e){if(o=e.indexOf(":"),t=i.trim(e.substr(0,o)).toLowerCase(),n=i.trim(e.substr(o+1)),t){if(s[t]&&r.indexOf(t)>=0)return;s[t]="set-cookie"===t?(s[t]?s[t]:[]).concat([n]):s[t]?s[t]+", "+n:n}})),s):s}},8713:e=>{"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},4875:(e,t,n)=>{"use strict";var i=n(5108),r=n(7288).version,o={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){o[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));var s={};o.transitional=function(e,t,n){function o(e,t){return"[Axios v"+r+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return function(n,r,a){if(!1===e)throw new Error(o(r," has been removed"+(t?" in "+t:"")));return t&&!s[r]&&(s[r]=!0,i.warn(o(r," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,r,a)}},e.exports={assertOptions:function(e,t,n){if("object"!=typeof e)throw new TypeError("options must be an object");for(var i=Object.keys(e),r=i.length;r-- >0;){var o=i[r],s=t[o];if(s){var a=e[o],c=void 0===a||s(a,o,e);if(!0!==c)throw new TypeError("option "+o+" must be "+c)}else if(!0!==n)throw Error("Unknown option "+o)}},validators:o}},4867:(e,t,n)=>{"use strict";var i=n(1849),r=Object.prototype.toString;function o(e){return"[object Array]"===r.call(e)}function s(e){return void 0===e}function a(e){return null!==e&&"object"==typeof e}function c(e){if("[object Object]"!==r.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function l(e){return"[object Function]"===r.call(e)}function u(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),o(e))for(var n=0,i=e.length;n{"use strict";var i=n(9509).Buffer;e.exports=function(e){if(e.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n>>0,u=new Uint8Array(s);e[n];){var h=t[e.charCodeAt(n)];if(255===h)return;for(var d=0,f=s-1;(0!==h||d>>0,u[f]=h%256>>>0,h=h/256>>>0;if(0!==h)throw new Error("Non-zero carry");o=d,n++}for(var p=s-o;p!==s&&0===u[p];)p++;var g=i.allocUnsafe(r+(s-p));g.fill(0,0,r);for(var y=r;p!==s;)g[y++]=u[p++];return g}return{encode:function(t){if((Array.isArray(t)||t instanceof Uint8Array)&&(t=i.from(t)),!i.isBuffer(t))throw new TypeError("Expected Buffer");if(0===t.length)return"";for(var n=0,r=0,o=0,s=t.length;o!==s&&0===t[o];)o++,n++;for(var l=(s-o)*u+1>>>0,h=new Uint8Array(l);o!==s;){for(var d=t[o],f=0,p=l-1;(0!==d||f>>0,h[p]=d%a>>>0,d=d/a>>>0;if(0!==d)throw new Error("Non-zero carry");r=f,o++}for(var g=l-r;g!==l&&0===h[g];)g++;for(var y=c.repeat(n);g{"use strict";t.byteLength=function(e){var t=a(e),n=t[0],i=t[1];return 3*(n+i)/4-i},t.toByteArray=function(e){var t,n,o=a(e),s=o[0],c=o[1],l=new r(function(e,t,n){return 3*(t+n)/4-n}(0,s,c)),u=0,h=c>0?s-4:s;for(n=0;n>16&255,l[u++]=t>>8&255,l[u++]=255&t;2===c&&(t=i[e.charCodeAt(n)]<<2|i[e.charCodeAt(n+1)]>>4,l[u++]=255&t);1===c&&(t=i[e.charCodeAt(n)]<<10|i[e.charCodeAt(n+1)]<<4|i[e.charCodeAt(n+2)]>>2,l[u++]=t>>8&255,l[u++]=255&t);return l},t.fromByteArray=function(e){for(var t,i=e.length,r=i%3,o=[],s=16383,a=0,l=i-r;al?l:a+s));1===r?(t=e[i-1],o.push(n[t>>2]+n[t<<4&63]+"==")):2===r&&(t=(e[i-2]<<8)+e[i-1],o.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+"="));return o.join("")};for(var n=[],i=[],r="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0;s<64;++s)n[s]=o[s],i[o.charCodeAt(s)]=s;function a(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function c(e,t,i){for(var r,o,s=[],a=t;a>18&63]+n[o>>12&63]+n[o>>6&63]+n[63&o]);return s.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},8442:(e,t,n)=>{const i=n(9488);function r(e,t,n){const i=e[t]+e[n];let r=e[t+1]+e[n+1];i>=4294967296&&r++,e[t]=i,e[t+1]=r}function o(e,t,n,i){let r=e[t]+n;n<0&&(r+=4294967296);let o=e[t+1]+i;r>=4294967296&&o++,e[t]=r,e[t+1]=o}function s(e,t){return e[t]^e[t+1]<<8^e[t+2]<<16^e[t+3]<<24}function a(e,t,n,i,s,a){const c=h[s],l=h[s+1],d=h[a],f=h[a+1];r(u,e,t),o(u,e,c,l);let p=u[i]^u[e],g=u[i+1]^u[e+1];u[i]=g,u[i+1]=p,r(u,n,i),p=u[t]^u[n],g=u[t+1]^u[n+1],u[t]=p>>>24^g<<8,u[t+1]=g>>>24^p<<8,r(u,e,t),o(u,e,d,f),p=u[i]^u[e],g=u[i+1]^u[e+1],u[i]=p>>>16^g<<16,u[i+1]=g>>>16^p<<16,r(u,n,i),p=u[t]^u[n],g=u[t+1]^u[n+1],u[t]=g>>>31^p<<1,u[t+1]=p>>>31^g<<1}const c=new Uint32Array([4089235720,1779033703,2227873595,3144134277,4271175723,1013904242,1595750129,2773480762,2917565137,1359893119,725511199,2600822924,4215389547,528734635,327033209,1541459225]),l=new Uint8Array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3,11,8,12,0,5,2,15,13,10,14,3,6,7,1,9,4,7,9,3,1,13,12,11,14,2,6,5,10,4,0,15,8,9,0,5,7,2,4,10,15,14,1,11,12,6,8,3,13,2,12,6,10,0,11,8,3,4,13,7,5,15,14,1,9,12,5,1,15,14,13,4,10,0,7,6,3,9,2,8,11,13,11,7,14,12,1,3,9,5,0,15,4,8,6,2,10,6,15,14,9,11,3,0,8,12,2,13,7,1,4,10,5,10,2,8,4,7,6,1,5,15,11,9,14,3,12,13,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3].map((function(e){return 2*e}))),u=new Uint32Array(32),h=new Uint32Array(32);function d(e,t){let n=0;for(n=0;n<16;n++)u[n]=e.h[n],u[n+16]=c[n];for(u[24]=u[24]^e.t,u[25]=u[25]^e.t/4294967296,t&&(u[28]=~u[28],u[29]=~u[29]),n=0;n<32;n++)h[n]=s(e.b,4*n);for(n=0;n<12;n++)a(0,8,16,24,l[16*n+0],l[16*n+1]),a(2,10,18,26,l[16*n+2],l[16*n+3]),a(4,12,20,28,l[16*n+4],l[16*n+5]),a(6,14,22,30,l[16*n+6],l[16*n+7]),a(0,10,20,30,l[16*n+8],l[16*n+9]),a(2,12,22,24,l[16*n+10],l[16*n+11]),a(4,14,16,26,l[16*n+12],l[16*n+13]),a(6,8,18,28,l[16*n+14],l[16*n+15]);for(n=0;n<16;n++)e.h[n]=e.h[n]^u[n]^u[n+16]}const f=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);function p(e,t,n,i){if(0===e||e>64)throw new Error("Illegal output length, expected 0 < length <= 64");if(t&&t.length>64)throw new Error("Illegal key, expected Uint8Array with 0 < length <= 64");if(n&&16!==n.length)throw new Error("Illegal salt, expected Uint8Array with length is 16");if(i&&16!==i.length)throw new Error("Illegal personal, expected Uint8Array with length is 16");const r={b:new Uint8Array(128),h:new Uint32Array(16),t:0,c:0,outlen:e};f.fill(0),f[0]=e,t&&(f[1]=t.length),f[2]=1,f[3]=1,n&&f.set(n,32),i&&f.set(i,48);for(let e=0;e<16;e++)r.h[e]=c[e]^s(f,4*e);return t&&(g(r,t),r.c=128),r}function g(e,t){for(let n=0;n>2]>>8*(3&n);return t}function b(e,t,n,r,o){n=n||64,e=i.normalizeInput(e),r&&(r=i.normalizeInput(r)),o&&(o=i.normalizeInput(o));const s=p(n,t,r,o);return g(s,e),y(s)}e.exports={blake2b:b,blake2bHex:function(e,t,n,r,o){const s=b(e,t,n,r,o);return i.toHex(s)},blake2bInit:p,blake2bUpdate:g,blake2bFinal:y}},5297:(e,t,n)=>{const i=n(9488);function r(e,t){return e[t]^e[t+1]<<8^e[t+2]<<16^e[t+3]<<24}function o(e,t,n,i,r,o){l[e]=l[e]+l[t]+r,l[i]=s(l[i]^l[e],16),l[n]=l[n]+l[i],l[t]=s(l[t]^l[n],12),l[e]=l[e]+l[t]+o,l[i]=s(l[i]^l[e],8),l[n]=l[n]+l[i],l[t]=s(l[t]^l[n],7)}function s(e,t){return e>>>t^e<<32-t}const a=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),c=new Uint8Array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3,11,8,12,0,5,2,15,13,10,14,3,6,7,1,9,4,7,9,3,1,13,12,11,14,2,6,5,10,4,0,15,8,9,0,5,7,2,4,10,15,14,1,11,12,6,8,3,13,2,12,6,10,0,11,8,3,4,13,7,5,15,14,1,9,12,5,1,15,14,13,4,10,0,7,6,3,9,2,8,11,13,11,7,14,12,1,3,9,5,0,15,4,8,6,2,10,6,15,14,9,11,3,0,8,12,2,13,7,1,4,10,5,10,2,8,4,7,6,1,5,15,11,9,14,3,12,13,0]),l=new Uint32Array(16),u=new Uint32Array(16);function h(e,t){let n=0;for(n=0;n<8;n++)l[n]=e.h[n],l[n+8]=a[n];for(l[12]^=e.t,l[13]^=e.t/4294967296,t&&(l[14]=~l[14]),n=0;n<16;n++)u[n]=r(e.b,4*n);for(n=0;n<10;n++)o(0,4,8,12,u[c[16*n+0]],u[c[16*n+1]]),o(1,5,9,13,u[c[16*n+2]],u[c[16*n+3]]),o(2,6,10,14,u[c[16*n+4]],u[c[16*n+5]]),o(3,7,11,15,u[c[16*n+6]],u[c[16*n+7]]),o(0,5,10,15,u[c[16*n+8]],u[c[16*n+9]]),o(1,6,11,12,u[c[16*n+10]],u[c[16*n+11]]),o(2,7,8,13,u[c[16*n+12]],u[c[16*n+13]]),o(3,4,9,14,u[c[16*n+14]],u[c[16*n+15]]);for(n=0;n<8;n++)e.h[n]^=l[n]^l[n+8]}function d(e,t){if(!(e>0&&e<=32))throw new Error("Incorrect output length, should be in [1, 32]");const n=t?t.length:0;if(t&&!(n>0&&n<=32))throw new Error("Incorrect key length, should be in [1, 32]");const i={h:new Uint32Array(a),b:new Uint8Array(64),c:0,t:0,outlen:e};return i.h[0]^=16842752^n<<8^e,n>0&&(f(i,t),i.c=64),i}function f(e,t){for(let n=0;n>2]>>8*(3&n)&255;return t}function g(e,t,n){n=n||32,e=i.normalizeInput(e);const r=d(n,t);return f(r,e),p(r)}e.exports={blake2s:g,blake2sHex:function(e,t,n){const r=g(e,t,n);return i.toHex(r)},blake2sInit:d,blake2sUpdate:f,blake2sFinal:p}},1191:(e,t,n)=>{const i=n(8442),r=n(5297);e.exports={blake2b:i.blake2b,blake2bHex:i.blake2bHex,blake2bInit:i.blake2bInit,blake2bUpdate:i.blake2bUpdate,blake2bFinal:i.blake2bFinal,blake2s:r.blake2s,blake2sHex:r.blake2sHex,blake2sInit:r.blake2sInit,blake2sUpdate:r.blake2sUpdate,blake2sFinal:r.blake2sFinal}},9488:(e,t,n)=>{var i=n(5108);function r(e){return(4294967296+e).toString(16).substring(1)}e.exports={normalizeInput:function(e){let t;if(e instanceof Uint8Array)t=e;else{if("string"!=typeof e)throw new Error("Input must be an string, Buffer or Uint8Array");t=(new TextEncoder).encode(e)}return t},toHex:function(e){return Array.prototype.map.call(e,(function(e){return(e<16?"0":"")+e.toString(16)})).join("")},debugPrint:function(e,t,n){let o="\n"+e+" = ";for(let i=0;i=65&&n<=70?n-55:n>=97&&n<=102?n-87:n-48&15}function c(e,t,n){var i=a(e,n);return n-1>=t&&(i|=a(e,n-1)<<4),i}function l(e,t,n,i){for(var r=0,o=Math.min(e.length,n),s=t;s=49?a-49+10:a>=17?a-17+10:a}return r}o.isBN=function(e){return e instanceof o||null!==e&&"object"==typeof e&&e.constructor.wordSize===o.wordSize&&Array.isArray(e.words)},o.max=function(e,t){return e.cmp(t)>0?e:t},o.min=function(e,t){return e.cmp(t)<0?e:t},o.prototype._init=function(e,t,n){if("number"==typeof e)return this._initNumber(e,t,n);if("object"==typeof e)return this._initArray(e,t,n);"hex"===t&&(t=16),i(t===(0|t)&&t>=2&&t<=36);var r=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&(r++,this.negative=1),r=0;r-=3)s=e[r]|e[r-1]<<8|e[r-2]<<16,this.words[o]|=s<>>26-a&67108863,(a+=24)>=26&&(a-=26,o++);else if("le"===n)for(r=0,o=0;r>>26-a&67108863,(a+=24)>=26&&(a-=26,o++);return this.strip()},o.prototype._parseHex=function(e,t,n){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var i=0;i=t;i-=2)r=c(e,t,i)<=18?(o-=18,s+=1,this.words[s]|=r>>>26):o+=8;else for(i=(e.length-t)%2==0?t+1:t;i=18?(o-=18,s+=1,this.words[s]|=r>>>26):o+=8;this.strip()},o.prototype._parseBase=function(e,t,n){this.words=[0],this.length=1;for(var i=0,r=1;r<=67108863;r*=t)i++;i--,r=r/t|0;for(var o=e.length-n,s=o%i,a=Math.min(o,o-s)+n,c=0,u=n;u1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function(){return(this.red?""};var u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],h=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],d=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function f(e,t,n){n.negative=t.negative^e.negative;var i=e.length+t.length|0;n.length=i,i=i-1|0;var r=0|e.words[0],o=0|t.words[0],s=r*o,a=67108863&s,c=s/67108864|0;n.words[0]=a;for(var l=1;l>>26,h=67108863&c,d=Math.min(l,t.length-1),f=Math.max(0,l-e.length+1);f<=d;f++){var p=l-f|0;u+=(s=(r=0|e.words[p])*(o=0|t.words[f])+h)/67108864|0,h=67108863&s}n.words[l]=0|h,c=0|u}return 0!==c?n.words[l]=0|c:n.length--,n.strip()}o.prototype.toString=function(e,t){var n;if(t=0|t||1,16===(e=e||10)||"hex"===e){n="";for(var r=0,o=0,s=0;s>>24-r&16777215)||s!==this.length-1?u[6-c.length]+c+n:c+n,(r+=2)>=26&&(r-=26,s--)}for(0!==o&&(n=o.toString(16)+n);n.length%t!=0;)n="0"+n;return 0!==this.negative&&(n="-"+n),n}if(e===(0|e)&&e>=2&&e<=36){var l=h[e],f=d[e];n="";var p=this.clone();for(p.negative=0;!p.isZero();){var g=p.modn(f).toString(e);n=(p=p.idivn(f)).isZero()?g+n:u[l-g.length]+g+n}for(this.isZero()&&(n="0"+n);n.length%t!=0;)n="0"+n;return 0!==this.negative&&(n="-"+n),n}i(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&i(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},o.prototype.toJSON=function(){return this.toString(16)},o.prototype.toBuffer=function(e,t){return i(void 0!==s),this.toArrayLike(s,e,t)},o.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)},o.prototype.toArrayLike=function(e,t,n){var r=this.byteLength(),o=n||Math.max(1,r);i(r<=o,"byte array longer than desired length"),i(o>0,"Requested array length <= 0"),this.strip();var s,a,c="le"===t,l=new e(o),u=this.clone();if(c){for(a=0;!u.isZero();a++)s=u.andln(255),u.iushrn(8),l[a]=s;for(;a=4096&&(n+=13,t>>>=13),t>=64&&(n+=7,t>>>=7),t>=8&&(n+=4,t>>>=4),t>=2&&(n+=2,t>>>=2),n+t},o.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,n=0;return 0==(8191&t)&&(n+=13,t>>>=13),0==(127&t)&&(n+=7,t>>>=7),0==(15&t)&&(n+=4,t>>>=4),0==(3&t)&&(n+=2,t>>>=2),0==(1&t)&&n++,n},o.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;te.length?this.clone().ior(e):e.clone().ior(this)},o.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},o.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var n=0;ne.length?this.clone().iand(e):e.clone().iand(this)},o.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},o.prototype.iuxor=function(e){var t,n;this.length>e.length?(t=this,n=e):(t=e,n=this);for(var i=0;ie.length?this.clone().ixor(e):e.clone().ixor(this)},o.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},o.prototype.inotn=function(e){i("number"==typeof e&&e>=0);var t=0|Math.ceil(e/26),n=e%26;this._expand(t),n>0&&t--;for(var r=0;r0&&(this.words[r]=~this.words[r]&67108863>>26-n),this.strip()},o.prototype.notn=function(e){return this.clone().inotn(e)},o.prototype.setn=function(e,t){i("number"==typeof e&&e>=0);var n=e/26|0,r=e%26;return this._expand(n+1),this.words[n]=t?this.words[n]|1<e.length?(n=this,i=e):(n=e,i=this);for(var r=0,o=0;o>>26;for(;0!==r&&o>>26;if(this.length=n.length,0!==r)this.words[this.length]=r,this.length++;else if(n!==this)for(;oe.length?this.clone().iadd(e):e.clone().iadd(this)},o.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var n,i,r=this.cmp(e);if(0===r)return this.negative=0,this.length=1,this.words[0]=0,this;r>0?(n=this,i=e):(n=e,i=this);for(var o=0,s=0;s>26,this.words[s]=67108863&t;for(;0!==o&&s>26,this.words[s]=67108863&t;if(0===o&&s>>13,f=0|s[1],p=8191&f,g=f>>>13,y=0|s[2],b=8191&y,m=y>>>13,v=0|s[3],w=8191&v,E=v>>>13,S=0|s[4],I=8191&S,A=S>>>13,R=0|s[5],x=8191&R,M=R>>>13,T=0|s[6],k=8191&T,O=T>>>13,U=0|s[7],C=8191&U,P=U>>>13,N=0|s[8],K=8191&N,L=N>>>13,q=0|s[9],z=8191&q,V=q>>>13,F=0|a[0],j=8191&F,D=F>>>13,B=0|a[1],W=8191&B,J=B>>>13,Z=0|a[2],Q=8191&Z,H=Z>>>13,G=0|a[3],Y=8191&G,X=G>>>13,_=0|a[4],$=8191&_,ee=_>>>13,te=0|a[5],ne=8191&te,ie=te>>>13,re=0|a[6],oe=8191&re,se=re>>>13,ae=0|a[7],ce=8191&ae,le=ae>>>13,ue=0|a[8],he=8191&ue,de=ue>>>13,fe=0|a[9],pe=8191&fe,ge=fe>>>13;n.negative=e.negative^t.negative,n.length=19;var ye=(l+(i=Math.imul(h,j))|0)+((8191&(r=(r=Math.imul(h,D))+Math.imul(d,j)|0))<<13)|0;l=((o=Math.imul(d,D))+(r>>>13)|0)+(ye>>>26)|0,ye&=67108863,i=Math.imul(p,j),r=(r=Math.imul(p,D))+Math.imul(g,j)|0,o=Math.imul(g,D);var be=(l+(i=i+Math.imul(h,W)|0)|0)+((8191&(r=(r=r+Math.imul(h,J)|0)+Math.imul(d,W)|0))<<13)|0;l=((o=o+Math.imul(d,J)|0)+(r>>>13)|0)+(be>>>26)|0,be&=67108863,i=Math.imul(b,j),r=(r=Math.imul(b,D))+Math.imul(m,j)|0,o=Math.imul(m,D),i=i+Math.imul(p,W)|0,r=(r=r+Math.imul(p,J)|0)+Math.imul(g,W)|0,o=o+Math.imul(g,J)|0;var me=(l+(i=i+Math.imul(h,Q)|0)|0)+((8191&(r=(r=r+Math.imul(h,H)|0)+Math.imul(d,Q)|0))<<13)|0;l=((o=o+Math.imul(d,H)|0)+(r>>>13)|0)+(me>>>26)|0,me&=67108863,i=Math.imul(w,j),r=(r=Math.imul(w,D))+Math.imul(E,j)|0,o=Math.imul(E,D),i=i+Math.imul(b,W)|0,r=(r=r+Math.imul(b,J)|0)+Math.imul(m,W)|0,o=o+Math.imul(m,J)|0,i=i+Math.imul(p,Q)|0,r=(r=r+Math.imul(p,H)|0)+Math.imul(g,Q)|0,o=o+Math.imul(g,H)|0;var ve=(l+(i=i+Math.imul(h,Y)|0)|0)+((8191&(r=(r=r+Math.imul(h,X)|0)+Math.imul(d,Y)|0))<<13)|0;l=((o=o+Math.imul(d,X)|0)+(r>>>13)|0)+(ve>>>26)|0,ve&=67108863,i=Math.imul(I,j),r=(r=Math.imul(I,D))+Math.imul(A,j)|0,o=Math.imul(A,D),i=i+Math.imul(w,W)|0,r=(r=r+Math.imul(w,J)|0)+Math.imul(E,W)|0,o=o+Math.imul(E,J)|0,i=i+Math.imul(b,Q)|0,r=(r=r+Math.imul(b,H)|0)+Math.imul(m,Q)|0,o=o+Math.imul(m,H)|0,i=i+Math.imul(p,Y)|0,r=(r=r+Math.imul(p,X)|0)+Math.imul(g,Y)|0,o=o+Math.imul(g,X)|0;var we=(l+(i=i+Math.imul(h,$)|0)|0)+((8191&(r=(r=r+Math.imul(h,ee)|0)+Math.imul(d,$)|0))<<13)|0;l=((o=o+Math.imul(d,ee)|0)+(r>>>13)|0)+(we>>>26)|0,we&=67108863,i=Math.imul(x,j),r=(r=Math.imul(x,D))+Math.imul(M,j)|0,o=Math.imul(M,D),i=i+Math.imul(I,W)|0,r=(r=r+Math.imul(I,J)|0)+Math.imul(A,W)|0,o=o+Math.imul(A,J)|0,i=i+Math.imul(w,Q)|0,r=(r=r+Math.imul(w,H)|0)+Math.imul(E,Q)|0,o=o+Math.imul(E,H)|0,i=i+Math.imul(b,Y)|0,r=(r=r+Math.imul(b,X)|0)+Math.imul(m,Y)|0,o=o+Math.imul(m,X)|0,i=i+Math.imul(p,$)|0,r=(r=r+Math.imul(p,ee)|0)+Math.imul(g,$)|0,o=o+Math.imul(g,ee)|0;var Ee=(l+(i=i+Math.imul(h,ne)|0)|0)+((8191&(r=(r=r+Math.imul(h,ie)|0)+Math.imul(d,ne)|0))<<13)|0;l=((o=o+Math.imul(d,ie)|0)+(r>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,i=Math.imul(k,j),r=(r=Math.imul(k,D))+Math.imul(O,j)|0,o=Math.imul(O,D),i=i+Math.imul(x,W)|0,r=(r=r+Math.imul(x,J)|0)+Math.imul(M,W)|0,o=o+Math.imul(M,J)|0,i=i+Math.imul(I,Q)|0,r=(r=r+Math.imul(I,H)|0)+Math.imul(A,Q)|0,o=o+Math.imul(A,H)|0,i=i+Math.imul(w,Y)|0,r=(r=r+Math.imul(w,X)|0)+Math.imul(E,Y)|0,o=o+Math.imul(E,X)|0,i=i+Math.imul(b,$)|0,r=(r=r+Math.imul(b,ee)|0)+Math.imul(m,$)|0,o=o+Math.imul(m,ee)|0,i=i+Math.imul(p,ne)|0,r=(r=r+Math.imul(p,ie)|0)+Math.imul(g,ne)|0,o=o+Math.imul(g,ie)|0;var Se=(l+(i=i+Math.imul(h,oe)|0)|0)+((8191&(r=(r=r+Math.imul(h,se)|0)+Math.imul(d,oe)|0))<<13)|0;l=((o=o+Math.imul(d,se)|0)+(r>>>13)|0)+(Se>>>26)|0,Se&=67108863,i=Math.imul(C,j),r=(r=Math.imul(C,D))+Math.imul(P,j)|0,o=Math.imul(P,D),i=i+Math.imul(k,W)|0,r=(r=r+Math.imul(k,J)|0)+Math.imul(O,W)|0,o=o+Math.imul(O,J)|0,i=i+Math.imul(x,Q)|0,r=(r=r+Math.imul(x,H)|0)+Math.imul(M,Q)|0,o=o+Math.imul(M,H)|0,i=i+Math.imul(I,Y)|0,r=(r=r+Math.imul(I,X)|0)+Math.imul(A,Y)|0,o=o+Math.imul(A,X)|0,i=i+Math.imul(w,$)|0,r=(r=r+Math.imul(w,ee)|0)+Math.imul(E,$)|0,o=o+Math.imul(E,ee)|0,i=i+Math.imul(b,ne)|0,r=(r=r+Math.imul(b,ie)|0)+Math.imul(m,ne)|0,o=o+Math.imul(m,ie)|0,i=i+Math.imul(p,oe)|0,r=(r=r+Math.imul(p,se)|0)+Math.imul(g,oe)|0,o=o+Math.imul(g,se)|0;var Ie=(l+(i=i+Math.imul(h,ce)|0)|0)+((8191&(r=(r=r+Math.imul(h,le)|0)+Math.imul(d,ce)|0))<<13)|0;l=((o=o+Math.imul(d,le)|0)+(r>>>13)|0)+(Ie>>>26)|0,Ie&=67108863,i=Math.imul(K,j),r=(r=Math.imul(K,D))+Math.imul(L,j)|0,o=Math.imul(L,D),i=i+Math.imul(C,W)|0,r=(r=r+Math.imul(C,J)|0)+Math.imul(P,W)|0,o=o+Math.imul(P,J)|0,i=i+Math.imul(k,Q)|0,r=(r=r+Math.imul(k,H)|0)+Math.imul(O,Q)|0,o=o+Math.imul(O,H)|0,i=i+Math.imul(x,Y)|0,r=(r=r+Math.imul(x,X)|0)+Math.imul(M,Y)|0,o=o+Math.imul(M,X)|0,i=i+Math.imul(I,$)|0,r=(r=r+Math.imul(I,ee)|0)+Math.imul(A,$)|0,o=o+Math.imul(A,ee)|0,i=i+Math.imul(w,ne)|0,r=(r=r+Math.imul(w,ie)|0)+Math.imul(E,ne)|0,o=o+Math.imul(E,ie)|0,i=i+Math.imul(b,oe)|0,r=(r=r+Math.imul(b,se)|0)+Math.imul(m,oe)|0,o=o+Math.imul(m,se)|0,i=i+Math.imul(p,ce)|0,r=(r=r+Math.imul(p,le)|0)+Math.imul(g,ce)|0,o=o+Math.imul(g,le)|0;var Ae=(l+(i=i+Math.imul(h,he)|0)|0)+((8191&(r=(r=r+Math.imul(h,de)|0)+Math.imul(d,he)|0))<<13)|0;l=((o=o+Math.imul(d,de)|0)+(r>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,i=Math.imul(z,j),r=(r=Math.imul(z,D))+Math.imul(V,j)|0,o=Math.imul(V,D),i=i+Math.imul(K,W)|0,r=(r=r+Math.imul(K,J)|0)+Math.imul(L,W)|0,o=o+Math.imul(L,J)|0,i=i+Math.imul(C,Q)|0,r=(r=r+Math.imul(C,H)|0)+Math.imul(P,Q)|0,o=o+Math.imul(P,H)|0,i=i+Math.imul(k,Y)|0,r=(r=r+Math.imul(k,X)|0)+Math.imul(O,Y)|0,o=o+Math.imul(O,X)|0,i=i+Math.imul(x,$)|0,r=(r=r+Math.imul(x,ee)|0)+Math.imul(M,$)|0,o=o+Math.imul(M,ee)|0,i=i+Math.imul(I,ne)|0,r=(r=r+Math.imul(I,ie)|0)+Math.imul(A,ne)|0,o=o+Math.imul(A,ie)|0,i=i+Math.imul(w,oe)|0,r=(r=r+Math.imul(w,se)|0)+Math.imul(E,oe)|0,o=o+Math.imul(E,se)|0,i=i+Math.imul(b,ce)|0,r=(r=r+Math.imul(b,le)|0)+Math.imul(m,ce)|0,o=o+Math.imul(m,le)|0,i=i+Math.imul(p,he)|0,r=(r=r+Math.imul(p,de)|0)+Math.imul(g,he)|0,o=o+Math.imul(g,de)|0;var Re=(l+(i=i+Math.imul(h,pe)|0)|0)+((8191&(r=(r=r+Math.imul(h,ge)|0)+Math.imul(d,pe)|0))<<13)|0;l=((o=o+Math.imul(d,ge)|0)+(r>>>13)|0)+(Re>>>26)|0,Re&=67108863,i=Math.imul(z,W),r=(r=Math.imul(z,J))+Math.imul(V,W)|0,o=Math.imul(V,J),i=i+Math.imul(K,Q)|0,r=(r=r+Math.imul(K,H)|0)+Math.imul(L,Q)|0,o=o+Math.imul(L,H)|0,i=i+Math.imul(C,Y)|0,r=(r=r+Math.imul(C,X)|0)+Math.imul(P,Y)|0,o=o+Math.imul(P,X)|0,i=i+Math.imul(k,$)|0,r=(r=r+Math.imul(k,ee)|0)+Math.imul(O,$)|0,o=o+Math.imul(O,ee)|0,i=i+Math.imul(x,ne)|0,r=(r=r+Math.imul(x,ie)|0)+Math.imul(M,ne)|0,o=o+Math.imul(M,ie)|0,i=i+Math.imul(I,oe)|0,r=(r=r+Math.imul(I,se)|0)+Math.imul(A,oe)|0,o=o+Math.imul(A,se)|0,i=i+Math.imul(w,ce)|0,r=(r=r+Math.imul(w,le)|0)+Math.imul(E,ce)|0,o=o+Math.imul(E,le)|0,i=i+Math.imul(b,he)|0,r=(r=r+Math.imul(b,de)|0)+Math.imul(m,he)|0,o=o+Math.imul(m,de)|0;var xe=(l+(i=i+Math.imul(p,pe)|0)|0)+((8191&(r=(r=r+Math.imul(p,ge)|0)+Math.imul(g,pe)|0))<<13)|0;l=((o=o+Math.imul(g,ge)|0)+(r>>>13)|0)+(xe>>>26)|0,xe&=67108863,i=Math.imul(z,Q),r=(r=Math.imul(z,H))+Math.imul(V,Q)|0,o=Math.imul(V,H),i=i+Math.imul(K,Y)|0,r=(r=r+Math.imul(K,X)|0)+Math.imul(L,Y)|0,o=o+Math.imul(L,X)|0,i=i+Math.imul(C,$)|0,r=(r=r+Math.imul(C,ee)|0)+Math.imul(P,$)|0,o=o+Math.imul(P,ee)|0,i=i+Math.imul(k,ne)|0,r=(r=r+Math.imul(k,ie)|0)+Math.imul(O,ne)|0,o=o+Math.imul(O,ie)|0,i=i+Math.imul(x,oe)|0,r=(r=r+Math.imul(x,se)|0)+Math.imul(M,oe)|0,o=o+Math.imul(M,se)|0,i=i+Math.imul(I,ce)|0,r=(r=r+Math.imul(I,le)|0)+Math.imul(A,ce)|0,o=o+Math.imul(A,le)|0,i=i+Math.imul(w,he)|0,r=(r=r+Math.imul(w,de)|0)+Math.imul(E,he)|0,o=o+Math.imul(E,de)|0;var Me=(l+(i=i+Math.imul(b,pe)|0)|0)+((8191&(r=(r=r+Math.imul(b,ge)|0)+Math.imul(m,pe)|0))<<13)|0;l=((o=o+Math.imul(m,ge)|0)+(r>>>13)|0)+(Me>>>26)|0,Me&=67108863,i=Math.imul(z,Y),r=(r=Math.imul(z,X))+Math.imul(V,Y)|0,o=Math.imul(V,X),i=i+Math.imul(K,$)|0,r=(r=r+Math.imul(K,ee)|0)+Math.imul(L,$)|0,o=o+Math.imul(L,ee)|0,i=i+Math.imul(C,ne)|0,r=(r=r+Math.imul(C,ie)|0)+Math.imul(P,ne)|0,o=o+Math.imul(P,ie)|0,i=i+Math.imul(k,oe)|0,r=(r=r+Math.imul(k,se)|0)+Math.imul(O,oe)|0,o=o+Math.imul(O,se)|0,i=i+Math.imul(x,ce)|0,r=(r=r+Math.imul(x,le)|0)+Math.imul(M,ce)|0,o=o+Math.imul(M,le)|0,i=i+Math.imul(I,he)|0,r=(r=r+Math.imul(I,de)|0)+Math.imul(A,he)|0,o=o+Math.imul(A,de)|0;var Te=(l+(i=i+Math.imul(w,pe)|0)|0)+((8191&(r=(r=r+Math.imul(w,ge)|0)+Math.imul(E,pe)|0))<<13)|0;l=((o=o+Math.imul(E,ge)|0)+(r>>>13)|0)+(Te>>>26)|0,Te&=67108863,i=Math.imul(z,$),r=(r=Math.imul(z,ee))+Math.imul(V,$)|0,o=Math.imul(V,ee),i=i+Math.imul(K,ne)|0,r=(r=r+Math.imul(K,ie)|0)+Math.imul(L,ne)|0,o=o+Math.imul(L,ie)|0,i=i+Math.imul(C,oe)|0,r=(r=r+Math.imul(C,se)|0)+Math.imul(P,oe)|0,o=o+Math.imul(P,se)|0,i=i+Math.imul(k,ce)|0,r=(r=r+Math.imul(k,le)|0)+Math.imul(O,ce)|0,o=o+Math.imul(O,le)|0,i=i+Math.imul(x,he)|0,r=(r=r+Math.imul(x,de)|0)+Math.imul(M,he)|0,o=o+Math.imul(M,de)|0;var ke=(l+(i=i+Math.imul(I,pe)|0)|0)+((8191&(r=(r=r+Math.imul(I,ge)|0)+Math.imul(A,pe)|0))<<13)|0;l=((o=o+Math.imul(A,ge)|0)+(r>>>13)|0)+(ke>>>26)|0,ke&=67108863,i=Math.imul(z,ne),r=(r=Math.imul(z,ie))+Math.imul(V,ne)|0,o=Math.imul(V,ie),i=i+Math.imul(K,oe)|0,r=(r=r+Math.imul(K,se)|0)+Math.imul(L,oe)|0,o=o+Math.imul(L,se)|0,i=i+Math.imul(C,ce)|0,r=(r=r+Math.imul(C,le)|0)+Math.imul(P,ce)|0,o=o+Math.imul(P,le)|0,i=i+Math.imul(k,he)|0,r=(r=r+Math.imul(k,de)|0)+Math.imul(O,he)|0,o=o+Math.imul(O,de)|0;var Oe=(l+(i=i+Math.imul(x,pe)|0)|0)+((8191&(r=(r=r+Math.imul(x,ge)|0)+Math.imul(M,pe)|0))<<13)|0;l=((o=o+Math.imul(M,ge)|0)+(r>>>13)|0)+(Oe>>>26)|0,Oe&=67108863,i=Math.imul(z,oe),r=(r=Math.imul(z,se))+Math.imul(V,oe)|0,o=Math.imul(V,se),i=i+Math.imul(K,ce)|0,r=(r=r+Math.imul(K,le)|0)+Math.imul(L,ce)|0,o=o+Math.imul(L,le)|0,i=i+Math.imul(C,he)|0,r=(r=r+Math.imul(C,de)|0)+Math.imul(P,he)|0,o=o+Math.imul(P,de)|0;var Ue=(l+(i=i+Math.imul(k,pe)|0)|0)+((8191&(r=(r=r+Math.imul(k,ge)|0)+Math.imul(O,pe)|0))<<13)|0;l=((o=o+Math.imul(O,ge)|0)+(r>>>13)|0)+(Ue>>>26)|0,Ue&=67108863,i=Math.imul(z,ce),r=(r=Math.imul(z,le))+Math.imul(V,ce)|0,o=Math.imul(V,le),i=i+Math.imul(K,he)|0,r=(r=r+Math.imul(K,de)|0)+Math.imul(L,he)|0,o=o+Math.imul(L,de)|0;var Ce=(l+(i=i+Math.imul(C,pe)|0)|0)+((8191&(r=(r=r+Math.imul(C,ge)|0)+Math.imul(P,pe)|0))<<13)|0;l=((o=o+Math.imul(P,ge)|0)+(r>>>13)|0)+(Ce>>>26)|0,Ce&=67108863,i=Math.imul(z,he),r=(r=Math.imul(z,de))+Math.imul(V,he)|0,o=Math.imul(V,de);var Pe=(l+(i=i+Math.imul(K,pe)|0)|0)+((8191&(r=(r=r+Math.imul(K,ge)|0)+Math.imul(L,pe)|0))<<13)|0;l=((o=o+Math.imul(L,ge)|0)+(r>>>13)|0)+(Pe>>>26)|0,Pe&=67108863;var Ne=(l+(i=Math.imul(z,pe))|0)+((8191&(r=(r=Math.imul(z,ge))+Math.imul(V,pe)|0))<<13)|0;return l=((o=Math.imul(V,ge))+(r>>>13)|0)+(Ne>>>26)|0,Ne&=67108863,c[0]=ye,c[1]=be,c[2]=me,c[3]=ve,c[4]=we,c[5]=Ee,c[6]=Se,c[7]=Ie,c[8]=Ae,c[9]=Re,c[10]=xe,c[11]=Me,c[12]=Te,c[13]=ke,c[14]=Oe,c[15]=Ue,c[16]=Ce,c[17]=Pe,c[18]=Ne,0!==l&&(c[19]=l,n.length++),n};function g(e,t,n){return(new y).mulp(e,t,n)}function y(e,t){this.x=e,this.y=t}Math.imul||(p=f),o.prototype.mulTo=function(e,t){var n,i=this.length+e.length;return n=10===this.length&&10===e.length?p(this,e,t):i<63?f(this,e,t):i<1024?function(e,t,n){n.negative=t.negative^e.negative,n.length=e.length+t.length;for(var i=0,r=0,o=0;o>>26)|0)>>>26,s&=67108863}n.words[o]=a,i=s,s=r}return 0!==i?n.words[o]=i:n.length--,n.strip()}(this,e,t):g(this,e,t),n},y.prototype.makeRBT=function(e){for(var t=new Array(e),n=o.prototype._countBits(e)-1,i=0;i>=1;return i},y.prototype.permute=function(e,t,n,i,r,o){for(var s=0;s>>=1)r++;return 1<>>=13,n[2*s+1]=8191&o,o>>>=13;for(s=2*t;s>=26,t+=r/67108864|0,t+=o>>>26,this.words[n]=67108863&o}return 0!==t&&(this.words[n]=t,this.length++),this},o.prototype.muln=function(e){return this.clone().imuln(e)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(e){var t=function(e){for(var t=new Array(e.bitLength()),n=0;n>>r}return t}(e);if(0===t.length)return new o(1);for(var n=this,i=0;i=0);var t,n=e%26,r=(e-n)/26,o=67108863>>>26-n<<26-n;if(0!==n){var s=0;for(t=0;t>>26-n}s&&(this.words[t]=s,this.length++)}if(0!==r){for(t=this.length-1;t>=0;t--)this.words[t+r]=this.words[t];for(t=0;t=0),r=t?(t-t%26)/26:0;var o=e%26,s=Math.min((e-o)/26,this.length),a=67108863^67108863>>>o<s)for(this.length-=s,l=0;l=0&&(0!==u||l>=r);l--){var h=0|this.words[l];this.words[l]=u<<26-o|h>>>o,u=h&a}return c&&0!==u&&(c.words[c.length++]=u),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function(e,t,n){return i(0===this.negative),this.iushrn(e,t,n)},o.prototype.shln=function(e){return this.clone().ishln(e)},o.prototype.ushln=function(e){return this.clone().iushln(e)},o.prototype.shrn=function(e){return this.clone().ishrn(e)},o.prototype.ushrn=function(e){return this.clone().iushrn(e)},o.prototype.testn=function(e){i("number"==typeof e&&e>=0);var t=e%26,n=(e-t)/26,r=1<=0);var t=e%26,n=(e-t)/26;if(i(0===this.negative,"imaskn works only with positive numbers"),this.length<=n)return this;if(0!==t&&n++,this.length=Math.min(n,this.length),0!==t){var r=67108863^67108863>>>t<=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},o.prototype.isubn=function(e){if(i("number"==typeof e),i(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t>26)-(c/67108864|0),this.words[r+n]=67108863&o}for(;r>26,this.words[r+n]=67108863&o;if(0===a)return this.strip();for(i(-1===a),a=0,r=0;r>26,this.words[r]=67108863&o;return this.negative=1,this.strip()},o.prototype._wordDiv=function(e,t){var n=(this.length,e.length),i=this.clone(),r=e,s=0|r.words[r.length-1];0!==(n=26-this._countBits(s))&&(r=r.ushln(n),i.iushln(n),s=0|r.words[r.length-1]);var a,c=i.length-r.length;if("mod"!==t){(a=new o(null)).length=c+1,a.words=new Array(a.length);for(var l=0;l=0;h--){var d=67108864*(0|i.words[r.length+h])+(0|i.words[r.length+h-1]);for(d=Math.min(d/s|0,67108863),i._ishlnsubmul(r,d,h);0!==i.negative;)d--,i.negative=0,i._ishlnsubmul(r,1,h),i.isZero()||(i.negative^=1);a&&(a.words[h]=d)}return a&&a.strip(),i.strip(),"div"!==t&&0!==n&&i.iushrn(n),{div:a||null,mod:i}},o.prototype.divmod=function(e,t,n){return i(!e.isZero()),this.isZero()?{div:new o(0),mod:new o(0)}:0!==this.negative&&0===e.negative?(a=this.neg().divmod(e,t),"mod"!==t&&(r=a.div.neg()),"div"!==t&&(s=a.mod.neg(),n&&0!==s.negative&&s.iadd(e)),{div:r,mod:s}):0===this.negative&&0!==e.negative?(a=this.divmod(e.neg(),t),"mod"!==t&&(r=a.div.neg()),{div:r,mod:a.mod}):0!=(this.negative&e.negative)?(a=this.neg().divmod(e.neg(),t),"div"!==t&&(s=a.mod.neg(),n&&0!==s.negative&&s.isub(e)),{div:a.div,mod:s}):e.length>this.length||this.cmp(e)<0?{div:new o(0),mod:this}:1===e.length?"div"===t?{div:this.divn(e.words[0]),mod:null}:"mod"===t?{div:null,mod:new o(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new o(this.modn(e.words[0]))}:this._wordDiv(e,t);var r,s,a},o.prototype.div=function(e){return this.divmod(e,"div",!1).div},o.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},o.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},o.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var n=0!==t.div.negative?t.mod.isub(e):t.mod,i=e.ushrn(1),r=e.andln(1),o=n.cmp(i);return o<0||1===r&&0===o?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},o.prototype.modn=function(e){i(e<=67108863);for(var t=(1<<26)%e,n=0,r=this.length-1;r>=0;r--)n=(t*n+(0|this.words[r]))%e;return n},o.prototype.idivn=function(e){i(e<=67108863);for(var t=0,n=this.length-1;n>=0;n--){var r=(0|this.words[n])+67108864*t;this.words[n]=r/e|0,t=r%e}return this.strip()},o.prototype.divn=function(e){return this.clone().idivn(e)},o.prototype.egcd=function(e){i(0===e.negative),i(!e.isZero());var t=this,n=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var r=new o(1),s=new o(0),a=new o(0),c=new o(1),l=0;t.isEven()&&n.isEven();)t.iushrn(1),n.iushrn(1),++l;for(var u=n.clone(),h=t.clone();!t.isZero();){for(var d=0,f=1;0==(t.words[0]&f)&&d<26;++d,f<<=1);if(d>0)for(t.iushrn(d);d-- >0;)(r.isOdd()||s.isOdd())&&(r.iadd(u),s.isub(h)),r.iushrn(1),s.iushrn(1);for(var p=0,g=1;0==(n.words[0]&g)&&p<26;++p,g<<=1);if(p>0)for(n.iushrn(p);p-- >0;)(a.isOdd()||c.isOdd())&&(a.iadd(u),c.isub(h)),a.iushrn(1),c.iushrn(1);t.cmp(n)>=0?(t.isub(n),r.isub(a),s.isub(c)):(n.isub(t),a.isub(r),c.isub(s))}return{a,b:c,gcd:n.iushln(l)}},o.prototype._invmp=function(e){i(0===e.negative),i(!e.isZero());var t=this,n=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var r,s=new o(1),a=new o(0),c=n.clone();t.cmpn(1)>0&&n.cmpn(1)>0;){for(var l=0,u=1;0==(t.words[0]&u)&&l<26;++l,u<<=1);if(l>0)for(t.iushrn(l);l-- >0;)s.isOdd()&&s.iadd(c),s.iushrn(1);for(var h=0,d=1;0==(n.words[0]&d)&&h<26;++h,d<<=1);if(h>0)for(n.iushrn(h);h-- >0;)a.isOdd()&&a.iadd(c),a.iushrn(1);t.cmp(n)>=0?(t.isub(n),s.isub(a)):(n.isub(t),a.isub(s))}return(r=0===t.cmpn(1)?s:a).cmpn(0)<0&&r.iadd(e),r},o.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),n=e.clone();t.negative=0,n.negative=0;for(var i=0;t.isEven()&&n.isEven();i++)t.iushrn(1),n.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;n.isEven();)n.iushrn(1);var r=t.cmp(n);if(r<0){var o=t;t=n,n=o}else if(0===r||0===n.cmpn(1))break;t.isub(n)}return n.iushln(i)},o.prototype.invm=function(e){return this.egcd(e).a.umod(e)},o.prototype.isEven=function(){return 0==(1&this.words[0])},o.prototype.isOdd=function(){return 1==(1&this.words[0])},o.prototype.andln=function(e){return this.words[0]&e},o.prototype.bincn=function(e){i("number"==typeof e);var t=e%26,n=(e-t)/26,r=1<>>26,a&=67108863,this.words[s]=a}return 0!==o&&(this.words[s]=o,this.length++),this},o.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function(e){var t,n=e<0;if(0!==this.negative&&!n)return-1;if(0===this.negative&&n)return 1;if(this.strip(),this.length>1)t=1;else{n&&(e=-e),i(e<=67108863,"Number is too big");var r=0|this.words[0];t=r===e?0:re.length)return 1;if(this.length=0;n--){var i=0|this.words[n],r=0|e.words[n];if(i!==r){ir&&(t=1);break}}return t},o.prototype.gtn=function(e){return 1===this.cmpn(e)},o.prototype.gt=function(e){return 1===this.cmp(e)},o.prototype.gten=function(e){return this.cmpn(e)>=0},o.prototype.gte=function(e){return this.cmp(e)>=0},o.prototype.ltn=function(e){return-1===this.cmpn(e)},o.prototype.lt=function(e){return-1===this.cmp(e)},o.prototype.lten=function(e){return this.cmpn(e)<=0},o.prototype.lte=function(e){return this.cmp(e)<=0},o.prototype.eqn=function(e){return 0===this.cmpn(e)},o.prototype.eq=function(e){return 0===this.cmp(e)},o.red=function(e){return new I(e)},o.prototype.toRed=function(e){return i(!this.red,"Already a number in reduction context"),i(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},o.prototype.fromRed=function(){return i(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function(e){return this.red=e,this},o.prototype.forceRed=function(e){return i(!this.red,"Already a number in reduction context"),this._forceRed(e)},o.prototype.redAdd=function(e){return i(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},o.prototype.redIAdd=function(e){return i(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},o.prototype.redSub=function(e){return i(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},o.prototype.redISub=function(e){return i(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},o.prototype.redShl=function(e){return i(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},o.prototype.redMul=function(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},o.prototype.redIMul=function(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},o.prototype.redSqr=function(){return i(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return i(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return i(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return i(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return i(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(e){return i(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var b={k256:null,p224:null,p192:null,p25519:null};function m(e,t){this.name=e,this.p=new o(t,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function v(){m.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function w(){m.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function E(){m.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function S(){m.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function I(e){if("string"==typeof e){var t=o._prime(e);this.m=t.p,this.prime=t}else i(e.gtn(1),"modulus must be greater than 1"),this.m=e,this.prime=null}function A(e){I.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}m.prototype._tmp=function(){var e=new o(null);return e.words=new Array(Math.ceil(this.n/13)),e},m.prototype.ireduce=function(e){var t,n=e;do{this.split(n,this.tmp),t=(n=(n=this.imulK(n)).iadd(this.tmp)).bitLength()}while(t>this.n);var i=t0?n.isub(this.p):void 0!==n.strip?n.strip():n._strip(),n},m.prototype.split=function(e,t){e.iushrn(this.n,0,t)},m.prototype.imulK=function(e){return e.imul(this.k)},r(v,m),v.prototype.split=function(e,t){for(var n=4194303,i=Math.min(e.length,9),r=0;r>>22,o=s}o>>>=22,e.words[r-10]=o,0===o&&e.length>10?e.length-=10:e.length-=9},v.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,n=0;n>>=26,e.words[n]=r,t=i}return 0!==t&&(e.words[e.length++]=t),e},o._prime=function(e){if(b[e])return b[e];var t;if("k256"===e)t=new v;else if("p224"===e)t=new w;else if("p192"===e)t=new E;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new S}return b[e]=t,t},I.prototype._verify1=function(e){i(0===e.negative,"red works only with positives"),i(e.red,"red works only with red numbers")},I.prototype._verify2=function(e,t){i(0==(e.negative|t.negative),"red works only with positives"),i(e.red&&e.red===t.red,"red works only with red numbers")},I.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},I.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},I.prototype.add=function(e,t){this._verify2(e,t);var n=e.add(t);return n.cmp(this.m)>=0&&n.isub(this.m),n._forceRed(this)},I.prototype.iadd=function(e,t){this._verify2(e,t);var n=e.iadd(t);return n.cmp(this.m)>=0&&n.isub(this.m),n},I.prototype.sub=function(e,t){this._verify2(e,t);var n=e.sub(t);return n.cmpn(0)<0&&n.iadd(this.m),n._forceRed(this)},I.prototype.isub=function(e,t){this._verify2(e,t);var n=e.isub(t);return n.cmpn(0)<0&&n.iadd(this.m),n},I.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},I.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},I.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},I.prototype.isqr=function(e){return this.imul(e,e.clone())},I.prototype.sqr=function(e){return this.mul(e,e)},I.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(i(t%2==1),3===t){var n=this.m.add(new o(1)).iushrn(2);return this.pow(e,n)}for(var r=this.m.subn(1),s=0;!r.isZero()&&0===r.andln(1);)s++,r.iushrn(1);i(!r.isZero());var a=new o(1).toRed(this),c=a.redNeg(),l=this.m.subn(1).iushrn(1),u=this.m.bitLength();for(u=new o(2*u*u).toRed(this);0!==this.pow(u,l).cmp(c);)u.redIAdd(c);for(var h=this.pow(u,r),d=this.pow(e,r.addn(1).iushrn(1)),f=this.pow(e,r),p=s;0!==f.cmp(a);){for(var g=f,y=0;0!==g.cmp(a);y++)g=g.redSqr();i(y=0;i--){for(var l=t.words[i],u=c-1;u>=0;u--){var h=l>>u&1;r!==n[0]&&(r=this.sqr(r)),0!==h||0!==s?(s<<=1,s|=h,(4===++a||0===i&&0===u)&&(r=this.mul(r,n[s]),a=0,s=0)):a=0}c=26}return r},I.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},I.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},o.mont=function(e){return new A(e)},r(A,I),A.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},A.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},A.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var n=e.imul(t),i=n.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),r=n.isub(i).iushrn(this.shift),o=r;return r.cmp(this.m)>=0?o=r.isub(this.m):r.cmpn(0)<0&&(o=r.iadd(this.m)),o._forceRed(this)},A.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new o(0)._forceRed(this);var n=e.mul(t),i=n.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),r=n.isub(i).iushrn(this.shift),s=r;return r.cmp(this.m)>=0?s=r.isub(this.m):r.cmpn(0)<0&&(s=r.iadd(this.m)),s._forceRed(this)},A.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(e=n.nmd(e),this)},9931:(e,t,n)=>{var i;function r(e){this.rand=e}if(e.exports=function(e){return i||(i=new r(null)),i.generate(e)},e.exports.Rand=r,r.prototype.generate=function(e){return this._rand(e)},r.prototype._rand=function(e){if(this.rand.getBytes)return this.rand.getBytes(e);for(var t=new Uint8Array(e),n=0;n{var i=n(8162);e.exports=i("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz")},3310:(e,t,n)=>{"use strict";var i=n(7191),r=n(9509).Buffer;e.exports=function(e){function t(t){var n=t.slice(0,-4),i=t.slice(-4),r=e(n);if(!(i[0]^r[0]|i[1]^r[1]|i[2]^r[2]|i[3]^r[3]))return n}return{encode:function(t){var n=e(t);return i.encode(r.concat([t,n],t.length+4))},decode:function(e){var n=t(i.decode(e));if(!n)throw new Error("Invalid checksum");return n},decodeUnsafe:function(e){var n=i.decodeUnsafe(e);if(n)return t(n)}}}},8334:(e,t,n)=>{"use strict";var i=n(3482),r=n(3310);e.exports=r((function(e){var t=i("sha256").update(e).digest();return i("sha256").update(t).digest()}))},8764:(e,t,n)=>{"use strict";var i=n(5108);const r=n(9742),o=n(645),s="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;t.Buffer=l,t.SlowBuffer=function(e){+e!=e&&(e=0);return l.alloc(+e)},t.INSPECT_MAX_BYTES=50;const a=2147483647;function c(e){if(e>a)throw new RangeError('The value "'+e+'" is invalid for option "size"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,l.prototype),t}function l(e,t,n){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return d(e)}return u(e,t,n)}function u(e,t,n){if("string"==typeof e)return function(e,t){"string"==typeof t&&""!==t||(t="utf8");if(!l.isEncoding(t))throw new TypeError("Unknown encoding: "+t);const n=0|y(e,t);let i=c(n);const r=i.write(e,t);r!==n&&(i=i.slice(0,r));return i}(e,t);if(ArrayBuffer.isView(e))return function(e){if(Y(e,Uint8Array)){const t=new Uint8Array(e);return p(t.buffer,t.byteOffset,t.byteLength)}return f(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(Y(e,ArrayBuffer)||e&&Y(e.buffer,ArrayBuffer))return p(e,t,n);if("undefined"!=typeof SharedArrayBuffer&&(Y(e,SharedArrayBuffer)||e&&Y(e.buffer,SharedArrayBuffer)))return p(e,t,n);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');const i=e.valueOf&&e.valueOf();if(null!=i&&i!==e)return l.from(i,t,n);const r=function(e){if(l.isBuffer(e)){const t=0|g(e.length),n=c(t);return 0===n.length||e.copy(n,0,0,t),n}if(void 0!==e.length)return"number"!=typeof e.length||X(e.length)?c(0):f(e);if("Buffer"===e.type&&Array.isArray(e.data))return f(e.data)}(e);if(r)return r;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return l.from(e[Symbol.toPrimitive]("string"),t,n);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function h(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function d(e){return h(e),c(e<0?0:0|g(e))}function f(e){const t=e.length<0?0:0|g(e.length),n=c(t);for(let i=0;i=a)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a.toString(16)+" bytes");return 0|e}function y(e,t){if(l.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||Y(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const n=e.length,i=arguments.length>2&&!0===arguments[2];if(!i&&0===n)return 0;let r=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return Q(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return H(e).length;default:if(r)return i?-1:Q(e).length;t=(""+t).toLowerCase(),r=!0}}function b(e,t,n){let i=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return U(this,t,n);case"utf8":case"utf-8":return M(this,t,n);case"ascii":return k(this,t,n);case"latin1":case"binary":return O(this,t,n);case"base64":return x(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return C(this,t,n);default:if(i)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),i=!0}}function m(e,t,n){const i=e[t];e[t]=e[n],e[n]=i}function v(e,t,n,i,r){if(0===e.length)return-1;if("string"==typeof n?(i=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),X(n=+n)&&(n=r?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(r)return-1;n=e.length-1}else if(n<0){if(!r)return-1;n=0}if("string"==typeof t&&(t=l.from(t,i)),l.isBuffer(t))return 0===t.length?-1:w(e,t,n,i,r);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?r?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):w(e,[t],n,i,r);throw new TypeError("val must be string, number or Buffer")}function w(e,t,n,i,r){let o,s=1,a=e.length,c=t.length;if(void 0!==i&&("ucs2"===(i=String(i).toLowerCase())||"ucs-2"===i||"utf16le"===i||"utf-16le"===i)){if(e.length<2||t.length<2)return-1;s=2,a/=2,c/=2,n/=2}function l(e,t){return 1===s?e[t]:e.readUInt16BE(t*s)}if(r){let i=-1;for(o=n;oa&&(n=a-c),o=n;o>=0;o--){let n=!0;for(let i=0;ir&&(i=r):i=r;const o=t.length;let s;for(i>o/2&&(i=o/2),s=0;s>8,r=n%256,o.push(r),o.push(i);return o}(t,e.length-n),e,n,i)}function x(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function M(e,t,n){n=Math.min(e.length,n);const i=[];let r=t;for(;r239?4:t>223?3:t>191?2:1;if(r+s<=n){let n,i,a,c;switch(s){case 1:t<128&&(o=t);break;case 2:n=e[r+1],128==(192&n)&&(c=(31&t)<<6|63&n,c>127&&(o=c));break;case 3:n=e[r+1],i=e[r+2],128==(192&n)&&128==(192&i)&&(c=(15&t)<<12|(63&n)<<6|63&i,c>2047&&(c<55296||c>57343)&&(o=c));break;case 4:n=e[r+1],i=e[r+2],a=e[r+3],128==(192&n)&&128==(192&i)&&128==(192&a)&&(c=(15&t)<<18|(63&n)<<12|(63&i)<<6|63&a,c>65535&&c<1114112&&(o=c))}}null===o?(o=65533,s=1):o>65535&&(o-=65536,i.push(o>>>10&1023|55296),o=56320|1023&o),i.push(o),r+=s}return function(e){const t=e.length;if(t<=T)return String.fromCharCode.apply(String,e);let n="",i=0;for(;ii.length?(l.isBuffer(t)||(t=l.from(t)),t.copy(i,r)):Uint8Array.prototype.set.call(i,t,r);else{if(!l.isBuffer(t))throw new TypeError('"list" argument must be an Array of Buffers');t.copy(i,r)}r+=t.length}return i},l.byteLength=y,l.prototype._isBuffer=!0,l.prototype.swap16=function(){const e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;tn&&(e+=" ... "),""},s&&(l.prototype[s]=l.prototype.inspect),l.prototype.compare=function(e,t,n,i,r){if(Y(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),!l.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===i&&(i=0),void 0===r&&(r=this.length),t<0||n>e.length||i<0||r>this.length)throw new RangeError("out of range index");if(i>=r&&t>=n)return 0;if(i>=r)return-1;if(t>=n)return 1;if(this===e)return 0;let o=(r>>>=0)-(i>>>=0),s=(n>>>=0)-(t>>>=0);const a=Math.min(o,s),c=this.slice(i,r),u=e.slice(t,n);for(let e=0;e>>=0,isFinite(n)?(n>>>=0,void 0===i&&(i="utf8")):(i=n,n=void 0)}const r=this.length-t;if((void 0===n||n>r)&&(n=r),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");let o=!1;for(;;)switch(i){case"hex":return E(this,e,t,n);case"utf8":case"utf-8":return S(this,e,t,n);case"ascii":case"latin1":case"binary":return I(this,e,t,n);case"base64":return A(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return R(this,e,t,n);default:if(o)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),o=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const T=4096;function k(e,t,n){let i="";n=Math.min(e.length,n);for(let r=t;ri)&&(n=i);let r="";for(let i=t;in)throw new RangeError("Trying to access beyond buffer length")}function N(e,t,n,i,r,o){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>r||te.length)throw new RangeError("Index out of range")}function K(e,t,n,i,r){B(t,i,r,e,n,7);let o=Number(t&BigInt(4294967295));e[n++]=o,o>>=8,e[n++]=o,o>>=8,e[n++]=o,o>>=8,e[n++]=o;let s=Number(t>>BigInt(32)&BigInt(4294967295));return e[n++]=s,s>>=8,e[n++]=s,s>>=8,e[n++]=s,s>>=8,e[n++]=s,n}function L(e,t,n,i,r){B(t,i,r,e,n,7);let o=Number(t&BigInt(4294967295));e[n+7]=o,o>>=8,e[n+6]=o,o>>=8,e[n+5]=o,o>>=8,e[n+4]=o;let s=Number(t>>BigInt(32)&BigInt(4294967295));return e[n+3]=s,s>>=8,e[n+2]=s,s>>=8,e[n+1]=s,s>>=8,e[n]=s,n+8}function q(e,t,n,i,r,o){if(n+i>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function z(e,t,n,i,r){return t=+t,n>>>=0,r||q(e,0,n,4),o.write(e,t,n,i,23,4),n+4}function V(e,t,n,i,r){return t=+t,n>>>=0,r||q(e,0,n,8),o.write(e,t,n,i,52,8),n+8}l.prototype.slice=function(e,t){const n=this.length;(e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t>>=0,t>>>=0,n||P(e,t,this.length);let i=this[e],r=1,o=0;for(;++o>>=0,t>>>=0,n||P(e,t,this.length);let i=this[e+--t],r=1;for(;t>0&&(r*=256);)i+=this[e+--t]*r;return i},l.prototype.readUint8=l.prototype.readUInt8=function(e,t){return e>>>=0,t||P(e,1,this.length),this[e]},l.prototype.readUint16LE=l.prototype.readUInt16LE=function(e,t){return e>>>=0,t||P(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUint16BE=l.prototype.readUInt16BE=function(e,t){return e>>>=0,t||P(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUint32LE=l.prototype.readUInt32LE=function(e,t){return e>>>=0,t||P(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUint32BE=l.prototype.readUInt32BE=function(e,t){return e>>>=0,t||P(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readBigUInt64LE=$((function(e){W(e>>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||J(e,this.length-8);const i=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,r=this[++e]+256*this[++e]+65536*this[++e]+n*2**24;return BigInt(i)+(BigInt(r)<>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||J(e,this.length-8);const i=t*2**24+65536*this[++e]+256*this[++e]+this[++e],r=this[++e]*2**24+65536*this[++e]+256*this[++e]+n;return(BigInt(i)<>>=0,t>>>=0,n||P(e,t,this.length);let i=this[e],r=1,o=0;for(;++o=r&&(i-=Math.pow(2,8*t)),i},l.prototype.readIntBE=function(e,t,n){e>>>=0,t>>>=0,n||P(e,t,this.length);let i=t,r=1,o=this[e+--i];for(;i>0&&(r*=256);)o+=this[e+--i]*r;return r*=128,o>=r&&(o-=Math.pow(2,8*t)),o},l.prototype.readInt8=function(e,t){return e>>>=0,t||P(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){e>>>=0,t||P(e,2,this.length);const n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt16BE=function(e,t){e>>>=0,t||P(e,2,this.length);const n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt32LE=function(e,t){return e>>>=0,t||P(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return e>>>=0,t||P(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readBigInt64LE=$((function(e){W(e>>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||J(e,this.length-8);const i=this[e+4]+256*this[e+5]+65536*this[e+6]+(n<<24);return(BigInt(i)<>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||J(e,this.length-8);const i=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(i)<>>=0,t||P(e,4,this.length),o.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return e>>>=0,t||P(e,4,this.length),o.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return e>>>=0,t||P(e,8,this.length),o.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return e>>>=0,t||P(e,8,this.length),o.read(this,e,!1,52,8)},l.prototype.writeUintLE=l.prototype.writeUIntLE=function(e,t,n,i){if(e=+e,t>>>=0,n>>>=0,!i){N(this,e,t,n,Math.pow(2,8*n)-1,0)}let r=1,o=0;for(this[t]=255&e;++o>>=0,n>>>=0,!i){N(this,e,t,n,Math.pow(2,8*n)-1,0)}let r=n-1,o=1;for(this[t+r]=255&e;--r>=0&&(o*=256);)this[t+r]=e/o&255;return t+n},l.prototype.writeUint8=l.prototype.writeUInt8=function(e,t,n){return e=+e,t>>>=0,n||N(this,e,t,1,255,0),this[t]=255&e,t+1},l.prototype.writeUint16LE=l.prototype.writeUInt16LE=function(e,t,n){return e=+e,t>>>=0,n||N(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeUint16BE=l.prototype.writeUInt16BE=function(e,t,n){return e=+e,t>>>=0,n||N(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeUint32LE=l.prototype.writeUInt32LE=function(e,t,n){return e=+e,t>>>=0,n||N(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},l.prototype.writeUint32BE=l.prototype.writeUInt32BE=function(e,t,n){return e=+e,t>>>=0,n||N(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigUInt64LE=$((function(e,t=0){return K(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeBigUInt64BE=$((function(e,t=0){return L(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeIntLE=function(e,t,n,i){if(e=+e,t>>>=0,!i){const i=Math.pow(2,8*n-1);N(this,e,t,n,i-1,-i)}let r=0,o=1,s=0;for(this[t]=255&e;++r>0)-s&255;return t+n},l.prototype.writeIntBE=function(e,t,n,i){if(e=+e,t>>>=0,!i){const i=Math.pow(2,8*n-1);N(this,e,t,n,i-1,-i)}let r=n-1,o=1,s=0;for(this[t+r]=255&e;--r>=0&&(o*=256);)e<0&&0===s&&0!==this[t+r+1]&&(s=1),this[t+r]=(e/o>>0)-s&255;return t+n},l.prototype.writeInt8=function(e,t,n){return e=+e,t>>>=0,n||N(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,n){return e=+e,t>>>=0,n||N(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeInt16BE=function(e,t,n){return e=+e,t>>>=0,n||N(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeInt32LE=function(e,t,n){return e=+e,t>>>=0,n||N(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},l.prototype.writeInt32BE=function(e,t,n){return e=+e,t>>>=0,n||N(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigInt64LE=$((function(e,t=0){return K(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeBigInt64BE=$((function(e,t=0){return L(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeFloatLE=function(e,t,n){return z(this,e,t,!0,n)},l.prototype.writeFloatBE=function(e,t,n){return z(this,e,t,!1,n)},l.prototype.writeDoubleLE=function(e,t,n){return V(this,e,t,!0,n)},l.prototype.writeDoubleBE=function(e,t,n){return V(this,e,t,!1,n)},l.prototype.copy=function(e,t,n,i){if(!l.isBuffer(e))throw new TypeError("argument should be a Buffer");if(n||(n=0),i||0===i||(i=this.length),t>=e.length&&(t=e.length),t||(t=0),i>0&&i=this.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-t>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(r=t;r=i+4;n-=3)t=`_${e.slice(n-3,n)}${t}`;return`${e.slice(0,n)}${t}`}function B(e,t,n,i,r,o){if(e>n||e3?0===t||t===BigInt(0)?`>= 0${i} and < 2${i} ** ${8*(o+1)}${i}`:`>= -(2${i} ** ${8*(o+1)-1}${i}) and < 2 ** ${8*(o+1)-1}${i}`:`>= ${t}${i} and <= ${n}${i}`,new F.ERR_OUT_OF_RANGE("value",r,e)}!function(e,t,n){W(t,"offset"),void 0!==e[t]&&void 0!==e[t+n]||J(t,e.length-(n+1))}(i,r,o)}function W(e,t){if("number"!=typeof e)throw new F.ERR_INVALID_ARG_TYPE(t,"number",e)}function J(e,t,n){if(Math.floor(e)!==e)throw W(e,n),new F.ERR_OUT_OF_RANGE(n||"offset","an integer",e);if(t<0)throw new F.ERR_BUFFER_OUT_OF_BOUNDS;throw new F.ERR_OUT_OF_RANGE(n||"offset",`>= ${n?1:0} and <= ${t}`,e)}j("ERR_BUFFER_OUT_OF_BOUNDS",(function(e){return e?`${e} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),j("ERR_INVALID_ARG_TYPE",(function(e,t){return`The "${e}" argument must be of type number. Received type ${typeof t}`}),TypeError),j("ERR_OUT_OF_RANGE",(function(e,t,n){let i=`The value of "${e}" is out of range.`,r=n;return Number.isInteger(n)&&Math.abs(n)>2**32?r=D(String(n)):"bigint"==typeof n&&(r=String(n),(n>BigInt(2)**BigInt(32)||n<-(BigInt(2)**BigInt(32)))&&(r=D(r)),r+="n"),i+=` It must be ${t}. Received ${r}`,i}),RangeError);const Z=/[^+/0-9A-Za-z-_]/g;function Q(e,t){let n;t=t||1/0;const i=e.length;let r=null;const o=[];for(let s=0;s55295&&n<57344){if(!r){if(n>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(s+1===i){(t-=3)>-1&&o.push(239,191,189);continue}r=n;continue}if(n<56320){(t-=3)>-1&&o.push(239,191,189),r=n;continue}n=65536+(r-55296<<10|n-56320)}else r&&(t-=3)>-1&&o.push(239,191,189);if(r=null,n<128){if((t-=1)<0)break;o.push(n)}else if(n<2048){if((t-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function H(e){return r.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(Z,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function G(e,t,n,i){let r;for(r=0;r=t.length||r>=e.length);++r)t[r+n]=e[r];return r}function Y(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function X(e){return e!=e}const _=function(){const e="0123456789abcdef",t=new Array(256);for(let n=0;n<16;++n){const i=16*n;for(let r=0;r<16;++r)t[i+r]=e[n]+e[r]}return t}();function $(e){return"undefined"==typeof BigInt?ee:e}function ee(){throw new Error("BigInt not supported")}},1924:(e,t,n)=>{"use strict";var i=n(210),r=n(5559),o=r(i("String.prototype.indexOf"));e.exports=function(e,t){var n=i(e,!!t);return"function"==typeof n&&o(e,".prototype.")>-1?r(n):n}},5559:(e,t,n)=>{"use strict";var i=n(8612),r=n(210),o=r("%Function.prototype.apply%"),s=r("%Function.prototype.call%"),a=r("%Reflect.apply%",!0)||i.call(s,o),c=r("%Object.getOwnPropertyDescriptor%",!0),l=r("%Object.defineProperty%",!0),u=r("%Math.max%");if(l)try{l({},"a",{value:1})}catch(e){l=null}e.exports=function(e){var t=a(i,s,arguments);c&&l&&(c(t,"length").configurable&&l(t,"length",{value:1+u(0,e.length-(arguments.length-1))}));return t};var h=function(){return a(i,o,arguments)};l?l(e.exports,"apply",{value:h}):e.exports.apply=h},1027:(e,t,n)=>{var i=n(9509).Buffer,r=n(2830).Transform,o=n(2553).s;function s(e){r.call(this),this.hashMode="string"==typeof e,this.hashMode?this[e]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}n(5717)(s,r),s.prototype.update=function(e,t,n){"string"==typeof e&&(e=i.from(e,t));var r=this._update(e);return this.hashMode?this:(n&&(r=this._toString(r,n)),r)},s.prototype.setAutoPadding=function(){},s.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},s.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},s.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},s.prototype._transform=function(e,t,n){var i;try{this.hashMode?this._update(e):this.push(this._update(e))}catch(e){i=e}finally{n(i)}},s.prototype._flush=function(e){var t;try{this.push(this.__final())}catch(e){t=e}e(t)},s.prototype._finalOrDigest=function(e){var t=this.__final()||i.alloc(0);return e&&(t=this._toString(t,e,!0)),t},s.prototype._toString=function(e,t,n){if(this._decoder||(this._decoder=new o(t),this._encoding=t),this._encoding!==t)throw new Error("can't switch encodings");var i=this._decoder.write(e);return n&&(i+=this._decoder.end()),i},e.exports=s},5108:(e,t,n)=>{var i=n(9539),r=n(9282);function o(){return(new Date).getTime()}var s,a=Array.prototype.slice,c={};s=void 0!==n.g&&n.g.console?n.g.console:"undefined"!=typeof window&&window.console?window.console:{};for(var l=[[function(){},"log"],[function(){s.log.apply(s,arguments)},"info"],[function(){s.log.apply(s,arguments)},"warn"],[function(){s.warn.apply(s,arguments)},"error"],[function(e){c[e]=o()},"time"],[function(e){var t=c[e];if(!t)throw new Error("No such label: "+e);delete c[e];var n=o()-t;s.log(e+": "+n+"ms")},"timeEnd"],[function(){var e=new Error;e.name="Trace",e.message=i.format.apply(null,arguments),s.error(e.stack)},"trace"],[function(e){s.log(i.inspect(e)+"\n")},"dir"],[function(e){if(!e){var t=a.call(arguments,1);r.ok(!1,i.format.apply(null,t))}},"assert"]],u=0;u{"use strict";var i=n(5717),r=n(2318),o=n(9785),s=n(9072),a=n(1027);function c(e){a.call(this,"digest"),this._hash=e}i(c,a),c.prototype._update=function(e){this._hash.update(e)},c.prototype._final=function(){return this._hash.digest()},e.exports=function(e){return"md5"===(e=e.toLowerCase())?new r:"rmd160"===e||"ripemd160"===e?new o:new c(s(e))}},4020:e=>{"use strict";var t="%[a-f0-9]{2}",n=new RegExp("("+t+")|([^%]+?)","gi"),i=new RegExp("("+t+")+","gi");function r(e,t){try{return[decodeURIComponent(e.join(""))]}catch(e){}if(1===e.length)return e;t=t||1;var n=e.slice(0,t),i=e.slice(t);return Array.prototype.concat.call([],r(n),r(i))}function o(e){try{return decodeURIComponent(e)}catch(o){for(var t=e.match(n)||[],i=1;i{"use strict";var i=n(2215),r="function"==typeof Symbol&&"symbol"==typeof Symbol("foo"),o=Object.prototype.toString,s=Array.prototype.concat,a=Object.defineProperty,c=n(1044)(),l=a&&c,u=function(e,t,n,i){if(t in e)if(!0===i){if(e[t]===n)return}else if("function"!=typeof(r=i)||"[object Function]"!==o.call(r)||!i())return;var r;l?a(e,t,{configurable:!0,enumerable:!1,value:n,writable:!0}):e[t]=n},h=function(e,t){var n=arguments.length>2?arguments[2]:{},o=i(t);r&&(o=s.call(o,Object.getOwnPropertySymbols(t)));for(var a=0;a{"use strict";var i=t;i.version=n(8597).i8,i.utils=n(953),i.rand=n(9931),i.curve=n(8254),i.curves=n(5427),i.ec=n(7954),i.eddsa=n(5980)},4918:(e,t,n)=>{"use strict";var i=n(3550),r=n(953),o=r.getNAF,s=r.getJSF,a=r.assert;function c(e,t){this.type=e,this.p=new i(t.p,16),this.red=t.prime?i.red(t.prime):i.mont(this.p),this.zero=new i(0).toRed(this.red),this.one=new i(1).toRed(this.red),this.two=new i(2).toRed(this.red),this.n=t.n&&new i(t.n,16),this.g=t.g&&this.pointFromJSON(t.g,t.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4),this._bitLength=this.n?this.n.bitLength():0;var n=this.n&&this.p.div(this.n);!n||n.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function l(e,t){this.curve=e,this.type=t,this.precomputed=null}e.exports=c,c.prototype.point=function(){throw new Error("Not implemented")},c.prototype.validate=function(){throw new Error("Not implemented")},c.prototype._fixedNafMul=function(e,t){a(e.precomputed);var n=e._getDoubles(),i=o(t,1,this._bitLength),r=(1<=s;u--)c=(c<<1)+i[u];l.push(c)}for(var h=this.jpoint(null,null,null),d=this.jpoint(null,null,null),f=r;f>0;f--){for(s=0;s=0;l--){for(var u=0;l>=0&&0===s[l];l--)u++;if(l>=0&&u++,c=c.dblp(u),l<0)break;var h=s[l];a(0!==h),c="affine"===e.type?h>0?c.mixedAdd(r[h-1>>1]):c.mixedAdd(r[-h-1>>1].neg()):h>0?c.add(r[h-1>>1]):c.add(r[-h-1>>1].neg())}return"affine"===e.type?c.toP():c},c.prototype._wnafMulAdd=function(e,t,n,i,r){var a,c,l,u=this._wnafT1,h=this._wnafT2,d=this._wnafT3,f=0;for(a=0;a=1;a-=2){var g=a-1,y=a;if(1===u[g]&&1===u[y]){var b=[t[g],null,null,t[y]];0===t[g].y.cmp(t[y].y)?(b[1]=t[g].add(t[y]),b[2]=t[g].toJ().mixedAdd(t[y].neg())):0===t[g].y.cmp(t[y].y.redNeg())?(b[1]=t[g].toJ().mixedAdd(t[y]),b[2]=t[g].add(t[y].neg())):(b[1]=t[g].toJ().mixedAdd(t[y]),b[2]=t[g].toJ().mixedAdd(t[y].neg()));var m=[-3,-1,-5,-7,0,7,5,1,3],v=s(n[g],n[y]);for(f=Math.max(v[0].length,f),d[g]=new Array(f),d[y]=new Array(f),c=0;c=0;a--){for(var A=0;a>=0;){var R=!0;for(c=0;c=0&&A++,S=S.dblp(A),a<0)break;for(c=0;c0?l=h[c][x-1>>1]:x<0&&(l=h[c][-x-1>>1].neg()),S="affine"===l.type?S.mixedAdd(l):S.add(l))}}for(a=0;a=Math.ceil((e.bitLength()+1)/t.step)},l.prototype._getDoubles=function(e,t){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var n=[this],i=this,r=0;r{"use strict";var i=n(953),r=n(3550),o=n(5717),s=n(4918),a=i.assert;function c(e){this.twisted=1!=(0|e.a),this.mOneA=this.twisted&&-1==(0|e.a),this.extended=this.mOneA,s.call(this,"edwards",e),this.a=new r(e.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new r(e.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new r(e.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),a(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1==(0|e.c)}function l(e,t,n,i,o){s.BasePoint.call(this,e,"projective"),null===t&&null===n&&null===i?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new r(t,16),this.y=new r(n,16),this.z=i?new r(i,16):this.curve.one,this.t=o&&new r(o,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}o(c,s),e.exports=c,c.prototype._mulA=function(e){return this.mOneA?e.redNeg():this.a.redMul(e)},c.prototype._mulC=function(e){return this.oneC?e:this.c.redMul(e)},c.prototype.jpoint=function(e,t,n,i){return this.point(e,t,n,i)},c.prototype.pointFromX=function(e,t){(e=new r(e,16)).red||(e=e.toRed(this.red));var n=e.redSqr(),i=this.c2.redSub(this.a.redMul(n)),o=this.one.redSub(this.c2.redMul(this.d).redMul(n)),s=i.redMul(o.redInvm()),a=s.redSqrt();if(0!==a.redSqr().redSub(s).cmp(this.zero))throw new Error("invalid point");var c=a.fromRed().isOdd();return(t&&!c||!t&&c)&&(a=a.redNeg()),this.point(e,a)},c.prototype.pointFromY=function(e,t){(e=new r(e,16)).red||(e=e.toRed(this.red));var n=e.redSqr(),i=n.redSub(this.c2),o=n.redMul(this.d).redMul(this.c2).redSub(this.a),s=i.redMul(o.redInvm());if(0===s.cmp(this.zero)){if(t)throw new Error("invalid point");return this.point(this.zero,e)}var a=s.redSqrt();if(0!==a.redSqr().redSub(s).cmp(this.zero))throw new Error("invalid point");return a.fromRed().isOdd()!==t&&(a=a.redNeg()),this.point(a,e)},c.prototype.validate=function(e){if(e.isInfinity())return!0;e.normalize();var t=e.x.redSqr(),n=e.y.redSqr(),i=t.redMul(this.a).redAdd(n),r=this.c2.redMul(this.one.redAdd(this.d.redMul(t).redMul(n)));return 0===i.cmp(r)},o(l,s.BasePoint),c.prototype.pointFromJSON=function(e){return l.fromJSON(this,e)},c.prototype.point=function(e,t,n,i){return new l(this,e,t,n,i)},l.fromJSON=function(e,t){return new l(e,t[0],t[1],t[2])},l.prototype.inspect=function(){return this.isInfinity()?"":""},l.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},l.prototype._extDbl=function(){var e=this.x.redSqr(),t=this.y.redSqr(),n=this.z.redSqr();n=n.redIAdd(n);var i=this.curve._mulA(e),r=this.x.redAdd(this.y).redSqr().redISub(e).redISub(t),o=i.redAdd(t),s=o.redSub(n),a=i.redSub(t),c=r.redMul(s),l=o.redMul(a),u=r.redMul(a),h=s.redMul(o);return this.curve.point(c,l,h,u)},l.prototype._projDbl=function(){var e,t,n,i,r,o,s=this.x.redAdd(this.y).redSqr(),a=this.x.redSqr(),c=this.y.redSqr();if(this.curve.twisted){var l=(i=this.curve._mulA(a)).redAdd(c);this.zOne?(e=s.redSub(a).redSub(c).redMul(l.redSub(this.curve.two)),t=l.redMul(i.redSub(c)),n=l.redSqr().redSub(l).redSub(l)):(r=this.z.redSqr(),o=l.redSub(r).redISub(r),e=s.redSub(a).redISub(c).redMul(o),t=l.redMul(i.redSub(c)),n=l.redMul(o))}else i=a.redAdd(c),r=this.curve._mulC(this.z).redSqr(),o=i.redSub(r).redSub(r),e=this.curve._mulC(s.redISub(i)).redMul(o),t=this.curve._mulC(i).redMul(a.redISub(c)),n=i.redMul(o);return this.curve.point(e,t,n)},l.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},l.prototype._extAdd=function(e){var t=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),n=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),i=this.t.redMul(this.curve.dd).redMul(e.t),r=this.z.redMul(e.z.redAdd(e.z)),o=n.redSub(t),s=r.redSub(i),a=r.redAdd(i),c=n.redAdd(t),l=o.redMul(s),u=a.redMul(c),h=o.redMul(c),d=s.redMul(a);return this.curve.point(l,u,d,h)},l.prototype._projAdd=function(e){var t,n,i=this.z.redMul(e.z),r=i.redSqr(),o=this.x.redMul(e.x),s=this.y.redMul(e.y),a=this.curve.d.redMul(o).redMul(s),c=r.redSub(a),l=r.redAdd(a),u=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(o).redISub(s),h=i.redMul(c).redMul(u);return this.curve.twisted?(t=i.redMul(l).redMul(s.redSub(this.curve._mulA(o))),n=c.redMul(l)):(t=i.redMul(l).redMul(s.redSub(o)),n=this.curve._mulC(c).redMul(l)),this.curve.point(h,t,n)},l.prototype.add=function(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},l.prototype.mul=function(e){return this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},l.prototype.mulAdd=function(e,t,n){return this.curve._wnafMulAdd(1,[this,t],[e,n],2,!1)},l.prototype.jmulAdd=function(e,t,n){return this.curve._wnafMulAdd(1,[this,t],[e,n],2,!0)},l.prototype.normalize=function(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},l.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},l.prototype.getX=function(){return this.normalize(),this.x.fromRed()},l.prototype.getY=function(){return this.normalize(),this.y.fromRed()},l.prototype.eq=function(e){return this===e||0===this.getX().cmp(e.getX())&&0===this.getY().cmp(e.getY())},l.prototype.eqXToP=function(e){var t=e.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(t))return!0;for(var n=e.clone(),i=this.curve.redN.redMul(this.z);;){if(n.iadd(this.curve.n),n.cmp(this.curve.p)>=0)return!1;if(t.redIAdd(i),0===this.x.cmp(t))return!0}},l.prototype.toP=l.prototype.normalize,l.prototype.mixedAdd=l.prototype.add},8254:(e,t,n)=>{"use strict";var i=t;i.base=n(4918),i.short=n(6673),i.mont=n(2881),i.edwards=n(1138)},2881:(e,t,n)=>{"use strict";var i=n(3550),r=n(5717),o=n(4918),s=n(953);function a(e){o.call(this,"mont",e),this.a=new i(e.a,16).toRed(this.red),this.b=new i(e.b,16).toRed(this.red),this.i4=new i(4).toRed(this.red).redInvm(),this.two=new i(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function c(e,t,n){o.BasePoint.call(this,e,"projective"),null===t&&null===n?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new i(t,16),this.z=new i(n,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}r(a,o),e.exports=a,a.prototype.validate=function(e){var t=e.normalize().x,n=t.redSqr(),i=n.redMul(t).redAdd(n.redMul(this.a)).redAdd(t);return 0===i.redSqrt().redSqr().cmp(i)},r(c,o.BasePoint),a.prototype.decodePoint=function(e,t){return this.point(s.toArray(e,t),1)},a.prototype.point=function(e,t){return new c(this,e,t)},a.prototype.pointFromJSON=function(e){return c.fromJSON(this,e)},c.prototype.precompute=function(){},c.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},c.fromJSON=function(e,t){return new c(e,t[0],t[1]||e.one)},c.prototype.inspect=function(){return this.isInfinity()?"":""},c.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},c.prototype.dbl=function(){var e=this.x.redAdd(this.z).redSqr(),t=this.x.redSub(this.z).redSqr(),n=e.redSub(t),i=e.redMul(t),r=n.redMul(t.redAdd(this.curve.a24.redMul(n)));return this.curve.point(i,r)},c.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},c.prototype.diffAdd=function(e,t){var n=this.x.redAdd(this.z),i=this.x.redSub(this.z),r=e.x.redAdd(e.z),o=e.x.redSub(e.z).redMul(n),s=r.redMul(i),a=t.z.redMul(o.redAdd(s).redSqr()),c=t.x.redMul(o.redISub(s).redSqr());return this.curve.point(a,c)},c.prototype.mul=function(e){for(var t=e.clone(),n=this,i=this.curve.point(null,null),r=[];0!==t.cmpn(0);t.iushrn(1))r.push(t.andln(1));for(var o=r.length-1;o>=0;o--)0===r[o]?(n=n.diffAdd(i,this),i=i.dbl()):(i=n.diffAdd(i,this),n=n.dbl());return i},c.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},c.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},c.prototype.eq=function(e){return 0===this.getX().cmp(e.getX())},c.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},c.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},6673:(e,t,n)=>{"use strict";var i=n(953),r=n(3550),o=n(5717),s=n(4918),a=i.assert;function c(e){s.call(this,"short",e),this.a=new r(e.a,16).toRed(this.red),this.b=new r(e.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(e),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function l(e,t,n,i){s.BasePoint.call(this,e,"affine"),null===t&&null===n?(this.x=null,this.y=null,this.inf=!0):(this.x=new r(t,16),this.y=new r(n,16),i&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function u(e,t,n,i){s.BasePoint.call(this,e,"jacobian"),null===t&&null===n&&null===i?(this.x=this.curve.one,this.y=this.curve.one,this.z=new r(0)):(this.x=new r(t,16),this.y=new r(n,16),this.z=new r(i,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}o(c,s),e.exports=c,c.prototype._getEndomorphism=function(e){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var t,n;if(e.beta)t=new r(e.beta,16).toRed(this.red);else{var i=this._getEndoRoots(this.p);t=(t=i[0].cmp(i[1])<0?i[0]:i[1]).toRed(this.red)}if(e.lambda)n=new r(e.lambda,16);else{var o=this._getEndoRoots(this.n);0===this.g.mul(o[0]).x.cmp(this.g.x.redMul(t))?n=o[0]:(n=o[1],a(0===this.g.mul(n).x.cmp(this.g.x.redMul(t))))}return{beta:t,lambda:n,basis:e.basis?e.basis.map((function(e){return{a:new r(e.a,16),b:new r(e.b,16)}})):this._getEndoBasis(n)}}},c.prototype._getEndoRoots=function(e){var t=e===this.p?this.red:r.mont(e),n=new r(2).toRed(t).redInvm(),i=n.redNeg(),o=new r(3).toRed(t).redNeg().redSqrt().redMul(n);return[i.redAdd(o).fromRed(),i.redSub(o).fromRed()]},c.prototype._getEndoBasis=function(e){for(var t,n,i,o,s,a,c,l,u,h=this.n.ushrn(Math.floor(this.n.bitLength()/2)),d=e,f=this.n.clone(),p=new r(1),g=new r(0),y=new r(0),b=new r(1),m=0;0!==d.cmpn(0);){var v=f.div(d);l=f.sub(v.mul(d)),u=y.sub(v.mul(p));var w=b.sub(v.mul(g));if(!i&&l.cmp(h)<0)t=c.neg(),n=p,i=l.neg(),o=u;else if(i&&2==++m)break;c=l,f=d,d=l,y=p,p=u,b=g,g=w}s=l.neg(),a=u;var E=i.sqr().add(o.sqr());return s.sqr().add(a.sqr()).cmp(E)>=0&&(s=t,a=n),i.negative&&(i=i.neg(),o=o.neg()),s.negative&&(s=s.neg(),a=a.neg()),[{a:i,b:o},{a:s,b:a}]},c.prototype._endoSplit=function(e){var t=this.endo.basis,n=t[0],i=t[1],r=i.b.mul(e).divRound(this.n),o=n.b.neg().mul(e).divRound(this.n),s=r.mul(n.a),a=o.mul(i.a),c=r.mul(n.b),l=o.mul(i.b);return{k1:e.sub(s).sub(a),k2:c.add(l).neg()}},c.prototype.pointFromX=function(e,t){(e=new r(e,16)).red||(e=e.toRed(this.red));var n=e.redSqr().redMul(e).redIAdd(e.redMul(this.a)).redIAdd(this.b),i=n.redSqrt();if(0!==i.redSqr().redSub(n).cmp(this.zero))throw new Error("invalid point");var o=i.fromRed().isOdd();return(t&&!o||!t&&o)&&(i=i.redNeg()),this.point(e,i)},c.prototype.validate=function(e){if(e.inf)return!0;var t=e.x,n=e.y,i=this.a.redMul(t),r=t.redSqr().redMul(t).redIAdd(i).redIAdd(this.b);return 0===n.redSqr().redISub(r).cmpn(0)},c.prototype._endoWnafMulAdd=function(e,t,n){for(var i=this._endoWnafT1,r=this._endoWnafT2,o=0;o":""},l.prototype.isInfinity=function(){return this.inf},l.prototype.add=function(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(0===this.x.cmp(e.x))return this.curve.point(null,null);var t=this.y.redSub(e.y);0!==t.cmpn(0)&&(t=t.redMul(this.x.redSub(e.x).redInvm()));var n=t.redSqr().redISub(this.x).redISub(e.x),i=t.redMul(this.x.redSub(n)).redISub(this.y);return this.curve.point(n,i)},l.prototype.dbl=function(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(0===e.cmpn(0))return this.curve.point(null,null);var t=this.curve.a,n=this.x.redSqr(),i=e.redInvm(),r=n.redAdd(n).redIAdd(n).redIAdd(t).redMul(i),o=r.redSqr().redISub(this.x.redAdd(this.x)),s=r.redMul(this.x.redSub(o)).redISub(this.y);return this.curve.point(o,s)},l.prototype.getX=function(){return this.x.fromRed()},l.prototype.getY=function(){return this.y.fromRed()},l.prototype.mul=function(e){return e=new r(e,16),this.isInfinity()?this:this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},l.prototype.mulAdd=function(e,t,n){var i=[this,t],r=[e,n];return this.curve.endo?this.curve._endoWnafMulAdd(i,r):this.curve._wnafMulAdd(1,i,r,2)},l.prototype.jmulAdd=function(e,t,n){var i=[this,t],r=[e,n];return this.curve.endo?this.curve._endoWnafMulAdd(i,r,!0):this.curve._wnafMulAdd(1,i,r,2,!0)},l.prototype.eq=function(e){return this===e||this.inf===e.inf&&(this.inf||0===this.x.cmp(e.x)&&0===this.y.cmp(e.y))},l.prototype.neg=function(e){if(this.inf)return this;var t=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var n=this.precomputed,i=function(e){return e.neg()};t.precomputed={naf:n.naf&&{wnd:n.naf.wnd,points:n.naf.points.map(i)},doubles:n.doubles&&{step:n.doubles.step,points:n.doubles.points.map(i)}}}return t},l.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},o(u,s.BasePoint),c.prototype.jpoint=function(e,t,n){return new u(this,e,t,n)},u.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),t=e.redSqr(),n=this.x.redMul(t),i=this.y.redMul(t).redMul(e);return this.curve.point(n,i)},u.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},u.prototype.add=function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var t=e.z.redSqr(),n=this.z.redSqr(),i=this.x.redMul(t),r=e.x.redMul(n),o=this.y.redMul(t.redMul(e.z)),s=e.y.redMul(n.redMul(this.z)),a=i.redSub(r),c=o.redSub(s);if(0===a.cmpn(0))return 0!==c.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var l=a.redSqr(),u=l.redMul(a),h=i.redMul(l),d=c.redSqr().redIAdd(u).redISub(h).redISub(h),f=c.redMul(h.redISub(d)).redISub(o.redMul(u)),p=this.z.redMul(e.z).redMul(a);return this.curve.jpoint(d,f,p)},u.prototype.mixedAdd=function(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var t=this.z.redSqr(),n=this.x,i=e.x.redMul(t),r=this.y,o=e.y.redMul(t).redMul(this.z),s=n.redSub(i),a=r.redSub(o);if(0===s.cmpn(0))return 0!==a.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var c=s.redSqr(),l=c.redMul(s),u=n.redMul(c),h=a.redSqr().redIAdd(l).redISub(u).redISub(u),d=a.redMul(u.redISub(h)).redISub(r.redMul(l)),f=this.z.redMul(s);return this.curve.jpoint(h,d,f)},u.prototype.dblp=function(e){if(0===e)return this;if(this.isInfinity())return this;if(!e)return this.dbl();var t;if(this.curve.zeroA||this.curve.threeA){var n=this;for(t=0;t=0)return!1;if(n.redIAdd(r),0===this.x.cmp(n))return!0}},u.prototype.inspect=function(){return this.isInfinity()?"":""},u.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},5427:(e,t,n)=>{"use strict";var i,r=t,o=n(3715),s=n(8254),a=n(953).assert;function c(e){"short"===e.type?this.curve=new s.short(e):"edwards"===e.type?this.curve=new s.edwards(e):this.curve=new s.mont(e),this.g=this.curve.g,this.n=this.curve.n,this.hash=e.hash,a(this.g.validate(),"Invalid curve"),a(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function l(e,t){Object.defineProperty(r,e,{configurable:!0,enumerable:!0,get:function(){var n=new c(t);return Object.defineProperty(r,e,{configurable:!0,enumerable:!0,value:n}),n}})}r.PresetCurve=c,l("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:o.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),l("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:o.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),l("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:o.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),l("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:o.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),l("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:o.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),l("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:o.sha256,gRed:!1,g:["9"]}),l("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:o.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});try{i=n(1037)}catch(e){i=void 0}l("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:o.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",i]})},7954:(e,t,n)=>{"use strict";var i=n(3550),r=n(2156),o=n(953),s=n(5427),a=n(9931),c=o.assert,l=n(1251),u=n(611);function h(e){if(!(this instanceof h))return new h(e);"string"==typeof e&&(c(Object.prototype.hasOwnProperty.call(s,e),"Unknown curve "+e),e=s[e]),e instanceof s.PresetCurve&&(e={curve:e}),this.curve=e.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=e.curve.g,this.g.precompute(e.curve.n.bitLength()+1),this.hash=e.hash||e.curve.hash}e.exports=h,h.prototype.keyPair=function(e){return new l(this,e)},h.prototype.keyFromPrivate=function(e,t){return l.fromPrivate(this,e,t)},h.prototype.keyFromPublic=function(e,t){return l.fromPublic(this,e,t)},h.prototype.genKeyPair=function(e){e||(e={});for(var t=new r({hash:this.hash,pers:e.pers,persEnc:e.persEnc||"utf8",entropy:e.entropy||a(this.hash.hmacStrength),entropyEnc:e.entropy&&e.entropyEnc||"utf8",nonce:this.n.toArray()}),n=this.n.byteLength(),o=this.n.sub(new i(2));;){var s=new i(t.generate(n));if(!(s.cmp(o)>0))return s.iaddn(1),this.keyFromPrivate(s)}},h.prototype._truncateToN=function(e,t){var n=8*e.byteLength()-this.n.bitLength();return n>0&&(e=e.ushrn(n)),!t&&e.cmp(this.n)>=0?e.sub(this.n):e},h.prototype.sign=function(e,t,n,o){"object"==typeof n&&(o=n,n=null),o||(o={}),t=this.keyFromPrivate(t,n),e=this._truncateToN(new i(e,16));for(var s=this.n.byteLength(),a=t.getPrivate().toArray("be",s),c=e.toArray("be",s),l=new r({hash:this.hash,entropy:a,nonce:c,pers:o.pers,persEnc:o.persEnc||"utf8"}),h=this.n.sub(new i(1)),d=0;;d++){var f=o.k?o.k(d):new i(l.generate(this.n.byteLength()));if(!((f=this._truncateToN(f,!0)).cmpn(1)<=0||f.cmp(h)>=0)){var p=this.g.mul(f);if(!p.isInfinity()){var g=p.getX(),y=g.umod(this.n);if(0!==y.cmpn(0)){var b=f.invm(this.n).mul(y.mul(t.getPrivate()).iadd(e));if(0!==(b=b.umod(this.n)).cmpn(0)){var m=(p.getY().isOdd()?1:0)|(0!==g.cmp(y)?2:0);return o.canonical&&b.cmp(this.nh)>0&&(b=this.n.sub(b),m^=1),new u({r:y,s:b,recoveryParam:m})}}}}}},h.prototype.verify=function(e,t,n,r){e=this._truncateToN(new i(e,16)),n=this.keyFromPublic(n,r);var o=(t=new u(t,"hex")).r,s=t.s;if(o.cmpn(1)<0||o.cmp(this.n)>=0)return!1;if(s.cmpn(1)<0||s.cmp(this.n)>=0)return!1;var a,c=s.invm(this.n),l=c.mul(e).umod(this.n),h=c.mul(o).umod(this.n);return this.curve._maxwellTrick?!(a=this.g.jmulAdd(l,n.getPublic(),h)).isInfinity()&&a.eqXToP(o):!(a=this.g.mulAdd(l,n.getPublic(),h)).isInfinity()&&0===a.getX().umod(this.n).cmp(o)},h.prototype.recoverPubKey=function(e,t,n,r){c((3&n)===n,"The recovery param is more than two bits"),t=new u(t,r);var o=this.n,s=new i(e),a=t.r,l=t.s,h=1&n,d=n>>1;if(a.cmp(this.curve.p.umod(this.curve.n))>=0&&d)throw new Error("Unable to find sencond key candinate");a=d?this.curve.pointFromX(a.add(this.curve.n),h):this.curve.pointFromX(a,h);var f=t.r.invm(o),p=o.sub(s).mul(f).umod(o),g=l.mul(f).umod(o);return this.g.mulAdd(p,a,g)},h.prototype.getKeyRecoveryParam=function(e,t,n,i){if(null!==(t=new u(t,i)).recoveryParam)return t.recoveryParam;for(var r=0;r<4;r++){var o;try{o=this.recoverPubKey(e,t,r)}catch(e){continue}if(o.eq(n))return r}throw new Error("Unable to find valid recovery factor")}},1251:(e,t,n)=>{"use strict";var i=n(3550),r=n(953).assert;function o(e,t){this.ec=e,this.priv=null,this.pub=null,t.priv&&this._importPrivate(t.priv,t.privEnc),t.pub&&this._importPublic(t.pub,t.pubEnc)}e.exports=o,o.fromPublic=function(e,t,n){return t instanceof o?t:new o(e,{pub:t,pubEnc:n})},o.fromPrivate=function(e,t,n){return t instanceof o?t:new o(e,{priv:t,privEnc:n})},o.prototype.validate=function(){var e=this.getPublic();return e.isInfinity()?{result:!1,reason:"Invalid public key"}:e.validate()?e.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},o.prototype.getPublic=function(e,t){return"string"==typeof e&&(t=e,e=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),t?this.pub.encode(t,e):this.pub},o.prototype.getPrivate=function(e){return"hex"===e?this.priv.toString(16,2):this.priv},o.prototype._importPrivate=function(e,t){this.priv=new i(e,t||16),this.priv=this.priv.umod(this.ec.curve.n)},o.prototype._importPublic=function(e,t){if(e.x||e.y)return"mont"===this.ec.curve.type?r(e.x,"Need x coordinate"):"short"!==this.ec.curve.type&&"edwards"!==this.ec.curve.type||r(e.x&&e.y,"Need both x and y coordinate"),void(this.pub=this.ec.curve.point(e.x,e.y));this.pub=this.ec.curve.decodePoint(e,t)},o.prototype.derive=function(e){return e.validate()||r(e.validate(),"public point not validated"),e.mul(this.priv).getX()},o.prototype.sign=function(e,t,n){return this.ec.sign(e,this,t,n)},o.prototype.verify=function(e,t){return this.ec.verify(e,t,this)},o.prototype.inspect=function(){return""}},611:(e,t,n)=>{"use strict";var i=n(3550),r=n(953),o=r.assert;function s(e,t){if(e instanceof s)return e;this._importDER(e,t)||(o(e.r&&e.s,"Signature without r or s"),this.r=new i(e.r,16),this.s=new i(e.s,16),void 0===e.recoveryParam?this.recoveryParam=null:this.recoveryParam=e.recoveryParam)}function a(){this.place=0}function c(e,t){var n=e[t.place++];if(!(128&n))return n;var i=15&n;if(0===i||i>4)return!1;for(var r=0,o=0,s=t.place;o>>=0;return!(r<=127)&&(t.place=s,r)}function l(e){for(var t=0,n=e.length-1;!e[t]&&!(128&e[t+1])&&t>>3);for(e.push(128|n);--n;)e.push(t>>>(n<<3)&255);e.push(t)}}e.exports=s,s.prototype._importDER=function(e,t){e=r.toArray(e,t);var n=new a;if(48!==e[n.place++])return!1;var o=c(e,n);if(!1===o)return!1;if(o+n.place!==e.length)return!1;if(2!==e[n.place++])return!1;var s=c(e,n);if(!1===s)return!1;var l=e.slice(n.place,s+n.place);if(n.place+=s,2!==e[n.place++])return!1;var u=c(e,n);if(!1===u)return!1;if(e.length!==u+n.place)return!1;var h=e.slice(n.place,u+n.place);if(0===l[0]){if(!(128&l[1]))return!1;l=l.slice(1)}if(0===h[0]){if(!(128&h[1]))return!1;h=h.slice(1)}return this.r=new i(l),this.s=new i(h),this.recoveryParam=null,!0},s.prototype.toDER=function(e){var t=this.r.toArray(),n=this.s.toArray();for(128&t[0]&&(t=[0].concat(t)),128&n[0]&&(n=[0].concat(n)),t=l(t),n=l(n);!(n[0]||128&n[1]);)n=n.slice(1);var i=[2];u(i,t.length),(i=i.concat(t)).push(2),u(i,n.length);var o=i.concat(n),s=[48];return u(s,o.length),s=s.concat(o),r.encode(s,e)}},5980:(e,t,n)=>{"use strict";var i=n(3715),r=n(5427),o=n(953),s=o.assert,a=o.parseBytes,c=n(9087),l=n(3622);function u(e){if(s("ed25519"===e,"only tested with ed25519 so far"),!(this instanceof u))return new u(e);e=r[e].curve,this.curve=e,this.g=e.g,this.g.precompute(e.n.bitLength()+1),this.pointClass=e.point().constructor,this.encodingLength=Math.ceil(e.n.bitLength()/8),this.hash=i.sha512}e.exports=u,u.prototype.sign=function(e,t){e=a(e);var n=this.keyFromSecret(t),i=this.hashInt(n.messagePrefix(),e),r=this.g.mul(i),o=this.encodePoint(r),s=this.hashInt(o,n.pubBytes(),e).mul(n.priv()),c=i.add(s).umod(this.curve.n);return this.makeSignature({R:r,S:c,Rencoded:o})},u.prototype.verify=function(e,t,n){e=a(e),t=this.makeSignature(t);var i=this.keyFromPublic(n),r=this.hashInt(t.Rencoded(),i.pubBytes(),e),o=this.g.mul(t.S());return t.R().add(i.pub().mul(r)).eq(o)},u.prototype.hashInt=function(){for(var e=this.hash(),t=0;t{"use strict";var i=n(953),r=i.assert,o=i.parseBytes,s=i.cachedProperty;function a(e,t){this.eddsa=e,this._secret=o(t.secret),e.isPoint(t.pub)?this._pub=t.pub:this._pubBytes=o(t.pub)}a.fromPublic=function(e,t){return t instanceof a?t:new a(e,{pub:t})},a.fromSecret=function(e,t){return t instanceof a?t:new a(e,{secret:t})},a.prototype.secret=function(){return this._secret},s(a,"pubBytes",(function(){return this.eddsa.encodePoint(this.pub())})),s(a,"pub",(function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())})),s(a,"privBytes",(function(){var e=this.eddsa,t=this.hash(),n=e.encodingLength-1,i=t.slice(0,e.encodingLength);return i[0]&=248,i[n]&=127,i[n]|=64,i})),s(a,"priv",(function(){return this.eddsa.decodeInt(this.privBytes())})),s(a,"hash",(function(){return this.eddsa.hash().update(this.secret()).digest()})),s(a,"messagePrefix",(function(){return this.hash().slice(this.eddsa.encodingLength)})),a.prototype.sign=function(e){return r(this._secret,"KeyPair can only verify"),this.eddsa.sign(e,this)},a.prototype.verify=function(e,t){return this.eddsa.verify(e,t,this)},a.prototype.getSecret=function(e){return r(this._secret,"KeyPair is public only"),i.encode(this.secret(),e)},a.prototype.getPublic=function(e){return i.encode(this.pubBytes(),e)},e.exports=a},3622:(e,t,n)=>{"use strict";var i=n(3550),r=n(953),o=r.assert,s=r.cachedProperty,a=r.parseBytes;function c(e,t){this.eddsa=e,"object"!=typeof t&&(t=a(t)),Array.isArray(t)&&(t={R:t.slice(0,e.encodingLength),S:t.slice(e.encodingLength)}),o(t.R&&t.S,"Signature without R or S"),e.isPoint(t.R)&&(this._R=t.R),t.S instanceof i&&(this._S=t.S),this._Rencoded=Array.isArray(t.R)?t.R:t.Rencoded,this._Sencoded=Array.isArray(t.S)?t.S:t.Sencoded}s(c,"S",(function(){return this.eddsa.decodeInt(this.Sencoded())})),s(c,"R",(function(){return this.eddsa.decodePoint(this.Rencoded())})),s(c,"Rencoded",(function(){return this.eddsa.encodePoint(this.R())})),s(c,"Sencoded",(function(){return this.eddsa.encodeInt(this.S())})),c.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())},c.prototype.toHex=function(){return r.encode(this.toBytes(),"hex").toUpperCase()},e.exports=c},1037:e=>{e.exports={doubles:{step:4,points:[["e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a","f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821"],["8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508","11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf"],["175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739","d3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695"],["363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640","4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9"],["8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c","4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36"],["723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda","96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f"],["eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa","5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999"],["100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0","cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09"],["e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d","9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d"],["feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d","e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088"],["da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1","9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d"],["53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0","5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8"],["8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047","10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a"],["385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862","283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453"],["6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7","7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160"],["3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd","56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0"],["85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83","7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6"],["948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a","53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589"],["6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8","bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17"],["e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d","4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda"],["e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725","7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd"],["213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754","4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2"],["4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c","17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6"],["fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6","6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f"],["76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39","c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01"],["c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891","893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3"],["d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b","febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f"],["b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03","2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7"],["e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d","eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78"],["a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070","7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1"],["90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4","e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150"],["8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da","662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82"],["e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11","1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc"],["8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e","efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b"],["e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41","2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51"],["b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef","67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45"],["d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8","db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120"],["324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d","648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84"],["4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96","35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d"],["9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd","ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d"],["6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5","9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8"],["a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266","40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8"],["7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71","34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac"],["928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac","c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f"],["85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751","1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962"],["ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e","493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907"],["827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241","c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec"],["eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3","be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d"],["e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f","4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414"],["1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19","aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd"],["146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be","b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0"],["fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9","6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811"],["da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2","8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1"],["a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13","7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c"],["174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c","ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73"],["959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba","2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd"],["d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151","e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405"],["64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073","d99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589"],["8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458","38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e"],["13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b","69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27"],["bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366","d3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1"],["8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa","40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482"],["8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0","620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945"],["dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787","7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573"],["f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e","ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82"]]},naf:{wnd:7,points:[["f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9","388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672"],["2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4","d8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6"],["5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc","6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da"],["acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe","cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37"],["774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb","d984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b"],["f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8","ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81"],["d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e","581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58"],["defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34","4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77"],["2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c","85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a"],["352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5","321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c"],["2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f","2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67"],["9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714","73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402"],["daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729","a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55"],["c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db","2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482"],["6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4","e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82"],["1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5","b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396"],["605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479","2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49"],["62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d","80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf"],["80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f","1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a"],["7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb","d0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7"],["d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9","eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933"],["49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963","758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a"],["77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74","958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6"],["f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530","e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37"],["463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b","5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e"],["f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247","cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6"],["caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1","cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476"],["2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120","4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40"],["7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435","91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61"],["754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18","673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683"],["e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8","59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5"],["186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb","3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b"],["df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f","55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417"],["5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143","efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868"],["290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba","e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a"],["af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45","f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6"],["766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a","744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996"],["59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e","c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e"],["f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8","e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d"],["7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c","30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2"],["948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519","e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e"],["7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab","100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437"],["3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca","ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311"],["d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf","8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4"],["1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610","68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575"],["733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4","f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d"],["15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c","d56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d"],["a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940","edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629"],["e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980","a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06"],["311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3","66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374"],["34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf","9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee"],["f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63","4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1"],["d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448","fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b"],["32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf","5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661"],["7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5","8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6"],["ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6","8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e"],["16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5","5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d"],["eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99","f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc"],["78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51","f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4"],["494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5","42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c"],["a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5","204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b"],["c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997","4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913"],["841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881","73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154"],["5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5","39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865"],["36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66","d2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc"],["336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726","ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224"],["8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede","6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e"],["1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94","60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6"],["85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31","3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511"],["29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51","b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b"],["a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252","ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2"],["4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5","cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c"],["d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b","6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3"],["ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4","322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d"],["af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f","6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700"],["e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889","2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4"],["591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246","b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196"],["11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984","998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4"],["3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a","b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257"],["cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030","bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13"],["c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197","6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096"],["c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593","c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38"],["a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef","21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f"],["347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38","60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448"],["da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a","49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a"],["c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111","5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4"],["4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502","7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437"],["3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea","be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7"],["cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26","8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d"],["b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986","39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a"],["d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e","62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54"],["48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4","25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77"],["dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda","ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517"],["6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859","cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10"],["e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f","f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125"],["eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c","6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e"],["13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942","fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1"],["ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a","1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2"],["b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80","5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423"],["ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d","438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8"],["8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1","cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758"],["52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63","c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375"],["e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352","6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d"],["7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193","ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec"],["5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00","9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0"],["32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58","ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c"],["e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7","d3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4"],["8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8","c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f"],["4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e","67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649"],["3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d","cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826"],["674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b","299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5"],["d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f","f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87"],["30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6","462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b"],["be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297","62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc"],["93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a","7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c"],["b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c","ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f"],["d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52","4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a"],["d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb","bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46"],["463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065","bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f"],["7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917","603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03"],["74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9","cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08"],["30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3","553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8"],["9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57","712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373"],["176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66","ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3"],["75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8","9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8"],["809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721","9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1"],["1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180","4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9"]]}}},953:(e,t,n)=>{"use strict";var i=t,r=n(3550),o=n(9746),s=n(4504);i.assert=o,i.toArray=s.toArray,i.zero2=s.zero2,i.toHex=s.toHex,i.encode=s.encode,i.getNAF=function(e,t,n){var i=new Array(Math.max(e.bitLength(),n)+1);i.fill(0);for(var r=1<(r>>1)-1?(r>>1)-c:c,o.isubn(a)):a=0,i[s]=a,o.iushrn(1)}return i},i.getJSF=function(e,t){var n=[[],[]];e=e.clone(),t=t.clone();for(var i,r=0,o=0;e.cmpn(-r)>0||t.cmpn(-o)>0;){var s,a,c=e.andln(3)+r&3,l=t.andln(3)+o&3;3===c&&(c=-1),3===l&&(l=-1),s=0==(1&c)?0:3!==(i=e.andln(7)+r&7)&&5!==i||2!==l?c:-c,n[0].push(s),a=0==(1&l)?0:3!==(i=t.andln(7)+o&7)&&5!==i||2!==c?l:-l,n[1].push(a),2*r===s+1&&(r=1-r),2*o===a+1&&(o=1-o),e.iushrn(1),t.iushrn(1)}return n},i.cachedProperty=function(e,t,n){var i="_"+t;e.prototype[t]=function(){return void 0!==this[i]?this[i]:this[i]=n.call(this)}},i.parseBytes=function(e){return"string"==typeof e?i.toArray(e,"hex"):e},i.intFromLE=function(e){return new r(e,"hex","le")}},8091:e=>{"use strict";function t(e,t){if(null==e)throw new TypeError("Cannot convert first argument to object");for(var n=Object(e),i=1;i{"use strict";var i,r=n(5108),o="object"==typeof Reflect?Reflect:null,s=o&&"function"==typeof o.apply?o.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};i=o&&"function"==typeof o.ownKeys?o.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var a=Number.isNaN||function(e){return e!=e};function c(){c.init.call(this)}e.exports=c,e.exports.once=function(e,t){return new Promise((function(n,i){function r(n){e.removeListener(t,o),i(n)}function o(){"function"==typeof e.removeListener&&e.removeListener("error",r),n([].slice.call(arguments))}m(e,t,o,{once:!0}),"error"!==t&&function(e,t,n){"function"==typeof e.on&&m(e,"error",t,n)}(e,r,{once:!0})}))},c.EventEmitter=c,c.prototype._events=void 0,c.prototype._eventsCount=0,c.prototype._maxListeners=void 0;var l=10;function u(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function h(e){return void 0===e._maxListeners?c.defaultMaxListeners:e._maxListeners}function d(e,t,n,i){var o,s,a,c;if(u(n),void 0===(s=e._events)?(s=e._events=Object.create(null),e._eventsCount=0):(void 0!==s.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),s=e._events),a=s[t]),void 0===a)a=s[t]=n,++e._eventsCount;else if("function"==typeof a?a=s[t]=i?[n,a]:[a,n]:i?a.unshift(n):a.push(n),(o=h(e))>0&&a.length>o&&!a.warned){a.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=e,l.type=t,l.count=a.length,c=l,r&&r.warn&&r.warn(c)}return e}function f(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,n){var i={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},r=f.bind(i);return r.listener=n,i.wrapFn=r,r}function g(e,t,n){var i=e._events;if(void 0===i)return[];var r=i[t];return void 0===r?[]:"function"==typeof r?n?[r.listener||r]:[r]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(o=t[0]),o instanceof Error)throw o;var a=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw a.context=o,a}var c=r[e];if(void 0===c)return!1;if("function"==typeof c)s(c,this,t);else{var l=c.length,u=b(c,l);for(n=0;n=0;o--)if(n[o]===t||n[o].listener===t){s=n[o].listener,r=o;break}if(r<0)return this;0===r?n.shift():function(e,t){for(;t+1=0;i--)this.removeListener(e,t[i]);return this},c.prototype.listeners=function(e){return g(this,e,!0)},c.prototype.rawListeners=function(e){return g(this,e,!1)},c.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):y.call(e,t)},c.prototype.listenerCount=y,c.prototype.eventNames=function(){return this._eventsCount>0?i(this._events):[]}},4029:(e,t,n)=>{"use strict";var i=n(5320),r=Object.prototype.toString,o=Object.prototype.hasOwnProperty;e.exports=function(e,t,n){if(!i(t))throw new TypeError("iterator must be a function");var s;arguments.length>=3&&(s=n),"[object Array]"===r.call(e)?function(e,t,n){for(var i=0,r=e.length;i{"use strict";var t=Array.prototype.slice,n=Object.prototype.toString;e.exports=function(e){var i=this;if("function"!=typeof i||"[object Function]"!==n.call(i))throw new TypeError("Function.prototype.bind called on incompatible "+i);for(var r,o=t.call(arguments,1),s=Math.max(0,i.length-o.length),a=[],c=0;c{"use strict";var i=n(7648);e.exports=Function.prototype.bind||i},210:(e,t,n)=>{"use strict";var i,r=SyntaxError,o=Function,s=TypeError,a=function(e){try{return o('"use strict"; return ('+e+").constructor;")()}catch(e){}},c=Object.getOwnPropertyDescriptor;if(c)try{c({},"")}catch(e){c=null}var l=function(){throw new s},u=c?function(){try{return l}catch(e){try{return c(arguments,"callee").get}catch(e){return l}}}():l,h=n(1405)(),d=n(8185)(),f=Object.getPrototypeOf||(d?function(e){return e.__proto__}:null),p={},g="undefined"!=typeof Uint8Array&&f?f(Uint8Array):i,y={"%AggregateError%":"undefined"==typeof AggregateError?i:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?i:ArrayBuffer,"%ArrayIteratorPrototype%":h&&f?f([][Symbol.iterator]()):i,"%AsyncFromSyncIteratorPrototype%":i,"%AsyncFunction%":p,"%AsyncGenerator%":p,"%AsyncGeneratorFunction%":p,"%AsyncIteratorPrototype%":p,"%Atomics%":"undefined"==typeof Atomics?i:Atomics,"%BigInt%":"undefined"==typeof BigInt?i:BigInt,"%BigInt64Array%":"undefined"==typeof BigInt64Array?i:BigInt64Array,"%BigUint64Array%":"undefined"==typeof BigUint64Array?i:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?i:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?i:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?i:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?i:FinalizationRegistry,"%Function%":o,"%GeneratorFunction%":p,"%Int8Array%":"undefined"==typeof Int8Array?i:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?i:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?i:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":h&&f?f(f([][Symbol.iterator]())):i,"%JSON%":"object"==typeof JSON?JSON:i,"%Map%":"undefined"==typeof Map?i:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&h&&f?f((new Map)[Symbol.iterator]()):i,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?i:Promise,"%Proxy%":"undefined"==typeof Proxy?i:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?i:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?i:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&h&&f?f((new Set)[Symbol.iterator]()):i,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?i:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":h&&f?f(""[Symbol.iterator]()):i,"%Symbol%":h?Symbol:i,"%SyntaxError%":r,"%ThrowTypeError%":u,"%TypedArray%":g,"%TypeError%":s,"%Uint8Array%":"undefined"==typeof Uint8Array?i:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?i:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?i:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?i:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?i:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?i:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?i:WeakSet};if(f)try{null.error}catch(e){var b=f(f(e));y["%Error.prototype%"]=b}var m=function e(t){var n;if("%AsyncFunction%"===t)n=a("async function () {}");else if("%GeneratorFunction%"===t)n=a("function* () {}");else if("%AsyncGeneratorFunction%"===t)n=a("async function* () {}");else if("%AsyncGenerator%"===t){var i=e("%AsyncGeneratorFunction%");i&&(n=i.prototype)}else if("%AsyncIteratorPrototype%"===t){var r=e("%AsyncGenerator%");r&&f&&(n=f(r.prototype))}return y[t]=n,n},v={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},w=n(8612),E=n(7642),S=w.call(Function.call,Array.prototype.concat),I=w.call(Function.apply,Array.prototype.splice),A=w.call(Function.call,String.prototype.replace),R=w.call(Function.call,String.prototype.slice),x=w.call(Function.call,RegExp.prototype.exec),M=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,T=/\\(\\)?/g,k=function(e,t){var n,i=e;if(E(v,i)&&(i="%"+(n=v[i])[0]+"%"),E(y,i)){var o=y[i];if(o===p&&(o=m(i)),void 0===o&&!t)throw new s("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:n,name:i,value:o}}throw new r("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!=typeof e||0===e.length)throw new s("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof t)throw new s('"allowMissing" argument must be a boolean');if(null===x(/^%?[^%]*%?$/,e))throw new r("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var n=function(e){var t=R(e,0,1),n=R(e,-1);if("%"===t&&"%"!==n)throw new r("invalid intrinsic syntax, expected closing `%`");if("%"===n&&"%"!==t)throw new r("invalid intrinsic syntax, expected opening `%`");var i=[];return A(e,M,(function(e,t,n,r){i[i.length]=n?A(r,T,"$1"):t||e})),i}(e),i=n.length>0?n[0]:"",o=k("%"+i+"%",t),a=o.name,l=o.value,u=!1,h=o.alias;h&&(i=h[0],I(n,S([0,1],h)));for(var d=1,f=!0;d=n.length){var m=c(l,p);l=(f=!!m)&&"get"in m&&!("originalValue"in m.get)?m.get:l[p]}else f=E(l,p),l=l[p];f&&!u&&(y[a]=l)}}return l}},7296:(e,t,n)=>{"use strict";var i=n(210)("%Object.getOwnPropertyDescriptor%",!0);if(i)try{i([],"length")}catch(e){i=null}e.exports=i},1044:(e,t,n)=>{"use strict";var i=n(210)("%Object.defineProperty%",!0),r=function(){if(i)try{return i({},"a",{value:1}),!0}catch(e){return!1}return!1};r.hasArrayLengthDefineBug=function(){if(!r())return null;try{return 1!==i([],"length",{value:1}).length}catch(e){return!0}},e.exports=r},8185:e=>{"use strict";var t={foo:{}},n=Object;e.exports=function(){return{__proto__:t}.foo===t.foo&&!({__proto__:null}instanceof n)}},1405:(e,t,n)=>{"use strict";var i="undefined"!=typeof Symbol&&Symbol,r=n(5419);e.exports=function(){return"function"==typeof i&&("function"==typeof Symbol&&("symbol"==typeof i("foo")&&("symbol"==typeof Symbol("bar")&&r())))}},5419:e=>{"use strict";e.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),n=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var i=Object.getOwnPropertySymbols(e);if(1!==i.length||i[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var r=Object.getOwnPropertyDescriptor(e,t);if(42!==r.value||!0!==r.enumerable)return!1}return!0}},6410:(e,t,n)=>{"use strict";var i=n(5419);e.exports=function(){return i()&&!!Symbol.toStringTag}},7642:(e,t,n)=>{"use strict";var i=n(8612);e.exports=i.call(Function.call,Object.prototype.hasOwnProperty)},3349:(e,t,n)=>{"use strict";var i=n(9509).Buffer,r=n(8473).Transform;function o(e){r.call(this),this._block=i.allocUnsafe(e),this._blockSize=e,this._blockOffset=0,this._length=[0,0,0,0],this._finalized=!1}n(5717)(o,r),o.prototype._transform=function(e,t,n){var i=null;try{this.update(e,t)}catch(e){i=e}n(i)},o.prototype._flush=function(e){var t=null;try{this.push(this.digest())}catch(e){t=e}e(t)},o.prototype.update=function(e,t){if(function(e,t){if(!i.isBuffer(e)&&"string"!=typeof e)throw new TypeError(t+" must be a string or a buffer")}(e,"Data"),this._finalized)throw new Error("Digest already called");i.isBuffer(e)||(e=i.from(e,t));for(var n=this._block,r=0;this._blockOffset+e.length-r>=this._blockSize;){for(var o=this._blockOffset;o0;++s)this._length[s]+=a,(a=this._length[s]/4294967296|0)>0&&(this._length[s]-=4294967296*a);return this},o.prototype._update=function(){throw new Error("_update is not implemented")},o.prototype.digest=function(e){if(this._finalized)throw new Error("Digest already called");this._finalized=!0;var t=this._digest();void 0!==e&&(t=t.toString(e)),this._block.fill(0),this._blockOffset=0;for(var n=0;n<4;++n)this._length[n]=0;return t},o.prototype._digest=function(){throw new Error("_digest is not implemented")},e.exports=o},3715:(e,t,n)=>{var i=t;i.utils=n(6436),i.common=n(5772),i.sha=n(9041),i.ripemd=n(2949),i.hmac=n(2344),i.sha1=i.sha.sha1,i.sha256=i.sha.sha256,i.sha224=i.sha.sha224,i.sha384=i.sha.sha384,i.sha512=i.sha.sha512,i.ripemd160=i.ripemd.ripemd160},5772:(e,t,n)=>{"use strict";var i=n(6436),r=n(9746);function o(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}t.BlockHash=o,o.prototype.update=function(e,t){if(e=i.toArray(e,t),this.pending?this.pending=this.pending.concat(e):this.pending=e,this.pendingTotal+=e.length,this.pending.length>=this._delta8){var n=(e=this.pending).length%this._delta8;this.pending=e.slice(e.length-n,e.length),0===this.pending.length&&(this.pending=null),e=i.join32(e,0,e.length-n,this.endian);for(var r=0;r>>24&255,i[r++]=e>>>16&255,i[r++]=e>>>8&255,i[r++]=255&e}else for(i[r++]=255&e,i[r++]=e>>>8&255,i[r++]=e>>>16&255,i[r++]=e>>>24&255,i[r++]=0,i[r++]=0,i[r++]=0,i[r++]=0,o=8;o{"use strict";var i=n(6436),r=n(9746);function o(e,t,n){if(!(this instanceof o))return new o(e,t,n);this.Hash=e,this.blockSize=e.blockSize/8,this.outSize=e.outSize/8,this.inner=null,this.outer=null,this._init(i.toArray(t,n))}e.exports=o,o.prototype._init=function(e){e.length>this.blockSize&&(e=(new this.Hash).update(e).digest()),r(e.length<=this.blockSize);for(var t=e.length;t{"use strict";var i=n(6436),r=n(5772),o=i.rotl32,s=i.sum32,a=i.sum32_3,c=i.sum32_4,l=r.BlockHash;function u(){if(!(this instanceof u))return new u;l.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.endian="little"}function h(e,t,n,i){return e<=15?t^n^i:e<=31?t&n|~t&i:e<=47?(t|~n)^i:e<=63?t&i|n&~i:t^(n|~i)}function d(e){return e<=15?0:e<=31?1518500249:e<=47?1859775393:e<=63?2400959708:2840853838}function f(e){return e<=15?1352829926:e<=31?1548603684:e<=47?1836072691:e<=63?2053994217:0}i.inherits(u,l),t.ripemd160=u,u.blockSize=512,u.outSize=160,u.hmacStrength=192,u.padLength=64,u.prototype._update=function(e,t){for(var n=this.h[0],i=this.h[1],r=this.h[2],l=this.h[3],u=this.h[4],m=n,v=i,w=r,E=l,S=u,I=0;I<80;I++){var A=s(o(c(n,h(I,i,r,l),e[p[I]+t],d(I)),y[I]),u);n=u,u=l,l=o(r,10),r=i,i=A,A=s(o(c(m,h(79-I,v,w,E),e[g[I]+t],f(I)),b[I]),S),m=S,S=E,E=o(w,10),w=v,v=A}A=a(this.h[1],r,E),this.h[1]=a(this.h[2],l,S),this.h[2]=a(this.h[3],u,m),this.h[3]=a(this.h[4],n,v),this.h[4]=a(this.h[0],i,w),this.h[0]=A},u.prototype._digest=function(e){return"hex"===e?i.toHex32(this.h,"little"):i.split32(this.h,"little")};var p=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],g=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],y=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],b=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]},9041:(e,t,n)=>{"use strict";t.sha1=n(4761),t.sha224=n(799),t.sha256=n(9344),t.sha384=n(772),t.sha512=n(4236)},4761:(e,t,n)=>{"use strict";var i=n(6436),r=n(5772),o=n(7038),s=i.rotl32,a=i.sum32,c=i.sum32_5,l=o.ft_1,u=r.BlockHash,h=[1518500249,1859775393,2400959708,3395469782];function d(){if(!(this instanceof d))return new d;u.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}i.inherits(d,u),e.exports=d,d.blockSize=512,d.outSize=160,d.hmacStrength=80,d.padLength=64,d.prototype._update=function(e,t){for(var n=this.W,i=0;i<16;i++)n[i]=e[t+i];for(;i{"use strict";var i=n(6436),r=n(9344);function o(){if(!(this instanceof o))return new o;r.call(this),this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]}i.inherits(o,r),e.exports=o,o.blockSize=512,o.outSize=224,o.hmacStrength=192,o.padLength=64,o.prototype._digest=function(e){return"hex"===e?i.toHex32(this.h.slice(0,7),"big"):i.split32(this.h.slice(0,7),"big")}},9344:(e,t,n)=>{"use strict";var i=n(6436),r=n(5772),o=n(7038),s=n(9746),a=i.sum32,c=i.sum32_4,l=i.sum32_5,u=o.ch32,h=o.maj32,d=o.s0_256,f=o.s1_256,p=o.g0_256,g=o.g1_256,y=r.BlockHash,b=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function m(){if(!(this instanceof m))return new m;y.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=b,this.W=new Array(64)}i.inherits(m,y),e.exports=m,m.blockSize=512,m.outSize=256,m.hmacStrength=192,m.padLength=64,m.prototype._update=function(e,t){for(var n=this.W,i=0;i<16;i++)n[i]=e[t+i];for(;i{"use strict";var i=n(6436),r=n(4236);function o(){if(!(this instanceof o))return new o;r.call(this),this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428]}i.inherits(o,r),e.exports=o,o.blockSize=1024,o.outSize=384,o.hmacStrength=192,o.padLength=128,o.prototype._digest=function(e){return"hex"===e?i.toHex32(this.h.slice(0,12),"big"):i.split32(this.h.slice(0,12),"big")}},4236:(e,t,n)=>{"use strict";var i=n(6436),r=n(5772),o=n(9746),s=i.rotr64_hi,a=i.rotr64_lo,c=i.shr64_hi,l=i.shr64_lo,u=i.sum64,h=i.sum64_hi,d=i.sum64_lo,f=i.sum64_4_hi,p=i.sum64_4_lo,g=i.sum64_5_hi,y=i.sum64_5_lo,b=r.BlockHash,m=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function v(){if(!(this instanceof v))return new v;b.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=m,this.W=new Array(160)}function w(e,t,n,i,r){var o=e&n^~e&r;return o<0&&(o+=4294967296),o}function E(e,t,n,i,r,o){var s=t&i^~t&o;return s<0&&(s+=4294967296),s}function S(e,t,n,i,r){var o=e&n^e&r^n&r;return o<0&&(o+=4294967296),o}function I(e,t,n,i,r,o){var s=t&i^t&o^i&o;return s<0&&(s+=4294967296),s}function A(e,t){var n=s(e,t,28)^s(t,e,2)^s(t,e,7);return n<0&&(n+=4294967296),n}function R(e,t){var n=a(e,t,28)^a(t,e,2)^a(t,e,7);return n<0&&(n+=4294967296),n}function x(e,t){var n=s(e,t,14)^s(e,t,18)^s(t,e,9);return n<0&&(n+=4294967296),n}function M(e,t){var n=a(e,t,14)^a(e,t,18)^a(t,e,9);return n<0&&(n+=4294967296),n}function T(e,t){var n=s(e,t,1)^s(e,t,8)^c(e,t,7);return n<0&&(n+=4294967296),n}function k(e,t){var n=a(e,t,1)^a(e,t,8)^l(e,t,7);return n<0&&(n+=4294967296),n}function O(e,t){var n=s(e,t,19)^s(t,e,29)^c(e,t,6);return n<0&&(n+=4294967296),n}function U(e,t){var n=a(e,t,19)^a(t,e,29)^l(e,t,6);return n<0&&(n+=4294967296),n}i.inherits(v,b),e.exports=v,v.blockSize=1024,v.outSize=512,v.hmacStrength=192,v.padLength=128,v.prototype._prepareBlock=function(e,t){for(var n=this.W,i=0;i<32;i++)n[i]=e[t+i];for(;i{"use strict";var i=n(6436).rotr32;function r(e,t,n){return e&t^~e&n}function o(e,t,n){return e&t^e&n^t&n}function s(e,t,n){return e^t^n}t.ft_1=function(e,t,n,i){return 0===e?r(t,n,i):1===e||3===e?s(t,n,i):2===e?o(t,n,i):void 0},t.ch32=r,t.maj32=o,t.p32=s,t.s0_256=function(e){return i(e,2)^i(e,13)^i(e,22)},t.s1_256=function(e){return i(e,6)^i(e,11)^i(e,25)},t.g0_256=function(e){return i(e,7)^i(e,18)^e>>>3},t.g1_256=function(e){return i(e,17)^i(e,19)^e>>>10}},6436:(e,t,n)=>{"use strict";var i=n(9746),r=n(5717);function o(e,t){return 55296==(64512&e.charCodeAt(t))&&(!(t<0||t+1>=e.length)&&56320==(64512&e.charCodeAt(t+1)))}function s(e){return(e>>>24|e>>>8&65280|e<<8&16711680|(255&e)<<24)>>>0}function a(e){return 1===e.length?"0"+e:e}function c(e){return 7===e.length?"0"+e:6===e.length?"00"+e:5===e.length?"000"+e:4===e.length?"0000"+e:3===e.length?"00000"+e:2===e.length?"000000"+e:1===e.length?"0000000"+e:e}t.inherits=r,t.toArray=function(e,t){if(Array.isArray(e))return e.slice();if(!e)return[];var n=[];if("string"==typeof e)if(t){if("hex"===t)for((e=e.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(e="0"+e),r=0;r>6|192,n[i++]=63&s|128):o(e,r)?(s=65536+((1023&s)<<10)+(1023&e.charCodeAt(++r)),n[i++]=s>>18|240,n[i++]=s>>12&63|128,n[i++]=s>>6&63|128,n[i++]=63&s|128):(n[i++]=s>>12|224,n[i++]=s>>6&63|128,n[i++]=63&s|128)}else for(r=0;r>>0}return s},t.split32=function(e,t){for(var n=new Array(4*e.length),i=0,r=0;i>>24,n[r+1]=o>>>16&255,n[r+2]=o>>>8&255,n[r+3]=255&o):(n[r+3]=o>>>24,n[r+2]=o>>>16&255,n[r+1]=o>>>8&255,n[r]=255&o)}return n},t.rotr32=function(e,t){return e>>>t|e<<32-t},t.rotl32=function(e,t){return e<>>32-t},t.sum32=function(e,t){return e+t>>>0},t.sum32_3=function(e,t,n){return e+t+n>>>0},t.sum32_4=function(e,t,n,i){return e+t+n+i>>>0},t.sum32_5=function(e,t,n,i,r){return e+t+n+i+r>>>0},t.sum64=function(e,t,n,i){var r=e[t],o=i+e[t+1]>>>0,s=(o>>0,e[t+1]=o},t.sum64_hi=function(e,t,n,i){return(t+i>>>0>>0},t.sum64_lo=function(e,t,n,i){return t+i>>>0},t.sum64_4_hi=function(e,t,n,i,r,o,s,a){var c=0,l=t;return c+=(l=l+i>>>0)>>0)>>0)>>0},t.sum64_4_lo=function(e,t,n,i,r,o,s,a){return t+i+o+a>>>0},t.sum64_5_hi=function(e,t,n,i,r,o,s,a,c,l){var u=0,h=t;return u+=(h=h+i>>>0)>>0)>>0)>>0)>>0},t.sum64_5_lo=function(e,t,n,i,r,o,s,a,c,l){return t+i+o+a+l>>>0},t.rotr64_hi=function(e,t,n){return(t<<32-n|e>>>n)>>>0},t.rotr64_lo=function(e,t,n){return(e<<32-n|t>>>n)>>>0},t.shr64_hi=function(e,t,n){return e>>>n},t.shr64_lo=function(e,t,n){return(e<<32-n|t>>>n)>>>0}},2156:(e,t,n)=>{"use strict";var i=n(3715),r=n(4504),o=n(9746);function s(e){if(!(this instanceof s))return new s(e);this.hash=e.hash,this.predResist=!!e.predResist,this.outLen=this.hash.outSize,this.minEntropy=e.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var t=r.toArray(e.entropy,e.entropyEnc||"hex"),n=r.toArray(e.nonce,e.nonceEnc||"hex"),i=r.toArray(e.pers,e.persEnc||"hex");o(t.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(t,n,i)}e.exports=s,s.prototype._init=function(e,t,n){var i=e.concat(t).concat(n);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var r=0;r=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(e.concat(n||[])),this._reseed=1},s.prototype.generate=function(e,t,n,i){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof t&&(i=n,n=t,t=null),n&&(n=r.toArray(n,i||"hex"),this._update(n));for(var o=[];o.length{t.read=function(e,t,n,i,r){var o,s,a=8*r-i-1,c=(1<>1,u=-7,h=n?r-1:0,d=n?-1:1,f=e[t+h];for(h+=d,o=f&(1<<-u)-1,f>>=-u,u+=a;u>0;o=256*o+e[t+h],h+=d,u-=8);for(s=o&(1<<-u)-1,o>>=-u,u+=i;u>0;s=256*s+e[t+h],h+=d,u-=8);if(0===o)o=1-l;else{if(o===c)return s?NaN:1/0*(f?-1:1);s+=Math.pow(2,i),o-=l}return(f?-1:1)*s*Math.pow(2,o-i)},t.write=function(e,t,n,i,r,o){var s,a,c,l=8*o-r-1,u=(1<>1,d=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,f=i?0:o-1,p=i?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,s=u):(s=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-s))<1&&(s--,c*=2),(t+=s+h>=1?d/c:d*Math.pow(2,1-h))*c>=2&&(s++,c/=2),s+h>=u?(a=0,s=u):s+h>=1?(a=(t*c-1)*Math.pow(2,r),s+=h):(a=t*Math.pow(2,h-1)*Math.pow(2,r),s=0));r>=8;e[n+f]=255&a,f+=p,a/=256,r-=8);for(s=s<0;e[n+f]=255&s,f+=p,s/=256,l-=8);e[n+f-p]|=128*g}},5717:e=>{"function"==typeof Object.create?e.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:e.exports=function(e,t){if(t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}}},2584:(e,t,n)=>{"use strict";var i=n(6410)(),r=n(1924)("Object.prototype.toString"),o=function(e){return!(i&&e&&"object"==typeof e&&Symbol.toStringTag in e)&&"[object Arguments]"===r(e)},s=function(e){return!!o(e)||null!==e&&"object"==typeof e&&"number"==typeof e.length&&e.length>=0&&"[object Array]"!==r(e)&&"[object Function]"===r(e.callee)},a=function(){return o(arguments)}();o.isLegacyArguments=s,e.exports=a?o:s},5320:e=>{"use strict";var t,n,i=Function.prototype.toString,r="object"==typeof Reflect&&null!==Reflect&&Reflect.apply;if("function"==typeof r&&"function"==typeof Object.defineProperty)try{t=Object.defineProperty({},"length",{get:function(){throw n}}),n={},r((function(){throw 42}),null,t)}catch(e){e!==n&&(r=null)}else r=null;var o=/^\s*class\b/,s=function(e){try{var t=i.call(e);return o.test(t)}catch(e){return!1}},a=function(e){try{return!s(e)&&(i.call(e),!0)}catch(e){return!1}},c=Object.prototype.toString,l="function"==typeof Symbol&&!!Symbol.toStringTag,u=!(0 in[,]),h=function(){return!1};if("object"==typeof document){var d=document.all;c.call(d)===c.call(document.all)&&(h=function(e){if((u||!e)&&(void 0===e||"object"==typeof e))try{var t=c.call(e);return("[object HTMLAllCollection]"===t||"[object HTML document.all class]"===t||"[object HTMLCollection]"===t||"[object Object]"===t)&&null==e("")}catch(e){}return!1})}e.exports=r?function(e){if(h(e))return!0;if(!e)return!1;if("function"!=typeof e&&"object"!=typeof e)return!1;try{r(e,null,t)}catch(e){if(e!==n)return!1}return!s(e)&&a(e)}:function(e){if(h(e))return!0;if(!e)return!1;if("function"!=typeof e&&"object"!=typeof e)return!1;if(l)return a(e);if(s(e))return!1;var t=c.call(e);return!("[object Function]"!==t&&"[object GeneratorFunction]"!==t&&!/^\[object HTML/.test(t))&&a(e)}},8662:(e,t,n)=>{"use strict";var i,r=Object.prototype.toString,o=Function.prototype.toString,s=/^\s*(?:function)?\*/,a=n(6410)(),c=Object.getPrototypeOf;e.exports=function(e){if("function"!=typeof e)return!1;if(s.test(o.call(e)))return!0;if(!a)return"[object GeneratorFunction]"===r.call(e);if(!c)return!1;if(void 0===i){var t=function(){if(!a)return!1;try{return Function("return function*() {}")()}catch(e){}}();i=!!t&&c(t)}return c(e)===i}},8611:e=>{"use strict";e.exports=function(e){return e!=e}},360:(e,t,n)=>{"use strict";var i=n(5559),r=n(4289),o=n(8611),s=n(9415),a=n(3194),c=i(s(),Number);r(c,{getPolyfill:s,implementation:o,shim:a}),e.exports=c},9415:(e,t,n)=>{"use strict";var i=n(8611);e.exports=function(){return Number.isNaN&&Number.isNaN(NaN)&&!Number.isNaN("a")?Number.isNaN:i}},3194:(e,t,n)=>{"use strict";var i=n(4289),r=n(9415);e.exports=function(){var e=r();return i(Number,{isNaN:e},{isNaN:function(){return Number.isNaN!==e}}),e}},5692:(e,t,n)=>{"use strict";var i=n(4029),r=n(3083),o=n(1924),s=o("Object.prototype.toString"),a=n(6410)(),c=n(7296),l="undefined"==typeof globalThis?n.g:globalThis,u=r(),h=o("Array.prototype.indexOf",!0)||function(e,t){for(var n=0;n-1}return!!c&&function(e){var t=!1;return i(f,(function(n,i){if(!t)try{t=n.call(e)===i}catch(e){}})),t}(e)}},3006:function(e,t){"use strict";var n,i=this&&this.__classPrivateFieldGet||function(e,t){if(!t.has(e))throw new TypeError("attempted to get private field on non-instance");return t.get(e)};Object.defineProperty(t,"__esModule",{value:!0}),t.IconUI=void 0;const r="kukai-icon";t.IconUI=class{constructor(){n.set(this,(()=>document.getElementById(r)))}async init(e,t){var o;if(this.isInit)throw new Error("Kukai-Embed Already Present");{let s=document.createElement("button");s.id=r;let a=document.createElement("img");a.style.width="60px",a.style.height="60px",a.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAMAAAANIilAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEhQTFRF0dH/amn+urn/o6L+8/P/U1L+9PP/Xl3+mJf+3dz/gYD+3Nz/xcX/jIz+jIv+o6P/dXT+urr/xsX/6Oj/r67/////R0b+////pIBhiAAAABh0Uk5T//////////////////////////////8AzRMu6gAAAaZJREFUeNqsl9uSgyAMhgNyUNS2eyB9/zddXHW1QAKW/ccrhm8MSUgCPAkpkN2vJChqD2RBOVs8yc5SVcLgMCMHFbC0SMjKAgwCGQlgYNVjQb2i4FFgUWLMw5PGCukpB0uslEzhavZE7/CEFzS9wqO+AuvxDCuBlyTUCe7xovoDBrws+IMTox/Rin3EPhE7HEdJD94P59037/0tE68Fju9RH/b6/pX1Jr5jK5ycGJbN8Mp6nzl1+BwPu5VNfuEWWCELC/PLmjQTVIAlC9NscBk8Zw5mWJwDbBl4CRrFBn+DQhpm2XBoABousAggafiDZ1FCR8Irm+TloY6GN9YPb8CH7i2wF2/B5pM1nIWN0F+c4R0ZqjVGjjNckkmyxZczHMj03HLDGtpwxV+MvSZlDbelKxk0UIbPxWIQyjCVKrJchhC/CcNVRQFEbbIV0FWV3j3Yj1zpTfwdw1vg77min7gs7hgofLxytJu40WmIehXeTLwi6BYrYtfquG/C/zT3trGiaaBpG6Xahri28bFtcG0bmduG9bZnQuMDpfFp1Pgoq38O/ggwACoyIQpeKqtUAAAAAElFTkSuQmCC",s.innerHTML=a.outerHTML,t?s.className=t:(s.style.width="60px",s.style.height="60px",s.style.bottom="40px",s.style.left="40px",s.style.position="fixed",s.style.borderRadius="50px",s.style.boxShadow="2px 2px 3px #999",s.style.padding="0",s.style.border="0"),s.style.zIndex="99998",s.style.display="none",document.body.appendChild(s),null===(o=i(this,n).call(this))||void 0===o||o.addEventListener("click",e)}}get isInit(){return!!i(this,n).call(this)}deinit(){const e=i(this,n).call(this);e&&document.body.removeChild(e)}show(){const e=i(this,n).call(this);e&&(e.style.display="block")}hide(){const e=i(this,n).call(this);e&&(e.style.display="none")}},n=new WeakMap},7771:function(e,t,n){"use strict";var i,r,o=this&&this.__classPrivateFieldSet||function(e,t,n){if(!t.has(e))throw new TypeError("attempted to set private field on non-instance");return t.set(e,n),n},s=this&&this.__classPrivateFieldGet||function(e,t){if(!t.has(e))throw new TypeError("attempted to get private field on non-instance");return t.get(e)};Object.defineProperty(t,"__esModule",{value:!0}),t.IFrameKukai=void 0;const a=n(5308),c="kukai-iframe";t.IFrameKukai=class{constructor(e){i.set(this,void 0),r.set(this,(()=>document.getElementById(c))),o(this,i,e)}show(){const e=s(this,r).call(this);e&&(e.style.display="block")}hide(){const e=s(this,r).call(this);e&&(e.style.display="none")}isHidden(){const e=s(this,r).call(this);return"none"===(null==e?void 0:e.style.display)}toCard(){const e=s(this,r).call(this);e&&(e.style.position="fixed",e.style.top="",e.style.bottom="70px",e.style.left="70px",e.style.borderRadius="10px",e.style.border="0",e.style.width="400px",e.style.height="200px")}isCard(){const e=s(this,r).call(this);return"10px"===(null==e?void 0:e.style.borderRadius)}toFullScreen(){const e=s(this,r).call(this);e&&(e.style.position="fixed",e.style.top="0",e.style.left="0",e.style.borderRadius="0px",e.style.border="0",e.style.width="100%",e.style.height="100%")}async init(e){if(s(this,r).call(this))throw new Error("Kukai-Embed Already Present");{let t=document.createElement("iframe");const n=e?`?instanceId=${e}`:"";t.src=s(this,i)+"/embedded"+n,t.id=c,t.style.zIndex="99999",t.style.display="none";const{promise:r,deferred:o}=a.defer();try{return t.addEventListener("load",(()=>o.resolve())),document.body.appendChild(t),await r.then((()=>this.toFullScreen()))}catch(e){throw o.reject(e),e}}}get isInit(){return!!s(this,r).call(this)}deinit(){const e=s(this,r).call(this);e&&document.body.removeChild(e)}request(e){var t,n;null===(n=null===(t=s(this,r).call(this))||void 0===t?void 0:t.contentWindow)||void 0===n||n.postMessage(JSON.stringify(e),s(this,i)?s(this,i):"*")}},i=new WeakMap,r=new WeakMap},6257:function(e,t,n){"use strict";var i,r,o,s,a=this&&this.__createBinding||(Object.create?function(e,t,n,i){void 0===i&&(i=n),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,i){void 0===i&&(i=n),e[i]=t[n]}),c=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)},l=this&&this.__classPrivateFieldSet||function(e,t,n){if(!t.has(e))throw new TypeError("attempted to set private field on non-instance");return t.set(e,n),n},u=this&&this.__classPrivateFieldGet||function(e,t){if(!t.has(e))throw new TypeError("attempted to get private field on non-instance");return t.get(e)};Object.defineProperty(t,"__esModule",{value:!0}),t.KukaiEmbed=t.Networks=void 0;const h=n(5272);Object.defineProperty(t,"Networks",{enumerable:!0,get:function(){return h.Networks}});const d=n(5308),f=n(7771),p=n(3006),g=n(3163);c(n(5272),t);const y="kukai-embed-instance-id";t.KukaiEmbed=class{constructor(e={}){i.set(this,void 0),r.set(this,void 0),o.set(this,null),s.set(this,null),this._kukaiIsInit=!1;const t={net:h.Networks.mainnet,icon:!1,enableLogging:void 0!==e.net&&e.net!==h.Networks.mainnet,...e},n=d.networkToSrc(t.net),a=new f.IFrameKukai(n);l(this,i,a),l(this,r,new g.KukaiMessaging(a,n,t.enableLogging)),t.icon&&l(this,o,new p.IconUI)}async init(){var e;if(this.initialized)throw new Error("Kukai-Embed Already Present");const t=window.sessionStorage.getItem(y),n=t||void 0;let a=async e=>{let t=u(this,r).init(window);return u(this,i).init(n),await t};if(n){const t=window.sessionStorage.getItem(n);t?(await a(),l(this,s,JSON.parse(t)),u(this,i).toCard(),u(this,i).hide(),null===(e=u(this,o))||void 0===e||e.init((()=>this.toggle())).then((()=>{var e;return null===(e=u(this,o))||void 0===e?void 0:e.show()}))):await a()}else await a();this._kukaiIsInit=!0}get initialized(){return u(this,i).isInit&&u(this,r).isInit&&this._kukaiIsInit}deinit(){var e;u(this,r).deinit(),u(this,i).deinit(),null===(e=u(this,o))||void 0===e||e.deinit()}get user(){return u(this,s)}async login(e={}){var t;if(!this.initialized)throw new Error("Cannot login: Embed Uninitialized");if(null===(t=this.user)||void 0===t?void 0:t.pk)throw new Error("Already logged in");if(!this.user&&"high"===(null==e?void 0:e.customPrio)){let t=JSON.parse(JSON.stringify(e));t.customPrio=h.LoginPrio.Low;const n=await this.login(t);if(null==n?void 0:n.pk)return n}return u(this,i).toFullScreen(),u(this,i).show(),await u(this,r).login(e).then((({pk:t,pkh:n,userData:a,instanceId:c,authResponse:h})=>{var d;window.sessionStorage.setItem(y,c),window.sessionStorage.setItem(c,JSON.stringify({pk:t,pkh:n,userData:a})),null===(d=u(this,o))||void 0===d||d.init((()=>this.toggle())).then((()=>{var e;return null===(e=u(this,o))||void 0===e?void 0:e.show()})),l(this,s,{pk:t,pkh:n,userData:a});const f={...u(this,s),...h?{authResponse:h}:{}};return e.customSpinnerDismissal?{...f,dismissCallback:async()=>await u(this,r).dismiss().finally((()=>{u(this,i).hide(),u(this,i).toCard()}))}:f})).catch((t=>{throw e.customSpinnerDismissal=!1,t})).finally((()=>{e.customSpinnerDismissal||(u(this,i).hide(),u(this,i).toCard())}))}async logout(){if(!this.initialized)throw new Error("Cannot logout: Embed Uninitialized");return u(this,i).isCard()&&!u(this,i).isHidden()&&await u(this,r).card(!1),await u(this,r).logout().then((e=>{var t,n;try{const e=window.sessionStorage.getItem(y),t=e||void 0;t&&window.sessionStorage.removeItem(t)}catch(e){}window.sessionStorage.removeItem(y),u(this,i).hide(),null===(t=u(this,o))||void 0===t||t.hide(),null===(n=u(this,o))||void 0===n||n.deinit(),l(this,s,null)})).finally((()=>u(this,i).hide()))}async send(e,t){if(!this.initialized)throw new Error("Cannot send: Embed Uninitialized");return(null==t?void 0:t.silent)||(u(this,i).isCard()&&!u(this,i).isHidden()&&await u(this,r).card(!1),u(this,i).toFullScreen(),u(this,i).show()),await u(this,r).operation(e,t).then((e=>e.opHash)).finally((()=>{(null==t?void 0:t.silent)||(u(this,i).toCard(),u(this,i).hide())}))}async trackOperation(e){if(!this.initialized)throw new Error("Cannot track: Embed Uninitialized");return await u(this,r).track(e)}async signExpr(e,t){if(!this.initialized)throw new Error("Cannot sign: Embed Uninitialized");return u(this,i).isCard()&&!u(this,i).isHidden()&&await u(this,r).card(!1),u(this,i).toFullScreen(),u(this,i).show(),await u(this,r).signExpr(e,t).then((e=>e.signature)).finally((()=>{u(this,i).hide(),u(this,i).toCard()}))}async authenticate(e,t){if(!this.initialized)throw new Error("Cannot authenticate: Embed Uninitialized");return await u(this,r).authenticate(e,t).then((({message:e,signature:t})=>({message:e,signature:t})))}async toggle(){u(this,i).isHidden()?(u(this,i).toCard(),u(this,i).show(),u(this,r).card(!0)):await u(this,r).card(!1).then((()=>{u(this,i).hide()}))}},i=new WeakMap,r=new WeakMap,o=new WeakMap,s=new WeakMap},3163:function(e,t,n){"use strict";var i,r,o,s,a,c,l,u,h,d,f,p,g,y,b,m,v,w,E,S=n(5108),I=this&&this.__classPrivateFieldSet||function(e,t,n){if(!t.has(e))throw new TypeError("attempted to set private field on non-instance");return t.set(e,n),n},A=this&&this.__classPrivateFieldGet||function(e,t){if(!t.has(e))throw new TypeError("attempted to get private field on non-instance");return t.get(e)};Object.defineProperty(t,"__esModule",{value:!0}),t.KukaiMessaging=void 0;const R=n(5272),x=n(5308);class M{constructor(e){i.set(this,{}),r.set(this,void 0),I(this,r,e)}async listen(e){const{promise:t,deferred:n}=x.defer();return A(this,i)[e]=n,await t}handle(e){var t;const n=A(this,r).call(this,e);null===(t=A(this,i)[n])||void 0===t||t.resolve(e),delete A(this,i)[n]}}i=new WeakMap,r=new WeakMap;class T{constructor(){o.set(this,[])}async listen(){const{promise:e,deferred:t}=x.defer();return A(this,o).push(t),await e}get length(){return A(this,o).length}handle(e){var t;null===(t=A(this,o).shift())||void 0===t||t.resolve(e)}}o=new WeakMap;class k{constructor(){s.set(this,null)}async listen(){if(A(this,s))throw new Error("OCCUPIED");{const{promise:e,deferred:t}=x.defer();return I(this,s,t),await e}}handle(e){var t;null===(t=A(this,s))||void 0===t||t.resolve(e),I(this,s,null)}}s=new WeakMap;class O{constructor(e,t){a.set(this,void 0),c.set(this,void 0),l.set(this,new k),u.set(this,new T),h.set(this,new T),d.set(this,new k),f.set(this,new M((e=>e.opHash))),p.set(this,new T),g.set(this,new T),y.set(this,new T),b.set(this,new T),m.set(this,(e=>{switch(e.type){case R.ResponseTypes.cardResponse:A(this,u).handle(e);break;case R.ResponseTypes.loginResponse:A(this,h).handle(e);break;case R.ResponseTypes.operationResponse:A(this,d).handle(e);break;case R.ResponseTypes.trackResponse:A(this,f).handle(e);break;case R.ResponseTypes.logoutResponse:A(this,p).handle(e);break;case R.ResponseTypes.signExprResponse:A(this,g).handle(e);break;case R.ResponseTypes.authResponse:A(this,y).handle(e);break;case R.ResponseTypes.initComplete:A(this,l).handle(e);break;case R.ResponseTypes.dismissResponse:A(this,b).handle(e)}})),I(this,a,e),I(this,c,t)}async init(){return await A(this,l).listen()}async login(){return await A(this,h).listen()}async operation(){return await A(this,d).listen()}async track(e){return await A(this,f).listen(e)}async logout(){return await A(this,p).listen()}async signExpr(){return await A(this,g).listen()}async auth(){return await A(this,y).listen()}async card(){return await A(this,u).listen()}async dismiss(){return await A(this,b).listen()}handleEvent(e){if("message"===e.type&&e.origin===A(this,a)){A(this,c)&&S.log(`Received ${e.data} from ${e.origin}`);const t=JSON.parse(e.data);A(this,m).call(this,t)}}}a=new WeakMap,c=new WeakMap,l=new WeakMap,u=new WeakMap,h=new WeakMap,d=new WeakMap,f=new WeakMap,p=new WeakMap,g=new WeakMap,y=new WeakMap,b=new WeakMap,m=new WeakMap;t.KukaiMessaging=class{constructor(e,t,n){v.set(this,void 0),w.set(this,void 0),E.set(this,null),I(this,w,e),I(this,v,new O(t,n))}async init(e){if(A(this,E))throw new Error("Already Initialized");return I(this,E,e),e.addEventListener("message",A(this,v)),await A(this,v).init().then((e=>{if(e.failed)throw new Error("Init Failed: "+e.error)}))}get isInit(){return!!A(this,E)}deinit(){A(this,E)&&(A(this,E).removeEventListener("message",A(this,v)),I(this,E,null))}async card(e){return A(this,w).request({type:R.RequestTypes.cardRequest,show:e}),await A(this,v).card().then((e=>{if(e.failed)throw new Error("Card Failed: "+e.error)}))}async login(e){return A(this,w).request({type:R.RequestTypes.loginRequest,config:e}),await A(this,v).login().then((e=>{if(e.failed)throw new Error("Login Failed: "+e.error);return e}))}async operation(e,t){return A(this,w).request({type:R.RequestTypes.operationRequest,operations:e,ui:t}),await A(this,v).operation().then((e=>{if(e.failed)throw new Error("Operation Failed: "+e.error);return e})).catch((e=>{throw"OCCUPIED"===e.message?new Error("Cannot send: Operation in progress"):e}))}async track(e){return A(this,w).request({type:R.RequestTypes.trackRequest,opHash:e}),await A(this,v).track(e).then((e=>{if(e.failed)throw new Error("Track Failed: "+e.error);return e}))}async logout(){return A(this,w).request({type:R.RequestTypes.logoutRequest}),await A(this,v).logout().then((e=>{if(e.failed)throw new Error("Logout Failed: "+e.error);return e}))}async signExpr(e,t){return A(this,w).request({type:R.RequestTypes.signExprRequest,expr:e,ui:t}),await A(this,v).signExpr().then((e=>{if(e.failed)throw new Error("Signing Failed: "+e.error);return e}))}async authenticate(e,t){return A(this,w).request({type:R.RequestTypes.authRequest,id:e,nonce:t}),await A(this,v).auth().then((e=>{if(e.failed)throw new Error("Auth Failed: "+e.error);return e}))}async dismiss(){return A(this,w).request({type:R.RequestTypes.dismissRequest}),await A(this,v).dismiss().then((e=>{if(e.failed)throw new Error("Dismiss Failed: "+e.error)}))}},v=new WeakMap,w=new WeakMap,E=new WeakMap},5272:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ResponseTypes=t.RequestTypes=t.LoginPrio=t.TypeOfLogin=t.Networks=void 0,function(e){e.mainnet="mainnet",e.ghostnet="ghostnet",e.ithacanet="ithacanet",e.jakartanet="jakartanet",e.kathmandu="kathmandu",e.dev="dev",e.local="local"}(t.Networks||(t.Networks={})),function(e){e.Google="google",e.Reddit="reddit",e.Twitter="twitter",e.Facebook="facebook"}(t.TypeOfLogin||(t.TypeOfLogin={})),function(e){e.LowFast="low_always_skip_key",e.Low="low",e.High="high"}(t.LoginPrio||(t.LoginPrio={})),function(e){e.loginRequest="login_request",e.operationRequest="operation_request",e.trackRequest="track_request",e.logoutRequest="logout_request",e.signExprRequest="sign_expr_request",e.authRequest="authentication_request",e.cardRequest="card_request",e.dismissRequest="dismiss_request"}(t.RequestTypes||(t.RequestTypes={})),function(e){e.initComplete="init_complete",e.loginResponse="login_response",e.operationResponse="operation_response",e.trackResponse="track_response",e.logoutResponse="logout_response",e.signExprResponse="sign_expr_response",e.authResponse="authentication_response",e.cardResponse="card_response",e.dismissResponse="dismiss_response"}(t.ResponseTypes||(t.ResponseTypes={}))},5308:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.networkToSrc=t.defer=void 0;const i=n(5272);t.defer=()=>{let e={resolve:e=>{},reject:e=>{}};const t=new Promise(((t,n)=>{e={resolve:t,reject:n}}));return{deferred:e,promise:t}};t.networkToSrc=e=>{switch(e){case i.Networks.mainnet:return"https://wallet.kukai.app";case i.Networks.ghostnet:return"https://ghostnet.kukai.app";case i.Networks.ithacanet:return"https://ithacanet.kukai.app";case i.Networks.jakartanet:return"https://jakartanet.kukai.app";case i.Networks.kathmandu:return"https://kathmandu.kukai.app";case i.Networks.dev:return"https://ichabod-dev.kukai.app";case i.Networks.local:return"http://localhost:4200";default:return e}}},2307:(e,t,n)=>{e=n.nmd(e);var i="__lodash_hash_undefined__",r=1,o=2,s=9007199254740991,a="[object Arguments]",c="[object Array]",l="[object AsyncFunction]",u="[object Boolean]",h="[object Date]",d="[object Error]",f="[object Function]",p="[object GeneratorFunction]",g="[object Map]",y="[object Number]",b="[object Null]",m="[object Object]",v="[object Promise]",w="[object Proxy]",E="[object RegExp]",S="[object Set]",I="[object String]",A="[object Symbol]",R="[object Undefined]",x="[object WeakMap]",M="[object ArrayBuffer]",T="[object DataView]",k=/^\[object .+?Constructor\]$/,O=/^(?:0|[1-9]\d*)$/,U={};U["[object Float32Array]"]=U["[object Float64Array]"]=U["[object Int8Array]"]=U["[object Int16Array]"]=U["[object Int32Array]"]=U["[object Uint8Array]"]=U["[object Uint8ClampedArray]"]=U["[object Uint16Array]"]=U["[object Uint32Array]"]=!0,U[a]=U[c]=U[M]=U[u]=U[T]=U[h]=U[d]=U[f]=U[g]=U[y]=U[m]=U[E]=U[S]=U[I]=U[x]=!1;var C="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,P="object"==typeof self&&self&&self.Object===Object&&self,N=C||P||Function("return this")(),K=t&&!t.nodeType&&t,L=K&&e&&!e.nodeType&&e,q=L&&L.exports===K,z=q&&C.process,V=function(){try{return z&&z.binding&&z.binding("util")}catch(e){}}(),F=V&&V.isTypedArray;function j(e,t){for(var n=-1,i=null==e?0:e.length;++nl))return!1;var h=a.get(e);if(h&&a.get(t))return h==t;var d=-1,f=!0,p=n&o?new Me:void 0;for(a.set(e,t),a.set(t,e);++d-1},Re.prototype.set=function(e,t){var n=this.__data__,i=Oe(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this},xe.prototype.clear=function(){this.size=0,this.__data__={hash:new Ae,map:new(de||Re),string:new Ae}},xe.prototype.delete=function(e){var t=ze(this,e).delete(e);return this.size-=t?1:0,t},xe.prototype.get=function(e){return ze(this,e).get(e)},xe.prototype.has=function(e){return ze(this,e).has(e)},xe.prototype.set=function(e,t){var n=ze(this,e),i=n.size;return n.set(e,t),this.size+=n.size==i?0:1,this},Me.prototype.add=Me.prototype.push=function(e){return this.__data__.set(e,i),this},Me.prototype.has=function(e){return this.__data__.has(e)},Te.prototype.clear=function(){this.__data__=new Re,this.size=0},Te.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},Te.prototype.get=function(e){return this.__data__.get(e)},Te.prototype.has=function(e){return this.__data__.has(e)},Te.prototype.set=function(e,t){var n=this.__data__;if(n instanceof Re){var i=n.__data__;if(!de||i.length<199)return i.push([e,t]),this.size=++n.size,this;n=this.__data__=new xe(i)}return n.set(e,t),this.size=n.size,this};var Fe=ce?function(e){return null==e?[]:(e=Object(e),function(e,t){for(var n=-1,i=null==e?0:e.length,r=0,o=[];++n-1&&e%1==0&&e-1&&e%1==0&&e<=s}function Ye(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function Xe(e){return null!=e&&"object"==typeof e}var _e=F?function(e){return function(t){return e(t)}}(F):function(e){return Xe(e)&&Ge(e.length)&&!!U[Ue(e)]};function $e(e){return null!=(t=e)&&Ge(t.length)&&!He(t)?ke(e):Ke(e);var t}e.exports=function(e,t){return Pe(e,t)}},2318:(e,t,n)=>{"use strict";var i=n(5717),r=n(3349),o=n(9509).Buffer,s=new Array(16);function a(){r.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878}function c(e,t){return e<>>32-t}function l(e,t,n,i,r,o,s){return c(e+(t&n|~t&i)+r+o|0,s)+t|0}function u(e,t,n,i,r,o,s){return c(e+(t&i|n&~i)+r+o|0,s)+t|0}function h(e,t,n,i,r,o,s){return c(e+(t^n^i)+r+o|0,s)+t|0}function d(e,t,n,i,r,o,s){return c(e+(n^(t|~i))+r+o|0,s)+t|0}i(a,r),a.prototype._update=function(){for(var e=s,t=0;t<16;++t)e[t]=this._block.readInt32LE(4*t);var n=this._a,i=this._b,r=this._c,o=this._d;n=l(n,i,r,o,e[0],3614090360,7),o=l(o,n,i,r,e[1],3905402710,12),r=l(r,o,n,i,e[2],606105819,17),i=l(i,r,o,n,e[3],3250441966,22),n=l(n,i,r,o,e[4],4118548399,7),o=l(o,n,i,r,e[5],1200080426,12),r=l(r,o,n,i,e[6],2821735955,17),i=l(i,r,o,n,e[7],4249261313,22),n=l(n,i,r,o,e[8],1770035416,7),o=l(o,n,i,r,e[9],2336552879,12),r=l(r,o,n,i,e[10],4294925233,17),i=l(i,r,o,n,e[11],2304563134,22),n=l(n,i,r,o,e[12],1804603682,7),o=l(o,n,i,r,e[13],4254626195,12),r=l(r,o,n,i,e[14],2792965006,17),n=u(n,i=l(i,r,o,n,e[15],1236535329,22),r,o,e[1],4129170786,5),o=u(o,n,i,r,e[6],3225465664,9),r=u(r,o,n,i,e[11],643717713,14),i=u(i,r,o,n,e[0],3921069994,20),n=u(n,i,r,o,e[5],3593408605,5),o=u(o,n,i,r,e[10],38016083,9),r=u(r,o,n,i,e[15],3634488961,14),i=u(i,r,o,n,e[4],3889429448,20),n=u(n,i,r,o,e[9],568446438,5),o=u(o,n,i,r,e[14],3275163606,9),r=u(r,o,n,i,e[3],4107603335,14),i=u(i,r,o,n,e[8],1163531501,20),n=u(n,i,r,o,e[13],2850285829,5),o=u(o,n,i,r,e[2],4243563512,9),r=u(r,o,n,i,e[7],1735328473,14),n=h(n,i=u(i,r,o,n,e[12],2368359562,20),r,o,e[5],4294588738,4),o=h(o,n,i,r,e[8],2272392833,11),r=h(r,o,n,i,e[11],1839030562,16),i=h(i,r,o,n,e[14],4259657740,23),n=h(n,i,r,o,e[1],2763975236,4),o=h(o,n,i,r,e[4],1272893353,11),r=h(r,o,n,i,e[7],4139469664,16),i=h(i,r,o,n,e[10],3200236656,23),n=h(n,i,r,o,e[13],681279174,4),o=h(o,n,i,r,e[0],3936430074,11),r=h(r,o,n,i,e[3],3572445317,16),i=h(i,r,o,n,e[6],76029189,23),n=h(n,i,r,o,e[9],3654602809,4),o=h(o,n,i,r,e[12],3873151461,11),r=h(r,o,n,i,e[15],530742520,16),n=d(n,i=h(i,r,o,n,e[2],3299628645,23),r,o,e[0],4096336452,6),o=d(o,n,i,r,e[7],1126891415,10),r=d(r,o,n,i,e[14],2878612391,15),i=d(i,r,o,n,e[5],4237533241,21),n=d(n,i,r,o,e[12],1700485571,6),o=d(o,n,i,r,e[3],2399980690,10),r=d(r,o,n,i,e[10],4293915773,15),i=d(i,r,o,n,e[1],2240044497,21),n=d(n,i,r,o,e[8],1873313359,6),o=d(o,n,i,r,e[15],4264355552,10),r=d(r,o,n,i,e[6],2734768916,15),i=d(i,r,o,n,e[13],1309151649,21),n=d(n,i,r,o,e[4],4149444226,6),o=d(o,n,i,r,e[11],3174756917,10),r=d(r,o,n,i,e[2],718787259,15),i=d(i,r,o,n,e[9],3951481745,21),this._a=this._a+n|0,this._b=this._b+i|0,this._c=this._c+r|0,this._d=this._d+o|0},a.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var e=o.allocUnsafe(16);return e.writeInt32LE(this._a,0),e.writeInt32LE(this._b,4),e.writeInt32LE(this._c,8),e.writeInt32LE(this._d,12),e},e.exports=a},9746:e=>{function t(e,t){if(!e)throw new Error(t||"Assertion failed")}e.exports=t,t.equal=function(e,t,n){if(e!=t)throw new Error(n||"Assertion failed: "+e+" != "+t)}},4504:(e,t)=>{"use strict";var n=t;function i(e){return 1===e.length?"0"+e:e}function r(e){for(var t="",n=0;n>8,s=255&r;o?n.push(o,s):n.push(s)}return n},n.zero2=i,n.toHex=r,n.encode=function(e,t){return"hex"===t?r(e):e}},4244:e=>{"use strict";var t=function(e){return e!=e};e.exports=function(e,n){return 0===e&&0===n?1/e==1/n:e===n||!(!t(e)||!t(n))}},609:(e,t,n)=>{"use strict";var i=n(4289),r=n(5559),o=n(4244),s=n(5624),a=n(2281),c=r(s(),Object);i(c,{getPolyfill:s,implementation:o,shim:a}),e.exports=c},5624:(e,t,n)=>{"use strict";var i=n(4244);e.exports=function(){return"function"==typeof Object.is?Object.is:i}},2281:(e,t,n)=>{"use strict";var i=n(5624),r=n(4289);e.exports=function(){var e=i();return r(Object,{is:e},{is:function(){return Object.is!==e}}),e}},8987:(e,t,n)=>{"use strict";var i;if(!Object.keys){var r=Object.prototype.hasOwnProperty,o=Object.prototype.toString,s=n(1414),a=Object.prototype.propertyIsEnumerable,c=!a.call({toString:null},"toString"),l=a.call((function(){}),"prototype"),u=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],h=function(e){var t=e.constructor;return t&&t.prototype===e},d={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},f=function(){if("undefined"==typeof window)return!1;for(var e in window)try{if(!d["$"+e]&&r.call(window,e)&&null!==window[e]&&"object"==typeof window[e])try{h(window[e])}catch(e){return!0}}catch(e){return!0}return!1}();i=function(e){var t=null!==e&&"object"==typeof e,n="[object Function]"===o.call(e),i=s(e),a=t&&"[object String]"===o.call(e),d=[];if(!t&&!n&&!i)throw new TypeError("Object.keys called on a non-object");var p=l&&n;if(a&&e.length>0&&!r.call(e,0))for(var g=0;g0)for(var y=0;y{"use strict";var i=Array.prototype.slice,r=n(1414),o=Object.keys,s=o?function(e){return o(e)}:n(8987),a=Object.keys;s.shim=function(){if(Object.keys){var e=function(){var e=Object.keys(arguments);return e&&e.length===arguments.length}(1,2);e||(Object.keys=function(e){return r(e)?a(i.call(e)):a(e)})}else Object.keys=s;return Object.keys||s},e.exports=s},1414:e=>{"use strict";var t=Object.prototype.toString;e.exports=function(e){var n=t.call(e),i="[object Arguments]"===n;return i||(i="[object Array]"!==n&&null!==e&&"object"==typeof e&&"number"==typeof e.length&&e.length>=0&&"[object Function]"===t.call(e.callee)),i}},4155:e=>{var t,n,i=e.exports={};function r(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function s(e){if(t===setTimeout)return setTimeout(e,0);if((t===r||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(n){try{return t.call(null,e,0)}catch(n){return t.call(this,e,0)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:r}catch(e){t=r}try{n="function"==typeof clearTimeout?clearTimeout:o}catch(e){n=o}}();var a,c=[],l=!1,u=-1;function h(){l&&a&&(l=!1,a.length?c=a.concat(c):u=-1,c.length&&d())}function d(){if(!l){var e=s(h);l=!0;for(var t=c.length;t;){for(a=c,c=[];++u1)for(var n=1;n{function i(e){this.mode=o.MODE_8BIT_BYTE,this.data=e,this.parsedData=[];for(var t=0,n=this.data.length;t65536?(i[0]=240|(1835008&r)>>>18,i[1]=128|(258048&r)>>>12,i[2]=128|(4032&r)>>>6,i[3]=128|63&r):r>2048?(i[0]=224|(61440&r)>>>12,i[1]=128|(4032&r)>>>6,i[2]=128|63&r):r>128?(i[0]=192|(1984&r)>>>6,i[1]=128|63&r):i[0]=r,this.parsedData.push(i)}this.parsedData=Array.prototype.concat.apply([],this.parsedData),this.parsedData.length!=this.data.length&&(this.parsedData.unshift(191),this.parsedData.unshift(187),this.parsedData.unshift(239))}function r(e,t){this.typeNumber=e,this.errorCorrectLevel=t,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}i.prototype={getLength:function(e){return this.parsedData.length},write:function(e){for(var t=0,n=this.parsedData.length;t=7&&this.setupTypeNumber(e),null==this.dataCache&&(this.dataCache=r.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,t)},setupPositionProbePattern:function(e,t){for(var n=-1;n<=7;n++)if(!(e+n<=-1||this.moduleCount<=e+n))for(var i=-1;i<=7;i++)t+i<=-1||this.moduleCount<=t+i||(this.modules[e+n][t+i]=0<=n&&n<=6&&(0==i||6==i)||0<=i&&i<=6&&(0==n||6==n)||2<=n&&n<=4&&2<=i&&i<=4)},getBestMaskPattern:function(){for(var e=0,t=0,n=0;n<8;n++){this.makeImpl(!0,n);var i=m.getLostPoint(this);(0==n||e>i)&&(e=i,t=n)}return t},createMovieClip:function(e,t,n){var i=e.createEmptyMovieClip(t,n);this.make();for(var r=0;r>n&1);this.modules[Math.floor(n/3)][n%3+this.moduleCount-8-3]=i}for(n=0;n<18;n++){i=!e&&1==(t>>n&1);this.modules[n%3+this.moduleCount-8-3][Math.floor(n/3)]=i}},setupTypeInfo:function(e,t){for(var n=this.errorCorrectLevel<<3|t,i=m.getBCHTypeInfo(n),r=0;r<15;r++){var o=!e&&1==(i>>r&1);r<6?this.modules[r][8]=o:r<8?this.modules[r+1][8]=o:this.modules[this.moduleCount-15+r][8]=o}for(r=0;r<15;r++){o=!e&&1==(i>>r&1);r<8?this.modules[8][this.moduleCount-r-1]=o:r<9?this.modules[8][15-r-1+1]=o:this.modules[8][15-r-1]=o}this.modules[this.moduleCount-8][8]=!e},mapData:function(e,t){for(var n=-1,i=this.moduleCount-1,r=7,o=0,s=this.moduleCount-1;s>0;s-=2)for(6==s&&s--;;){for(var a=0;a<2;a++)if(null==this.modules[i][s-a]){var c=!1;o>>r&1)),m.getMask(t,i,s-a)&&(c=!c),this.modules[i][s-a]=c,-1==--r&&(o++,r=7)}if((i+=n)<0||this.moduleCount<=i){i-=n,n=-n;break}}}},r.PAD0=236,r.PAD1=17,r.createData=function(e,t,n){for(var i=S.getRSBlocks(e,t),o=new I,s=0;s8*c)throw new Error("code length overflow. ("+o.getLengthInBits()+">"+8*c+")");for(o.getLengthInBits()+4<=8*c&&o.put(0,4);o.getLengthInBits()%8!=0;)o.putBit(!1);for(;!(o.getLengthInBits()>=8*c||(o.put(r.PAD0,8),o.getLengthInBits()>=8*c));)o.put(r.PAD1,8);return r.createBytes(o,i)},r.createBytes=function(e,t){for(var n=0,i=0,r=0,o=new Array(t.length),s=new Array(t.length),a=0;a=0?d.get(f):0}}var p=0;for(u=0;u=0;)t^=m.G15<=0;)t^=m.G18<>>=1;return t},getPatternPosition:function(e){return m.PATTERN_POSITION_TABLE[e-1]},getMask:function(e,t,n){switch(e){case u:return(t+n)%2==0;case h:return t%2==0;case d:return n%3==0;case f:return(t+n)%3==0;case p:return(Math.floor(t/2)+Math.floor(n/3))%2==0;case g:return t*n%2+t*n%3==0;case y:return(t*n%2+t*n%3)%2==0;case b:return(t*n%3+(t+n)%2)%2==0;default:throw new Error("bad maskPattern:"+e)}},getErrorCorrectPolynomial:function(e){for(var t=new E([1],0),n=0;n5&&(n+=3+o-5)}for(i=0;i=256;)e-=255;return v.EXP_TABLE[e]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},w=0;w<8;w++)v.EXP_TABLE[w]=1<>>7-e%8&1)},put:function(e,t){for(var n=0;n>>t-n-1&1))},getLengthInBits:function(){return this.length},putBit:function(e){var t=Math.floor(this.length/8);this.buffer.length<=t&&this.buffer.push(0),e&&(this.buffer[t]|=128>>>this.length%8),this.length++}};var A=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]];function R(e){if(this.options={padding:4,width:256,height:256,typeNumber:4,color:"#000000",background:"#ffffff",ecl:"M"},"string"==typeof e&&(e={content:e}),e)for(var t in e)this.options[t]=e[t];if("string"!=typeof this.options.content)throw new Error("Expected 'content' as string!");if(0===this.options.content.length)throw new Error("Expected 'content' to be non-empty!");if(!(this.options.padding>=0))throw new Error("Expected 'padding' value to be non-negative!");if(!(this.options.width>0&&this.options.height>0))throw new Error("Expected 'width' or 'height' value to be higher than zero!");var n=this.options.content,i=function(e,t){for(var n=function(e){var t=encodeURI(e).toString().replace(/\%[0-9a-fA-F]{2}/g,"a");return t.length+(t.length!=e?3:0)}(e),i=1,r=0,o=0,s=A.length;o<=s;o++){var a=A[o];if(!a)throw new Error("Content too long: expected "+r+" but got "+n);switch(t){case"L":r=a[0];break;case"M":r=a[1];break;case"Q":r=a[2];break;case"H":r=a[3];break;default:throw new Error("Unknwon error correction level: "+t)}if(n<=r)break;i++}if(i>A.length)throw new Error("Content too long");return i}(n,this.options.ecl),o=function(e){switch(e){case"L":return s;case"M":return a;case"Q":return c;case"H":return l;default:throw new Error("Unknwon error correction level: "+e)}}(this.options.ecl);this.qrcode=new r(i,o),this.qrcode.addData(n),this.qrcode.make()}R.prototype.svg=function(e){var t=this.options||{},n=this.qrcode.modules;void 0===e&&(e={container:t.container||"svg"});for(var i=void 0===t.pretty||!!t.pretty,r=i?" ":"",o=i?"\r\n":"",s=t.width,a=t.height,c=n.length,l=s/(c+2*t.padding),u=a/(c+2*t.padding),h=void 0!==t.join&&!!t.join,d=void 0!==t.swap&&!!t.swap,f=void 0===t.xmlDeclaration||!!t.xmlDeclaration,p=void 0!==t.predefined&&!!t.predefined,g=p?r+''+o:"",y=r+''+o,b="",m="",v=0;v'+o:r+''+o}}h&&(b=r+'');var x="";switch(e.container){case"svg":f&&(x+=''+o),x+=''+o,x+=g+y+b,x+="";break;case"svg-viewbox":f&&(x+=''+o),x+=''+o,x+=g+y+b,x+="";break;case"g":x+=''+o,x+=g+y+b,x+="";break;default:x+=(g+y+b).replace(/^\s+/,"")}return x},R.prototype.save=function(e,t){var i=this.svg();"function"!=typeof t&&(t=function(e,t){});try{n(9951).writeFile(e,i,t)}catch(e){t(e)}},e.exports=R},7563:(e,t,n)=>{"use strict";const i=n(610),r=n(4020),o=n(500),s=n(2300),a=Symbol("encodeFragmentIdentifier");function c(e){if("string"!=typeof e||1!==e.length)throw new TypeError("arrayFormatSeparator must be single character string")}function l(e,t){return t.encode?t.strict?i(e):encodeURIComponent(e):e}function u(e,t){return t.decode?r(e):e}function h(e){return Array.isArray(e)?e.sort():"object"==typeof e?h(Object.keys(e)).sort(((e,t)=>Number(e)-Number(t))).map((t=>e[t])):e}function d(e){const t=e.indexOf("#");return-1!==t&&(e=e.slice(0,t)),e}function f(e){const t=(e=d(e)).indexOf("?");return-1===t?"":e.slice(t+1)}function p(e,t){return t.parseNumbers&&!Number.isNaN(Number(e))&&"string"==typeof e&&""!==e.trim()?e=Number(e):!t.parseBooleans||null===e||"true"!==e.toLowerCase()&&"false"!==e.toLowerCase()||(e="true"===e.toLowerCase()),e}function g(e,t){c((t=Object.assign({decode:!0,sort:!0,arrayFormat:"none",arrayFormatSeparator:",",parseNumbers:!1,parseBooleans:!1},t)).arrayFormatSeparator);const n=function(e){let t;switch(e.arrayFormat){case"index":return(e,n,i)=>{t=/\[(\d*)\]$/.exec(e),e=e.replace(/\[\d*\]$/,""),t?(void 0===i[e]&&(i[e]={}),i[e][t[1]]=n):i[e]=n};case"bracket":return(e,n,i)=>{t=/(\[\])$/.exec(e),e=e.replace(/\[\]$/,""),t?void 0!==i[e]?i[e]=[].concat(i[e],n):i[e]=[n]:i[e]=n};case"colon-list-separator":return(e,n,i)=>{t=/(:list)$/.exec(e),e=e.replace(/:list$/,""),t?void 0!==i[e]?i[e]=[].concat(i[e],n):i[e]=[n]:i[e]=n};case"comma":case"separator":return(t,n,i)=>{const r="string"==typeof n&&n.includes(e.arrayFormatSeparator),o="string"==typeof n&&!r&&u(n,e).includes(e.arrayFormatSeparator);n=o?u(n,e):n;const s=r||o?n.split(e.arrayFormatSeparator).map((t=>u(t,e))):null===n?n:u(n,e);i[t]=s};case"bracket-separator":return(t,n,i)=>{const r=/(\[\])$/.test(t);if(t=t.replace(/\[\]$/,""),!r)return void(i[t]=n?u(n,e):n);const o=null===n?[]:n.split(e.arrayFormatSeparator).map((t=>u(t,e)));void 0!==i[t]?i[t]=[].concat(i[t],o):i[t]=o};default:return(e,t,n)=>{void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t),i=Object.create(null);if("string"!=typeof e)return i;if(!(e=e.trim().replace(/^[?#&]/,"")))return i;for(const r of e.split("&")){if(""===r)continue;let[e,s]=o(t.decode?r.replace(/\+/g," "):r,"=");s=void 0===s?null:["comma","separator","bracket-separator"].includes(t.arrayFormat)?s:u(s,t),n(u(e,t),s,i)}for(const e of Object.keys(i)){const n=i[e];if("object"==typeof n&&null!==n)for(const e of Object.keys(n))n[e]=p(n[e],t);else i[e]=p(n,t)}return!1===t.sort?i:(!0===t.sort?Object.keys(i).sort():Object.keys(i).sort(t.sort)).reduce(((e,t)=>{const n=i[t];return Boolean(n)&&"object"==typeof n&&!Array.isArray(n)?e[t]=h(n):e[t]=n,e}),Object.create(null))}t.extract=f,t.parse=g,t.stringify=(e,t)=>{if(!e)return"";c((t=Object.assign({encode:!0,strict:!0,arrayFormat:"none",arrayFormatSeparator:","},t)).arrayFormatSeparator);const n=n=>t.skipNull&&null==e[n]||t.skipEmptyString&&""===e[n],i=function(e){switch(e.arrayFormat){case"index":return t=>(n,i)=>{const r=n.length;return void 0===i||e.skipNull&&null===i||e.skipEmptyString&&""===i?n:null===i?[...n,[l(t,e),"[",r,"]"].join("")]:[...n,[l(t,e),"[",l(r,e),"]=",l(i,e)].join("")]};case"bracket":return t=>(n,i)=>void 0===i||e.skipNull&&null===i||e.skipEmptyString&&""===i?n:null===i?[...n,[l(t,e),"[]"].join("")]:[...n,[l(t,e),"[]=",l(i,e)].join("")];case"colon-list-separator":return t=>(n,i)=>void 0===i||e.skipNull&&null===i||e.skipEmptyString&&""===i?n:null===i?[...n,[l(t,e),":list="].join("")]:[...n,[l(t,e),":list=",l(i,e)].join("")];case"comma":case"separator":case"bracket-separator":{const t="bracket-separator"===e.arrayFormat?"[]=":"=";return n=>(i,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&""===r?i:(r=null===r?"":r,0===i.length?[[l(n,e),t,l(r,e)].join("")]:[[i,l(r,e)].join(e.arrayFormatSeparator)])}default:return t=>(n,i)=>void 0===i||e.skipNull&&null===i||e.skipEmptyString&&""===i?n:null===i?[...n,l(t,e)]:[...n,[l(t,e),"=",l(i,e)].join("")]}}(t),r={};for(const t of Object.keys(e))n(t)||(r[t]=e[t]);const o=Object.keys(r);return!1!==t.sort&&o.sort(t.sort),o.map((n=>{const r=e[n];return void 0===r?"":null===r?l(n,t):Array.isArray(r)?0===r.length&&"bracket-separator"===t.arrayFormat?l(n,t)+"[]":r.reduce(i(n),[]).join("&"):l(n,t)+"="+l(r,t)})).filter((e=>e.length>0)).join("&")},t.parseUrl=(e,t)=>{t=Object.assign({decode:!0},t);const[n,i]=o(e,"#");return Object.assign({url:n.split("?")[0]||"",query:g(f(e),t)},t&&t.parseFragmentIdentifier&&i?{fragmentIdentifier:u(i,t)}:{})},t.stringifyUrl=(e,n)=>{n=Object.assign({encode:!0,strict:!0,[a]:!0},n);const i=d(e.url).split("?")[0]||"",r=t.extract(e.url),o=t.parse(r,{sort:!1}),s=Object.assign(o,e.query);let c=t.stringify(s,n);c&&(c=`?${c}`);let u=function(e){let t="";const n=e.indexOf("#");return-1!==n&&(t=e.slice(n)),t}(e.url);return e.fragmentIdentifier&&(u=`#${n[a]?l(e.fragmentIdentifier,n):e.fragmentIdentifier}`),`${i}${c}${u}`},t.pick=(e,n,i)=>{i=Object.assign({parseFragmentIdentifier:!0,[a]:!1},i);const{url:r,query:o,fragmentIdentifier:c}=t.parseUrl(e,i);return t.stringifyUrl({url:r,query:s(o,n),fragmentIdentifier:c},i)},t.exclude=(e,n,i)=>{const r=Array.isArray(n)?e=>!n.includes(e):(e,t)=>!n(e,t);return t.pick(e,r,i)}},2300:e=>{"use strict";e.exports=function(e,t){for(var n={},i=Object.keys(e),r=Array.isArray(t),o=0;o{"use strict";function t(e){try{return JSON.stringify(e)}catch(e){return'"[Circular]"'}}e.exports=function(e,n,i){var r=i&&i.stringify||t;if("object"==typeof e&&null!==e){var o=n.length+1;if(1===o)return e;var s=new Array(o);s[0]=r(e);for(var a=1;a-1?h:0,e.charCodeAt(f+1)){case 100:case 102:if(u>=c)break;if(null==n[u])break;h=c)break;if(null==n[u])break;h=c)break;if(void 0===n[u])break;h",h=f+2,f++;break}l+=r(n[u]),h=f+2,f++;break;case 115:if(u>=c)break;h{"use strict";var t={};function n(e,n,i){i||(i=Error);var r=function(e){var t,i;function r(t,i,r){return e.call(this,function(e,t,i){return"string"==typeof n?n:n(e,t,i)}(t,i,r))||this}return i=e,(t=r).prototype=Object.create(i.prototype),t.prototype.constructor=t,t.__proto__=i,r}(i);r.prototype.name=i.name,r.prototype.code=e,t[e]=r}function i(e,t){if(Array.isArray(e)){var n=e.length;return e=e.map((function(e){return String(e)})),n>2?"one of ".concat(t," ").concat(e.slice(0,n-1).join(", "),", or ")+e[n-1]:2===n?"one of ".concat(t," ").concat(e[0]," or ").concat(e[1]):"of ".concat(t," ").concat(e[0])}return"of ".concat(t," ").concat(String(e))}n("ERR_INVALID_OPT_VALUE",(function(e,t){return'The value "'+t+'" is invalid for option "'+e+'"'}),TypeError),n("ERR_INVALID_ARG_TYPE",(function(e,t,n){var r,o,s,a;if("string"==typeof t&&(o="not ",t.substr(!s||s<0?0:+s,o.length)===o)?(r="must not be",t=t.replace(/^not /,"")):r="must be",function(e,t,n){return(void 0===n||n>e.length)&&(n=e.length),e.substring(n-t.length,n)===t}(e," argument"))a="The ".concat(e," ").concat(r," ").concat(i(t,"type"));else{var c=function(e,t,n){return"number"!=typeof n&&(n=0),!(n+t.length>e.length)&&-1!==e.indexOf(t,n)}(e,".")?"property":"argument";a='The "'.concat(e,'" ').concat(c," ").concat(r," ").concat(i(t,"type"))}return a+=". Received type ".concat(typeof n)}),TypeError),n("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),n("ERR_METHOD_NOT_IMPLEMENTED",(function(e){return"The "+e+" method is not implemented"})),n("ERR_STREAM_PREMATURE_CLOSE","Premature close"),n("ERR_STREAM_DESTROYED",(function(e){return"Cannot call "+e+" after a stream was destroyed"})),n("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),n("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),n("ERR_STREAM_WRITE_AFTER_END","write after end"),n("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),n("ERR_UNKNOWN_ENCODING",(function(e){return"Unknown encoding: "+e}),TypeError),n("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),e.exports.q=t},6753:(e,t,n)=>{"use strict";var i=n(4155),r=Object.keys||function(e){var t=[];for(var n in e)t.push(n);return t};e.exports=u;var o=n(9481),s=n(4229);n(5717)(u,o);for(var a=r(s.prototype),c=0;c{"use strict";e.exports=r;var i=n(4605);function r(e){if(!(this instanceof r))return new r(e);i.call(this,e)}n(5717)(r,i),r.prototype._transform=function(e,t,n){n(null,e)}},9481:(e,t,n)=>{"use strict";var i,r=n(4155);e.exports=R,R.ReadableState=A;n(7187).EventEmitter;var o=function(e,t){return e.listeners(t).length},s=n(2503),a=n(8764).Buffer,c=(void 0!==n.g?n.g:"undefined"!=typeof window?window:"undefined"!=typeof self?self:{}).Uint8Array||function(){};var l,u=n(4616);l=u&&u.debuglog?u.debuglog("stream"):function(){};var h,d,f,p=n(7327),g=n(1195),y=n(2457).getHighWaterMark,b=n(4281).q,m=b.ERR_INVALID_ARG_TYPE,v=b.ERR_STREAM_PUSH_AFTER_EOF,w=b.ERR_METHOD_NOT_IMPLEMENTED,E=b.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;n(5717)(R,s);var S=g.errorOrDestroy,I=["error","close","destroy","pause","resume"];function A(e,t,r){i=i||n(6753),e=e||{},"boolean"!=typeof r&&(r=t instanceof i),this.objectMode=!!e.objectMode,r&&(this.objectMode=this.objectMode||!!e.readableObjectMode),this.highWaterMark=y(this,e,"readableHighWaterMark",r),this.buffer=new p,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=!1!==e.emitClose,this.autoDestroy=!!e.autoDestroy,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(h||(h=n(2553).s),this.decoder=new h(e.encoding),this.encoding=e.encoding)}function R(e){if(i=i||n(6753),!(this instanceof R))return new R(e);var t=this instanceof i;this._readableState=new A(e,this,t),this.readable=!0,e&&("function"==typeof e.read&&(this._read=e.read),"function"==typeof e.destroy&&(this._destroy=e.destroy)),s.call(this)}function x(e,t,n,i,r){l("readableAddChunk",t);var o,s=e._readableState;if(null===t)s.reading=!1,function(e,t){if(l("onEofChunk"),t.ended)return;if(t.decoder){var n=t.decoder.end();n&&n.length&&(t.buffer.push(n),t.length+=t.objectMode?1:n.length)}t.ended=!0,t.sync?O(e):(t.needReadable=!1,t.emittedReadable||(t.emittedReadable=!0,U(e)))}(e,s);else if(r||(o=function(e,t){var n;i=t,a.isBuffer(i)||i instanceof c||"string"==typeof t||void 0===t||e.objectMode||(n=new m("chunk",["string","Buffer","Uint8Array"],t));var i;return n}(s,t)),o)S(e,o);else if(s.objectMode||t&&t.length>0)if("string"==typeof t||s.objectMode||Object.getPrototypeOf(t)===a.prototype||(t=function(e){return a.from(e)}(t)),i)s.endEmitted?S(e,new E):M(e,s,t,!0);else if(s.ended)S(e,new v);else{if(s.destroyed)return!1;s.reading=!1,s.decoder&&!n?(t=s.decoder.write(t),s.objectMode||0!==t.length?M(e,s,t,!1):C(e,s)):M(e,s,t,!1)}else i||(s.reading=!1,C(e,s));return!s.ended&&(s.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=T?e=T:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function O(e){var t=e._readableState;l("emitReadable",t.needReadable,t.emittedReadable),t.needReadable=!1,t.emittedReadable||(l("emitReadable",t.flowing),t.emittedReadable=!0,r.nextTick(U,e))}function U(e){var t=e._readableState;l("emitReadable_",t.destroyed,t.length,t.ended),t.destroyed||!t.length&&!t.ended||(e.emit("readable"),t.emittedReadable=!1),t.needReadable=!t.flowing&&!t.ended&&t.length<=t.highWaterMark,q(e)}function C(e,t){t.readingMore||(t.readingMore=!0,r.nextTick(P,e,t))}function P(e,t){for(;!t.reading&&!t.ended&&(t.length0,t.resumeScheduled&&!t.paused?t.flowing=!0:e.listenerCount("data")>0&&e.resume()}function K(e){l("readable nexttick read 0"),e.read(0)}function L(e,t){l("resume",t.reading),t.reading||e.read(0),t.resumeScheduled=!1,e.emit("resume"),q(e),t.flowing&&!t.reading&&e.read(0)}function q(e){var t=e._readableState;for(l("flow",t.flowing);t.flowing&&null!==e.read(););}function z(e,t){return 0===t.length?null:(t.objectMode?n=t.buffer.shift():!e||e>=t.length?(n=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.first():t.buffer.concat(t.length),t.buffer.clear()):n=t.buffer.consume(e,t.decoder),n);var n}function V(e){var t=e._readableState;l("endReadable",t.endEmitted),t.endEmitted||(t.ended=!0,r.nextTick(F,t,e))}function F(e,t){if(l("endReadableNT",e.endEmitted,e.length),!e.endEmitted&&0===e.length&&(e.endEmitted=!0,t.readable=!1,t.emit("end"),e.autoDestroy)){var n=t._writableState;(!n||n.autoDestroy&&n.finished)&&t.destroy()}}function j(e,t){for(var n=0,i=e.length;n=t.highWaterMark:t.length>0)||t.ended))return l("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?V(this):O(this),null;if(0===(e=k(e,t))&&t.ended)return 0===t.length&&V(this),null;var i,r=t.needReadable;return l("need readable",r),(0===t.length||t.length-e0?z(e,t):null)?(t.needReadable=t.length<=t.highWaterMark,e=0):(t.length-=e,t.awaitDrain=0),0===t.length&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&V(this)),null!==i&&this.emit("data",i),i},R.prototype._read=function(e){S(this,new w("_read()"))},R.prototype.pipe=function(e,t){var n=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=e;break;case 1:i.pipes=[i.pipes,e];break;default:i.pipes.push(e)}i.pipesCount+=1,l("pipe count=%d opts=%j",i.pipesCount,t);var s=(!t||!1!==t.end)&&e!==r.stdout&&e!==r.stderr?c:y;function a(t,r){l("onunpipe"),t===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,l("cleanup"),e.removeListener("close",p),e.removeListener("finish",g),e.removeListener("drain",u),e.removeListener("error",f),e.removeListener("unpipe",a),n.removeListener("end",c),n.removeListener("end",y),n.removeListener("data",d),h=!0,!i.awaitDrain||e._writableState&&!e._writableState.needDrain||u())}function c(){l("onend"),e.end()}i.endEmitted?r.nextTick(s):n.once("end",s),e.on("unpipe",a);var u=function(e){return function(){var t=e._readableState;l("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&o(e,"data")&&(t.flowing=!0,q(e))}}(n);e.on("drain",u);var h=!1;function d(t){l("ondata");var r=e.write(t);l("dest.write",r),!1===r&&((1===i.pipesCount&&i.pipes===e||i.pipesCount>1&&-1!==j(i.pipes,e))&&!h&&(l("false write response, pause",i.awaitDrain),i.awaitDrain++),n.pause())}function f(t){l("onerror",t),y(),e.removeListener("error",f),0===o(e,"error")&&S(e,t)}function p(){e.removeListener("finish",g),y()}function g(){l("onfinish"),e.removeListener("close",p),y()}function y(){l("unpipe"),n.unpipe(e)}return n.on("data",d),function(e,t,n){if("function"==typeof e.prependListener)return e.prependListener(t,n);e._events&&e._events[t]?Array.isArray(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n)}(e,"error",f),e.once("close",p),e.once("finish",g),e.emit("pipe",n),i.flowing||(l("pipe resume"),n.resume()),e},R.prototype.unpipe=function(e){var t=this._readableState,n={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,n)),this;if(!e){var i=t.pipes,r=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var o=0;o0,!1!==i.flowing&&this.resume()):"readable"===e&&(i.endEmitted||i.readableListening||(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,l("on readable",i.length,i.reading),i.length?O(this):i.reading||r.nextTick(K,this))),n},R.prototype.addListener=R.prototype.on,R.prototype.removeListener=function(e,t){var n=s.prototype.removeListener.call(this,e,t);return"readable"===e&&r.nextTick(N,this),n},R.prototype.removeAllListeners=function(e){var t=s.prototype.removeAllListeners.apply(this,arguments);return"readable"!==e&&void 0!==e||r.nextTick(N,this),t},R.prototype.resume=function(){var e=this._readableState;return e.flowing||(l("resume"),e.flowing=!e.readableListening,function(e,t){t.resumeScheduled||(t.resumeScheduled=!0,r.nextTick(L,e,t))}(this,e)),e.paused=!1,this},R.prototype.pause=function(){return l("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(l("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this},R.prototype.wrap=function(e){var t=this,n=this._readableState,i=!1;for(var r in e.on("end",(function(){if(l("wrapped end"),n.decoder&&!n.ended){var e=n.decoder.end();e&&e.length&&t.push(e)}t.push(null)})),e.on("data",(function(r){(l("wrapped data"),n.decoder&&(r=n.decoder.write(r)),n.objectMode&&null==r)||(n.objectMode||r&&r.length)&&(t.push(r)||(i=!0,e.pause()))})),e)void 0===this[r]&&"function"==typeof e[r]&&(this[r]=function(t){return function(){return e[t].apply(e,arguments)}}(r));for(var o=0;o{"use strict";e.exports=u;var i=n(4281).q,r=i.ERR_METHOD_NOT_IMPLEMENTED,o=i.ERR_MULTIPLE_CALLBACK,s=i.ERR_TRANSFORM_ALREADY_TRANSFORMING,a=i.ERR_TRANSFORM_WITH_LENGTH_0,c=n(6753);function l(e,t){var n=this._transformState;n.transforming=!1;var i=n.writecb;if(null===i)return this.emit("error",new o);n.writechunk=null,n.writecb=null,null!=t&&this.push(t),i(e);var r=this._readableState;r.reading=!1,(r.needReadable||r.length{"use strict";var i,r=n(4155);function o(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,n){var i=e.entry;e.entry=null;for(;i;){var r=i.callback;t.pendingcb--,r(n),i=i.next}t.corkedRequestsFree.next=e}(t,e)}}e.exports=R,R.WritableState=A;var s={deprecate:n(4927)},a=n(2503),c=n(8764).Buffer,l=(void 0!==n.g?n.g:"undefined"!=typeof window?window:"undefined"!=typeof self?self:{}).Uint8Array||function(){};var u,h=n(1195),d=n(2457).getHighWaterMark,f=n(4281).q,p=f.ERR_INVALID_ARG_TYPE,g=f.ERR_METHOD_NOT_IMPLEMENTED,y=f.ERR_MULTIPLE_CALLBACK,b=f.ERR_STREAM_CANNOT_PIPE,m=f.ERR_STREAM_DESTROYED,v=f.ERR_STREAM_NULL_VALUES,w=f.ERR_STREAM_WRITE_AFTER_END,E=f.ERR_UNKNOWN_ENCODING,S=h.errorOrDestroy;function I(){}function A(e,t,s){i=i||n(6753),e=e||{},"boolean"!=typeof s&&(s=t instanceof i),this.objectMode=!!e.objectMode,s&&(this.objectMode=this.objectMode||!!e.writableObjectMode),this.highWaterMark=d(this,e,"writableHighWaterMark",s),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var a=!1===e.decodeStrings;this.decodeStrings=!a,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var n=e._writableState,i=n.sync,o=n.writecb;if("function"!=typeof o)throw new y;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(n),t)!function(e,t,n,i,o){--t.pendingcb,n?(r.nextTick(o,i),r.nextTick(U,e,t),e._writableState.errorEmitted=!0,S(e,i)):(o(i),e._writableState.errorEmitted=!0,S(e,i),U(e,t))}(e,n,i,t,o);else{var s=k(n)||e.destroyed;s||n.corked||n.bufferProcessing||!n.bufferedRequest||T(e,n),i?r.nextTick(M,e,n,s,o):M(e,n,s,o)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!1!==e.emitClose,this.autoDestroy=!!e.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new o(this)}function R(e){var t=this instanceof(i=i||n(6753));if(!t&&!u.call(R,this))return new R(e);this._writableState=new A(e,this,t),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),a.call(this)}function x(e,t,n,i,r,o,s){t.writelen=i,t.writecb=s,t.writing=!0,t.sync=!0,t.destroyed?t.onwrite(new m("write")):n?e._writev(r,t.onwrite):e._write(r,o,t.onwrite),t.sync=!1}function M(e,t,n,i){n||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,i(),U(e,t)}function T(e,t){t.bufferProcessing=!0;var n=t.bufferedRequest;if(e._writev&&n&&n.next){var i=t.bufferedRequestCount,r=new Array(i),s=t.corkedRequestsFree;s.entry=n;for(var a=0,c=!0;n;)r[a]=n,n.isBuf||(c=!1),n=n.next,a+=1;r.allBuffers=c,x(e,t,!0,t.length,r,"",s.finish),t.pendingcb++,t.lastBufferedRequest=null,s.next?(t.corkedRequestsFree=s.next,s.next=null):t.corkedRequestsFree=new o(t),t.bufferedRequestCount=0}else{for(;n;){var l=n.chunk,u=n.encoding,h=n.callback;if(x(e,t,!1,t.objectMode?1:l.length,l,u,h),n=n.next,t.bufferedRequestCount--,t.writing)break}null===n&&(t.lastBufferedRequest=null)}t.bufferedRequest=n,t.bufferProcessing=!1}function k(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function O(e,t){e._final((function(n){t.pendingcb--,n&&S(e,n),t.prefinished=!0,e.emit("prefinish"),U(e,t)}))}function U(e,t){var n=k(t);if(n&&(function(e,t){t.prefinished||t.finalCalled||("function"!=typeof e._final||t.destroyed?(t.prefinished=!0,e.emit("prefinish")):(t.pendingcb++,t.finalCalled=!0,r.nextTick(O,e,t)))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit("finish"),t.autoDestroy))){var i=e._readableState;(!i||i.autoDestroy&&i.endEmitted)&&e.destroy()}return n}n(5717)(R,a),A.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(A.prototype,"buffer",{get:s.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(u=Function.prototype[Symbol.hasInstance],Object.defineProperty(R,Symbol.hasInstance,{value:function(e){return!!u.call(this,e)||this===R&&(e&&e._writableState instanceof A)}})):u=function(e){return e instanceof this},R.prototype.pipe=function(){S(this,new b)},R.prototype.write=function(e,t,n){var i,o=this._writableState,s=!1,a=!o.objectMode&&(i=e,c.isBuffer(i)||i instanceof l);return a&&!c.isBuffer(e)&&(e=function(e){return c.from(e)}(e)),"function"==typeof t&&(n=t,t=null),a?t="buffer":t||(t=o.defaultEncoding),"function"!=typeof n&&(n=I),o.ending?function(e,t){var n=new w;S(e,n),r.nextTick(t,n)}(this,n):(a||function(e,t,n,i){var o;return null===n?o=new v:"string"==typeof n||t.objectMode||(o=new p("chunk",["string","Buffer"],n)),!o||(S(e,o),r.nextTick(i,o),!1)}(this,o,e,n))&&(o.pendingcb++,s=function(e,t,n,i,r,o){if(!n){var s=function(e,t,n){e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=c.from(t,n));return t}(t,i,r);i!==s&&(n=!0,r="buffer",i=s)}var a=t.objectMode?1:i.length;t.length+=a;var l=t.length-1))throw new E(e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(R.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(R.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),R.prototype._write=function(e,t,n){n(new g("_write()"))},R.prototype._writev=null,R.prototype.end=function(e,t,n){var i=this._writableState;return"function"==typeof e?(n=e,e=null,t=null):"function"==typeof t&&(n=t,t=null),null!=e&&this.write(e,t),i.corked&&(i.corked=1,this.uncork()),i.ending||function(e,t,n){t.ending=!0,U(e,t),n&&(t.finished?r.nextTick(n):e.once("finish",n));t.ended=!0,e.writable=!1}(this,i,n),this},Object.defineProperty(R.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(R.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),R.prototype.destroy=h.destroy,R.prototype._undestroy=h.undestroy,R.prototype._destroy=function(e,t){t(e)}},5850:(e,t,n)=>{"use strict";var i,r=n(4155);function o(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var s=n(8610),a=Symbol("lastResolve"),c=Symbol("lastReject"),l=Symbol("error"),u=Symbol("ended"),h=Symbol("lastPromise"),d=Symbol("handlePromise"),f=Symbol("stream");function p(e,t){return{value:e,done:t}}function g(e){var t=e[a];if(null!==t){var n=e[f].read();null!==n&&(e[h]=null,e[a]=null,e[c]=null,t(p(n,!1)))}}function y(e){r.nextTick(g,e)}var b=Object.getPrototypeOf((function(){})),m=Object.setPrototypeOf((o(i={get stream(){return this[f]},next:function(){var e=this,t=this[l];if(null!==t)return Promise.reject(t);if(this[u])return Promise.resolve(p(void 0,!0));if(this[f].destroyed)return new Promise((function(t,n){r.nextTick((function(){e[l]?n(e[l]):t(p(void 0,!0))}))}));var n,i=this[h];if(i)n=new Promise(function(e,t){return function(n,i){e.then((function(){t[u]?n(p(void 0,!0)):t[d](n,i)}),i)}}(i,this));else{var o=this[f].read();if(null!==o)return Promise.resolve(p(o,!1));n=new Promise(this[d])}return this[h]=n,n}},Symbol.asyncIterator,(function(){return this})),o(i,"return",(function(){var e=this;return new Promise((function(t,n){e[f].destroy(null,(function(e){e?n(e):t(p(void 0,!0))}))}))})),i),b);e.exports=function(e){var t,n=Object.create(m,(o(t={},f,{value:e,writable:!0}),o(t,a,{value:null,writable:!0}),o(t,c,{value:null,writable:!0}),o(t,l,{value:null,writable:!0}),o(t,u,{value:e._readableState.endEmitted,writable:!0}),o(t,d,{value:function(e,t){var i=n[f].read();i?(n[h]=null,n[a]=null,n[c]=null,e(p(i,!1))):(n[a]=e,n[c]=t)},writable:!0}),t));return n[h]=null,s(e,(function(e){if(e&&"ERR_STREAM_PREMATURE_CLOSE"!==e.code){var t=n[c];return null!==t&&(n[h]=null,n[a]=null,n[c]=null,t(e)),void(n[l]=e)}var i=n[a];null!==i&&(n[h]=null,n[a]=null,n[c]=null,i(p(void 0,!0))),n[u]=!0})),e.on("readable",y.bind(null,n)),n}},7327:(e,t,n)=>{"use strict";function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function r(e){for(var t=1;t0?this.tail.next=t:this.head=t,this.tail=t,++this.length}},{key:"unshift",value:function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length}},{key:"shift",value:function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(e){if(0===this.length)return"";for(var t=this.head,n=""+t.data;t=t.next;)n+=e+t.data;return n}},{key:"concat",value:function(e){if(0===this.length)return c.alloc(0);for(var t,n,i,r=c.allocUnsafe(e>>>0),o=this.head,s=0;o;)t=o.data,n=r,i=s,c.prototype.copy.call(t,n,i),s+=o.data.length,o=o.next;return r}},{key:"consume",value:function(e,t){var n;return er.length?r.length:e;if(o===r.length?i+=r:i+=r.slice(0,e),0==(e-=o)){o===r.length?(++n,t.next?this.head=t.next:this.head=this.tail=null):(this.head=t,t.data=r.slice(o));break}++n}return this.length-=n,i}},{key:"_getBuffer",value:function(e){var t=c.allocUnsafe(e),n=this.head,i=1;for(n.data.copy(t),e-=n.data.length;n=n.next;){var r=n.data,o=e>r.length?r.length:e;if(r.copy(t,t.length-e,0,o),0==(e-=o)){o===r.length?(++i,n.next?this.head=n.next:this.head=this.tail=null):(this.head=n,n.data=r.slice(o));break}++i}return this.length-=i,t}},{key:u,value:function(e,t){return l(this,r(r({},t),{},{depth:0,customInspect:!1}))}}])&&s(t.prototype,n),i&&s(t,i),Object.defineProperty(t,"prototype",{writable:!1}),e}()},1195:(e,t,n)=>{"use strict";var i=n(4155);function r(e,t){s(e,t),o(e)}function o(e){e._writableState&&!e._writableState.emitClose||e._readableState&&!e._readableState.emitClose||e.emit("close")}function s(e,t){e.emit("error",t)}e.exports={destroy:function(e,t){var n=this,a=this._readableState&&this._readableState.destroyed,c=this._writableState&&this._writableState.destroyed;return a||c?(t?t(e):e&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,i.nextTick(s,this,e)):i.nextTick(s,this,e)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?n._writableState?n._writableState.errorEmitted?i.nextTick(o,n):(n._writableState.errorEmitted=!0,i.nextTick(r,n,e)):i.nextTick(r,n,e):t?(i.nextTick(o,n),t(e)):i.nextTick(o,n)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)},errorOrDestroy:function(e,t){var n=e._readableState,i=e._writableState;n&&n.autoDestroy||i&&i.autoDestroy?e.destroy(t):e.emit("error",t)}}},8610:(e,t,n)=>{"use strict";var i=n(4281).q.ERR_STREAM_PREMATURE_CLOSE;function r(){}e.exports=function e(t,n,o){if("function"==typeof n)return e(t,null,n);n||(n={}),o=function(e){var t=!1;return function(){if(!t){t=!0;for(var n=arguments.length,i=new Array(n),r=0;r{e.exports=function(){throw new Error("Readable.from is not available in the browser")}},9946:(e,t,n)=>{"use strict";var i;var r=n(4281).q,o=r.ERR_MISSING_ARGS,s=r.ERR_STREAM_DESTROYED;function a(e){if(e)throw e}function c(e){e()}function l(e,t){return e.pipe(t)}e.exports=function(){for(var e=arguments.length,t=new Array(e),r=0;r0,(function(e){u||(u=e),e&&d.forEach(c),o||(d.forEach(c),h(u))}))}));return t.reduce(l)}},2457:(e,t,n)=>{"use strict";var i=n(4281).q.ERR_INVALID_OPT_VALUE;e.exports={getHighWaterMark:function(e,t,n,r){var o=function(e,t,n){return null!=e.highWaterMark?e.highWaterMark:t?e[n]:null}(t,r,n);if(null!=o){if(!isFinite(o)||Math.floor(o)!==o||o<0)throw new i(r?n:"highWaterMark",o);return Math.floor(o)}return e.objectMode?16:16384}}},2503:(e,t,n)=>{e.exports=n(7187).EventEmitter},8473:(e,t,n)=>{(t=e.exports=n(9481)).Stream=t,t.Readable=t,t.Writable=n(4229),t.Duplex=n(6753),t.Transform=n(4605),t.PassThrough=n(2725),t.finished=n(8610),t.pipeline=n(9946)},9785:(e,t,n)=>{"use strict";var i=n(8764).Buffer,r=n(5717),o=n(3349),s=new Array(16),a=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],c=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],l=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],u=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],h=[0,1518500249,1859775393,2400959708,2840853838],d=[1352829926,1548603684,1836072691,2053994217,0];function f(){o.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}function p(e,t){return e<>>32-t}function g(e,t,n,i,r,o,s,a){return p(e+(t^n^i)+o+s|0,a)+r|0}function y(e,t,n,i,r,o,s,a){return p(e+(t&n|~t&i)+o+s|0,a)+r|0}function b(e,t,n,i,r,o,s,a){return p(e+((t|~n)^i)+o+s|0,a)+r|0}function m(e,t,n,i,r,o,s,a){return p(e+(t&i|n&~i)+o+s|0,a)+r|0}function v(e,t,n,i,r,o,s,a){return p(e+(t^(n|~i))+o+s|0,a)+r|0}r(f,o),f.prototype._update=function(){for(var e=s,t=0;t<16;++t)e[t]=this._block.readInt32LE(4*t);for(var n=0|this._a,i=0|this._b,r=0|this._c,o=0|this._d,f=0|this._e,w=0|this._a,E=0|this._b,S=0|this._c,I=0|this._d,A=0|this._e,R=0;R<80;R+=1){var x,M;R<16?(x=g(n,i,r,o,f,e[a[R]],h[0],l[R]),M=v(w,E,S,I,A,e[c[R]],d[0],u[R])):R<32?(x=y(n,i,r,o,f,e[a[R]],h[1],l[R]),M=m(w,E,S,I,A,e[c[R]],d[1],u[R])):R<48?(x=b(n,i,r,o,f,e[a[R]],h[2],l[R]),M=b(w,E,S,I,A,e[c[R]],d[2],u[R])):R<64?(x=m(n,i,r,o,f,e[a[R]],h[3],l[R]),M=y(w,E,S,I,A,e[c[R]],d[3],u[R])):(x=v(n,i,r,o,f,e[a[R]],h[4],l[R]),M=g(w,E,S,I,A,e[c[R]],d[4],u[R])),n=f,f=o,o=p(r,10),r=i,i=x,w=A,A=I,I=p(S,10),S=E,E=M}var T=this._b+r+I|0;this._b=this._c+o+A|0,this._c=this._d+f+w|0,this._d=this._e+n+E|0,this._e=this._a+i+S|0,this._a=T},f.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var e=i.alloc?i.alloc(20):new i(20);return e.writeInt32LE(this._a,0),e.writeInt32LE(this._b,4),e.writeInt32LE(this._c,8),e.writeInt32LE(this._d,12),e.writeInt32LE(this._e,16),e},e.exports=f},9509:(e,t,n)=>{var i=n(8764),r=i.Buffer;function o(e,t){for(var n in e)t[n]=e[n]}function s(e,t,n){return r(e,t,n)}r.from&&r.alloc&&r.allocUnsafe&&r.allocUnsafeSlow?e.exports=i:(o(i,t),t.Buffer=s),s.prototype=Object.create(r.prototype),o(r,s),s.from=function(e,t,n){if("number"==typeof e)throw new TypeError("Argument must not be a number");return r(e,t,n)},s.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError("Argument must be a number");var i=r(e);return void 0!==t?"string"==typeof n?i.fill(t,n):i.fill(t):i.fill(0),i},s.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r(e)},s.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return i.SlowBuffer(e)}},3954:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.safeJsonParse=function(e){if("string"!=typeof e)throw new Error("Cannot safe json parse value of type "+typeof e);try{return JSON.parse(e)}catch(t){return e}},t.safeJsonStringify=function(e){return"string"==typeof e?e:JSON.stringify(e,((e,t)=>void 0===t?null:t))}},4189:(e,t,n)=>{var i=n(9509).Buffer;function r(e,t){this._block=i.alloc(e),this._finalSize=t,this._blockSize=e,this._len=0}r.prototype.update=function(e,t){"string"==typeof e&&(t=t||"utf8",e=i.from(e,t));for(var n=this._block,r=this._blockSize,o=e.length,s=this._len,a=0;a=this._finalSize&&(this._update(this._block),this._block.fill(0));var n=8*this._len;if(n<=4294967295)this._block.writeUInt32BE(n,this._blockSize-4);else{var i=(4294967295&n)>>>0,r=(n-i)/4294967296;this._block.writeUInt32BE(r,this._blockSize-8),this._block.writeUInt32BE(i,this._blockSize-4)}this._update(this._block);var o=this._hash();return e?o.toString(e):o},r.prototype._update=function(){throw new Error("_update must be implemented by subclass")},e.exports=r},9072:(e,t,n)=>{var i=e.exports=function(e){e=e.toLowerCase();var t=i[e];if(!t)throw new Error(e+" is not supported (we accept pull requests)");return new t};i.sha=n(4448),i.sha1=n(8336),i.sha224=n(8432),i.sha256=n(7499),i.sha384=n(1686),i.sha512=n(7816)},4448:(e,t,n)=>{var i=n(5717),r=n(4189),o=n(9509).Buffer,s=[1518500249,1859775393,-1894007588,-899497514],a=new Array(80);function c(){this.init(),this._w=a,r.call(this,64,56)}function l(e){return e<<30|e>>>2}function u(e,t,n,i){return 0===e?t&n|~t&i:2===e?t&n|t&i|n&i:t^n^i}i(c,r),c.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},c.prototype._update=function(e){for(var t,n=this._w,i=0|this._a,r=0|this._b,o=0|this._c,a=0|this._d,c=0|this._e,h=0;h<16;++h)n[h]=e.readInt32BE(4*h);for(;h<80;++h)n[h]=n[h-3]^n[h-8]^n[h-14]^n[h-16];for(var d=0;d<80;++d){var f=~~(d/20),p=0|((t=i)<<5|t>>>27)+u(f,r,o,a)+c+n[d]+s[f];c=a,a=o,o=l(r),r=i,i=p}this._a=i+this._a|0,this._b=r+this._b|0,this._c=o+this._c|0,this._d=a+this._d|0,this._e=c+this._e|0},c.prototype._hash=function(){var e=o.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=c},8336:(e,t,n)=>{var i=n(5717),r=n(4189),o=n(9509).Buffer,s=[1518500249,1859775393,-1894007588,-899497514],a=new Array(80);function c(){this.init(),this._w=a,r.call(this,64,56)}function l(e){return e<<5|e>>>27}function u(e){return e<<30|e>>>2}function h(e,t,n,i){return 0===e?t&n|~t&i:2===e?t&n|t&i|n&i:t^n^i}i(c,r),c.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},c.prototype._update=function(e){for(var t,n=this._w,i=0|this._a,r=0|this._b,o=0|this._c,a=0|this._d,c=0|this._e,d=0;d<16;++d)n[d]=e.readInt32BE(4*d);for(;d<80;++d)n[d]=(t=n[d-3]^n[d-8]^n[d-14]^n[d-16])<<1|t>>>31;for(var f=0;f<80;++f){var p=~~(f/20),g=l(i)+h(p,r,o,a)+c+n[f]+s[p]|0;c=a,a=o,o=u(r),r=i,i=g}this._a=i+this._a|0,this._b=r+this._b|0,this._c=o+this._c|0,this._d=a+this._d|0,this._e=c+this._e|0},c.prototype._hash=function(){var e=o.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=c},8432:(e,t,n)=>{var i=n(5717),r=n(7499),o=n(4189),s=n(9509).Buffer,a=new Array(64);function c(){this.init(),this._w=a,o.call(this,64,56)}i(c,r),c.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},c.prototype._hash=function(){var e=s.allocUnsafe(28);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e},e.exports=c},7499:(e,t,n)=>{var i=n(5717),r=n(4189),o=n(9509).Buffer,s=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],a=new Array(64);function c(){this.init(),this._w=a,r.call(this,64,56)}function l(e,t,n){return n^e&(t^n)}function u(e,t,n){return e&t|n&(e|t)}function h(e){return(e>>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10)}function d(e){return(e>>>6|e<<26)^(e>>>11|e<<21)^(e>>>25|e<<7)}function f(e){return(e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3}i(c,r),c.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},c.prototype._update=function(e){for(var t,n=this._w,i=0|this._a,r=0|this._b,o=0|this._c,a=0|this._d,c=0|this._e,p=0|this._f,g=0|this._g,y=0|this._h,b=0;b<16;++b)n[b]=e.readInt32BE(4*b);for(;b<64;++b)n[b]=0|(((t=n[b-2])>>>17|t<<15)^(t>>>19|t<<13)^t>>>10)+n[b-7]+f(n[b-15])+n[b-16];for(var m=0;m<64;++m){var v=y+d(c)+l(c,p,g)+s[m]+n[m]|0,w=h(i)+u(i,r,o)|0;y=g,g=p,p=c,c=a+v|0,a=o,o=r,r=i,i=v+w|0}this._a=i+this._a|0,this._b=r+this._b|0,this._c=o+this._c|0,this._d=a+this._d|0,this._e=c+this._e|0,this._f=p+this._f|0,this._g=g+this._g|0,this._h=y+this._h|0},c.prototype._hash=function(){var e=o.allocUnsafe(32);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e.writeInt32BE(this._h,28),e},e.exports=c},1686:(e,t,n)=>{var i=n(5717),r=n(7816),o=n(4189),s=n(9509).Buffer,a=new Array(160);function c(){this.init(),this._w=a,o.call(this,128,112)}i(c,r),c.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},c.prototype._hash=function(){var e=s.allocUnsafe(48);function t(t,n,i){e.writeInt32BE(t,i),e.writeInt32BE(n,i+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),e},e.exports=c},7816:(e,t,n)=>{var i=n(5717),r=n(4189),o=n(9509).Buffer,s=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],a=new Array(160);function c(){this.init(),this._w=a,r.call(this,128,112)}function l(e,t,n){return n^e&(t^n)}function u(e,t,n){return e&t|n&(e|t)}function h(e,t){return(e>>>28|t<<4)^(t>>>2|e<<30)^(t>>>7|e<<25)}function d(e,t){return(e>>>14|t<<18)^(e>>>18|t<<14)^(t>>>9|e<<23)}function f(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^e>>>7}function p(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^(e>>>7|t<<25)}function g(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^e>>>6}function y(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^(e>>>6|t<<26)}function b(e,t){return e>>>0>>0?1:0}i(c,r),c.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},c.prototype._update=function(e){for(var t=this._w,n=0|this._ah,i=0|this._bh,r=0|this._ch,o=0|this._dh,a=0|this._eh,c=0|this._fh,m=0|this._gh,v=0|this._hh,w=0|this._al,E=0|this._bl,S=0|this._cl,I=0|this._dl,A=0|this._el,R=0|this._fl,x=0|this._gl,M=0|this._hl,T=0;T<32;T+=2)t[T]=e.readInt32BE(4*T),t[T+1]=e.readInt32BE(4*T+4);for(;T<160;T+=2){var k=t[T-30],O=t[T-30+1],U=f(k,O),C=p(O,k),P=g(k=t[T-4],O=t[T-4+1]),N=y(O,k),K=t[T-14],L=t[T-14+1],q=t[T-32],z=t[T-32+1],V=C+L|0,F=U+K+b(V,C)|0;F=(F=F+P+b(V=V+N|0,N)|0)+q+b(V=V+z|0,z)|0,t[T]=F,t[T+1]=V}for(var j=0;j<160;j+=2){F=t[j],V=t[j+1];var D=u(n,i,r),B=u(w,E,S),W=h(n,w),J=h(w,n),Z=d(a,A),Q=d(A,a),H=s[j],G=s[j+1],Y=l(a,c,m),X=l(A,R,x),_=M+Q|0,$=v+Z+b(_,M)|0;$=($=($=$+Y+b(_=_+X|0,X)|0)+H+b(_=_+G|0,G)|0)+F+b(_=_+V|0,V)|0;var ee=J+B|0,te=W+D+b(ee,J)|0;v=m,M=x,m=c,x=R,c=a,R=A,a=o+$+b(A=I+_|0,I)|0,o=r,I=S,r=i,S=E,i=n,E=w,n=$+te+b(w=_+ee|0,_)|0}this._al=this._al+w|0,this._bl=this._bl+E|0,this._cl=this._cl+S|0,this._dl=this._dl+I|0,this._el=this._el+A|0,this._fl=this._fl+R|0,this._gl=this._gl+x|0,this._hl=this._hl+M|0,this._ah=this._ah+n+b(this._al,w)|0,this._bh=this._bh+i+b(this._bl,E)|0,this._ch=this._ch+r+b(this._cl,S)|0,this._dh=this._dh+o+b(this._dl,I)|0,this._eh=this._eh+a+b(this._el,A)|0,this._fh=this._fh+c+b(this._fl,R)|0,this._gh=this._gh+m+b(this._gl,x)|0,this._hh=this._hh+v+b(this._hl,M)|0},c.prototype._hash=function(){var e=o.allocUnsafe(64);function t(t,n,i){e.writeInt32BE(t,i),e.writeInt32BE(n,i+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),t(this._gh,this._gl,48),t(this._hh,this._hl,56),e},e.exports=c},500:e=>{"use strict";e.exports=(e,t)=>{if("string"!=typeof e||"string"!=typeof t)throw new TypeError("Expected the arguments to be of type `string`");if(""===t)return[e];const n=e.indexOf(t);return-1===n?[e]:[e.slice(0,n),e.slice(n+t.length)]}},2830:(e,t,n)=>{e.exports=r;var i=n(7187).EventEmitter;function r(){i.call(this)}n(5717)(r,i),r.Readable=n(9481),r.Writable=n(4229),r.Duplex=n(6753),r.Transform=n(4605),r.PassThrough=n(2725),r.finished=n(8610),r.pipeline=n(9946),r.Stream=r,r.prototype.pipe=function(e,t){var n=this;function r(t){e.writable&&!1===e.write(t)&&n.pause&&n.pause()}function o(){n.readable&&n.resume&&n.resume()}n.on("data",r),e.on("drain",o),e._isStdio||t&&!1===t.end||(n.on("end",a),n.on("close",c));var s=!1;function a(){s||(s=!0,e.end())}function c(){s||(s=!0,"function"==typeof e.destroy&&e.destroy())}function l(e){if(u(),0===i.listenerCount(this,"error"))throw e}function u(){n.removeListener("data",r),e.removeListener("drain",o),n.removeListener("end",a),n.removeListener("close",c),n.removeListener("error",l),e.removeListener("error",l),n.removeListener("end",u),n.removeListener("close",u),e.removeListener("close",u)}return n.on("error",l),e.on("error",l),n.on("end",u),n.on("close",u),e.on("close",u),e.emit("pipe",n),e}},610:e=>{"use strict";e.exports=e=>encodeURIComponent(e).replace(/[!'()*]/g,(e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`))},2553:(e,t,n)=>{"use strict";var i=n(9509).Buffer,r=i.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function o(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(i.isEncoding===r||!r(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=c,this.end=l,t=4;break;case"utf8":this.fillLast=a,t=4;break;case"base64":this.text=u,this.end=h,t=3;break;default:return this.write=d,void(this.end=f)}this.lastNeed=0,this.lastTotal=0,this.lastChar=i.allocUnsafe(t)}function s(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function a(e){var t=this.lastTotal-this.lastNeed,n=function(e,t,n){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==n?n:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function c(e,t){if((e.length-t)%2==0){var n=e.toString("utf16le",t);if(n){var i=n.charCodeAt(n.length-1);if(i>=55296&&i<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function l(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,n)}return t}function u(e,t){var n=(e.length-t)%3;return 0===n?e.toString("base64",t):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-n))}function h(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function d(e){return e.toString(this.encoding)}function f(e){return e&&e.length?this.write(e):""}t.s=o,o.prototype.write=function(e){if(0===e.length)return"";var t,n;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";n=this.lastNeed,this.lastNeed=0}else n=0;return n=0)return r>0&&(e.lastNeed=r-1),r;if(--i=0)return r>0&&(e.lastNeed=r-2),r;if(--i=0)return r>0&&(2===r?r=0:e.lastNeed=r-3),r;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=n;var i=e.length-(n-this.lastNeed);return e.copy(this.lastChar,0,i),e.toString("utf8",t,i)},o.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},655:(e,t,n)=>{"use strict";n.r(t),n.d(t,{__assign:()=>o,__asyncDelegator:()=>w,__asyncGenerator:()=>v,__asyncValues:()=>E,__await:()=>m,__awaiter:()=>u,__classPrivateFieldGet:()=>R,__classPrivateFieldSet:()=>x,__createBinding:()=>d,__decorate:()=>a,__exportStar:()=>f,__extends:()=>r,__generator:()=>h,__importDefault:()=>A,__importStar:()=>I,__makeTemplateObject:()=>S,__metadata:()=>l,__param:()=>c,__read:()=>g,__rest:()=>s,__spread:()=>y,__spreadArrays:()=>b,__values:()=>p});var i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},i(e,t)};function r(e,t){function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var o=function(){return o=Object.assign||function(e){for(var t,n=1,i=arguments.length;n=0;a--)(r=e[a])&&(s=(o<3?r(s):o>3?r(t,n,s):r(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}function c(e,t){return function(n,i){t(n,i,e)}}function l(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function u(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))}function h(e,t){var n,i,r,o,s={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(o){return function(a){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,i&&(r=2&o[0]?i.return:o[0]?i.throw||((r=i.return)&&r.call(i),0):i.next)&&!(r=r.call(i,o[1])).done)return r;switch(i=0,r&&(o=[2&o[0],r.value]),o[0]){case 0:case 1:r=o;break;case 4:return s.label++,{value:o[1],done:!1};case 5:s.label++,i=o[1],o=[0];continue;case 7:o=s.ops.pop(),s.trys.pop();continue;default:if(!(r=s.trys,(r=r.length>0&&r[r.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!r||o[1]>r[0]&&o[1]=e.length&&(e=void 0),{value:e&&e[i++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function g(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var i,r,o=n.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(i=o.next()).done;)s.push(i.value)}catch(e){r={error:e}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return s}function y(){for(var e=[],t=0;t1||a(e,t)}))})}function a(e,t){try{(n=r[e](t)).value instanceof m?Promise.resolve(n.value.v).then(c,l):u(o[0][2],n)}catch(e){u(o[0][3],e)}var n}function c(e){a("next",e)}function l(e){a("throw",e)}function u(e,t){e(t),o.shift(),o.length&&a(o[0][0],o[0][1])}}function w(e){var t,n;return t={},i("next"),i("throw",(function(e){throw e})),i("return"),t[Symbol.iterator]=function(){return this},t;function i(i,r){t[i]=e[i]?function(t){return(n=!n)?{value:m(e[i](t)),done:"return"===i}:r?r(t):t}:r}}function E(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=p(e),t={},i("next"),i("throw"),i("return"),t[Symbol.asyncIterator]=function(){return this},t);function i(n){t[n]=e[n]&&function(t){return new Promise((function(i,r){(function(e,t,n,i){Promise.resolve(i).then((function(t){e({value:t,done:n})}),t)})(i,r,(t=e[n](t)).done,t.value)}))}}}function S(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}function I(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}function A(e){return e&&e.__esModule?e:{default:e}}function R(e,t){if(!t.has(e))throw new TypeError("attempted to get private field on non-instance");return t.get(e)}function x(e,t,n){if(!t.has(e))throw new TypeError("attempted to set private field on non-instance");return t.set(e,n),n}},5054:(e,t,n)=>{var i=n(8764).Buffer;e.exports=function(e){return ArrayBuffer.isView(e)?i.from(e.buffer,e.byteOffset,e.byteLength):i.from(e)}},4927:(e,t,n)=>{var i=n(5108);function r(e){try{if(!n.g.localStorage)return!1}catch(e){return!1}var t=n.g.localStorage[e];return null!=t&&"true"===String(t).toLowerCase()}e.exports=function(e,t){if(r("noDeprecation"))return e;var n=!1;return function(){if(!n){if(r("throwDeprecation"))throw new Error(t);r("traceDeprecation")?i.trace(t):i.warn(t),n=!0}return e.apply(this,arguments)}}},384:e=>{e.exports=function(e){return e&&"object"==typeof e&&"function"==typeof e.copy&&"function"==typeof e.fill&&"function"==typeof e.readUInt8}},5955:(e,t,n)=>{"use strict";var i=n(2584),r=n(8662),o=n(6430),s=n(5692);function a(e){return e.call.bind(e)}var c="undefined"!=typeof BigInt,l="undefined"!=typeof Symbol,u=a(Object.prototype.toString),h=a(Number.prototype.valueOf),d=a(String.prototype.valueOf),f=a(Boolean.prototype.valueOf);if(c)var p=a(BigInt.prototype.valueOf);if(l)var g=a(Symbol.prototype.valueOf);function y(e,t){if("object"!=typeof e)return!1;try{return t(e),!0}catch(e){return!1}}function b(e){return"[object Map]"===u(e)}function m(e){return"[object Set]"===u(e)}function v(e){return"[object WeakMap]"===u(e)}function w(e){return"[object WeakSet]"===u(e)}function E(e){return"[object ArrayBuffer]"===u(e)}function S(e){return"undefined"!=typeof ArrayBuffer&&(E.working?E(e):e instanceof ArrayBuffer)}function I(e){return"[object DataView]"===u(e)}function A(e){return"undefined"!=typeof DataView&&(I.working?I(e):e instanceof DataView)}t.isArgumentsObject=i,t.isGeneratorFunction=r,t.isTypedArray=s,t.isPromise=function(e){return"undefined"!=typeof Promise&&e instanceof Promise||null!==e&&"object"==typeof e&&"function"==typeof e.then&&"function"==typeof e.catch},t.isArrayBufferView=function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):s(e)||A(e)},t.isUint8Array=function(e){return"Uint8Array"===o(e)},t.isUint8ClampedArray=function(e){return"Uint8ClampedArray"===o(e)},t.isUint16Array=function(e){return"Uint16Array"===o(e)},t.isUint32Array=function(e){return"Uint32Array"===o(e)},t.isInt8Array=function(e){return"Int8Array"===o(e)},t.isInt16Array=function(e){return"Int16Array"===o(e)},t.isInt32Array=function(e){return"Int32Array"===o(e)},t.isFloat32Array=function(e){return"Float32Array"===o(e)},t.isFloat64Array=function(e){return"Float64Array"===o(e)},t.isBigInt64Array=function(e){return"BigInt64Array"===o(e)},t.isBigUint64Array=function(e){return"BigUint64Array"===o(e)},b.working="undefined"!=typeof Map&&b(new Map),t.isMap=function(e){return"undefined"!=typeof Map&&(b.working?b(e):e instanceof Map)},m.working="undefined"!=typeof Set&&m(new Set),t.isSet=function(e){return"undefined"!=typeof Set&&(m.working?m(e):e instanceof Set)},v.working="undefined"!=typeof WeakMap&&v(new WeakMap),t.isWeakMap=function(e){return"undefined"!=typeof WeakMap&&(v.working?v(e):e instanceof WeakMap)},w.working="undefined"!=typeof WeakSet&&w(new WeakSet),t.isWeakSet=function(e){return w(e)},E.working="undefined"!=typeof ArrayBuffer&&E(new ArrayBuffer),t.isArrayBuffer=S,I.working="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView&&I(new DataView(new ArrayBuffer(1),0,1)),t.isDataView=A;var R="undefined"!=typeof SharedArrayBuffer?SharedArrayBuffer:void 0;function x(e){return"[object SharedArrayBuffer]"===u(e)}function M(e){return void 0!==R&&(void 0===x.working&&(x.working=x(new R)),x.working?x(e):e instanceof R)}function T(e){return y(e,h)}function k(e){return y(e,d)}function O(e){return y(e,f)}function U(e){return c&&y(e,p)}function C(e){return l&&y(e,g)}t.isSharedArrayBuffer=M,t.isAsyncFunction=function(e){return"[object AsyncFunction]"===u(e)},t.isMapIterator=function(e){return"[object Map Iterator]"===u(e)},t.isSetIterator=function(e){return"[object Set Iterator]"===u(e)},t.isGeneratorObject=function(e){return"[object Generator]"===u(e)},t.isWebAssemblyCompiledModule=function(e){return"[object WebAssembly.Module]"===u(e)},t.isNumberObject=T,t.isStringObject=k,t.isBooleanObject=O,t.isBigIntObject=U,t.isSymbolObject=C,t.isBoxedPrimitive=function(e){return T(e)||k(e)||O(e)||U(e)||C(e)},t.isAnyArrayBuffer=function(e){return"undefined"!=typeof Uint8Array&&(S(e)||M(e))},["isProxy","isExternal","isModuleNamespaceObject"].forEach((function(e){Object.defineProperty(t,e,{enumerable:!1,value:function(){throw new Error(e+" is not supported in userland")}})}))},9539:(e,t,n)=>{var i=n(4155),r=n(5108),o=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),n={},i=0;i=r)return e;switch(e){case"%s":return String(i[n++]);case"%d":return Number(i[n++]);case"%j":try{return JSON.stringify(i[n++])}catch(e){return"[Circular]"}default:return e}})),a=i[n];n=3&&(i.depth=arguments[2]),arguments.length>=4&&(i.colors=arguments[3]),b(n)?i.showHidden=n:n&&t._extend(i,n),E(i.showHidden)&&(i.showHidden=!1),E(i.depth)&&(i.depth=2),E(i.colors)&&(i.colors=!1),E(i.customInspect)&&(i.customInspect=!0),i.colors&&(i.stylize=h),f(i,e,i.depth)}function h(e,t){var n=u.styles[t];return n?"["+u.colors[n][0]+"m"+e+"["+u.colors[n][1]+"m":e}function d(e,t){return e}function f(e,n,i){if(e.customInspect&&n&&x(n.inspect)&&n.inspect!==t.inspect&&(!n.constructor||n.constructor.prototype!==n)){var r=n.inspect(i,e);return w(r)||(r=f(e,r,i)),r}var o=function(e,t){if(E(t))return e.stylize("undefined","undefined");if(w(t)){var n="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(n,"string")}if(v(t))return e.stylize(""+t,"number");if(b(t))return e.stylize(""+t,"boolean");if(m(t))return e.stylize("null","null")}(e,n);if(o)return o;var s=Object.keys(n),a=function(e){var t={};return e.forEach((function(e,n){t[e]=!0})),t}(s);if(e.showHidden&&(s=Object.getOwnPropertyNames(n)),R(n)&&(s.indexOf("message")>=0||s.indexOf("description")>=0))return p(n);if(0===s.length){if(x(n)){var c=n.name?": "+n.name:"";return e.stylize("[Function"+c+"]","special")}if(S(n))return e.stylize(RegExp.prototype.toString.call(n),"regexp");if(A(n))return e.stylize(Date.prototype.toString.call(n),"date");if(R(n))return p(n)}var l,u="",h=!1,d=["{","}"];(y(n)&&(h=!0,d=["[","]"]),x(n))&&(u=" [Function"+(n.name?": "+n.name:"")+"]");return S(n)&&(u=" "+RegExp.prototype.toString.call(n)),A(n)&&(u=" "+Date.prototype.toUTCString.call(n)),R(n)&&(u=" "+p(n)),0!==s.length||h&&0!=n.length?i<0?S(n)?e.stylize(RegExp.prototype.toString.call(n),"regexp"):e.stylize("[Object]","special"):(e.seen.push(n),l=h?function(e,t,n,i,r){for(var o=[],s=0,a=t.length;s=0&&0,e+t.replace(/\u001b\[\d\d?m/g,"").length+1}),0);if(i>60)return n[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+n[1];return n[0]+t+" "+e.join(", ")+" "+n[1]}(l,u,d)):d[0]+u+d[1]}function p(e){return"["+Error.prototype.toString.call(e)+"]"}function g(e,t,n,i,r,o){var s,a,c;if((c=Object.getOwnPropertyDescriptor(t,r)||{value:t[r]}).get?a=c.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):c.set&&(a=e.stylize("[Setter]","special")),O(i,r)||(s="["+r+"]"),a||(e.seen.indexOf(c.value)<0?(a=m(n)?f(e,c.value,null):f(e,c.value,n-1)).indexOf("\n")>-1&&(a=o?a.split("\n").map((function(e){return" "+e})).join("\n").slice(2):"\n"+a.split("\n").map((function(e){return" "+e})).join("\n")):a=e.stylize("[Circular]","special")),E(s)){if(o&&r.match(/^\d+$/))return a;(s=JSON.stringify(""+r)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(s=s.slice(1,-1),s=e.stylize(s,"name")):(s=s.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),s=e.stylize(s,"string"))}return s+": "+a}function y(e){return Array.isArray(e)}function b(e){return"boolean"==typeof e}function m(e){return null===e}function v(e){return"number"==typeof e}function w(e){return"string"==typeof e}function E(e){return void 0===e}function S(e){return I(e)&&"[object RegExp]"===M(e)}function I(e){return"object"==typeof e&&null!==e}function A(e){return I(e)&&"[object Date]"===M(e)}function R(e){return I(e)&&("[object Error]"===M(e)||e instanceof Error)}function x(e){return"function"==typeof e}function M(e){return Object.prototype.toString.call(e)}function T(e){return e<10?"0"+e.toString(10):e.toString(10)}t.debuglog=function(e){if(e=e.toUpperCase(),!a[e])if(c.test(e)){var n=i.pid;a[e]=function(){var i=t.format.apply(t,arguments);r.error("%s %d: %s",e,n,i)}}else a[e]=function(){};return a[e]},t.inspect=u,u.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},u.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.types=n(5955),t.isArray=y,t.isBoolean=b,t.isNull=m,t.isNullOrUndefined=function(e){return null==e},t.isNumber=v,t.isString=w,t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=E,t.isRegExp=S,t.types.isRegExp=S,t.isObject=I,t.isDate=A,t.types.isDate=A,t.isError=R,t.types.isNativeError=R,t.isFunction=x,t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=n(384);var k=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function O(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){var e,n;r.log("%s - %s",(e=new Date,n=[T(e.getHours()),T(e.getMinutes()),T(e.getSeconds())].join(":"),[e.getDate(),k[e.getMonth()],n].join(" ")),t.format.apply(t,arguments))},t.inherits=n(5717),t._extend=function(e,t){if(!t||!I(t))return e;for(var n=Object.keys(t),i=n.length;i--;)e[n[i]]=t[n[i]];return e};var U="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function C(e,t){if(!e){var n=new Error("Promise was rejected with a falsy value");n.reason=e,e=n}return t(e)}t.promisify=function(e){if("function"!=typeof e)throw new TypeError('The "original" argument must be of type Function');if(U&&e[U]){var t;if("function"!=typeof(t=e[U]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,U,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var t,n,i=new Promise((function(e,i){t=e,n=i})),r=[],o=0;o{"use strict";var i=n(4029),r=n(3083),o=n(1924),s=n(7296),a=o("Object.prototype.toString"),c=n(6410)(),l="undefined"==typeof globalThis?n.g:globalThis,u=r(),h=o("String.prototype.slice"),d={},f=Object.getPrototypeOf;c&&s&&f&&i(u,(function(e){if("function"==typeof l[e]){var t=new l[e];if(Symbol.toStringTag in t){var n=f(t),i=s(n,Symbol.toStringTag);if(!i){var r=f(n);i=s(r,Symbol.toStringTag)}d[e]=i.get}}}));var p=n(5692);e.exports=function(e){return!!p(e)&&(c&&Symbol.toStringTag in e?function(e){var t=!1;return i(d,(function(n,i){if(!t)try{var r=n.call(e);r===i&&(t=r)}catch(e){}})),t}(e):h(a(e),8,-1))}},7026:e=>{"use strict";e.exports=function(){throw new Error("ws does not work in the browser. Browser clients must use the native WebSocket object")}},5883:()=>{},6601:()=>{},9214:()=>{},9951:()=>{},2361:()=>{},4616:()=>{},3083:(e,t,n)=>{"use strict";var i=["BigInt64Array","BigUint64Array","Float32Array","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Uint8Array","Uint8ClampedArray"],r="undefined"==typeof globalThis?n.g:globalThis;e.exports=function(){for(var e=[],t=0;t{"use strict";const i=n(5346);e.exports=s;const r=function(){function e(e){return void 0!==e&&e}try{return"undefined"!=typeof globalThis||Object.defineProperty(Object.prototype,"globalThis",{get:function(){return delete Object.prototype.globalThis,this.globalThis=this},configurable:!0}),globalThis}catch(t){return e(self)||e(window)||e(this)||{}}}().console||{},o={mapHttpRequest:d,mapHttpResponse:d,wrapRequestSerializer:f,wrapResponseSerializer:f,wrapErrorSerializer:f,req:d,res:d,err:function(e){const t={type:e.constructor.name,msg:e.message,stack:e.stack};for(const n in e)void 0===t[n]&&(t[n]=e[n]);return t}};function s(e){(e=e||{}).browser=e.browser||{};const t=e.browser.transmit;if(t&&"function"!=typeof t.send)throw Error("pino: transmit option must have a send function");const n=e.browser.write||r;e.browser.write&&(e.browser.asObject=!0);const i=e.serializers||{},o=function(e,t){if(Array.isArray(e))return e.filter((function(e){return"!stdSerializers.err"!==e}));return!0===e&&Object.keys(t)}(e.browser.serialize,i);let d=e.browser.serialize;Array.isArray(e.browser.serialize)&&e.browser.serialize.indexOf("!stdSerializers.err")>-1&&(d=!1);"function"==typeof n&&(n.error=n.fatal=n.warn=n.info=n.debug=n.trace=n),!1===e.enabled&&(e.level="silent");const f=e.level||"info",g=Object.create(n);g.log||(g.log=p),Object.defineProperty(g,"levelVal",{get:function(){return"silent"===this.level?1/0:this.levels.values[this.level]}}),Object.defineProperty(g,"level",{get:function(){return this._level},set:function(e){if("silent"!==e&&!this.levels.values[e])throw Error("unknown level "+e);this._level=e,a(y,g,"error","log"),a(y,g,"fatal","error"),a(y,g,"warn","error"),a(y,g,"info","log"),a(y,g,"debug","log"),a(y,g,"trace","log")}});const y={transmit:t,serialize:o,asObject:e.browser.asObject,levels:["error","fatal","warn","info","debug","trace"],timestamp:h(e)};return g.levels=s.levels,g.level=f,g.setMaxListeners=g.getMaxListeners=g.emit=g.addListener=g.on=g.prependListener=g.once=g.prependOnceListener=g.removeListener=g.removeAllListeners=g.listeners=g.listenerCount=g.eventNames=g.write=g.flush=p,g.serializers=i,g._serialize=o,g._stdErrSerialize=d,g.child=function(n,r){if(!n)throw new Error("missing bindings for child Pino");r=r||{},o&&n.serializers&&(r.serializers=n.serializers);const s=r.serializers;if(o&&s){var a=Object.assign({},i,s),h=!0===e.browser.serialize?Object.keys(a):o;delete n.serializers,c([n],h,a,this._stdErrSerialize)}function d(e){this._childLevel=1+(0|e._childLevel),this.error=l(e,n,"error"),this.fatal=l(e,n,"fatal"),this.warn=l(e,n,"warn"),this.info=l(e,n,"info"),this.debug=l(e,n,"debug"),this.trace=l(e,n,"trace"),a&&(this.serializers=a,this._serialize=h),t&&(this._logEvent=u([].concat(e._logEvent.bindings,n)))}return d.prototype=this,new d(this)},t&&(g._logEvent=u()),g}function a(e,t,n,o){const a=Object.getPrototypeOf(t);t[n]=t.levelVal>t.levels.values[n]?p:a[n]?a[n]:r[n]||r[o]||p,function(e,t,n){if(!e.transmit&&t[n]===p)return;t[n]=(o=t[n],function(){const a=e.timestamp(),l=new Array(arguments.length),h=Object.getPrototypeOf&&Object.getPrototypeOf(this)===r?r:this;for(var d=0;d-1&&i in n&&(e[r][i]=n[i](e[r][i]))}function l(e,t,n){return function(){const i=new Array(1+arguments.length);i[0]=t;for(var r=1;r{"use strict";e.exports={i8:"6.5.4"}}},t={};function n(i){var r=t[i];if(void 0!==r)return r.exports;var o=t[i]={id:i,loaded:!1,exports:{}};return e[i].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var i in t)n.o(t,i)&&!n.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{"use strict";var e={};n.r(e),n.d(e,{identity:()=>Oa});var t={};n.r(t),n.d(t,{base2:()=>Ua});var i={};n.r(i),n.d(i,{base8:()=>Ca});var r={};n.r(r),n.d(r,{base10:()=>Pa});var o={};n.r(o),n.d(o,{base16:()=>Na,base16upper:()=>Ka});var s={};n.r(s),n.d(s,{base32:()=>La,base32hex:()=>Fa,base32hexpad:()=>Da,base32hexpadupper:()=>Ba,base32hexupper:()=>ja,base32pad:()=>za,base32padupper:()=>Va,base32upper:()=>qa,base32z:()=>Wa});var a={};n.r(a),n.d(a,{base36:()=>Ja,base36upper:()=>Za});var c={};n.r(c),n.d(c,{base58btc:()=>Qa,base58flickr:()=>Ha});var l={};n.r(l),n.d(l,{base64:()=>Ga,base64pad:()=>Ya,base64url:()=>Xa,base64urlpad:()=>_a});var u={};n.r(u),n.d(u,{base256emoji:()=>nc});var h={};n.r(h),n.d(h,{sha256:()=>Mc,sha512:()=>Tc});var d={};n.r(d),n.d(d,{identity:()=>Oc});var f={};n.r(f),n.d(f,{code:()=>Cc,decode:()=>Nc,encode:()=>Pc,name:()=>Uc});var p,g={};n.r(g),n.d(g,{code:()=>zc,decode:()=>Fc,encode:()=>Vc,name:()=>qc}),function(e){e.beacon="beacon",e.kukai="kukai"}(p||(p={}));const y=function(){function e(){}return e.prototype.Init=function(e){var t=this;this.Config=e,this.FileUploaderDomElement=document.getElementById("fileuploader"),this.FileUploaderDomElement||(this.FileUploaderDomElement=document.createElement("input"),this.FileUploaderDomElement.setAttribute("style","display:none;"),this.FileUploaderDomElement.setAttribute("type","file"),this.FileUploaderDomElement.setAttribute("id","fileuploader"),this.FileUploaderDomElement.setAttribute("class","nonfocused"),document.getElementsByTagName("body")[0].appendChild(this.FileUploaderDomElement),this.FileUploaderDomElement.onchange=function(e){var n=e.target.files;0===n.length?t.ResetFileUploader():t.FileReceived(n[0])})},e.prototype.ResetFileUploader=function(){var e;null===(e=this.FileUploaderDomElement)||void 0===e||e.setAttribute("class","nonfocused")},e.prototype.RequestUserFile=function(e){null===this.FileUploaderDomElement&&this.Init(this.Config),null===e&&null!==e.match(/^ *$/)||this.FileUploaderDomElement.setAttribute("accept",e),this.FileUploaderDomElement.setAttribute("class","focused"),this.FileUploaderDomElement.click()},e}();var b,m=(b=function(e,t){return b=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},b(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}b(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),v=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))},w=function(e,t){var n,i,r,o,s={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(a){return function(c){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,a[0]&&(s=0)),s;)try{if(n=1,i&&(r=2&a[0]?i.return:a[0]?i.throw||((r=i.return)&&r.call(i),0):i.next)&&!(r=r.call(i,a[1])).done)return r;switch(i=0,r&&(a=[2&a[0],r.value]),a[0]){case 0:case 1:r=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,i=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(r=s.trys,(r=r.length>0&&r[r.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!r||a[1]>r[0]&&a[1]0&&r[r.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!r||a[1]>r[0]&&a[1]0||e===t?t:t-1}function B(e){for(var t,n,i=1,r=e.length,o=e[0]+"";il^n?1:-1;for(a=(c=r.length)<(l=o.length)?c:l,s=0;so[s]^n?1:-1;return c==l?0:c>l^n?1:-1}function J(e,t,n,i){if(en||e!==P(e))throw Error(N+(i||"Argument")+("number"==typeof e?en?" out of range: ":" not an integer: ":" not a primitive number: ")+String(e))}function Z(e){var t=e.c.length-1;return D(e.e/q)==t&&e.c[t]%2!=0}function Q(e,t){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(t<0?"e":"e+")+t}function H(e,t,n){var i,r;if(t<0){for(r=n+".";++t;r+=n);e=r+e}else if(++t>(i=e.length)){for(r=n,t-=i;--t;r+=n);e+=r}else tv?d.c=d.e=null:e.e=10;c/=10,a++);return void(a>v?d.c=d.e=null:(d.e=a,d.c=[e]))}h=String(e)}else{if(!U.test(h=String(e)))return r(d,h,l);d.s=45==h.charCodeAt(0)?(h=h.slice(1),-1):1}(a=h.indexOf("."))>-1&&(h=h.replace(".","")),(c=h.search(/e/i))>0?(a<0&&(a=c),a+=+h.slice(c+1),h=h.substring(0,c)):a<0&&(a=h.length)}else{if(J(t,2,A.length,"Base"),10==t&&R)return O(d=new x(e),p+d.e+1,g);if(h=String(e),l="number"==typeof e){if(0*e!=0)return r(d,h,l,t);if(d.s=1/e<0?(h=h.slice(1),-1):1,x.DEBUG&&h.replace(/^0\.0*|\./,"").length>15)throw Error(K+e)}else d.s=45===h.charCodeAt(0)?(h=h.slice(1),-1):1;for(n=A.slice(0,t),a=c=0,u=h.length;ca){a=u;continue}}else if(!s&&(h==h.toUpperCase()&&(h=h.toLowerCase())||h==h.toLowerCase()&&(h=h.toUpperCase()))){s=!0,c=-1,a=0;continue}return r(d,String(e),l,t)}l=!1,(a=(h=i(h,t,10,d.s)).indexOf("."))>-1?h=h.replace(".",""):a=h.length}for(c=0;48===h.charCodeAt(c);c++);for(u=h.length;48===h.charCodeAt(--u););if(h=h.slice(c,++u)){if(u-=c,l&&x.DEBUG&&u>15&&(e>z||e!==P(e)))throw Error(K+d.s*e);if((a=a-c-1)>v)d.c=d.e=null;else if(a=b)?Q(c,s):H(c,s,"0");else if(o=(e=O(new x(e),t,n)).e,a=(c=B(e.c)).length,1==i||2==i&&(t<=o||o<=y)){for(;aa){if(--t>0)for(c+=".";t--;c+="0");}else if((t+=o-a)>0)for(o+1==a&&(c+=".");t--;c+="0");return e.s<0&&r?"-"+c:c}function T(e,t){for(var n,i=1,r=new x(e[0]);i=10;r/=10,i++);return(n=i+n*q-1)>v?e.c=e.e=null:n=10;a/=10,r++);if((o=t-r)<0)o+=q,s=t,u=(c=h[l=0])/d[r-s-1]%10|0;else if((l=C((o+1)/q))>=h.length){if(!i)break e;for(;h.length<=l;h.push(0));c=u=0,r=1,s=(o%=q)-q+1}else{for(c=a=h[l],r=1;a>=10;a/=10,r++);u=(s=(o%=q)-q+r)<0?0:c/d[r-s-1]%10|0}if(i=i||t<0||null!=h[l+1]||(s<0?c:c%d[r-s-1]),i=n<4?(u||i)&&(0==n||n==(e.s<0?3:2)):u>5||5==u&&(4==n||i||6==n&&(o>0?s>0?c/d[r-s]:0:h[l-1])%10&1||n==(e.s<0?8:7)),t<1||!h[0])return h.length=0,i?(t-=e.e+1,h[0]=d[(q-t%q)%q],e.e=-t||0):h[0]=e.e=0,e;if(0==o?(h.length=l,a=1,l--):(h.length=l+1,a=d[q-o],h[l]=s>0?P(c/d[r-s]%d[s])*a:0),i)for(;;){if(0==l){for(o=1,s=h[0];s>=10;s/=10,o++);for(s=h[0]+=a,a=1;s>=10;s/=10,a++);o!=a&&(e.e++,h[0]==L&&(h[0]=1));break}if(h[l]+=a,h[l]!=L)break;h[l--]=0,a=1}for(o=h.length;0===h[--o];h.pop());}e.e>v?e.c=e.e=null:e.e=b?Q(t,n):H(t,n,"0"),e.s<0?"-"+t:t)}return x.clone=e,x.ROUND_UP=0,x.ROUND_DOWN=1,x.ROUND_CEIL=2,x.ROUND_FLOOR=3,x.ROUND_HALF_UP=4,x.ROUND_HALF_DOWN=5,x.ROUND_HALF_EVEN=6,x.ROUND_HALF_CEIL=7,x.ROUND_HALF_FLOOR=8,x.EUCLID=9,x.config=x.set=function(e){var t,n;if(null!=e){if("object"!=typeof e)throw Error(N+"Object expected: "+e);if(e.hasOwnProperty(t="DECIMAL_PLACES")&&(J(n=e[t],0,j,t),p=n),e.hasOwnProperty(t="ROUNDING_MODE")&&(J(n=e[t],0,8,t),g=n),e.hasOwnProperty(t="EXPONENTIAL_AT")&&((n=e[t])&&n.pop?(J(n[0],-j,0,t),J(n[1],0,j,t),y=n[0],b=n[1]):(J(n,-j,j,t),y=-(b=n<0?-n:n))),e.hasOwnProperty(t="RANGE"))if((n=e[t])&&n.pop)J(n[0],-j,-1,t),J(n[1],1,j,t),m=n[0],v=n[1];else{if(J(n,-j,j,t),!n)throw Error(N+t+" cannot be zero: "+n);m=-(v=n<0?-n:n)}if(e.hasOwnProperty(t="CRYPTO")){if((n=e[t])!==!!n)throw Error(N+t+" not true or false: "+n);if(n){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw w=!n,Error(N+"crypto unavailable");w=n}else w=n}if(e.hasOwnProperty(t="MODULO_MODE")&&(J(n=e[t],0,9,t),E=n),e.hasOwnProperty(t="POW_PRECISION")&&(J(n=e[t],0,j,t),S=n),e.hasOwnProperty(t="FORMAT")){if("object"!=typeof(n=e[t]))throw Error(N+t+" not an object: "+n);I=n}if(e.hasOwnProperty(t="ALPHABET")){if("string"!=typeof(n=e[t])||/^.?$|[+\-.\s]|(.).*\1/.test(n))throw Error(N+t+" invalid: "+n);R="0123456789"==n.slice(0,10),A=n}}return{DECIMAL_PLACES:p,ROUNDING_MODE:g,EXPONENTIAL_AT:[y,b],RANGE:[m,v],CRYPTO:w,MODULO_MODE:E,POW_PRECISION:S,FORMAT:I,ALPHABET:A}},x.isBigNumber=function(e){if(!e||!0!==e._isBigNumber)return!1;if(!x.DEBUG)return!0;var t,n,i=e.c,r=e.e,o=e.s;e:if("[object Array]"=={}.toString.call(i)){if((1===o||-1===o)&&r>=-j&&r<=j&&r===P(r)){if(0===i[0]){if(0===r&&1===i.length)return!0;break e}if((t=(r+1)%q)<1&&(t+=q),String(i[0]).length==t){for(t=0;t=L||n!==P(n))break e;if(0!==n)return!0}}}else if(null===i&&null===r&&(null===o||1===o||-1===o))return!0;throw Error(N+"Invalid BigNumber: "+e)},x.maximum=x.max=function(){return T(arguments,d.lt)},x.minimum=x.min=function(){return T(arguments,d.gt)},x.random=(o=9007199254740992,s=Math.random()*o&2097151?function(){return P(Math.random()*o)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)},function(e){var t,n,i,r,o,a=0,c=[],l=new x(f);if(null==e?e=p:J(e,0,j),r=C(e/q),w)if(crypto.getRandomValues){for(t=crypto.getRandomValues(new Uint32Array(r*=2));a>>11))>=9e15?(n=crypto.getRandomValues(new Uint32Array(2)),t[a]=n[0],t[a+1]=n[1]):(c.push(o%1e14),a+=2);a=r/2}else{if(!crypto.randomBytes)throw w=!1,Error(N+"crypto unavailable");for(t=crypto.randomBytes(r*=7);a=9e15?crypto.randomBytes(7).copy(t,a):(c.push(o%1e14),a+=7);a=r/7}if(!w)for(;a=10;o/=10,a++);an-1&&(null==s[r+1]&&(s[r+1]=0),s[r+1]+=s[r]/n|0,s[r]%=n)}return s.reverse()}return function(i,r,o,s,a){var c,l,u,h,d,f,y,b,m=i.indexOf("."),v=p,w=g;for(m>=0&&(h=S,S=0,i=i.replace(".",""),f=(b=new x(r)).pow(i.length-m),S=h,b.c=t(H(B(f.c),f.e,"0"),10,o,e),b.e=b.c.length),u=h=(y=t(i,r,o,a?(c=A,e):(c=e,A))).length;0==y[--h];y.pop());if(!y[0])return c.charAt(0);if(m<0?--u:(f.c=y,f.e=u,f.s=s,y=(f=n(f,b,v,w,o)).c,d=f.r,u=f.e),m=y[l=u+v+1],h=o/2,d=d||l<0||null!=y[l+1],d=w<4?(null!=m||d)&&(0==w||w==(f.s<0?3:2)):m>h||m==h&&(4==w||d||6==w&&1&y[l-1]||w==(f.s<0?8:7)),l<1||!y[0])i=d?H(c.charAt(1),-v,c.charAt(0)):c.charAt(0);else{if(y.length=l,d)for(--o;++y[--l]>o;)y[l]=0,l||(++u,y=[1].concat(y));for(h=y.length;!y[--h];);for(m=0,i="";m<=h;i+=c.charAt(y[m++]));i=H(i,u,c.charAt(0))}return i}}(),n=function(){function e(e,t,n){var i,r,o,s,a=0,c=e.length,l=t%F,u=t/F|0;for(e=e.slice();c--;)a=((r=l*(o=e[c]%F)+(i=u*o+(s=e[c]/F|0)*l)%F*F+a)/n|0)+(i/F|0)+u*s,e[c]=r%n;return a&&(e=[a].concat(e)),e}function t(e,t,n,i){var r,o;if(n!=i)o=n>i?1:-1;else for(r=o=0;rt[r]?1:-1;break}return o}function n(e,t,n,i){for(var r=0;n--;)e[n]-=r,r=e[n]1;e.splice(0,1));}return function(i,r,o,s,a){var c,l,u,h,d,f,p,g,y,b,m,v,w,E,S,I,A,R=i.s==r.s?1:-1,M=i.c,T=r.c;if(!(M&&M[0]&&T&&T[0]))return new x(i.s&&r.s&&(M?!T||M[0]!=T[0]:T)?M&&0==M[0]||!T?0*R:R/0:NaN);for(y=(g=new x(R)).c=[],R=o+(l=i.e-r.e)+1,a||(a=L,l=D(i.e/q)-D(r.e/q),R=R/q|0),u=0;T[u]==(M[u]||0);u++);if(T[u]>(M[u]||0)&&l--,R<0)y.push(1),h=!0;else{for(E=M.length,I=T.length,u=0,R+=2,(d=P(a/(T[0]+1)))>1&&(T=e(T,d,a),M=e(M,d,a),I=T.length,E=M.length),w=I,m=(b=M.slice(0,I)).length;m=a/2&&S++;do{if(d=0,(c=t(T,b,I,m))<0){if(v=b[0],I!=m&&(v=v*a+(b[1]||0)),(d=P(v/S))>1)for(d>=a&&(d=a-1),p=(f=e(T,d,a)).length,m=b.length;1==t(f,b,p,m);)d--,n(f,I=10;R/=10,u++);O(g,o+(g.e=u+l*q-1)+1,s,h)}else g.e=l,g.r=+h;return g}}(),a=/^(-?)0([xbo])(?=\w[\w.]*$)/i,c=/^([^.]+)\.$/,l=/^\.([^.]+)$/,u=/^-?(Infinity|NaN)$/,h=/^\s*\+(?=[\w.])|^\s+|\s+$/g,r=function(e,t,n,i){var r,o=n?t:t.replace(h,"");if(u.test(o))e.s=isNaN(o)?null:o<0?-1:1;else{if(!n&&(o=o.replace(a,(function(e,t,n){return r="x"==(n=n.toLowerCase())?16:"b"==n?2:8,i&&i!=r?e:t})),i&&(r=i,o=o.replace(c,"$1").replace(l,"0.$1")),t!=o))return new x(o,r);if(x.DEBUG)throw Error(N+"Not a"+(i?" base "+i:"")+" number: "+t);e.s=null}e.c=e.e=null},d.absoluteValue=d.abs=function(){var e=new x(this);return e.s<0&&(e.s=1),e},d.comparedTo=function(e,t){return W(this,new x(e,t))},d.decimalPlaces=d.dp=function(e,t){var n,i,r,o=this;if(null!=e)return J(e,0,j),null==t?t=g:J(t,0,8),O(new x(o),e+o.e+1,t);if(!(n=o.c))return null;if(i=((r=n.length-1)-D(this.e/q))*q,r=n[r])for(;r%10==0;r/=10,i--);return i<0&&(i=0),i},d.dividedBy=d.div=function(e,t){return n(this,new x(e,t),p,g)},d.dividedToIntegerBy=d.idiv=function(e,t){return n(this,new x(e,t),0,1)},d.exponentiatedBy=d.pow=function(e,t){var n,i,r,o,s,a,c,l,u=this;if((e=new x(e)).c&&!e.isInteger())throw Error(N+"Exponent not an integer: "+G(e));if(null!=t&&(t=new x(t)),s=e.e>14,!u.c||!u.c[0]||1==u.c[0]&&!u.e&&1==u.c.length||!e.c||!e.c[0])return l=new x(Math.pow(+G(u),s?e.s*(2-Z(e)):+G(e))),t?l.mod(t):l;if(a=e.s<0,t){if(t.c?!t.c[0]:!t.s)return new x(NaN);(i=!a&&u.isInteger()&&t.isInteger())&&(u=u.mod(t))}else{if(e.e>9&&(u.e>0||u.e<-1||(0==u.e?u.c[0]>1||s&&u.c[1]>=24e7:u.c[0]<8e13||s&&u.c[0]<=9999975e7)))return o=u.s<0&&Z(e)?-0:0,u.e>-1&&(o=1/o),new x(a?1/o:o);S&&(o=C(S/q+2))}for(s?(n=new x(.5),a&&(e.s=1),c=Z(e)):c=(r=Math.abs(+G(e)))%2,l=new x(f);;){if(c){if(!(l=l.times(u)).c)break;o?l.c.length>o&&(l.c.length=o):i&&(l=l.mod(t))}if(r){if(0===(r=P(r/2)))break;c=r%2}else if(O(e=e.times(n),e.e+1,1),e.e>14)c=Z(e);else{if(0===(r=+G(e)))break;c=r%2}u=u.times(u),o?u.c&&u.c.length>o&&(u.c.length=o):i&&(u=u.mod(t))}return i?l:(a&&(l=f.div(l)),t?l.mod(t):o?O(l,S,g,undefined):l)},d.integerValue=function(e){var t=new x(this);return null==e?e=g:J(e,0,8),O(t,t.e+1,e)},d.isEqualTo=d.eq=function(e,t){return 0===W(this,new x(e,t))},d.isFinite=function(){return!!this.c},d.isGreaterThan=d.gt=function(e,t){return W(this,new x(e,t))>0},d.isGreaterThanOrEqualTo=d.gte=function(e,t){return 1===(t=W(this,new x(e,t)))||0===t},d.isInteger=function(){return!!this.c&&D(this.e/q)>this.c.length-2},d.isLessThan=d.lt=function(e,t){return W(this,new x(e,t))<0},d.isLessThanOrEqualTo=d.lte=function(e,t){return-1===(t=W(this,new x(e,t)))||0===t},d.isNaN=function(){return!this.s},d.isNegative=function(){return this.s<0},d.isPositive=function(){return this.s>0},d.isZero=function(){return!!this.c&&0==this.c[0]},d.minus=function(e,t){var n,i,r,o,s=this,a=s.s;if(t=(e=new x(e,t)).s,!a||!t)return new x(NaN);if(a!=t)return e.s=-t,s.plus(e);var c=s.e/q,l=e.e/q,u=s.c,h=e.c;if(!c||!l){if(!u||!h)return u?(e.s=-t,e):new x(h?s:NaN);if(!u[0]||!h[0])return h[0]?(e.s=-t,e):new x(u[0]?s:3==g?-0:0)}if(c=D(c),l=D(l),u=u.slice(),a=c-l){for((o=a<0)?(a=-a,r=u):(l=c,r=h),r.reverse(),t=a;t--;r.push(0));r.reverse()}else for(i=(o=(a=u.length)<(t=h.length))?a:t,a=t=0;t0)for(;t--;u[n++]=0);for(t=L-1;i>a;){if(u[--i]=0;){for(n=0,d=v[r]%y,f=v[r]/y|0,o=r+(s=c);o>r;)n=((l=d*(l=m[--s]%y)+(a=f*l+(u=m[s]/y|0)*d)%y*y+p[o]+n)/g|0)+(a/y|0)+f*u,p[o--]=l%g;p[o]=n}return n?++i:p.splice(0,1),k(e,p,i)},d.negated=function(){var e=new x(this);return e.s=-e.s||null,e},d.plus=function(e,t){var n,i=this,r=i.s;if(t=(e=new x(e,t)).s,!r||!t)return new x(NaN);if(r!=t)return e.s=-t,i.minus(e);var o=i.e/q,s=e.e/q,a=i.c,c=e.c;if(!o||!s){if(!a||!c)return new x(r/0);if(!a[0]||!c[0])return c[0]?e:new x(a[0]?i:0*r)}if(o=D(o),s=D(s),a=a.slice(),r=o-s){for(r>0?(s=o,n=c):(r=-r,n=a),n.reverse();r--;n.push(0));n.reverse()}for((r=a.length)-(t=c.length)<0&&(n=c,c=a,a=n,t=r),r=0;t;)r=(a[--t]=a[t]+c[t]+r)/L|0,a[t]=L===a[t]?0:a[t]%L;return r&&(a=[r].concat(a),++s),k(e,a,s)},d.precision=d.sd=function(e,t){var n,i,r,o=this;if(null!=e&&e!==!!e)return J(e,1,j),null==t?t=g:J(t,0,8),O(new x(o),e,t);if(!(n=o.c))return null;if(i=(r=n.length-1)*q+1,r=n[r]){for(;r%10==0;r/=10,i--);for(r=n[0];r>=10;r/=10,i++);}return e&&o.e+1>i&&(i=o.e+1),i},d.shiftedBy=function(e){return J(e,-9007199254740991,z),this.times("1e"+e)},d.squareRoot=d.sqrt=function(){var e,t,i,r,o,s=this,a=s.c,c=s.s,l=s.e,u=p+4,h=new x("0.5");if(1!==c||!a||!a[0])return new x(!c||c<0&&(!a||a[0])?NaN:a?s:1/0);if(0==(c=Math.sqrt(+G(s)))||c==1/0?(((t=B(a)).length+l)%2==0&&(t+="0"),c=Math.sqrt(+t),l=D((l+1)/2)-(l<0||l%2),i=new x(t=c==1/0?"5e"+l:(t=c.toExponential()).slice(0,t.indexOf("e")+1)+l)):i=new x(c+""),i.c[0])for((c=(l=i.e)+u)<3&&(c=0);;)if(o=i,i=h.times(o.plus(n(s,o,u,1))),B(o.c).slice(0,c)===(t=B(i.c)).slice(0,c)){if(i.e0&&p>0){for(o=p%a||a,u=f.substr(0,o);o0&&(u+=l+f.slice(o)),d&&(u="-"+u)}i=h?u+(n.decimalSeparator||"")+((c=+n.fractionGroupSize)?h.replace(new RegExp("\\d{"+c+"}\\B","g"),"$&"+(n.fractionGroupSeparator||"")):h):u}return(n.prefix||"")+i+(n.suffix||"")},d.toFraction=function(e){var t,i,r,o,s,a,c,l,u,h,d,p,y=this,b=y.c;if(null!=e&&(!(c=new x(e)).isInteger()&&(c.c||1!==c.s)||c.lt(f)))throw Error(N+"Argument "+(c.isInteger()?"out of range: ":"not an integer: ")+G(c));if(!b)return new x(y);for(t=new x(f),u=i=new x(f),r=l=new x(f),p=B(b),s=t.e=p.length-y.e-1,t.c[0]=V[(a=s%q)<0?q+a:a],e=!e||c.comparedTo(t)>0?s>0?t:u:c,a=v,v=1/0,c=new x(p),l.c[0]=0;h=n(c,t,0,1),1!=(o=i.plus(h.times(r))).comparedTo(e);)i=r,r=o,u=l.plus(h.times(o=u)),l=o,t=c.minus(h.times(o=t)),c=o;return o=n(e.minus(i),r,0,1),l=l.plus(o.times(u)),i=i.plus(o.times(r)),l.s=u.s=y.s,d=n(u,r,s*=2,g).minus(y).abs().comparedTo(n(l,i,s,g).minus(y).abs())<1?[u,r]:[l,i],v=a,d},d.toNumber=function(){return+G(this)},d.toPrecision=function(e,t){return null!=e&&J(e,1,j),M(this,e,t,2)},d.toString=function(e){var t,n=this,r=n.s,o=n.e;return null===o?r?(t="Infinity",r<0&&(t="-"+t)):t="NaN":(null==e?t=o<=y||o>=b?Q(B(n.c),o):H(B(n.c),o,"0"):10===e&&R?t=H(B((n=O(new x(n),p+o+1,g)).c),n.e,"0"):(J(e,2,A.length,"Base"),t=i(H(B(n.c),o,"0"),10,e,r,!0)),r<0&&n.c[0]&&(t="-"+t)),t},d.valueOf=d.toJSON=function(){return G(this)},d._isBigNumber=!0,d[Symbol.toStringTag]="BigNumber",d[Symbol.for("nodejs.util.inspect.custom")]=d.valueOf,null!=t&&x.set(t),x})();var G;n(6266),n(5054);!function(e){e.TZ1="tz1",e.TZ2="tz2",e.TZ3="tz3",e.TZ4="tz4",e.KT="KT",e.KT1="KT1",e.EDSK2="edsk2",e.SPSK="spsk",e.P2SK="p2sk",e.EDPK="edpk",e.SPPK="sppk",e.P2PK="p2pk",e.BLPK="BLpk",e.EDESK="edesk",e.SPESK="spesk",e.P2ESK="p2esk",e.EDSK="edsk",e.EDSIG="edsig",e.SPSIG="spsig",e.P2SIG="p2sig",e.SIG="sig",e.NET="Net",e.NCE="nce",e.B="B",e.O="o",e.LO="Lo",e.LLO="LLo",e.P="P",e.CO="Co",e.ID="id",e.EXPR="expr",e.TZ="TZ",e.VH="vh",e.SASK="sask",e.ZET1="zet1",e.TXR1="txr1",e.TXI="txi",e.TXM="txm",e.TXC="txc",e.TXMR="txmr",e.TXRL="txM",e.TXW="txw",e.SR1="sr1",e.SRC1="src1"}(G||(G={}));G.TZ1,new Uint8Array([6,161,159]),G.TZ2,new Uint8Array([6,161,161]),G.TZ3,new Uint8Array([6,161,164]),G.TZ4,new Uint8Array([6,161,166]),G.KT,new Uint8Array([2,90,121]),G.KT1,new Uint8Array([2,90,121]),G.EDSK,new Uint8Array([43,246,78,7]),G.EDSK2,new Uint8Array([13,15,58,7]),G.SPSK,new Uint8Array([17,162,224,201]),G.P2SK,new Uint8Array([16,81,238,189]),G.EDPK,new Uint8Array([13,15,37,217]),G.SPPK,new Uint8Array([3,254,226,86]),G.P2PK,new Uint8Array([3,178,139,127]),G.BLPK,new Uint8Array([6,149,135,204]),G.EDESK,new Uint8Array([7,90,60,179,41]),G.SPESK,new Uint8Array([9,237,241,174,150]),G.P2ESK,new Uint8Array([9,48,57,115,171]),G.EDSIG,new Uint8Array([9,245,205,134,18]),G.SPSIG,new Uint8Array([13,115,101,19,63]),G.P2SIG,new Uint8Array([54,240,44,52]),G.SIG,new Uint8Array([4,130,43]),G.NET,new Uint8Array([87,82,0]),G.NCE,new Uint8Array([69,220,169]),G.B,new Uint8Array([1,52]),G.O,new Uint8Array([5,116]),G.LO,new Uint8Array([133,233]),G.LLO,new Uint8Array([29,159,109]),G.P,new Uint8Array([2,170]),G.CO,new Uint8Array([79,179]),G.ID,new Uint8Array([153,103]),G.EXPR,new Uint8Array([13,44,64,27]),G.TZ,new Uint8Array([2,90,121]),G.VH,new Uint8Array([1,106,242]),G.SASK,new Uint8Array([11,237,20,92]),G.ZET1,new Uint8Array([18,71,40,223]),G.TXR1,new Uint8Array([1,128,120,31]),G.TXI,new Uint8Array([79,148,196]),G.TXM,new Uint8Array([79,149,30]),G.TXC,new Uint8Array([79,148,17]),G.TXMR,new Uint8Array([18,7,206,87]),G.TXRL,new Uint8Array([79,146,82]),G.TXW,new Uint8Array([79,150,72]),G.SR1,new Uint8Array([6,124,117]),G.SRC1,new Uint8Array([17,165,134,138]),G.TZ1,G.TZ2,G.TZ3,G.TZ4,G.KT,G.KT1,G.EDPK,G.SPPK,G.P2PK,G.BLPK,G.EDSIG,G.SPSIG,G.P2SIG,G.SIG,G.NET,G.B,G.P,G.O,G.VH,G.SASK,G.ZET1,G.TXR1,G.TXI,G.TXM,G.TXC,G.TXMR,G.TXRL,G.TXW,G.SR1,G.SRC1;var Y;!function(e){e[e.NO_PREFIX_MATCHED=0]="NO_PREFIX_MATCHED",e[e.INVALID_CHECKSUM=1]="INVALID_CHECKSUM",e[e.INVALID_LENGTH=2]="INVALID_LENGTH",e[e.VALID=3]="VALID"}(Y||(Y={}));G.TZ1,G.TZ2,G.TZ3,G.TZ4,G.KT1,G.TXR1,G.EDSIG,G.P2SIG,G.SPSIG,G.SIG,G.EDPK,G.SPPK,G.P2PK,G.BLPK,G.O,G.P,G.B;var X,_,$,ee,te,ne,ie,re,oe,se;!function(e){e.BlockchainRequest="blockchain_request",e.PermissionRequest="permission_request",e.SignPayloadRequest="sign_payload_request",e.OperationRequest="operation_request",e.BroadcastRequest="broadcast_request",e.ChangeAccountRequest="change_account_request",e.BlockchainResponse="blockchain_response",e.PermissionResponse="permission_response",e.SignPayloadResponse="sign_payload_response",e.OperationResponse="operation_response",e.BroadcastResponse="broadcast_response",e.Acknowledge="acknowledge",e.Disconnect="disconnect",e.Error="error"}(X||(X={})),function(e){e.SIGN="sign",e.OPERATION_REQUEST="operation_request",e.ENCRYPT="encrypt",e.NOTIFICATION="notification",e.THRESHOLD="threshold"}(_||(_={})),function(e){e.MAINNET="mainnet",e.GHOSTNET="ghostnet",e.MONDAYNET="mondaynet",e.DAILYNET="dailynet",e.DELPHINET="delphinet",e.EDONET="edonet",e.FLORENCENET="florencenet",e.GRANADANET="granadanet",e.HANGZHOUNET="hangzhounet",e.ITHACANET="ithacanet",e.JAKARTANET="jakartanet",e.KATHMANDUNET="kathmandunet",e.LIMANET="limanet",e.MUMBAINET="mumbainet",e.NAIROBINET="nairobinet",e.OXFORDNET="oxfordnet",e.CUSTOM="custom"}($||($={})),function(e){e.ENDORSEMENT="endorsement",e.SEED_NONCE_REVELATION="seed_nonce_revelation",e.DOUBLE_ENDORSEMENT_EVIDENCE="double_endorsement_evidence",e.DOUBLE_BAKING_EVIDENCE="double_baking_evidence",e.ACTIVATE_ACCOUNT="activate_account",e.PROPOSALS="proposals",e.BALLOT="ballot",e.REVEAL="reveal",e.TRANSACTION="transaction",e.ORIGINATION="origination",e.DELEGATION="delegation"}(ee||(ee={})),function(e){e.WEBSITE="website",e.EXTENSION="extension",e.P2P="p2p",e.WALLETCONNECT="walletconnect"}(te||(te={})),function(e){e.BACKGROUND="toBackground",e.PAGE="toPage",e.EXTENSION="toExtension"}(ne||(ne={})),function(e){e.BROADCAST_ERROR="BROADCAST_ERROR",e.NETWORK_NOT_SUPPORTED="NETWORK_NOT_SUPPORTED",e.NO_ADDRESS_ERROR="NO_ADDRESS_ERROR",e.NO_PRIVATE_KEY_FOUND_ERROR="NO_PRIVATE_KEY_FOUND_ERROR",e.NOT_GRANTED_ERROR="NOT_GRANTED_ERROR",e.PARAMETERS_INVALID_ERROR="PARAMETERS_INVALID_ERROR",e.TOO_MANY_OPERATIONS="TOO_MANY_OPERATIONS",e.TRANSACTION_INVALID_ERROR="TRANSACTION_INVALID_ERROR",e.SIGNATURE_TYPE_NOT_SUPPORTED="SIGNATURE_TYPE_NOT_SUPPORTED",e.ABORTED_ERROR="ABORTED_ERROR",e.UNKNOWN_ERROR="UNKNOWN_ERROR"}(ie||(ie={})),function(e){e.NOT_CONNECTED="NOT_CONNECTED",e.CONNECTING="CONNECTING",e.CONNECTED="CONNECTED"}(re||(re={})),function(e){e.CHROME_MESSAGE="chrome_message",e.WALLETCONNECT="walletconnect",e.POST_MESSAGE="post_message",e.LEDGER="ledger",e.P2P="p2p"}(oe||(oe={})),function(e){e.TRANSPORT_P2P_PEERS_DAPP="beacon:communication-peers-dapp",e.TRANSPORT_P2P_PEERS_WALLET="beacon:communication-peers-wallet",e.TRANSPORT_POSTMESSAGE_PEERS_DAPP="beacon:postmessage-peers-dapp",e.TRANSPORT_POSTMESSAGE_PEERS_WALLET="beacon:postmessage-peers-wallet",e.TRANSPORT_WALLETCONNECT_PEERS_DAPP="beacon:walletconnect-peers-dapp",e.LAST_SELECTED_WALLET="beacon:last-selected-wallet",e.ACCOUNTS="beacon:accounts",e.ACTIVE_ACCOUNT="beacon:active-account",e.PUSH_TOKENS="beacon:push-tokens",e.BEACON_SDK_SECRET_SEED="beacon:sdk-secret-seed",e.APP_METADATA_LIST="beacon:app-metadata-list",e.PERMISSION_LIST="beacon:permissions",e.BEACON_SDK_VERSION="beacon:sdk_version",e.MATRIX_PRESERVED_STATE="beacon:sdk-matrix-preserved-state",e.MATRIX_PEER_ROOM_IDS="beacon:matrix-peer-rooms",e.MATRIX_SELECTED_NODE="beacon:matrix-selected-node",e.MULTI_NODE_SETUP_DONE="beacon:multi-node-setup"}(se||(se={}));const ae={[se.TRANSPORT_P2P_PEERS_DAPP]:[],[se.TRANSPORT_P2P_PEERS_WALLET]:[],[se.TRANSPORT_POSTMESSAGE_PEERS_DAPP]:[],[se.TRANSPORT_POSTMESSAGE_PEERS_WALLET]:[],[se.TRANSPORT_WALLETCONNECT_PEERS_DAPP]:[],[se.LAST_SELECTED_WALLET]:void 0,[se.ACCOUNTS]:[],[se.ACTIVE_ACCOUNT]:void 0,[se.PUSH_TOKENS]:[],[se.BEACON_SDK_SECRET_SEED]:void 0,[se.APP_METADATA_LIST]:[],[se.PERMISSION_LIST]:[],[se.BEACON_SDK_VERSION]:void 0,[se.MATRIX_PRESERVED_STATE]:{},[se.MATRIX_PEER_ROOM_IDS]:{},[se.MATRIX_SELECTED_NODE]:void 0,[se.MULTI_NODE_SETUP_DONE]:void 0};var ce,le,ue;!function(e){e.RAW="raw",e.OPERATION="operation",e.MICHELINE="micheline"}(ce||(ce={})),function(e){e.LIGHT="light",e.DARK="dark"}(le||(le={})),function(e){e.EUROPE_EAST="europe-east",e.EUROPE_WEST="europe-west",e.NORTH_AMERICA_EAST="north-america-east",e.NORTH_AMERICA_WEST="north-america-west",e.CENTRAL_AMERICA="central-america",e.SOUTH_AMERICA="south-america",e.ASIA_EAST="asia-east",e.ASIA_WEST="asia-west",e.AFRICA="africa",e.AUSTRALIA="australia"}(ue||(ue={}));var he=function(){function e(e,t,n){this.dappName=e,this.dappUrl=t,this.iconUrl=n}return e.prototype.CallUnityOnAccountFailedToConnect=function(e){this.CallUnityMethod("OnAccountFailedToConnect",e)},e.prototype.CallUnityOnContractCallCompleted=function(e){this.CallUnityMethod("OnContractCallCompleted",e)},e.prototype.CallUnityOnContractCallFailed=function(e){this.CallUnityMethod("OnContractCallFailed",e)},e.prototype.CallUnityOnPayloadSigned=function(e){this.CallUnityMethod("OnPayloadSigned",e)},e.prototype.CallUnityOnAccountDisconnected=function(e){this.CallUnityMethod("OnAccountDisconnected",e),localStorage.removeItem("dappName"),localStorage.removeItem("dappUrl"),localStorage.removeItem("iconUrl")},e.prototype.CallUnityOnAccountConnected=function(e){this.CallUnityMethod("OnAccountConnected",{accountInfo:e}),localStorage.setItem("dappName",this.dappName),localStorage.setItem("dappUrl",this.dappUrl),localStorage.setItem("iconUrl",this.iconUrl)},e.prototype.CallUnityMethod=function(e,t){window.unityInstance.SendMessage("UnityBeacon",e,"string"==typeof t?t:JSON.stringify(t))},e.prototype.GetHexPayloadString=function(e,t){var n,i=(n=t,M.Buffer.from(n,"utf8").toString("hex")),r=(i.length/2).toString(16),o="00000000".concat(r),s=o.slice(o.length-8);return(e===ce.MICHELINE?"0501":"0300")+s+i},e.prototype.NumToSigningType=function(e){return 0==e?ce.RAW:1==e?ce.OPERATION:2==e?ce.MICHELINE:void 0},e.prototype.GetOperationsList=function(e,t,n,i){return[{kind:ee.TRANSACTION,amount:t,destination:e,parameters:{entrypoint:n,value:JSON.parse(i)}}]},e.prototype.GetOriginationOperationsList=function(e,t){return[{kind:ee.ORIGINATION,balance:"0",delegate:t,script:JSON.parse(e)}]},e}();const de=he;var fe,pe;!function(e){e.transfer_request="transfer_request",e.sign_payload_request="sign_payload_request"}(fe||(fe={})),function(e){e.transfer="transfer",e.sign_payload_json="sign_payload_json",e.sign_payload_raw="sign_payload_raw"}(pe||(pe={}));var ge;function ye(e){return Object.keys(e)}!function(e){e.PENDING="pending",e.RESOLVED="resolved",e.REJECTED="rejected"}(ge||(ge={}));const be=()=>{throw new Error("ExposedPromise not initialized yet.")};class me{constructor(){this._resolve=be,this._reject=be,this._status=ge.PENDING,this._promise=new Promise(((e,t)=>{this._resolve=t=>{this.isSettled()||(this._promiseResult=t,e(t),this._status=ge.RESOLVED)},this._reject=e=>{this.isSettled()||(this._promiseError=e,t(e),this._status=ge.REJECTED)}}))}get promise(){return this._promise}get resolve(){return this._resolve}get reject(){return this._reject}get status(){return this._status}get promiseResult(){return this._promiseResult}get promiseError(){return this._promiseError}static resolve(e){const t=new me;return t.resolve(e),t}static reject(e){const t=new me;return t.reject(e),t}isPending(){return this.status===ge.PENDING}isResolved(){return this.status===ge.RESOLVED}isRejected(){return this.status===ge.REJECTED}isSettled(){return this.isResolved()||this.isRejected()}}var ve=n(450),we=n(1416),Ee=n(6249),Se=n(3683),Ie=n(8764).Buffer,Ae=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};function Re(e){return Ie.from(e).toString("hex")}function xe(e){return Ae(this,void 0,void 0,(function*(){return Re("string"==typeof e?(0,k.hash)((0,Ee.cv)(e),32):(0,k.hash)(e,32))}))}function Me(e){return Ae(this,void 0,void 0,(function*(){return(0,T._w)((0,k.hash)((0,Ee.cv)(e),32))}))}function Te(e,t){return Ae(this,void 0,void 0,(function*(){const n=Ie.from((0,we.randomBytes)(24));return Re(Ie.concat([n,Ie.from((0,ve.secretBox)(t,n,Ie.from(e,"utf8")))]))}))}function ke(e,t){return Ae(this,void 0,void 0,(function*(){const n=e.slice(0,24),i=e.slice(24),r=(0,ve.openSecretBox)(t,n,i);if(!r)throw new Error("Decryption failed");return Ie.from(r).toString("utf8")}))}function Oe(e,t,n){return Ae(this,void 0,void 0,(function*(){const i=(0,T.zh)(Ie.from(n)),r=(0,T.SH)(Ie.from(t)),o="string"==typeof e?(0,Ee.cv)(e):e,s=o.slice(0,32),a=o.slice(32),c=new k.BLAKE2b(24).update(s,32).update(r,32).digest(),l=(0,ve.openBox)(s,i,c,a);if(!l)throw new Error("Decryption failed");return Ie.from(l).toString()}))}function Ue(e){return Ae(this,void 0,void 0,(function*(){const t={edpk:{length:54,prefix:Ie.from(new Uint8Array([6,161,159]))},sppk:{length:55,prefix:Ie.from(new Uint8Array([6,161,161]))},p2pk:{length:55,prefix:Ie.from(new Uint8Array([6,161,164]))}};let n,i;if(64===e.length)n=t.edpk.prefix,i=e;else{const r=Object.entries(t);for(let t=0;tAe(void 0,void 0,void 0,(function*(){const n=yield(e=>Ae(void 0,void 0,void 0,(function*(){if(e.length%2!=0)return(0,Ee.cv)(e);let t=e;e.startsWith("0x")&&(t=e.slice(2));const n=Ie.from(t,"hex");return n.length===t.length/2?n:(0,Ee.cv)(e)})))(e),i=new Uint8Array([9,245,205,134,18]),r=yield((e,t=32)=>Ae(void 0,void 0,void 0,(function*(){return(0,k.hash)(e,t)})))(n),o=(0,T.Xx)(t.secretKey,r);return O.encode(Ie.concat([Ie.from(i),Ie.from(o)]))}));var Ne=n(8764).Buffer,Ke=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};function Le(){return Ke(this,void 0,void 0,(function*(){const e=(0,we.randomBytes)(16);return[e.slice(0,4),e.slice(4,6),e.slice(6,8),e.slice(8,10),e.slice(10,16)].map((function(e){return Ne.from(e).toString("hex")})).join("-")}))}var qe=n(5108);const ze=[e=>{}];let Ve={postMessage:(e,t)=>{qe.log("GOT MOCK POST MESSAGE",e),ze.forEach((t=>{t({data:e})}))},addEventListener:(e,t)=>{ze.push(t)},removeEventListener:(e,t)=>{ze.splice(ze.indexOf((e=>e===t)),1)},location:{origin:"*"}};try{"undefined"!=typeof window&&(Ve=window)}catch(e){qe.log(`not defined: ${e}`)}class Fe{track(e,t,n,i){}}var je=n(5108),De=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};class Be{constructor(e){var t,n;if(this._beaconId=new me,this._keyPair=new me,!e.name)throw new Error("Name not set");if(!e.storage)throw new Error("Storage not set");this.name=e.name,this.iconUrl=e.iconUrl,this.appUrl=null!==(t=e.appUrl)&&void 0!==t?t:Ve.location.origin,this.storage=e.storage,this.analytics=null!==(n=e.analytics)&&void 0!==n?n:new Fe,Ve.beaconCreatedClientInstance?je.error("[BEACON] It looks like you created multiple Beacon SDK Client instances. This can lead to problems. Only create one instance and re-use it everywhere."):Ve.beaconCreatedClientInstance=!0,this.initSDK().catch(je.error)}get beaconId(){return this._beaconId.promise}get keyPair(){return this._keyPair.promise}destroy(){return De(this,void 0,void 0,(function*(){yield this.removeBeaconEntriesFromStorage(),Ve.beaconCreatedClientInstance=!1}))}initSDK(){return De(this,void 0,void 0,(function*(){return this.storage.set(se.BEACON_SDK_VERSION,"4.0.12").catch(je.error),this.loadOrCreateBeaconSecret().catch(je.error),this.keyPair.then((e=>{this._beaconId.resolve(Re(e.publicKey))}))}))}removeBeaconEntriesFromStorage(){return De(this,void 0,void 0,(function*(){const e=Object.values(se);yield Promise.all(e.map((e=>this.storage.delete(e))))}))}loadOrCreateBeaconSecret(){return De(this,void 0,void 0,(function*(){const e=yield this.storage.get(se.BEACON_SDK_SECRET_SEED);if(e&&"string"==typeof e)this._keyPair.resolve(yield Me(e));else{const e=yield Le();yield this.storage.set(se.BEACON_SDK_SECRET_SEED,e),this._keyPair.resolve(yield Me(e))}}))}}var We=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};class Je{constructor(e,t){this.storage=e,this.storageKey=t}getAll(){var e;return We(this,void 0,void 0,(function*(){return null!==(e=yield this.storage.get(this.storageKey))&&void 0!==e?e:[]}))}getOne(e){return We(this,void 0,void 0,(function*(){return(yield this.storage.get(this.storageKey)).find(e)}))}addOne(e,t,n=!0){return We(this,void 0,void 0,(function*(){const i=yield this.storage.get(this.storageKey);if(i.some(t)){if(n)for(let n=0;n!e(t)));return this.storage.set(this.storageKey,t)}))}removeAll(){return We(this,void 0,void 0,(function*(){return this.storage.delete(this.storageKey)}))}}var Ze=n(8764).Buffer,Qe=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};const He=(e,t)=>Qe(void 0,void 0,void 0,(function*(){const n=[e,t.type];t.name&&n.push(`name:${t.name}`),t.rpcUrl&&n.push(`rpc:${t.rpcUrl}`);const i=Ze.from((0,k.hash)((0,Ee.cv)(n.join("-")),10));return O.encode(i)}));var Ge=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};class Ye{static hasPermission(e,t,n){return Ge(this,void 0,void 0,(function*(){switch(e.type){case X.PermissionRequest:case X.BroadcastRequest:return!0;case X.OperationRequest:{const n=yield He(e.sourceAddress,e.network),i=yield t(n);return!!i&&i.scopes.includes(_.OPERATION_REQUEST)}case X.SignPayloadRequest:{const t=(yield n()).filter((t=>t.address===e.sourceAddress));return 0!==t.length&&t.some((e=>e.scopes.includes(_.SIGN)))}default:throw new Error("Message not handled")}}))}}var Xe=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};class _e{constructor(e){this.storageManager=new Je(e,se.ACCOUNTS)}getAccounts(){var e;return Xe(this,void 0,void 0,(function*(){return null!==(e=yield this.storageManager.getAll())&&void 0!==e?e:[]}))}getAccount(e){return Xe(this,void 0,void 0,(function*(){return this.storageManager.getOne((t=>t.accountIdentifier===e))}))}addAccount(e){return Xe(this,void 0,void 0,(function*(){return this.storageManager.addOne(e,(t=>t.accountIdentifier===e.accountIdentifier))}))}removeAccount(e){return Xe(this,void 0,void 0,(function*(){return this.storageManager.remove((t=>t.accountIdentifier===e))}))}removeAccounts(e){return Xe(this,void 0,void 0,(function*(){return this.storageManager.remove((t=>e.includes(t.accountIdentifier)))}))}removeAllAccounts(){return Xe(this,void 0,void 0,(function*(){return this.storageManager.removeAll()}))}hasPermission(e){return Xe(this,void 0,void 0,(function*(){return Ye.hasPermission(e,this.getAccount.bind(this),this.getAccounts.bind(this))}))}}var $e=n(8764).Buffer,et=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};const tt=e=>et(void 0,void 0,void 0,(function*(){const t=$e.from((0,k.hash)($e.from(e,"hex"),5));return O.encode(t)}));var nt=n(5108);let it=!!Ve.beaconSdkDebugEnabled;it&&nt.log("[BEACON]: Debug mode is ON (turned on either by the developer or a browser extension)");var rt=n(5108);class ot{constructor(e){this.name=e}debug(e,...t){st.debug(this.name,e,t)}log(e,...t){st.log(this.name,e,t)}warn(e,...t){st.warn(this.name,e,t)}error(e,...t){st.error(this.name,e,t)}time(e,t){st.time(e,t)}timeLog(e,...t){st.timeLog(e,t)}}new ot("");let st=new class{constructor(){}debug(e,t,...n){this._log("debug",e,t,n)}log(e,t,...n){this._log("log",e,t,n)}warn(e,t,...n){this._log("warn",e,t,n)}error(e,t,...n){this._log("error",e,t,n)}time(e,t){e?rt.time(t):rt.timeEnd(t)}timeLog(e,t,...n){this._log("timeLog",e,t,n)}_log(e,t,n,i=[]){if(!it)return;let r=`[BEACON] ${(new Date).toISOString()} [${t}](${n})`,o=i;switch(i[0]&&"string"==typeof i[0]&&(r+=` ${i[0]}`,o=i.slice(1)),e){case"error":rt.group(r),rt.error(...o);break;case"warn":rt.group(r),rt.warn(...o);break;case"debug":rt.groupCollapsed(r),rt.debug(...o);break;case"timeLog":rt.group(r),rt.timeLog(...o);break;default:rt.group(r),rt.log(...o)}rt.groupEnd()}};var at=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};const ct=new ot("Client");class lt extends Be{constructor(e){var t;super(e),this.rateLimit=2,this.rateLimitWindowInSeconds=5,this.requestCounter=[],this._transport=new me,this.accountManager=new _e(e.storage),this.matrixNodes=null!==(t=e.matrixNodes)&&void 0!==t?t:{},this.handleResponse=(e,t)=>{throw new Error(`not overwritten${JSON.stringify(e)} - ${JSON.stringify(t)}`)}}get transport(){return this._transport.promise}get connectionStatus(){var e,t;return null!==(t=null===(e=this._transport.promiseResult)||void 0===e?void 0:e.connectionStatus)&&void 0!==t?t:re.NOT_CONNECTED}get ready(){return this.transport.then((()=>{}))}getAccounts(){return at(this,void 0,void 0,(function*(){return this.accountManager.getAccounts()}))}getAccount(e){return at(this,void 0,void 0,(function*(){return this.accountManager.getAccount(e)}))}removeAccount(e){return at(this,void 0,void 0,(function*(){return this.accountManager.removeAccount(e)}))}removeAllAccounts(){return at(this,void 0,void 0,(function*(){return this.accountManager.removeAllAccounts()}))}addRequestAndCheckIfRateLimited(){return at(this,void 0,void 0,(function*(){const e=(new Date).getTime();return this.requestCounter=this.requestCounter.filter((t=>t+1e3*this.rateLimitWindowInSeconds>e)),this.requestCounter.push(e),this.requestCounter.length>this.rateLimit}))}init(e){return at(this,void 0,void 0,(function*(){return this._transport.status===ge.RESOLVED?(yield this.transport).type:(yield this.setTransport(e),e.type)}))}getOwnAppMetadata(){return at(this,void 0,void 0,(function*(){return{senderId:yield tt(yield this.beaconId),name:this.name,icon:this.iconUrl}}))}getPeers(){return at(this,void 0,void 0,(function*(){return(yield this.transport).getPeers()}))}addPeer(e){return at(this,void 0,void 0,(function*(){return(yield this.transport).addPeer(e)}))}destroy(){const e=Object.create(null,{destroy:{get:()=>super.destroy}});return at(this,void 0,void 0,(function*(){this._transport.status===ge.RESOLVED&&(yield(yield this.transport).disconnect()),yield e.destroy.call(this)}))}setTransport(e){return at(this,void 0,void 0,(function*(){e?this._transport.isSettled()?this._transport=me.resolve(e):this._transport.resolve(e):this._transport.isSettled()&&(this._transport=new me)}))}addListener(e){return at(this,void 0,void 0,(function*(){e.addListener(((e,t)=>at(this,void 0,void 0,(function*(){if("string"==typeof e){const n=yield(new Mt).deserialize(e);this.handleResponse(n,t)}})))).catch((e=>ct.error("addListener",e)))}))}sendDisconnectToPeer(e,t){return at(this,void 0,void 0,(function*(){const n={id:yield Le(),version:e.version,senderId:yield tt(yield this.beaconId),type:X.Disconnect},i=yield(new Mt).serialize(n),r=null!=t?t:yield this.transport;yield r.send(i,e)}))}}class ut{constructor(e,t){this.name="BeaconError",this.title="Error",this.message=`[${e}]:${t}`,this.description=t}get fullDescription(){return{description:this.description}}static getError(e,t){switch(e){case ie.BROADCAST_ERROR:return new ht;case ie.NETWORK_NOT_SUPPORTED:return new dt;case ie.NO_ADDRESS_ERROR:return new ft;case ie.NO_PRIVATE_KEY_FOUND_ERROR:return new pt;case ie.NOT_GRANTED_ERROR:return new gt;case ie.PARAMETERS_INVALID_ERROR:return new yt;case ie.TOO_MANY_OPERATIONS:return new bt;case ie.TRANSACTION_INVALID_ERROR:return new mt(t);case ie.SIGNATURE_TYPE_NOT_SUPPORTED:return new jt;case ie.ABORTED_ERROR:return new Ot;case ie.UNKNOWN_ERROR:return new vt}}}class ht extends ut{constructor(){super(ie.BROADCAST_ERROR,"The transaction could not be broadcast to the network. Please try again."),this.name="BroadcastBeaconError",this.title="Broadcast Error"}}class dt extends ut{constructor(){super(ie.NETWORK_NOT_SUPPORTED,"The wallet does not support this network. Please select another one."),this.name="NetworkNotSupportedBeaconError",this.title="Network Error"}}class ft extends ut{constructor(){super(ie.NO_ADDRESS_ERROR,"The wallet does not have an account set up. Please make sure to set up your wallet and try again."),this.name="NoAddressBeaconError",this.title="No Address"}}class pt extends ut{constructor(){super(ie.NO_PRIVATE_KEY_FOUND_ERROR,"The account you are trying to interact with is not available. Please make sure to add the account to your wallet and try again."),this.name="NoPrivateKeyBeaconError",this.title="Account Not Found"}}class gt extends ut{constructor(){super(ie.NOT_GRANTED_ERROR,"You do not have the necessary permissions to perform this action. Please initiate another permission request and give the necessary permissions."),this.name="NotGrantedBeaconError",this.title="Permission Not Granted"}}class yt extends ut{constructor(){super(ie.PARAMETERS_INVALID_ERROR,"Some of the parameters you provided are invalid and the request could not be completed. Please check your inputs and try again."),this.name="ParametersInvalidBeaconError",this.title="Parameters Invalid"}}class bt extends ut{constructor(){super(ie.TOO_MANY_OPERATIONS,"The request contains too many transactions. Please include fewer operations and try again."),this.name="TooManyOperationsBeaconError",this.title="Too Many Operations"}}class mt extends ut{constructor(e){super(ie.TRANSACTION_INVALID_ERROR,"The transaction is invalid and the node did not accept it."),this.data=e,this.name="TransactionInvalidBeaconError",this.title="Transaction Invalid",this.data=e}get fullDescription(){return{description:this.description,data:JSON.stringify(this.data,void 0,2)}}}class vt extends ut{constructor(){super(ie.UNKNOWN_ERROR,"An unknown error occured. Please try again or report it to a developer."),this.name="UnknownBeaconError",this.title="Error"}}var wt=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};const Et=new ot("Transport");class St{constructor(e,t,n){this.type=oe.POST_MESSAGE,this._isConnected=re.NOT_CONNECTED,this.listeners=[],this.name=e,this.client=t,this.peerManager=n}setEventHandler(e,t){this.client.eventHandlers.set(e,t)}get connectionStatus(){return this._isConnected}static isAvailable(){return wt(this,void 0,void 0,(function*(){return Promise.resolve(!1)}))}connect(){return wt(this,void 0,void 0,(function*(){Et.log("connect"),this._isConnected=re.CONNECTED}))}disconnect(){return wt(this,void 0,void 0,(function*(){Et.log("disconnect"),this._isConnected=re.NOT_CONNECTED}))}send(e,t){return wt(this,void 0,void 0,(function*(){if(t)return this.client.sendMessage(e,t);{const t=(yield this.getPeers()).map((t=>this.client.sendMessage(e,t)));return(yield Promise.all(t))[0]}}))}addListener(e){return wt(this,void 0,void 0,(function*(){Et.debug("addListener"),this.listeners.push(e)}))}removeListener(e){return wt(this,void 0,void 0,(function*(){Et.log("removeListener"),this.listeners=this.listeners.filter((t=>t!==e))}))}getPeers(){return wt(this,void 0,void 0,(function*(){return this.peerManager.getPeers()}))}addPeer(e,t=!0){return wt(this,void 0,void 0,(function*(){Et.log("addPeer","adding peer",e),yield this.peerManager.addPeer(e),yield this.listen(e.publicKey)}))}removePeer(e){return wt(this,void 0,void 0,(function*(){Et.log("removePeer","removing peer",e),yield this.peerManager.removePeer(e.publicKey),this.client&&(yield this.client.unsubscribeFromEncryptedMessage(e.publicKey))}))}removeAllPeers(){return wt(this,void 0,void 0,(function*(){Et.log("removeAllPeers"),yield this.peerManager.removeAllPeers(),this.client&&(yield this.client.unsubscribeFromEncryptedMessages())}))}notifyListeners(e,t){return wt(this,void 0,void 0,(function*(){0===this.listeners.length?Et.warn("notifyListeners","0 listeners notified!",this):Et.log("notifyListeners",`Notifying ${this.listeners.length} listeners`,this),this.listeners.forEach((n=>{n(e,t)}))}))}}var It=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};class At{constructor(e){this.prefix=e}static isSupported(){return It(this,void 0,void 0,(function*(){return Promise.resolve(Boolean("undefined"!=typeof window)&&Boolean(window.localStorage))}))}get(e){return It(this,void 0,void 0,(function*(){const t=localStorage.getItem(this.getPrefixedKey(e));if(!t)return"object"==typeof ae[e]?JSON.parse(JSON.stringify(ae[e])):ae[e];try{return JSON.parse(t)}catch(e){return t}}))}set(e,t){return It(this,void 0,void 0,(function*(){return"string"==typeof t?localStorage.setItem(this.getPrefixedKey(e),t):localStorage.setItem(this.getPrefixedKey(e),JSON.stringify(t))}))}delete(e){return It(this,void 0,void 0,(function*(){return Promise.resolve(localStorage.removeItem(this.getPrefixedKey(e)))}))}getPrefixedKey(e){return this.prefix?`${this.prefix}-${e}`:e}}new ot("STORAGE");var Rt=n(8764).Buffer,xt=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};class Mt{serialize(e){return xt(this,void 0,void 0,(function*(){const t=JSON.stringify(e);return O.encode(Rt.from(t))}))}deserialize(e){return xt(this,void 0,void 0,(function*(){if("string"!=typeof e)throw new Error("Encoded payload needs to be a string");return JSON.parse(O.decode(e).toString())}))}}var Tt=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};class kt{constructor(e){this.storageManager=new Je(e,se.APP_METADATA_LIST)}getAppMetadataList(){var e;return Tt(this,void 0,void 0,(function*(){return null!==(e=yield this.storageManager.getAll())&&void 0!==e?e:[]}))}getAppMetadata(e){return Tt(this,void 0,void 0,(function*(){return this.storageManager.getOne((t=>t.senderId===e))}))}addAppMetadata(e){return Tt(this,void 0,void 0,(function*(){return this.storageManager.addOne(e,(t=>t.senderId===e.senderId))}))}removeAppMetadata(e){return Tt(this,void 0,void 0,(function*(){return this.storageManager.remove((t=>t.senderId===e))}))}removeAppMetadatas(e){return Tt(this,void 0,void 0,(function*(){return this.storageManager.remove((t=>e.includes(t.senderId)))}))}removeAllAppMetadata(){return Tt(this,void 0,void 0,(function*(){return this.storageManager.removeAll()}))}}class Ot extends ut{constructor(){super(ie.ABORTED_ERROR,"The action was aborted by the user."),this.name="UnknownBeaconError",this.title="Aborted"}}var Ut=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};class Ct{constructor(e,t){this.storageManager=new Je(e,t)}hasPeer(e){return Ut(this,void 0,void 0,(function*(){return!!(yield this.getPeer(e))}))}getPeers(){var e;return Ut(this,void 0,void 0,(function*(){return null!==(e=yield this.storageManager.getAll())&&void 0!==e?e:[]}))}getPeer(e){return Ut(this,void 0,void 0,(function*(){return this.storageManager.getOne((t=>t.publicKey===e))}))}addPeer(e){return Ut(this,void 0,void 0,(function*(){return this.storageManager.addOne(e,(t=>t.publicKey===e.publicKey))}))}removePeer(e){return Ut(this,void 0,void 0,(function*(){return this.storageManager.remove((t=>t.publicKey===e))}))}removePeers(e){return Ut(this,void 0,void 0,(function*(){return this.storageManager.remove((t=>e.includes(t.publicKey)))}))}removeAllPeers(){return Ut(this,void 0,void 0,(function*(){return this.storageManager.removeAll()}))}}var Pt=n(4826),Nt=n(8764).Buffer,Kt=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};class Lt{constructor(e){this.keyPair=e,this.eventHandlers=new Map}getPublicKey(){var e;return Kt(this,void 0,void 0,(function*(){return Re(null===(e=this.keyPair)||void 0===e?void 0:e.publicKey)}))}getPublicKeyHash(){return Kt(this,void 0,void 0,(function*(){return xe(this.keyPair.publicKey)}))}createCryptoBoxServer(e,t){return Kt(this,void 0,void 0,(function*(){return(0,Pt.serverSessionKeys)({publicKey:(0,T.SH)(t.publicKey),secretKey:(0,T.zh)(t.secretKey)},(0,T.SH)(Nt.from(e,"hex")))}))}createCryptoBoxClient(e,t){return Kt(this,void 0,void 0,(function*(){return(0,Pt.clientSessionKeys)({publicKey:(0,T.SH)(t.publicKey),secretKey:(0,T.zh)(t.secretKey)},(0,T.SH)(Nt.from(e,"hex")))}))}encryptMessageAsymmetric(e,t){return Kt(this,void 0,void 0,(function*(){return function(e,t){return Ae(this,void 0,void 0,(function*(){const n=(0,T.SH)(Ie.from(t)),i=(0,ve.generateKeyPair)(),r=new k.BLAKE2b(24).update(i.publicKey,32).update(n,32).digest(),o="string"==typeof e?(0,Ee.cv)(e):e,s=(0,ve.box)(n,i.secretKey,r,o);return Re((0,Se.z)(i.publicKey,s))}))}(t,Nt.from(e,"hex"))}))}}var qt=n(5108),zt=n(8764).Buffer,Vt=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};class Ft extends Lt{constructor(e,t){super(t),this.name=e,this.init().catch(qt.error)}start(){return Vt(this,void 0,void 0,(function*(){yield Promise.resolve()}))}getPairingRequestInfo(){return Vt(this,void 0,void 0,(function*(){return{id:yield Le(),type:"postmessage-pairing-request",name:this.name,version:"3",publicKey:yield this.getPublicKey()}}))}getPairingResponseInfo(e){return Vt(this,void 0,void 0,(function*(){return{id:e.id,type:"postmessage-pairing-response",name:this.name,version:e.version,publicKey:yield this.getPublicKey()}}))}unsubscribeFromEncryptedMessage(e){return Vt(this,void 0,void 0,(function*(){this.activeListeners.get(e)&&this.activeListeners.delete(e)}))}unsubscribeFromEncryptedMessages(){return Vt(this,void 0,void 0,(function*(){this.activeListeners.clear()}))}decryptMessage(e,t){return Vt(this,void 0,void 0,(function*(){const n=yield this.createCryptoBoxServer(e,this.keyPair),i=zt.from(t,"hex");if(i.length>=40)try{return yield ke(i,n.receive)}catch(e){}throw new Error("Could not decrypt message")}))}encryptMessage(e,t){return Vt(this,void 0,void 0,(function*(){const n=yield this.createCryptoBoxClient(e,this.keyPair);return Te(t,n.send)}))}}class jt extends ut{constructor(){super(ie.SIGNATURE_TYPE_NOT_SUPPORTED,"The wallet is not able to sign payloads of this type."),this.name="SignatureTypeNotSupportedBeaconError",this.title="Signature Type Not Supported"}}var Dt,Bt=n(9669),Wt=n.n(Bt);!function(e){e.TEXT="m.text"}(Dt||(Dt={}));class Jt{constructor(e,t,n,i){this.type=e,this.sender=t,this.content=n,this.timestamp=i}static from(e){if(Qt(e))return new Jt(e.content.msgtype,e.sender,e.content.body,e.origin_server_ts)}}const Zt=e=>"m.room.message"===e.type,Qt=e=>Zt(e)&&e.content instanceof Object&&"msgtype"in e.content&&e.content.msgtype===Dt.TEXT;var Ht;!function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.JOINED=1]="JOINED",e[e.INVITED=2]="INVITED",e[e.LEFT=3]="LEFT"}(Ht||(Ht={}));class Gt{constructor(e,t=Ht.UNKNOWN,n=[],i=[]){this.id=e,this.status=t,this.members=n,this.messages=i}static fromSync(e){var t,n,i;if(!e)return[];function r(e,t){return Object.entries(e).map((([e,n])=>t(e,n)))}return[...r(null!==(t=e.join)&&void 0!==t?t:{},Gt.fromJoined),...r(null!==(n=e.invite)&&void 0!==n?n:{},Gt.fromInvited),...r(null!==(i=e.leave)&&void 0!==i?i:{},Gt.fromLeft)]}static from(e,t){return"string"==typeof e?new Gt(e,t||Ht.UNKNOWN):void 0!==t?new Gt(e.id,t,e.members,e.messages):e}static merge(e,t){return t&&t.id===e.id?new Gt(e.id,e.status,[...t.members,...e.members].filter(((e,t,n)=>n.indexOf(e)===t)),[...t.messages,...e.messages]):Gt.from(e)}static fromJoined(e,t){const n=[...t.state.events,...t.timeline.events],i=Gt.getMembersFromEvents(n),r=Gt.getMessagesFromEvents(n);return new Gt(e,Ht.JOINED,i,r)}static fromInvited(e,t){const n=Gt.getMembersFromEvents(t.invite_state.events);return new Gt(e,Ht.INVITED,n)}static fromLeft(e,t){const n=[...t.state.events,...t.timeline.events],i=Gt.getMembersFromEvents(n),r=Gt.getMessagesFromEvents(n);return new Gt(e,Ht.LEFT,i,r)}static getMembersFromEvents(e){return Gt.getUniqueEvents(e.filter((e=>(e=>"m.room.create"===e.type&&e.content instanceof Object&&"creator"in e.content)(e)||(e=>"m.room.member"===e.type&&e.content instanceof Object&&"membership"in e.content&&"join"===e.content.membership)(e)))).map((e=>e.sender)).filter(((e,t,n)=>n.indexOf(e)===t))}static getMessagesFromEvents(e){return Gt.getUniqueEvents(e.filter(Zt)).map((e=>Jt.from(e))).filter(Boolean)}static getUniqueEvents(e){const t={},n=[];return e.forEach(((e,i)=>{const r=e.event_id;void 0!==r&&r in t||(void 0!==r&&(t[r]=i),n.push(e))})),n}}var Yt=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};const Xt=["syncToken","rooms"];class _t{constructor(e){this.storage=e,this.state={isRunning:!1,userId:void 0,deviceId:void 0,txnNo:0,accessToken:void 0,syncToken:void 0,pollingTimeout:void 0,pollingRetries:0,rooms:{}},this.onStateChangedListeners=new Map,this.waitReadyPromise=new Promise(((e,t)=>Yt(this,void 0,void 0,(function*(){try{yield this.initFromStorage(),e()}catch(e){t(e)}}))))}get(e){return this.state[e]}getRoom(e){const t=Gt.from(e,Ht.UNKNOWN);return this.state.rooms[t.id]||t}update(e){return Yt(this,void 0,void 0,(function*(){yield this.waitReady();const t=Object.assign({},this.state);this.setState(e),this.updateStorage(e),this.notifyListeners(t,this.state,e)}))}onStateChanged(e,...t){t.length>0?t.forEach((t=>{this.onStateChangedListeners.set(t,e)})):this.onStateChangedListeners.set("all",e)}waitReady(){return Yt(this,void 0,void 0,(function*(){return this.waitReadyPromise}))}initFromStorage(){return Yt(this,void 0,void 0,(function*(){const e=yield this.storage.get(se.MATRIX_PRESERVED_STATE);this.setState(e)}))}prepareData(e){const t=["rooms"].some((t=>void 0!==e[t]))?JSON.parse(JSON.stringify(e)):e;return Object.values(t.rooms||{}).forEach((e=>{e.messages=[]})),t}updateStorage(e){if(Object.entries(e).filter((([e,t])=>Xt.includes(e)&&Boolean(t))).length>0){const e={};Xt.forEach((t=>{e[t]=this.state[t]})),this.storage.set(se.MATRIX_PRESERVED_STATE,this.prepareData(e))}}setState(e){this.state={isRunning:e.isRunning||this.state.isRunning,userId:e.userId||this.state.userId,deviceId:e.deviceId||this.state.deviceId,txnNo:e.txnNo||this.state.txnNo,accessToken:e.accessToken||this.state.accessToken,syncToken:e.syncToken||this.state.syncToken,pollingTimeout:e.pollingTimeout||this.state.pollingTimeout,pollingRetries:e.pollingRetries||this.state.pollingRetries,rooms:this.mergeRooms(this.state.rooms,e.rooms)}}mergeRooms(e,t){if(!t)return e;const n=Array.isArray(t)?t:Object.values(t),i=Object.assign({},e);return n.forEach((t=>{i[t.id]=Gt.merge(t,e[t.id])})),i}notifyListeners(e,t,n){const i=this.onStateChangedListeners.get("all");i&&i(e,t,n),ye(n).filter((e=>void 0!==n[e])).forEach((i=>{const r=this.onStateChangedListeners.get(i);r&&r(e,t,n)}))}}var $t=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};const en=new ot("MatrixHttpClient");class tn{constructor(e){this.baseUrl=e,this.cancelTokenSource=Wt().CancelToken.source()}get(e,t,n){return $t(this,void 0,void 0,(function*(){return this.send("GET",e,n,t)}))}post(e,t,n,i){return $t(this,void 0,void 0,(function*(){return this.send("POST",e,n,i,t)}))}put(e,t,n,i){return $t(this,void 0,void 0,(function*(){return this.send("PUT",e,n,i,t)}))}cancelAllRequests(){return $t(this,void 0,void 0,(function*(){return this.cancelTokenSource.cancel("Manually cancelled")}))}send(e,t,n,i,r){return $t(this,void 0,void 0,(function*(){const o=n?this.getHeaders(n):void 0,s=i?this.getParams(i):void 0;let a;try{a=yield Wt().request({method:e,url:t,baseURL:this.apiUrl("/_matrix/client/r0"),headers:o,data:r,params:s,cancelToken:this.cancelTokenSource.token})}catch(e){const t=e;throw en.error("send",t.code,t.message,t.response.data),e.response.data}return a.data}))}getHeaders(e){const t={},n=[];if(e.accessToken&&n.push(["Authorization",`Bearer ${e.accessToken}`]),0!==n.length){for(const[e,i]of n)t[e]=i;return t}}getParams(e){if(!e)return;const t=Object.assign(e,{});return ye(t).forEach((e=>void 0===t[e]&&delete t[e])),t}apiUrl(...e){return[this.baseUrl.endsWith("/")?this.baseUrl.substr(0,this.baseUrl.length-1):this.baseUrl,...e.map((e=>e.startsWith("/")?e.substr(1):e))].join("/")}}var nn=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};class rn{constructor(e){this.httpClient=e}createRoom(e,t={}){return nn(this,void 0,void 0,(function*(){return this.httpClient.post("/createRoom",t,{accessToken:e})}))}inviteToRoom(e,t,n){return nn(this,void 0,void 0,(function*(){return n.status!==Ht.JOINED&&n.status!==Ht.UNKNOWN?Promise.reject(`User is not a member of room ${n.id}.`):this.httpClient.post(`/rooms/${encodeURIComponent(n.id)}/invite`,{user_id:t},{accessToken:e})}))}joinRoom(e,t){return nn(this,void 0,void 0,(function*(){return t.status===Ht.JOINED?Promise.resolve({room_id:t.id}):this.httpClient.post(`/rooms/${encodeURIComponent(t.id)}/join`,{},{accessToken:e})}))}getJoinedRooms(e){return nn(this,void 0,void 0,(function*(){return this.httpClient.get("/joined_rooms",void 0,{accessToken:e})}))}}var on=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};class sn{constructor(e){this.httpClient=e}login(e,t,n){return on(this,void 0,void 0,(function*(){return this.httpClient.post("/login",{type:"m.login.password",identifier:{type:"m.id.user",user:e},password:t,device_id:n})}))}}var an,cn=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};class ln{constructor(e){this.httpClient=e,this.cachedPromises=new Map}sync(e,t){return cn(this,void 0,void 0,(function*(){return this.withCache("sync",(()=>this.httpClient.get("/sync",{timeout:t?t.pollingTimeout:void 0,since:t?t.syncToken:void 0},{accessToken:e})))}))}sendMessage(e,t,n,i){return cn(this,void 0,void 0,(function*(){return new Promise(((r,o)=>this.scheduleEvent({accessToken:e,roomId:t,type:"m.room.message",content:n,txnId:i,onSuccess:r,onError:o})))}))}scheduleEvent(e){this.sendEvent(e)}sendEvent(e){return cn(this,void 0,void 0,(function*(){const{roomId:t,type:n,txnId:i,content:r,accessToken:o}=e;try{const s=yield this.httpClient.put(`/rooms/${encodeURIComponent(t)}/send/${n}/${encodeURIComponent(i)}`,r,{accessToken:o});e.onSuccess(s)}catch(t){e.onError(t)}}))}withCache(e,t){let n=this.cachedPromises.get(e);return n||(n=t().finally((()=>{this.cachedPromises.delete(e)})),this.cachedPromises.set(e,n)),n}}class un{constructor(){this.events={}}on(e,t){return"object"!=typeof this.events[e]&&(this.events[e]=[]),this.events[e].push(t),()=>this.removeListener(e,t)}removeListener(e,t){if("object"!=typeof this.events[e])return;if(!t)return void(this.events[e]=[]);const n=this.events[e].indexOf(t);n>-1&&this.events[e].splice(n,1)}removeAllListeners(){Object.keys(this.events).forEach((e=>this.events[e].splice(0,this.events[e].length)))}emit(e,...t){"object"==typeof this.events[e]&&[...this.events[e]].forEach((e=>e.apply(this,t)))}once(e,t){const n=this.on(e,((...e)=>{n(),t.apply(this,e)}));return n}}!function(e){e.INVITE="invite",e.MESSAGE="message"}(an||(an={}));class hn extends un{constructor(){super(...arguments),this.eventEmitProviders=new Map([[an.INVITE,()=>[this.isInvite,this.emitInvite.bind(this)]],[an.MESSAGE,()=>[this.isMessage,this.emitMessage.bind(this)]]])}onStateChanged(e,t,n){for(const e of ye(an))this.emitIfEvent(an[e],n)}emitIfEvent(e,t){const n=this.eventEmitProviders.get(e);if(n){const[i,r]=n();i(t)&&r(e,t)}}emitClientEvent(e,t,n){this.emit(e,{type:e,content:t,timestamp:n})}isInvite(e){return!!e.rooms&&e.rooms.some((e=>e.status===Ht.INVITED))}emitInvite(e,t){t.rooms.filter((e=>e.status===Ht.INVITED)).map((e=>[e.id,e.members])).forEach((([t,n])=>{this.emitClientEvent(e,{roomId:t,members:n})}))}isMessage(e){return!!e.rooms&&e.rooms.some((e=>e.messages.length>0))}emitMessage(e,t){t.rooms.filter((e=>e.messages.length>0)).map((e=>e.messages.map((t=>[e.id,t,t.timestamp])))).reduce(((e,t)=>e.concat(t)),[]).forEach((([t,n,i])=>{this.emitClientEvent(e,{roomId:t,message:n},i)}))}}var dn=n(5108),fn=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};const pn=new ot("MatrixClient");class gn{constructor(e,t,n,i,r,o){this.store=e,this.eventEmitter=t,this.userService=n,this.roomService=i,this.eventService=r,this.httpClient=o,this.isActive=!0,this._isReady=new me,this.store.onStateChanged(((e,t,n)=>{this.eventEmitter.onStateChanged(e,t,n)}),"rooms")}static create(e){const t=new _t(e.storage),n=new hn,i=new tn(e.baseUrl),r=new sn(i),o=new rn(i),s=new ln(i);return new gn(t,n,r,o,s,i)}get joinedRooms(){return new Promise((e=>fn(this,void 0,void 0,(function*(){yield this.isConnected(),e(Object.values(this.store.get("rooms")).filter((e=>e.status===Ht.JOINED)))}))))}get invitedRooms(){return new Promise((e=>fn(this,void 0,void 0,(function*(){yield this.isConnected(),e(Object.values(this.store.get("rooms")).filter((e=>e.status===Ht.INVITED)))}))))}get leftRooms(){return new Promise((e=>fn(this,void 0,void 0,(function*(){yield this.isConnected(),e(Object.values(this.store.get("rooms")).filter((e=>e.status===Ht.LEFT)))}))))}start(e){return fn(this,void 0,void 0,(function*(){const t=yield this.userService.login(e.id,e.password,e.deviceId);yield this.store.update({accessToken:t.access_token});const n=new Promise(((e,t)=>fn(this,void 0,void 0,(function*(){yield this.poll(0,(t=>fn(this,void 0,void 0,(function*(){this.store.get("isRunning")||e(),yield this.store.update({isRunning:!0,syncToken:t.next_batch,pollingTimeout:3e4,pollingRetries:0,rooms:Gt.fromSync(t.rooms)})}))),(e=>fn(this,void 0,void 0,(function*(){this.store.get("isRunning")||t(e),yield this.store.update({isRunning:!1,pollingRetries:this.store.get("pollingRetries")+1})}))))}))));return n.then((()=>{this._isReady.resolve()})).catch(dn.error),n}))}isConnected(){return fn(this,void 0,void 0,(function*(){return this._isReady.promise}))}stop(){return fn(this,void 0,void 0,(function*(){return pn.log("MATRIX CLIENT STOPPED"),this.isActive=!1,this._isReady=new me,this.httpClient.cancelAllRequests()}))}subscribe(e,t){this.eventEmitter.on(e,t)}unsubscribe(e,t){t&&this.eventEmitter.removeListener(e,t)}unsubscribeAll(e){this.eventEmitter.removeListener(e)}getRoomById(e){return fn(this,void 0,void 0,(function*(){return yield this.isConnected(),this.store.getRoom(e)}))}createTrustedPrivateRoom(...e){return fn(this,void 0,void 0,(function*(){return yield this.isConnected(),this.requiresAuthorization("createRoom",(t=>fn(this,void 0,void 0,(function*(){return(yield this.roomService.createRoom(t,{room_version:"5",invite:e,preset:"public_chat",is_direct:!0})).room_id}))))}))}inviteToRooms(e,...t){return fn(this,void 0,void 0,(function*(){yield this.isConnected(),yield this.requiresAuthorization("invite",(n=>Promise.all(t.map((t=>{const i=this.store.getRoom(t);this.roomService.inviteToRoom(n,e,i).catch((e=>pn.warn("inviteToRooms",e)))})))))}))}joinRooms(...e){return fn(this,void 0,void 0,(function*(){yield this.isConnected(),yield this.requiresAuthorization("join",(t=>Promise.all(e.map((e=>{const n=this.store.getRoom(e);return this.roomService.joinRoom(t,n)})))))}))}sendTextMessage(e,t){return fn(this,void 0,void 0,(function*(){yield this.isConnected(),yield this.requiresAuthorization("send",(n=>fn(this,void 0,void 0,(function*(){const i=yield this.createTxnId();return this.eventService.sendMessage(n,e,{msgtype:"m.text",body:t},i)}))))}))}poll(e,t,n){return fn(this,void 0,void 0,(function*(){const i=this.store,r=this.sync.bind(this),o=(s,a)=>fn(this,void 0,void 0,(function*(){let c=0;try{const e=yield r();t(e)}catch(e){n(e),c=i.get("pollingRetries"),this.isActive&&pn.log(`Retry syncing... ${c} retries so far`)}finally{this.isActive?setTimeout((()=>fn(this,void 0,void 0,(function*(){yield o(s,a)}))),c>3?5e3+e:e):a(new Error("Syncing stopped manually."))}}));return new Promise(o)}))}sync(){return fn(this,void 0,void 0,(function*(){return this.requiresAuthorization("sync",(e=>fn(this,void 0,void 0,(function*(){return this.eventService.sync(e,{pollingTimeout:this.store.get("pollingTimeout"),syncToken:this.store.get("syncToken")})}))))}))}requiresAuthorization(e,t){return fn(this,void 0,void 0,(function*(){const n=this.store.get("accessToken");return n?t(n):Promise.reject(`${e} requires authorization but no access token has been provided.`)}))}createTxnId(){return fn(this,void 0,void 0,(function*(){const e=(new Date).getTime(),t=this.store.get("txnNo");return yield this.store.update({txnNo:t+1}),`m${e}.${t}`}))}}var yn=n(8764).Buffer,bn=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};const mn=new ot("P2PCommunicationClient"),vn={[ue.EUROPE_WEST]:["beacon-node-1.diamond.papers.tech","beacon-node-1.sky.papers.tech","beacon-node-2.sky.papers.tech","beacon-node-1.hope.papers.tech","beacon-node-1.hope-2.papers.tech","beacon-node-1.hope-3.papers.tech","beacon-node-1.hope-4.papers.tech","beacon-node-1.hope-5.papers.tech"]};class wn extends Lt{constructor(e,t,n,i,r,o,s){super(t),this.name=e,this.replicationCount=n,this.storage=i,this.iconUrl=o,this.appUrl=s,this.client=new me,this.activeListeners=new Map,this.ignoredRooms=[],this.loginCounter=0,mn.log("constructor","P2PCommunicationClient created"),this.ENABLED_RELAY_SERVERS=vn,r&&(this.ENABLED_RELAY_SERVERS=Object.assign(Object.assign({},vn),r))}getPairingRequestInfo(){return bn(this,void 0,void 0,(function*(){const e={id:yield Le(),type:"p2p-pairing-request",name:this.name,version:"3",publicKey:yield this.getPublicKey(),relayServer:(yield this.getRelayServer()).server};return this.iconUrl&&(e.icon=this.iconUrl),this.appUrl&&(e.appUrl=this.appUrl),e}))}getPairingResponseInfo(e){return bn(this,void 0,void 0,(function*(){const t={id:e.id,type:"p2p-pairing-response",name:this.name,version:e.version,publicKey:yield this.getPublicKey(),relayServer:(yield this.getRelayServer()).server};return this.iconUrl&&(t.icon=this.iconUrl),this.appUrl&&(t.appUrl=this.appUrl),t}))}findBestRegion(){return bn(this,void 0,void 0,(function*(){if(this.selectedRegion)return this.selectedRegion;const e=Object.keys(this.ENABLED_RELAY_SERVERS),t=[];e.forEach((e=>{var n;const i=null!==(n=this.ENABLED_RELAY_SERVERS[e])&&void 0!==n?n:[];if(0===i.length)return;const r=Math.floor(Math.random()*i.length);t.push(this.getBeaconInfo(i[r]).then((t=>({region:e,server:i[r],response:t}))).catch((e=>new Promise(((t,n)=>{setTimeout((()=>n(e)),2e3)})))))}));const n=yield Promise.race(t);return this.selectedRegion=n.region,n.region}))}getRelayServer(){return bn(this,void 0,void 0,(function*(){if(this.relayServer){const e=yield this.relayServer.promise;if(Date.now()-e.localTimestamp<6e4)return{server:e.server,timestamp:e.timestamp};const t=yield this.getBeaconInfo(e.server);return this.relayServer.resolve({server:e.server,timestamp:t.timestamp,localTimestamp:(new Date).getTime()}),{server:e.server,timestamp:t.timestamp}}this.relayServer=new me;const e=yield this.storage.get(se.MATRIX_SELECTED_NODE);if(e&&e.length>0){const t=yield this.getBeaconInfo(e);return this.relayServer.resolve({server:e,timestamp:t.timestamp,localTimestamp:(new Date).getTime()}),{server:e,timestamp:t.timestamp}}const t=yield this.findBestRegion(),n=this.ENABLED_RELAY_SERVERS[t];if(!n)throw new Error(`No servers found for region ${t}`);const i=[...n];for(;i.length>0;){const e=Math.floor(Math.random()*i.length),t=i[e];try{const e=yield this.getBeaconInfo(t);return this.storage.set(se.MATRIX_SELECTED_NODE,t).catch((e=>mn.log(e))),this.relayServer.resolve({server:t,timestamp:e.timestamp,localTimestamp:(new Date).getTime()}),{server:t,timestamp:e.timestamp}}catch(n){mn.log(`Ignoring server "${t}", trying another one...`),i.splice(e,1)}}throw this.relayServer.reject("No matrix server reachable!"),new Error("No matrix server reachable!")}))}getBeaconInfo(e){return bn(this,void 0,void 0,(function*(){return Wt().get(`https://${e}/_synapse/client/beacon/info`).then((e=>({region:e.data.region,known_servers:e.data.known_servers,timestamp:Math.floor(e.data.timestamp)})))}))}tryJoinRooms(e,t=1){return bn(this,void 0,void 0,(function*(){try{yield(yield this.client.promise).joinRooms(e)}catch(n){t<=10&&"M_FORBIDDEN"===n.errcode?(mn.log("Retrying to join...",n),setTimeout((()=>bn(this,void 0,void 0,(function*(){yield this.tryJoinRooms(e,t+1)}))),200)):mn.log(`Failed to join after ${t} tries.`,n)}}))}start(){var e,t;return bn(this,void 0,void 0,(function*(){mn.log("start","starting client"),mn.log("start","connecting to server");const n=yield this.getRelayServer(),i=gn.create({baseUrl:`https://${n.server}`,storage:this.storage});if(this.initialListener=e=>bn(this,void 0,void 0,(function*(){this.initialEvent&&this.initialEvent.timestamp&&e&&e.timestamp?this.initialEvent.timestampbn(this,void 0,void 0,(function*(){let t;1===e.content.members.length&&(t=e.content.members[0]),yield this.tryJoinRooms(e.content.roomId),t&&(yield this.updateRelayServer(t),yield this.updatePeerRoom(t,e.content.roomId))})))),!n.timestamp)throw new Error("No timestamp received from relay server");const r=Math.floor(n.timestamp),o=`login:${Math.floor(r/300)}`;mn.log("start",`login ${o}, ${yield this.getPublicKeyHash()} on ${n.server}`);const s=(0,k.hash)((0,Ee.cv)(o),32),a=null!==(e=this.keyPair.secretKey)&&void 0!==e?e:this.keyPair.privateKey,c=(0,T.Xx)(a,s);try{yield i.start({id:yield this.getPublicKeyHash(),password:`ed:${Re(c)}:${yield this.getPublicKey()}`,deviceId:Re(this.keyPair.publicKey)})}catch(e){if(mn.error("start","Could not log in, retrying"),yield this.reset(),!this.selectedRegion)throw new Error("No region selected.");if(this.loginCounter<=(null!==(t=this.ENABLED_RELAY_SERVERS[this.selectedRegion])&&void 0!==t?t:[]).length)return this.loginCounter++,void this.start();throw mn.error("start","Tried to log in to every known beacon node, but no login was successful."),new Error("Could not connect to any beacon nodes. Try again later.")}mn.log("start","login successful, client is ready"),this.client.resolve(i)}))}stop(){return bn(this,void 0,void 0,(function*(){mn.log("stop","stopping client"),this.client.isResolved()&&(yield(yield this.client.promise).stop().catch((e=>mn.error(e)))),yield this.reset()}))}reset(){return bn(this,void 0,void 0,(function*(){mn.log("reset","resetting connection"),yield this.storage.delete(se.MATRIX_PEER_ROOM_IDS).catch((e=>mn.log(e))),yield this.storage.delete(se.MATRIX_PRESERVED_STATE).catch((e=>mn.log(e))),yield this.storage.delete(se.MATRIX_SELECTED_NODE).catch((e=>mn.log(e))),this.relayServer=void 0,this.client=new me,this.initialEvent=void 0,this.initialListener=void 0}))}listenForEncryptedMessage(e,t){return bn(this,void 0,void 0,(function*(){if(this.activeListeners.has(e))return;mn.log("listenForEncryptedMessage",`start listening for encrypted messages from publicKey ${e}`);const n=yield this.createCryptoBoxServer(e,this.keyPair),i=i=>bn(this,void 0,void 0,(function*(){if(this.isTextMessage(i.content)&&(yield this.isSender(i,e))){let r;yield this.updateRelayServer(i.content.message.sender),yield this.updatePeerRoom(i.content.message.sender,i.content.roomId);try{r=yn.from(i.content.message.content,"hex")}catch(e){}if(r&&r.length>=40)try{const i=yield ke(r,n.receive);mn.log("listenForEncryptedMessage",`received a message from ${e}`,i),t(i)}catch(e){}}}));this.activeListeners.set(e,i),(yield this.client.promise).subscribe(an.MESSAGE,i);const r=this.initialEvent;r&&r.timestamp&&(new Date).getTime()-r.timestamp<3e5?(mn.log("listenForEncryptedMessage","Handling previous event"),yield i(r)):mn.log("listenForEncryptedMessage","No previous event found");const o=this.initialListener;o&&(yield this.client.promise).unsubscribe(an.MESSAGE,o),this.initialListener=void 0,this.initialEvent=void 0}))}unsubscribeFromEncryptedMessage(e){return bn(this,void 0,void 0,(function*(){const t=this.activeListeners.get(e);t&&((yield this.client.promise).unsubscribe(an.MESSAGE,t),this.activeListeners.delete(e))}))}unsubscribeFromEncryptedMessages(){return bn(this,void 0,void 0,(function*(){(yield this.client.promise).unsubscribeAll(an.MESSAGE),this.activeListeners.clear()}))}sendMessage(e,t){return bn(this,void 0,void 0,(function*(){const n=yield this.createCryptoBoxClient(t.publicKey,this.keyPair),i=Ce(yield xe(yn.from(t.publicKey,"hex")),t.relayServer),r=yield this.getRelevantRoom(i);yield this.waitForJoin(r);const o=yield Te(e,n.send);mn.log("sendMessage","sending encrypted message",t.publicKey,r,e),(yield this.client.promise).sendTextMessage(r,o).catch((e=>bn(this,void 0,void 0,(function*(){if("M_FORBIDDEN"===e.errcode){mn.log("sendMessage","M_FORBIDDEN",r,e),yield this.deleteRoomIdFromRooms(r);const t=yield this.getRelevantRoom(i);mn.log("sendMessage","Old room deleted, new room created",t),(yield this.client.promise).sendTextMessage(t,o).catch((e=>bn(this,void 0,void 0,(function*(){mn.log("sendMessage","inner error",t,e)}))))}else mn.log("sendMessage","unexpected error",e)}))))}))}updatePeerRoom(e,t){return bn(this,void 0,void 0,(function*(){mn.log("updatePeerRoom",e,t);const n=e.split(":");if(n.length<2||!n[0].startsWith("@"))throw new Error("Invalid sender");const i=yield this.storage.get(se.MATRIX_PEER_ROOM_IDS),r=i[e];r===t&&mn.debug("updatePeerRoom","rooms are the same, not updating"),mn.debug("updatePeerRoom","current room",r,"new room",t),r&&r[1]&&(mn.log("updatePeerRoom",`adding room "${r[1]}" to ignored array`),this.ignoredRooms.push(r[1])),i[e]=t,yield this.storage.set(se.MATRIX_PEER_ROOM_IDS,i)}))}deleteRoomIdFromRooms(e){return bn(this,void 0,void 0,(function*(){const t=yield this.storage.get(se.MATRIX_PEER_ROOM_IDS),n=Object.entries(t).filter((t=>t[1]!==e)).reduce(((e,t)=>Object.assign(Object.assign({},e),{[t[0]]:t[1]})),{});yield this.storage.set(se.MATRIX_PEER_ROOM_IDS,n),this.ignoredRooms.push(e)}))}listenForChannelOpening(e){return bn(this,void 0,void 0,(function*(){mn.debug("listenForChannelOpening"),(yield this.client.promise).subscribe(an.MESSAGE,(t=>bn(this,void 0,void 0,(function*(){if(this.isTextMessage(t.content)&&(yield this.isChannelOpenMessage(t.content))){mn.log("listenForChannelOpening","channel opening received, trying to decrypt",JSON.stringify(t)),yield this.updateRelayServer(t.content.message.sender),yield this.updatePeerRoom(t.content.message.sender,t.content.roomId);const n=t.content.message.content.split(":"),i=yn.from(n[n.length-1],"hex");if(i.length>=40)try{const t=JSON.parse(yield Oe(i,this.keyPair.publicKey,this.keyPair.secretKey));mn.log("listenForChannelOpening","channel opening received and decrypted",JSON.stringify(t)),e(Object.assign(Object.assign({},t),{senderId:yield tt(t.publicKey)}))}catch(e){}}}))))}))}waitForJoin(e,t=0){return bn(this,void 0,void 0,(function*(){const n=yield(yield this.client.promise).getRoomById(e);if(mn.log("waitForJoin",`Currently ${n.members.length} members, we need at least 2`),!(n.members.length>=2)){if(t<=200)return mn.log(`Waiting for join... Try: ${t}`),new Promise((n=>{setTimeout((()=>bn(this,void 0,void 0,(function*(){n(this.waitForJoin(e,t+1))}))),100*(t>50?10:1))}));throw new Error(`No one joined after ${t} tries.`)}}))}sendPairingResponse(e){return bn(this,void 0,void 0,(function*(){mn.log("sendPairingResponse");const t=Ce(yield xe(yn.from(e.publicKey,"hex")),e.relayServer),n=yield(yield this.client.promise).createTrustedPrivateRoom(t);mn.debug("sendPairingResponse",`Connecting to room "${n}"`),yield this.updatePeerRoom(t,n),yield this.waitForJoin(n),mn.debug("sendPairingResponse","Successfully joined room.");const i=void 0===e.version?yield this.getPublicKey():JSON.stringify(yield this.getPairingResponseInfo(e));mn.debug("sendPairingResponse","Sending pairing response",i);const r=yield this.encryptMessageAsymmetric(e.publicKey,i),o=["@channel-open",t,r].join(":");(yield this.client.promise).sendTextMessage(n,o).catch((e=>bn(this,void 0,void 0,(function*(){if("M_FORBIDDEN"===e.errcode){mn.log("sendPairingResponse","M_FORBIDDEN",n,e),yield this.deleteRoomIdFromRooms(n);const i=yield this.getRelevantRoom(t);mn.log("sendPairingResponse","Old room deleted, new room created",i),(yield this.client.promise).sendTextMessage(i,o).catch((e=>bn(this,void 0,void 0,(function*(){mn.log("sendPairingResponse","inner error",i,e)}))))}else mn.log("sendPairingResponse","unexpected error",e)}))))}))}isTextMessage(e){return e.message.type===Dt.TEXT}updateRelayServer(e){return bn(this,void 0,void 0,(function*(){mn.log("updateRelayServer",e);const t=e.split(":");if(t.length<2||!t[0].startsWith("@"))throw new Error("Invalid sender");const n=t.shift(),i=t.join(":"),r=localStorage.getItem("beacon:communication-peers-dapp")?new Ct(this.storage,se.TRANSPORT_P2P_PEERS_DAPP):new Ct(this.storage,se.TRANSPORT_P2P_PEERS_WALLET),o=(yield r.getPeers()).map((e=>bn(this,void 0,void 0,(function*(){`@${yield xe(yn.from(e.publicKey,"hex"))}`===n&&e.relayServer!==i&&(e.relayServer=i,yield r.addPeer(e))}))));yield Promise.all(o)}))}isChannelOpenMessage(e){return bn(this,void 0,void 0,(function*(){return e.message.content.startsWith(`@channel-open:@${yield xe(yn.from(yield this.getPublicKey(),"hex"))}`)}))}isSender(e,t){return bn(this,void 0,void 0,(function*(){return e.content.message.sender.startsWith(`@${yield xe(yn.from(t,"hex"))}`)}))}getRelevantRoom(e){return bn(this,void 0,void 0,(function*(){const t=yield this.storage.get(se.MATRIX_PEER_ROOM_IDS);let n=t[e];if(!n){mn.log("getRelevantRoom",`No room found for peer ${e}, checking joined ones.`);const i=yield this.getRelevantJoinedRoom(e);n=i.id,t[e]=i.id,yield this.storage.set(se.MATRIX_PEER_ROOM_IDS,t)}return mn.log("getRelevantRoom",`Using room ${n}`),n}))}getRelevantJoinedRoom(e){return bn(this,void 0,void 0,(function*(){const t=yield(yield this.client.promise).joinedRooms;mn.log("checking joined rooms",t,e);const n=t.filter((e=>!this.ignoredRooms.some((t=>e.id===t)))).filter((t=>t.members.some((t=>t===e))));let i;if(0===n.length||this.ignoredRooms.length>0){mn.log("getRelevantJoinedRoom","no relevant rooms found, creating new one");const t=yield(yield this.client.promise).createTrustedPrivateRoom(e);i=yield(yield this.client.promise).getRoomById(t),mn.log("getRelevantJoinedRoom",`waiting for other party to join room: ${i.id}`),yield this.waitForJoin(t),mn.log("getRelevantJoinedRoom",`new room created and peer invited: ${i.id}`)}else i=n[0],mn.log("getRelevantJoinedRoom",`channel already open, reusing room ${i.id}`);return i}))}}var En=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};const Sn=new ot("P2PTransport");class In extends St{constructor(e,t,n,i,r,o,s){super(e,new wn(e,t,1,n,i,o,s),new Ct(n,r)),this.type=oe.P2P}static isAvailable(){return En(this,void 0,void 0,(function*(){return Promise.resolve(!0)}))}connect(){const e=Object.create(null,{connect:{get:()=>super.connect}});return En(this,void 0,void 0,(function*(){if(this._isConnected!==re.NOT_CONNECTED)return;Sn.log("connect"),this._isConnected=re.CONNECTING,yield this.client.start();const t=yield this.getPeers();if(t.length>0){Sn.log("connect",`connecting to ${t.length} peers`);const e=t.map((e=>En(this,void 0,void 0,(function*(){return this.listen(e.publicKey)}))));Promise.all(e).catch((e=>Sn.error("connect",e)))}return yield this.startOpenChannelListener(),e.connect.call(this)}))}disconnect(){const e=Object.create(null,{disconnect:{get:()=>super.disconnect}});return En(this,void 0,void 0,(function*(){return yield this.client.stop(),e.disconnect.call(this)}))}startOpenChannelListener(){return En(this,void 0,void 0,(function*(){}))}getPairingRequestInfo(){return En(this,void 0,void 0,(function*(){return this.client.getPairingRequestInfo()}))}listen(e){return En(this,void 0,void 0,(function*(){yield this.client.listenForEncryptedMessage(e,(t=>{const n={origin:te.P2P,id:e};this.notifyListeners(t,n).catch((e=>{throw e}))})).catch((e=>{throw e}))}))}}var An=n(5108),Rn=n(8764).Buffer,xn=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};class Mn extends Ft{constructor(){super(...arguments),this.activeListeners=new Map}init(){return xn(this,void 0,void 0,(function*(){this.subscribeToMessages().catch(An.error)}))}listenForEncryptedMessage(e,t){return xn(this,void 0,void 0,(function*(){if(this.activeListeners.has(e))return;this.activeListeners.set(e,((n,i)=>xn(this,void 0,void 0,(function*(){try{const r=yield this.decryptMessage(e,n.encryptedPayload);t(r,i)}catch(e){}}))))}))}sendMessage(e,t){return xn(this,void 0,void 0,(function*(){const n=yield this.encryptMessage(t.publicKey,e),i=null==t?void 0:t.extensionId,r={target:ne.EXTENSION,encryptedPayload:n,targetId:i};Ve.postMessage(r,Ve.location.origin)}))}listenForChannelOpening(e){return xn(this,void 0,void 0,(function*(){Ve.addEventListener("message",(t=>xn(this,void 0,void 0,(function*(){var n,i;if(t.source!==Ve||t.origin!==Ve.location.origin)return;const r=null===(n=null==t?void 0:t.data)||void 0===n?void 0:n.message;if(r&&r.target===ne.PAGE&&(yield this.isChannelOpenMessage(r))){const n=Rn.from(r.payload,"hex");if(n.length>=40)try{const r=JSON.parse(yield Oe(n,this.keyPair.publicKey,this.keyPair.secretKey));e(Object.assign(Object.assign({},r),{senderId:yield tt(r.publicKey),extensionId:null===(i=null==t?void 0:t.data)||void 0===i?void 0:i.sender.id}))}catch(e){}}}))))}))}sendPairingRequest(e){return xn(this,void 0,void 0,(function*(){const t={target:ne.EXTENSION,payload:yield(new Mt).serialize(yield this.getPairingRequestInfo()),targetId:e};Ve.postMessage(t,Ve.location.origin)}))}isChannelOpenMessage(e){return xn(this,void 0,void 0,(function*(){return"object"==typeof e&&e.hasOwnProperty("payload")}))}subscribeToMessages(){return xn(this,void 0,void 0,(function*(){Ve.addEventListener("message",(e=>{if(e.source===Ve&&e.origin===Ve.location.origin&&"object"==typeof e&&e){const t=e.data;t.message&&t.message.target===ne.PAGE&&this.activeListeners.forEach((e=>{e(t.message,{origin:te.EXTENSION,id:t.sender.id||""})}))}}))}))}}var Tn=function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))};const kn=new ot("PostMessageTransport");let On,Un,Cn=!1;class Pn extends St{constructor(e,t,n,i){super(e,new Mn(e,t),new Ct(n,i)),this.type=oe.POST_MESSAGE}static isAvailable(){return Tn(this,void 0,void 0,(function*(){return new Promise((e=>{const t=n=>{const i=n.data;i&&"pong"===i.payload&&(e(!0),Ve.removeEventListener("message",t))};Ve.addEventListener("message",t);const n={target:ne.EXTENSION,payload:"ping"};Ve.postMessage(n,Ve.location.origin)}))}))}static getAvailableExtensions(){return Tn(this,void 0,void 0,(function*(){return On||(Un||(Un=[],On=new Promise((e=>{Pn.listenForExtensions(),setTimeout((()=>{e(null!=Un?Un:[])}),1e3)})).finally((()=>{On=void 0})),On))}))}static listenForExtensions(){if(Cn)return;Ve.addEventListener("message",(e=>{if(e.source!==Ve||e.origin!==Ve.location.origin)return;const t=e.data,n=t.sender;var i;t&&"pong"===t.payload&&n&&(kn.log("getAvailableExtensions",`extension "${n.name}" is available`,n),i=n,Un||(Un=[]),Un.some((e=>e.id===i.id))||(Un.push(i),Ve.postMessage("extensionsUpdated",Ve.location.origin)))}));const e={target:ne.EXTENSION,payload:"ping"};Ve.postMessage(e,Ve.location.origin),Cn=!0}connect(){const e=Object.create(null,{connect:{get:()=>super.connect}});return Tn(this,void 0,void 0,(function*(){if(kn.log("connect"),this._isConnected!==re.NOT_CONNECTED)return;this._isConnected=re.CONNECTING;const t=yield this.getPeers();if(t.length>0){kn.log("connect",`connecting to ${t.length} peers`);const e=t.map((e=>Tn(this,void 0,void 0,(function*(){return this.listen(e.publicKey)}))));Promise.all(e).catch((e=>kn.error("connect",e)))}yield this.startOpenChannelListener(),yield e.connect.call(this)}))}startOpenChannelListener(){return Tn(this,void 0,void 0,(function*(){}))}getPairingRequestInfo(){return Tn(this,void 0,void 0,(function*(){return this.client.getPairingRequestInfo()}))}listen(e){return Tn(this,void 0,void 0,(function*(){kn.log("listen",e),yield this.client.listenForEncryptedMessage(e,((e,t)=>{const n={origin:te.EXTENSION,id:t.id};this.notifyListeners(e,n).catch((e=>{throw e}))})).catch((e=>{throw e}))}))}}Pn.getAvailableExtensions();const Nn={context:void 0,registry:void 0};function Kn(e){Nn.context=e}const Ln=(e,t)=>e===t,qn=(Symbol("solid-proxy"),Symbol("solid-track")),zn=(Symbol("solid-dev-component"),{equals:Ln});let Vn=null,Fn=wi;const jn=1,Dn=2,Bn={owned:null,cleanups:null,context:null,owner:null};var Wn=null;let Jn=null,Zn=null,Qn=null,Hn=null,Gn=null,Yn=null,Xn=0;const[_n,$n]=ti(!1);function ei(e,t){const n=Hn,i=Wn,r=0===e.length,o=void 0===t?i:t,s=r?Bn:{owned:null,cleanups:null,context:o?o.context:null,owner:o},a=r?e:()=>e((()=>oi((()=>Ai(s)))));Wn=s,Hn=null;try{return vi(a,!0)}finally{Hn=n,Wn=i}}function ti(e,t){const n={value:e,observers:null,observerSlots:null,comparator:(t=t?Object.assign({},zn,t):zn).equals||void 0};return[fi.bind(n),e=>("function"==typeof e&&(e=Jn&&Jn.running&&Jn.sources.has(n)?e(n.tValue):e(n.value)),pi(n,e))]}function ni(e,t,n){const i=bi(e,t,!1,jn);Zn&&Jn&&Jn.running?Gn.push(i):gi(i)}function ii(e,t,n){Fn=Ei;const i=bi(e,t,!1,jn),r=di&&ui(di);r&&(i.suspense=r),n&&n.render||(i.user=!0),Yn?Yn.push(i):gi(i)}function ri(e,t,n){n=n?Object.assign({},zn,n):zn;const i=bi(e,t,!0,0);return i.observers=null,i.observerSlots=null,i.comparator=n.equals||void 0,Zn&&Jn&&Jn.running?(i.tState=jn,Gn.push(i)):gi(i),fi.bind(i)}function oi(e){if(null===Hn)return e();const t=Hn;Hn=null;try{return e()}finally{Hn=t}}function si(e){ii((()=>oi(e)))}function ai(e){return null===Wn||(null===Wn.cleanups?Wn.cleanups=[e]:Wn.cleanups.push(e)),e}function ci(e){if(Jn&&Jn.running)return e(),Jn.done;const t=Hn,n=Wn;return Promise.resolve().then((()=>{let i;return Hn=t,Wn=n,(Zn||di)&&(i=Jn||(Jn={sources:new Set,effects:[],promises:new Set,disposed:new Set,queue:new Set,running:!0}),i.done||(i.done=new Promise((e=>i.resolve=e))),i.running=!0),vi(e,!1),Hn=Wn=null,i?i.done:void 0}))}function li(e,t){const n=Symbol("context");return{id:n,Provider:Oi(n),defaultValue:e}}function ui(e){return Wn&&Wn.context&&void 0!==Wn.context[e.id]?Wn.context[e.id]:e.defaultValue}function hi(e){const t=ri(e),n=ri((()=>ki(t())));return n.toArray=()=>{const e=n();return Array.isArray(e)?e:null!=e?[e]:[]},n}let di;function fi(){const e=Jn&&Jn.running;if(this.sources&&(e?this.tState:this.state))if((e?this.tState:this.state)===jn)gi(this);else{const e=Gn;Gn=null,vi((()=>Si(this)),!1),Gn=e}if(Hn){const e=this.observers?this.observers.length:0;Hn.sources?(Hn.sources.push(this),Hn.sourceSlots.push(e)):(Hn.sources=[this],Hn.sourceSlots=[e]),this.observers?(this.observers.push(Hn),this.observerSlots.push(Hn.sources.length-1)):(this.observers=[Hn],this.observerSlots=[Hn.sources.length-1])}return e&&Jn.sources.has(this)?this.tValue:this.value}function pi(e,t,n){let i=Jn&&Jn.running&&Jn.sources.has(e)?e.tValue:e.value;if(!e.comparator||!e.comparator(i,t)){if(Jn){const i=Jn.running;(i||!n&&Jn.sources.has(e))&&(Jn.sources.add(e),e.tValue=t),i||(e.value=t)}else e.value=t;e.observers&&e.observers.length&&vi((()=>{for(let t=0;t1e6)throw Gn=[],new Error}),!1)}return t}function gi(e){if(!e.fn)return;Ai(e);const t=Wn,n=Hn,i=Xn;Hn=Wn=e,yi(e,Jn&&Jn.running&&Jn.sources.has(e)?e.tValue:e.value,i),Jn&&!Jn.running&&Jn.sources.has(e)&&queueMicrotask((()=>{vi((()=>{Jn&&(Jn.running=!0),Hn=Wn=e,yi(e,e.tValue,i),Hn=Wn=null}),!1)})),Hn=n,Wn=t}function yi(e,t,n){let i;try{i=e.fn(t)}catch(t){return e.pure&&(Jn&&Jn.running?(e.tState=jn,e.tOwned&&e.tOwned.forEach(Ai),e.tOwned=void 0):(e.state=jn,e.owned&&e.owned.forEach(Ai),e.owned=null)),e.updatedAt=n+1,Ti(t)}(!e.updatedAt||e.updatedAt<=n)&&(null!=e.updatedAt&&"observers"in e?pi(e,i,!0):Jn&&Jn.running&&e.pure?(Jn.sources.add(e),e.tValue=i):e.value=i,e.updatedAt=n)}function bi(e,t,n,i=jn,r){const o={fn:e,state:i,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:t,owner:Wn,context:Wn?Wn.context:null,pure:n};if(Jn&&Jn.running&&(o.state=0,o.tState=i),null===Wn||Wn!==Bn&&(Jn&&Jn.running&&Wn.pure?Wn.tOwned?Wn.tOwned.push(o):Wn.tOwned=[o]:Wn.owned?Wn.owned.push(o):Wn.owned=[o]),Qn){const[e,t]=ti(void 0,{equals:!1}),n=Qn(o.fn,t);ai((()=>n.dispose()));const i=()=>ci(t).then((()=>r.dispose())),r=Qn(o.fn,i);o.fn=t=>(e(),Jn&&Jn.running?r.track(t):n.track(t))}return o}function mi(e){const t=Jn&&Jn.running;if(0===(t?e.tState:e.state))return;if((t?e.tState:e.state)===Dn)return Si(e);if(e.suspense&&oi(e.suspense.inFallback))return e.suspense.effects.push(e);const n=[e];for(;(e=e.owner)&&(!e.updatedAt||e.updatedAt=0;i--){if(e=n[i],t){let t=e,r=n[i+1];for(;(t=t.owner)&&t!==r;)if(Jn.disposed.has(t))return}if((t?e.tState:e.state)===jn)gi(e);else if((t?e.tState:e.state)===Dn){const t=Gn;Gn=null,vi((()=>Si(e,n[0])),!1),Gn=t}}}function vi(e,t){if(Gn)return e();let n=!1;t||(Gn=[]),Yn?n=!0:Yn=[],Xn++;try{const t=e();return function(e){Gn&&(Zn&&Jn&&Jn.running?function(e){for(let t=0;t{i.delete(n),vi((()=>{Jn.running=!0,mi(n)}),!1),Jn&&(Jn.running=!1)})))}}(Gn):wi(Gn),Gn=null);if(e)return;let t;if(Jn)if(Jn.promises.size||Jn.queue.size){if(Jn.running)return Jn.running=!1,Jn.effects.push.apply(Jn.effects,Yn),Yn=null,void $n(!0)}else{const e=Jn.sources,n=Jn.disposed;Yn.push.apply(Yn,Jn.effects),t=Jn.resolve;for(const e of Yn)"tState"in e&&(e.state=e.tState),delete e.tState;Jn=null,vi((()=>{for(const e of n)Ai(e);for(const t of e){if(t.value=t.tValue,t.owned)for(let e=0,n=t.owned.length;eFn(n)),!1);t&&t()}(n),t}catch(e){n||(Yn=null),Gn=null,Ti(e)}}function wi(e){for(let t=0;t=0;t--)Ai(e.tOwned[t]);delete e.tOwned}Ri(e,!0)}else if(e.owned){for(t=e.owned.length-1;t>=0;t--)Ai(e.owned[t]);e.owned=null}if(e.cleanups){for(t=e.cleanups.length-1;t>=0;t--)e.cleanups[t]();e.cleanups=null}Jn&&Jn.running?e.tState=0:e.state=0}function Ri(e,t){if(t||(e.tState=0,Jn.disposed.add(e)),e.owned)for(let t=0;tn=oi((()=>(Wn.context={...Wn.context,[e]:t.value},hi((()=>t.children)))))),void 0),n}}const Ui=Symbol("fallback");function Ci(e){for(let t=0;te(t||{})));return Kn(n),i}return oi((()=>e(t||{})))}function Ki(e){const t="fallback"in e&&{fallback:()=>e.fallback};return ri(function(e,t,n={}){let i=[],r=[],o=[],s=0,a=t.length>1?[]:null;return ai((()=>Ci(o))),()=>{let c,l,u=e()||[];return u[qn],oi((()=>{let e,t,d,f,p,g,y,b,m,v=u.length;if(0===v)0!==s&&(Ci(o),o=[],i=[],r=[],s=0,a&&(a=[])),n.fallback&&(i=[Ui],r[0]=ei((e=>(o[0]=e,n.fallback()))),s=1);else if(0===s){for(r=new Array(v),l=0;l=g&&b>=g&&i[y]===u[b];y--,b--)d[b]=r[y],f[b]=o[y],a&&(p[b]=a[y]);for(e=new Map,t=new Array(b+1),l=b;l>=g;l--)m=u[l],c=e.get(m),t[l]=void 0===c?-1:c,e.set(m,l);for(c=g;c<=y;c++)m=i[c],l=e.get(m),void 0!==l&&-1!==l?(d[l]=r[c],f[l]=o[c],a&&(p[l]=a[c]),l=t[l],e.set(m,l)):o[c]();for(l=g;le.each),e.children,t||void 0))}li();n(5108);Object.create(null),Object.create(null);const Li="_$DX_DELEGATE";function qi(e,t,n,i={}){let r;return ei((i=>{r=i,t===document?e():Wi(t,e(),t.firstChild?null:void 0,n)}),i.owner),()=>{r(),t.textContent=""}}function zi(e,t,n){let i;const r=()=>{const t=document.createElement("template");return t.innerHTML=e,n?t.content.firstChild.firstChild:t.content.firstChild},o=t?()=>oi((()=>document.importNode(i||(i=r()),!0))):()=>(i||(i=r())).cloneNode(!0);return o.cloneNode=o,o}function Vi(e,t=window.document){const n=t[Li]||(t[Li]=new Set);for(let i=0,r=e.length;ii.call(e,n[1],t))}else e.addEventListener(t,n)}function Bi(e,t,n){if(!t)return n?Fi(e,"style"):t;const i=e.style;if("string"==typeof t)return i.cssText=t;let r,o;for(o in"string"==typeof n&&(i.cssText=n=void 0),n||(n={}),t||(t={}),n)null==t[o]&&i.removeProperty(o),delete n[o];for(o in t)r=t[o],r!==n[o]&&(i.setProperty(o,r),n[o]=r);return n}function Wi(e,t,n,i){if(void 0===n||i||(i=[]),"function"!=typeof t)return Zi(e,t,i,n);ni((i=>Zi(e,t(),i,n)),i)}function Ji(e){const t=`$$${e.type}`;let n=e.composedPath&&e.composedPath()[0]||e.target;for(e.target!==n&&Object.defineProperty(e,"target",{configurable:!0,value:n}),Object.defineProperty(e,"currentTarget",{configurable:!0,get:()=>n||document}),Nn.registry&&!Nn.done&&(Nn.done=_$HY.done=!0);n;){const i=n[t];if(i&&!n.disabled){const r=n[`${t}Data`];if(void 0!==r?i.call(n,r,e):i.call(n,e),e.cancelBubble)return}n=n._$host||n.parentNode||n.host}}function Zi(e,t,n,i,r){if(Nn.context){!n&&(n=[...e.childNodes]);let t=[];for(let e=0;e{let r=t();for(;"function"==typeof r;)r=r();n=Zi(e,r,n,i)})),()=>n;if(Array.isArray(t)){const o=[],a=n&&Array.isArray(n);if(Qi(o,t,n,r))return ni((()=>n=Zi(e,o,n,i,!0))),()=>n;if(Nn.context){if(!o.length)return n;if(void 0===i)return[...e.childNodes];let t=o[0],r=[t];for(;(t=t.nextSibling)!==i;)r.push(t);return n=r}if(0===o.length){if(n=Gi(e,n,i),s)return n}else a?0===n.length?Hi(e,o,i):function(e,t,n){let i=n.length,r=t.length,o=i,s=0,a=0,c=t[r-1].nextSibling,l=null;for(;si-a){const r=t[s];for(;a=0;o--){const s=t[o];if(r!==s){const t=s.parentNode===e;i||o?t&&s.remove():t?e.replaceChild(r,s):e.insertBefore(r,n)}else i=!0}}else e.insertBefore(r,n);return[r]}var Yi=n(7304),Xi=n.n(Yi),_i=n(5108);function $i(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((i=i.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const er=[{key:"spire_chrome",id:"gpfndedineagiepkpinficbcbbgjoenn",name:"Spire",shortName:"Spire",color:"",logo:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAjxElEQVR4Ae3BC5yddX0g/O/vOZNJAiFcRG4JIWhQUORmZSYJZCahVK1aGrVr6ypqtayt2pdVP2rX2nOeautl1fpqba1Vq2hrfWvNy6pbLLIwXJIZLyBKvaIEknATRZMQkpnM/DfQpttVVOB5zsy5/L9fWZZlWZZlWZZlWZZlWZZlWZZlWZZlWZZlWZZlWZZlWZZlWZZlWZZlWZZlWZZlWZZlWZZlWZZ1gJD1tKFmss8g5kWYhwYa9rnhA8MN+5z8kvFp/2oa0ymZwhQmJ8qQ9a6QdbXhZjogcXyE47AMS3EMjsThOAwHYgEWYB4G7HPXV//WfQ4/5T/7N3sxhd3YjXvwQ9yFO3ArtuKWlGwONo+XsUvWtULWFYZbaTFW4FQ8AY/DiViCBsJD9N2LX+w+jz7vgx6GhGlswzfxdXwN1+PG8VZsl3W8AVnHGW6mwHJhFVbhTDwGi9UkpWk7brnKfVKaFtHwEAUGcByOw5P9H9uHW+nb+AI2SjZi83gZSdZRQjbnhpopgiXCWpyDtVimjXbf/V3Xv+ex7nPaK75t/qGP0ma34HJcJrk8sW2ijCSbUyGbE8Ot1JCcLjwDT8fJGDRLvn/d3/juxb/tPo8+70MeefqLzKJJ3IDPSD4tXDfeimnZrAvZrBlqpoEIT8KzsR7HmyPf3fAC37/+Ivd55Knne/T6j5hDN2EDPpmSL06UsVc2K0LWVkPNFA1OmAnPx3OwAmFOJde963h7fnSz+8w/5DinX7hZB0i4EZ8oko9O852JMpKsbULWFkOttChYj5dgNRo6xO4ffNtX/vwk0oz7ReG0l3/Dgkc8RgeZxjX4QGLDRCt2ymo3IKvNSDOZZIXwO4kX4ggdaPvNV5Jm/Ls0Y/vNV1rwiMfoIA2swZrgzpWt9GHJXw9y41gZsno0ZLUYbqZVM+EdKbwba3CgDnXbpnfadcfX/EeN+YsddtIzdagDsVp46Uw4ZelIa9vWsXKLrLIB2cM21EyNRjg38brE2YlCh0vTk7bffKWftOPmq6TpSdEY1MEGE78hPGtlK10VvGU6uXSijGnZwzIge8iGmikiPAV/OMNKhC6x++7vmvzxVj9pz4+32H33dy08/CRdoEiMJNZE2DTcSm9KySUTZSTZQxKyB21lM0XBmpnwxsTZutAdX3qfmz7zux7I8U//S0f+0kt1o+CqInnDDFduKiPJHpSQ/UIrm8k+J6bwVjwNDV3qO//wn/zgX/7BA3nEyc9xwrP/XhebxmcjeS2+uakM2c/XkP1cw810eIQ3p/BBPA6FLpVmpm2+5P8xM3mPB7J3112OHv6vIgpdqsBjhQsiPHLpSOtLW8fKXbKfKWQPaE0zNfaEFwRvwtF6wK47vuar7zuNNOMBReGUl37FAUc+QY+4LfGH85OPXFnGtOynNGQ/ZVUznbI3fCL4fRyke+zFHbgRX8YYLsH/j7+/8VPP273n7u+e7GdKdv/wOx9/5KnnvxNX4kv4Fm7DPf7VQhS6w0HBedNhdNlI69otY+Udsv9LyP7dUDMtiPA6vAYLda5J3Bpcn7gB/5L4luRm7MDkRBkewAb8up9vA57pJww1k30GCxbNhOXBY/H44OTEqTgGgzrXvXhbSt4yUcZu2f1Cdr/hZnqi8H6cofNsxxcKrplhfCD5ytVl3O6hmY+bcaSf7w4chz0egrOa6ai94bSC4RlW40ws1nmulVwwXsaXZUKfW9lMgxFeOUMTC3SGPbgu+FxKPp+4FrsmylDBabjOg3MarvcwDTWTfQ4Izojwy4kn43TM1xl2F5QpeeemMib1sdDHVrXSsTNchFFz715cig2R/PMgt46VoUavxDs8OK/En6nJSDOZ5JgUfgXrcS4WmntXFJy/sRVb9KnQh0aayVRYP8P7cbi5sycYw8dmks/g7okytMn/wDM8OJ/Gr2mDoWayz6FFeDqelxjBfHPnroIL5iUbxsrQb0KfGWqmeUV4Y+LVaJgbNwYfSsnfzefmsTK02XxsxeEenLuwFHu00Ugz2cNxEZ6b+G2sMDemg7fPJG+YKGNKHwl9ZHUzHTUdPoZzzL5JfC4l753PpVeWMWP2DGETwoOTMIwvmCVrmqnYw7kRXoYnY9Dsu6yRPO+aMm7XJ0KfWN1Mp0+HT+JRZtc9uKhI3jPNNybKMAdeg7d6aF6Lt5llQ82kwUkz4RU4HweaXd9rJM++pozr9IHQ41Y1kxSemfgwDjJ7foS/TMm7J8q43dz6n3iqh+af8Kvm0FAzHRXh9/G7OMTs2RG8MJJPbSxDLws97Kxmir3hv+KtGDA7duIv8I7xVtxp7i3EbTjYQ3M3jsFuc2y4lY7Aq/B7WGR27MVrB5I/u7qMpEeFHjXUTANFeEfiFQjtN4mPpKScKGObzrEK13h4VmOjDjHUTEsiNPECDGq/FLxnJnnVRBl79aCGHjTcSgsifBgvQWivhEuL5D/N8IGJMnboLM/DOR6e7+JqHWLbWLljyUjr0w0+ncKj8CiE9gkMRThh6Wjrs1uvKPfqMaHHDDfTogj/kHiK9tuMV6dkw0QZMzrTpfhlD88/48k60FAzFRHW4+1Yrs2CS1LyG+Nl7NRDQg9Z2UwHp3AxRrTXJP48JeVEGdt1roOwBQd7eH6EZdihQw010+IITbwcg9prLJLzNpXxYz0i9IjhZjpYuBgj2uurkv8yXsa4znc2rlTNGlylww0307DwVzhFe41Jfm28jO16QEMPWNlMBwsXY0T7TOG/R/L88TI26w4vwqhqbsKVOtzWsXLrsSOtjwgNDKGhPZYLq44daW3YOlbu0eVCl1vZTItS+AxGtM/NkheNl3G57nIFRlRzOdbpIsPNtFb4GxynfcYiefqmMnbqYg1dbFUrLRD+Eb+sPRIubiRP21TGN3SXA/D/Yp5qjsKfYUqX2DpWbj5upHVRCo/FYxHqtzzCGctGW/+45Ypyry7V0KWGmmlA+DDWa48pvHYgeeU1ZezSfc7Gi1U3D5/HZl1ky1h57/KR1idnwg6sRUP9ViQevWSkdfG2sXJGFwpd6Kxmir3hXfh97XF78FubWnGF7vUmvF493og/0qVWttJo4uM4Snu8eyC58Ooyki7T0GVWNZPp8Eq8AaF+1w4kT95Yxld0tz/GMvUYwId0qa1XlJuXj7Q+NRPOxtHqd+ZM2LFspLVpy1ipmxS6TXgm3opQv4sjWXt1GTfpbofiVPU5FYfqYleXcVMka3Gx+gXeKjxTl2noIiub6fQULsZC9Up4r+Ql42Xcq/uN4rfVZxCfx/d0sa1j5Z6lI61/FA7FkxDqUyR+9diR1iVbx8rbdYmGLrGymY5K4XM4Sr1mgmZK/ttEGdN6w4txlnrdist0ua1j5cySkdYlRZjGKEJ95gvnHjvS+v+2jpU7dYGGLjDUTPOET+GJ6jWNV+DPJspIesebsFS9BvBBPWDbWGnpaOsq3ImnoFCfQ4XTl4y0Pr5trJzR4Ro63EgzmQ5/iuer11QkLxkv4wNbryj1kIPxLhTqdSTehUk9YOsVpa1XlF86dqR1i/A0NNTnUREGHz3S+vzNY6VOVuhwk2E9Xq1eU5G8MPiI3nM2BtRvHtboMcGHI3khptTr1ZNhvQ5X6GCrmunYxPvRUJ9pyQXB320sQw8a0T6jeszGMgR/J7kA0+rTSLx/VTMdq4M1dKjhZhpM4VN4nPrM4BXjZXxgy1ipBwX+FMdoj0F8QI/ZMlbaOlZ+Zelo6/t4KkI9Dkjh9KUjrY9vHSundaBCh4rwSoyqTwqaeJ/e9Ug8Xvs8HofrXe8LmkjqMxrhlTpUoQMNtdITE031eu9M8ifjrUh610os0D4LsUqPGm9Fmkn+BO9Vo0RzqJWeqAMVOsxwMy0I3o8F6nMxXjlRRtLb1mm/ET1sooyEV+Ji9VkQvH+4mRboMIVOE16HM9TnWsn5462Y0vvWar+1etx4K6Yk5+Na9TlDeJ0OU+ggq1rpFLxGfW6L5NnjZWzX+47ESdrvZBypx42XsT2SZ+N29XnNqlY6RQcpdIjVzdSY4T1YqB5TkTx3Uxk36Q9nY0D7DWC1PrCpjJsi+S1MqcfCGd6zupkaOkShQ0yHF2CNeiT8waYyrtA/1pk9o/rEpjKuwB8gqcea6fACHaLQAYaa6XC8SX0uHkjepX8UONvsWYtCnxhI3oWL1edNQ810uA5QmGMrm0kR3oCj1eNmvPjqMqb1j6NxotlzIo7WJ64uYxovxs3qcXQR3rCymcy1wlwLJyZeqh5TeNF4K36ov6zBgNkzgFX6yHgrfogXYUoNEi8VTjTHCnNoZTNF4q0YVI93jLficv1n1Ow7R58Zb8XleId6DCbeurKZwhwqzKWwBk9Tj+sj+WP9acTsG9WHIvljfFU9niasMYcKc2SomQJvREN1k3jppjLu1X+W49Fm36OxTJ/ZVMa9+C+YVF0DbxxqpjBHCnMkwlMSZ6vHn4+3Ylx/OhsDZt8AztKHxlsxjj9Xg8TZEZ5ijhTmwFAzNfCH6rE5JaX+NWrunKNPpaTEZvX4w6FmapgDhTkQ4VysVF3CqyfK2K4/DWDE3DkLDX1ooozteDWS6lZGONccKMyN1yFUd2lKNuhfy/Aoc2cFlupTKdmAS1UXeJ05UJhlw620CmerbhKvmShjRv9agzB3CqzVpybKmMFrMKm6s4dbaZVZVphFI81knwtRqO4jKblef1tn7o3qYym5Hh9RXYELR5rJbCrMoj1hBc5T3c6UlBNl6GMNjJh7a1DoUxNlSEmJnao7b09YYRYVZlHwOxhU3V9MlLFNf1uBJebeMqzQxybK2Ia/UN1g8DtmUWGWDLXSosQLVfcjvEO2Bg1zr4E1snfgRypKvHColRaZJYVZEqzHEar7y/FW3Clbp3OM6HPjrbgTf6m6I4L1ZklhFgw1U+AlqrsnJe+WDeAsnWMNBvS5lLwb96juJUPNFGZBYRZEOAGrVXfRRBm3y1Zgqc6xDCv0uYkybsdFqlsd4QSzoDA7no+GaibxHtl9ztF5RmT3eQ8mVdPA882CQpsNNdMAnqO6z6XkG7L7jOo8ozIp+QY+p7rnDDXTgDYrtFmEJ2GF6t47UYbMIFbpPGswT5+bKMM+71XdighP0maF9ns2QjU3NpJLZfd5HI7WeY7CiTKN5FLcqJrAs7VZoY2GW6mB9ar70DVlzMjuswah8xRYI3NNGTP4kOrWD7dSQxsV2ut0HK+aPZK/k+03qnOdI/tXyd9hj2qOx+naqNBez1Dd2Hxult1nACM611loyMznZoyp7hnaqNAmQ80UeLrqPjZWhux+p+AwneuROFlmrAz7fEx1Tx9qptAmhTaJsAQnq+belHxGtt+ozrdWdr+UfAb3qubkCEu0SaF91mJQNZfibtl+63S+dbL97salqhnEWm1SaJ9zVLdhogzZ/Q7AkM43hAUyE2XYZ4PqztEmhTYYbqbAWtXsCf5Ztt/JOFzneyQeL7tf8M/Yo5q1w80U2qDQDmE5lqnmusHkVtl+o7pDYJ3sfoPJrbhONcuE5dqg0B6rVPe5sTJk/26d7jEqu99YGfb5nOpWaYNCe6xS3edl+w1ite5xFgZk+31edau0QaE9zlTN9pRcK9vvl7BI91iMJ8nul5JrsV01Z2qDQs2GW2kxHqOaL2CXbL9zdJ9R2X678AXVPGa4lRarWaF+K7BYNddMlCH7dyO6z4jsfhNl2Oca1SzGCjUr1O9U1Y3L9jsIT9R9hrBItt+46k5Vs0L9nqCaSclXZPs9EYfoPofgNNm/Sr6CSdU8Qc0K9Xucam4dL+N22X6juteo7H7jZdyOW1XzODUr1O9E1Vwv+49Gda91sv/oetWcqGaFGg030wFYopobZPsdhDN1rzNxoGy/G1SzZLiZDlCjQo1SWI6Gav5Ftt8QFupeB+JJsv3+RTWNFJarUaFGwXKEChLfku03ovuNyvb7tmoCy9WoUK9lqtkbbJbtt073O0e232bsVUGwTI0K9Vqqmu+nZKfsPofiNN3vNBwsI9mBu1SzVI0K9TpGNbdjUnafM3GA7rcIT5IpmMRtqjlGjQr1OlI12ybKkN1vrd6xVmZjGfbZppoj1ahQr8NVc5tsv3V6xzrZfrep5nA1KtRkqJnsc5hq7pTd5xF4gt5xKg6R3edO1Rw21EzqUqjPIA5UzQ9k91mJBXrHQqyU3ecHqjkQg2pSqM88LFDN3bL7rNN71sruc7dqFmCemhRqEmEeFqhmhyywRu8ZQch2qGZBhHlqUqhPA/NUkJJ7ZYfjCXrPqThMn0vJvaqZh4aaFOrTwIBqdsrOwqDeMx+rZTtVM4CGmhSyTrNW7xqVdZRCfUJFQZKN6F0jsqSDFOqTVJQI/W0JTtS7Ho+j9bfQQQpZJ1mFQb1rPoZlHaOQdZJRvW+trGMU6jONvapZpH8VGNX7RlDoX4tUsxfTalKozzSmVBBhof51NE7U+07GEfpUhIWqmcK0mhRqkpIp7FbNQfrXGhR6X4Gz9a+DVLM7JVNqUqjPFHar5lD9a63+sVb/OlQ1uzGlJoX6TOIe1TxCfyowqn+sRehPj1DNTkyqSaEmE2XY54eqOUJ/Og7H6x+PxrH60xGquXuiDHUp1Osu1RytP52NAf1jHlbrT0er5i41KtTrDtUsWdVM+tBa/WedPrOqmeyzRDV3qFGhXreq5ugZBvWXwIj+M4rQR2YYxNGquVWNCvXaqprDhYP0l+NwvP7zaCzVT8JBOFw1W9WoUK9bVDOQOE5/OUd/CqzTX5ZjQDW3qFGhRonNSCoIHqu/jOpfo/rLY1STEpvVqFCjSDZjWjWP1z8GcJb+dTYa+sfjVTMdyWY1KtRovIxd2Kaak/WPE7BM/1qOR+kfJ6tm23gZu9SoUL9vquZU/eNsFPpXA2v0j1NV8001K9Tv66o5ZriZjtIf1spG9YHhZjoKx6jm62pWqN/XVDMonKb3BUZlowi9LpyGQdV8Tc0K9btedcN63+NwpGwJHqv3DavuejUr1O9GbFfNqqFm0uNGELLAGj1sqJnss1o123GjmhVqNt6K7fi2aoZwgN62TrbfWr3tAJypmm+Pt2K7mhXa4wuqWRzhDL1rPlbJ9jsLg3pUhDOwWDVf0AaF9tioul/Wux6Lo2X7LcEJetcvq26jNii0x0bVPXmkmfSotbL/KDCiB400k32erLqN2qDQDslm3KKa0yfDMXrTOtlPWqcHTYZjcLpqbpFs1gaFNhgvI+Fy1cxP/IreM4DVsp+0Bg09JvErmK+ay8fLSNqg0D6XqW79UDPpMafiMNlPOhwn6yFDzWSf9aq7TJsU2udyTKrmXByqt6xDyH5SYFRvORTnqmYSl2uTQpukZBtuUM3CCE/XW0ZkP8s6PSTC07FQNTekZJs2KbTJRBkJn1Hd80aaSY9YiCHZzzKMBXrASDPZ53mq+8xEGUmbFNrr06ob2cNxesOpOFz2sxyBx+kBezgOI6r7tDYqtNd1uEk184Xn6g2jsl/kHL0gPBfzVXMTrtNGhTYab8U0Nqjut1c3U6H7jcp+kRFdblUzFXix6jaMt2JaGxXa75NIqlkxHc7V3Q7AkOwXWYn5uthMOBePVk3CJ7VZoc1S8kXcqLqXDTWTLnYGDpH9IofiDF1qqJns8zLV3ZiSL2qzQptNlLEXn1DdkyOcpHuNyh6MwIguFeEkPFl1n5goY682K8yOj2JaNYN4he61VvZgjeper8CgaqbxUbOgMAtS8h1co7rzh5rpKN1nEc6UPVhDOECXGWqmo3C+6q5JyXfMgsIsmCgj4QOqOzDC7+s+v4RFsgfrEJyhy0T4fRyoug9MlJHMgsIsSWzAnar73eFWOkJ3GZU9VCO6yHArHYHfVd2diQ1mSWGWTLRiZ/Bh1R2CV+ku58geqrW6y6twiIqCD0+0YqdZUphFib/GpOp+b6iZlugOB+M02UP1JBykCww10xL8nuomE39tFhVm0fzkRlysukURmkPNpAs8CYtkD9ViPFGHG2omEZpYpLqL5yc3mkWFWTRWhn3ehRnVvSDCqTrfOtnDNaLDRTgVL1DdDN41VobZVJhl463YiKtUN4i3DTVToXMFRmQP1zk62FAzFXgbBlV31XgrNpplhbnxFiTVnRthvc51EJ4oe7h+CYt0qAjrca7qEt5iDhTmQEouxSbVBd4+1EyLdabVmC97uBZiSAcaaqbFeDtCdZtScqk5UJgDE2VM403qsTxCU2daK6tqnQ4UoYnl6vGmiTKmzYHCHEnJJcFV6vHy4VYa1nlGZFWt1WGGW2kYL1eD4KqUXGKOFObIRBkJb8C06gbxVyubaaHOcQSeIKvqFBymQ6xspoX4KwyqbhpvmCgjmSOFuZRcic+qxykp/JHOMYSFsqoOxJk6RAp/hFPU47OSK82hwhzaVEYKXotJ9XjVcCut1RnWyuqyTgcYbqW1eJV6TAav3VRGMocKcy35ZvA+9ZiHvxlupcPMvbWyuoyYY8OtdBj+BvPUIHif5JvmWGGObSrDTPJG3KYex+GDZzVTw9w5HKfI6nIGDjZHzmqmBj6I49TjtpnkjZvKMNcKHWCijLvwh+pz3t5woblzNgpZXQawxhzZGy7Eeerz+oky7tIBCh2ikXwEV6pH4M0rm2nU3Fgrq9uoObCymUbxZoR6XNlILtIhCh3imjKmC16Be9VjXgofX9lMx5tdgbWyuo2aZSub6fgUPo556nFvwcuvKWNahyh0kI2t+Crepj5HpfDJ4WZabPYcg8fI6vZ4HGWWDDfT4hQ+iaPU520bW/E1HaTQaZK34Fr1OUO4aLiV5pkdqzAoq9t8rDQLhltpnnARzlCfayVv0WEKHWa8jN2JC7Bbfc7DO4eaKbTfOlm7jGizoWYKvBPnqc/uxAXjZezWYQodaKIVXw5K9XpZEV4/3EqhvdbK2uUcbTTcSlGE1+NlahSUE634sg5U6FApeSeuUJ9IlHip9jkGJ8ja5SQcqX1emigR6nNFSt6pQzV0qK1j5fSykdb/SuH5OEA9Ak9ZOtK6Zdlo6ytbxko1Ow/PkrVLgS/g62q0qpksGW29UHgfGupzV5E8ZVMZd+tQhQ62sYwtwQWYVp+G8P7Ec1c1k5qNyNptVI1WNZPEc4X3o6E+08EFG8vYooMVOtxgsgFvV695KXw48UL1aeBsWbuNolCTxAtT+DDmqdfbB5MNOlzoAkPNNC/CP+Ec9ZrGK/C+8VYk1TwK30ZD1k57cTy2qmC4lQIvxXvQUK/LUvLUiTKmdLiGLrBtrJw5dqT1z8Izcaj6FHhqML1kpHXVtrFSBb+GZ8rarcAXcYOHaaiZogivx39HQ72+F8nTx8vYrgs0dImtY+XOY0daVwnPxXz1CayNcPjSkdbnt46VMx6eC3GabDb8CJ/2MAw307wI78JrUajXjkh+dVMZN+oSDV1k61h5+7LR1rcSz0KhPoEzhVOOHWn9z61j5R4PTeDPcIhsNizGezxEK5tpsfBxnI9Qr70Fz9tUxuW6SKHbJJ/Ca5HU77wULj+rmY730KzAMtlsOR7HeQjOaqbjU7gc56lfwmsln9JlGrrMlrHS8pHW+Ew4DEPqd/RMeM6xo60vb72i3OzB+XX8umy2FLgO13sQVrbS6Ez4J5ygPd4zkLSuKUO3CV1qqJkGIlyE39IeU/iDgeRdV5cx7ef7GP6zbDZ9GC/yc5zVTI294UK8GfO0x8dTcv5EGXt1oYYutW2snFk22vosfgkr1K+Bc2fCqceNtC7dMlbe64HNw9txiGw2LcJfIHkAq5vpsOnwt3gFGtoguKTgueNlTOpSDV1syxXl3mNHWhcLq7Fc/QInpvCbS0da128dKzf7aSfg9QjZbDoEF+FuP2G4mdam8E8YRmiPsUjWbypjly4WesDKZjo4hYsxon2m8I5I/nhTGff6Py7AX8nmwovxIf9mZTMtTOGP8CrM0z5jkZy3qYwf63INPWDrWLnn2JHWp4RVWK49GjhLeMbSkdZXto6VW/2r1+DxsrmwHRvsM9xMw8LFeBYa2mcskmdsKmO7HtDQI7aOlXuOHWltEFZiufY5Ujh/6Wjr0EVLh79411f/9q04SDYXDjnxef/04RXP/NifCH+JY7TXWCTnbSpjux7R0EO2jpV7lo60PhnhDKzQPg2snN794xfd+eX3H4GQzYFYfPSqV75ocNHR56KhjYJLJOvHy9ihhxR6zHgZOxPr8XFttmPLxiNQyOZIKu7Z9sWjtN/HE+vHy9ipxxR60Hgrdqfk/ODdSNpk++YrZHNr++YrtFEK3p2S88dbsVsPKvSoiTL2NpIL8WrsVbM0PWnHlo2yubX95qukmSltsBevbiQXTpSxV48q9LCry0hF8s7gOdihRru+/3VTO2+Xza3J7Vvt/sGNarYjeE6RvPPqMpIeNqDHbSzDPp9a3Uw3TYdP4lFqsP2my2WdYfvmyy185Elq8r1G8uxryrhOHyj0iWvKuK6RrMZlarD95jFZZ/jxTZeryWWNZPU1ZVynTxT6yDVl3J6SpwZvxbSHaWbvbju3bJR1hh23XC1NT6pgOnhrSp56TRm36yOFPjNRxtRg8rqC38BdHoZdd3zN1D13yTrD1D13uveub3iY7ir4jcHkdRNlTOkzA/rQWBn22bCqlb40w0UY9RDsuHkMSdYh0oztm8cccOSpHqIrCs7f2Iot+lRDH9tyRbn92JHWx4uwK3EWBjwI2678E7t/+B1Z54iB+Q4/+Tc9SLsL3iB52aYy7tbHBvS5TWVM4i3DzXSp8H6c4edI03vsuOUaWWfZccs10syUKOb5Ba6VXLCxjC/LNGT32zpW3rZkpHVRhGkMYZ4HcM+tX3LHF98r6ywzU7scdtJ6g4uO9jPciz9NyW9PlLFFdr+Q/ZRVzfSEmfDnWOMn3HrVm91y2X+TdZ7jfuXtjl71Kg/gyiJ5+cYyvib7vzRkP2XLWHnno0ZaH90bbg7OxEH+zdaxP7bn7u/JOk/RmOfwJzzXf3AbLhxMXnl1GbfLfsqA7AFdWcY0PjTcTP8jwhsSL52e3Dl4z61flnWmnVu/YGbvvYqBhZPB+1LyxvEy7pL9TA3Zz7V1rNx17EjrkuCTO7ZuWnbndR9aIU0Xso4zM7VrZuERJ3/mwEee/Cx8bLyMXbKfK2QP2skXfCmmvv+NNbdd+9dv3H7L1WdLM7KOsRFvwOVIsgclZA/ZUDPFbZve8ZQf3PCJP7znti+vlGZCNhcSNuFNuARJ9pCE7GE76fzLGnu3bz33jmv/+nU7tmw8O6WZQjYbZiKKq1KaeQsuxbTsYQlZLZY/7S9W7bjpf11497c/c97M3t2DsvpFTEY0Lh5cdPS79mzfslFWWUNWix9957Nbzvy9f/mHgUOW/31jwcG7p3bcdsLM1D0HyiqLYuDOgQWHvHfhoStePLnz9r+a3rN9i6wWIWuL48/70KLt37ts/e4ffOslu27/yuo0s7che/AipgfmH3L1zPTkB6MY2DC958c7ZbULWVud9ILLY+r7Xz/h9q9+9PmTO7Y9Z3L71hVSCtkDiNQYPODGYvCgTxzx+Od8dPKeO77z/Rv+PsnaJmSz5oT1Hx2449r3P2lm6t5n7/nRzeundn3/eJli3oE3zey9d8P8g5Z+cnDRUV/ccesX9spmRcjmxOEn/2YjcfquO294xszuHz19cuftJ6eZvYP6QcRk0Zh/QzG46DODBx756SjmXXfPHV+Zls26kM2540aasfueO5bsuvPra3f/8NvnpOmptXvv/cEyPaSYt/AWMzOXz1t05GXzDz3+8u2bx7YhyeZUyDrOYY97Vhz86Kccd+vVb17dGFiwavePNp+Zpicfk2b2LtYFohjYLopvz1+89At7d/944yHHrdm4665vbd5119eTrKOErCssOGzF4jSzd0URjVOn9vz4CY15BzxucsdtJ6a0d4mUGgizK2E6innbBg866pvTk7u+PjO582sDCw+7vhg88MbdP7xxu6zjhayrHfCIxx4w/+Bly3fc+qXl0RhcNr3nR0tnpiePiWgcmdL04UVj/qFpenJRSjMLsADzMOCB7cUUdkcUu6MxuHNm7+67oxi4K6XpO4rG4K2N+Ydsndl77y2Llwxtvvt7l27GLlnXCllPO/i4Effc8dXB6T0/npfSzDw00PDApjEdUUw15h88deCRp0z++OYxWZZlWZZlWZZlWZZlWZZlWZZlWZZlWZZlWZZlWZZlWZZlWZZlWZZlWZZlWZZlWZZlWZZlWZZlWTv9byC9BA98elMXAAAAAElFTkSuQmCC",link:"https://spirewallet.com/"},{key:"temple_chrome",id:"ookjlbkiijinhpmnjffcofjonbfbgaoc",name:"Temple Wallet Chrome",shortName:"Temple",color:"",logo:"data:image/png;base64,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",link:"https://templewallet.com/"},{key:"temple_firefox",id:"{34ac229e-1cf5-4e4c-8a77-988155c4360f}",name:"Temple Wallet Firefox",shortName:"Temple",color:"",logo:"data:image/png;base64,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",link:"https://templewallet.com/"}],tr=[{key:"infinity_wallet",name:"Infinity Wallet",shortName:"Infinity Wallet",color:"rgb(52, 147, 218)",logo:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAABm3ElEQVR4AezBa7Sld2Ef5uf3f999rnPOnDMz6IIuMwhJIBAgQBDuYMCEAIkvwRDXWWnqFeeymqTOWk3bWUmafulaadN+6KeufOjqstO0TVbc4sSJg11iG4MdMNjEssECobtGc7+ec/bZe7/v++9oBNjYGAvQSDOa/Tz50z/5IZfLdLtf+N2fP/XKUppXpTT3DH33EtwwWlq5KbIXMTc395Rp33en+tnkSJInkvLlYei/sLKv+Z07v2/zQZdJ61k23RmWj/7u+BUpeU2tzb2jxaWDlM3EZmmaVSwnWcHI3Nzc1y2kbUelafaWYTgoXlVq++5+mpOP/eb4gX46+cLinoXP3Xj3ygOeRa1nwe6Fvpz4ys71lHfXvn3L+aP1ZYmbU4ZbSjNa8TUxNzf3x0my2KSsJ/F1tdeff3I4P3R5fHy2PjT0k/uGbvbJtPWzN79m7azvUet7MD7XNace2r2hG3vP1sn6/dR7SjO8tDTNsrm5ue9IakX1hzRJ2WxGC5t18Mqzj/dvr0P9PmW4T935efpfufmetbO+S63v0vhst3nsS7vv2jox/ICUN5RmdCdac3Nzl0tJspmmfUtVX3/2seF16vBe2frnN79mz6d8F1rfoZ3Ts4Uzj0/unO34wa2T/lxpR69Fa25u7jkTWUzTvEFtXnXmkenLS7b/WTX8qxffvedMSqpnqPUd2DndrR+7f/KOreP9X0xp3lGa5kZzc3PPn1hq2oX3nHp4dmutw+uS8U/f8IrlL5QmnWeguf1Nd3omtk/Prj9+/+QHt0/6m007el9K2Wtubu5KkFKa/aVp79053d049MOp1X3tYynp/Qlaz8DO6e6m4/dPPrx9sv54adpXm5ubuxI1pR39uVMPzvamTJZedMfix5tRdn0brT/BzunupuNfnnx0+5SfKE37cnNzc1e00o7eefKr3aLIi25f/Hgzytgfo7n9TXf642yfnl1//P7JR7ZP+WulNC83Nzd3VUgpN2+f6g+qw6PLe9snSpPOt9Dc/qY7fSs7p7v14/dPfnD7ZP0bpWlfaW5u7qqSUm7ZOjm7UeqXl/a2x0qT3h/S3P6mO/1hO2e65viXd9+9fcrfLk37BnNzc1elUpqXbJ2crSXD55fWmzOlTfUHFN/C2ccnd1043v/lUpo3m5ubu6o17ejDx740/vBku9/0hxR/yPhstzndrj+aNO9BMTc3d9UrTfvXto53b+4mw7I/oPgDxue65tiXdt+1dcL7StPsMzc394LQjBZuPXb/5K+cfnhysJsM8TXFH3Dqod2btk4OP1ya5h5zc3MvKO1o8Qee/OLOO8fnujVfU3zN7oW+dLv5M0nzJrTm5uZeeKr/dHy2u72bDnFR8TUnvrJz/daJ/t0p5XZzc3MvSKOllTcf/dLkdeMz3R4XFV8TzXspd5ubm3tBK2k/SrnNRcVF051heeibd5WmudPc3NwLWmmat0936kv6WW2Li5783e27zx+dHkJrbm7uhS1ZfOI/br9x6+Ts+uKiOvRvqMNw0Nzc3LXiT+PWdrrdL5Rm+e5mNNxobm7umtCOFl45THN9s3N836u7cX44pXmFubm5a0PSnnl8+zdKKc2rKJvm5uauNXeVlOaexKa5ublrSh36g2Xou5fUWlfNzc1dU0rT3lpwA5bNzc1dM7q2NaSkHS2t3JRkxdzc3DWj7Tq1He0rkb0YmZubu6ZEVgtibm7umlTMzc1ds4q5ublrVjE3N3fNKubm5q5Zxdzc3DWrmJubu2YVc3Nz16xibm7umlXMzc1ds4q5ublrVjE3N3fNKubm5q5Zxdzc3DWrmJubu2YVc3Nz16xibm7umlXMzc1ds4q5ublrVjE3N3fNKubm5q5Zxdzc3DWrmJubu2YVc3Nz16xibm7umtV6Sq3E3NzcNSVaX1fNzc1dY1pz35Vaq9SBWhkGavVNEkpRU0gkMfddGAbqwDBQq2+SUIqaQiKJue9Ma+6ZG3q6jloJtVLFJQmJp2QYDLVKHdCLSkVC09A0iLlvYRjoOupAotaqiksSEk9JHdRKHaroqINUJDSNWhpJzH17rYuquT9WrdLNqFVFHQYWlgzre/V79+r2bKgra+qeVZrGJX0n22Nl54KyfV5z4Zxy/pzsjuk66TopRW1aSjFXpesYBrVS68Bo0bC2R793U7+2aVhZU/es0rYu6XuZTGRnW7N1Vjl3RnP+nIzHdJ2kQ9S2pTTm/qigNfet1SrdTK2DYdaxuqq/5TaTgy/V3fRSs1tuMqyt6PessbCojlo1xdelm8nuTJnsKFtb2iNHtA8/aPTYV40ee0g5f06GQUqhadVSXHuqzGZqHdR+UJeWdTfdanrwpbqbb9fdcL1+37phdV1dWlIXRmqKr0vfye5U2R0r21vao0e1Dz9o9OhXjR57UDlzmmFQmpamqKUx981ac39Eupnad0xnhv0vsvvqN5jc83rTl75Md90BFlcYBvoZs4kyncmsE7+vto1hz7Jh7xo3HzS961VMdzVnTxs99KDF+75g8b7PGR15TGYzWVhQm5bEtSDdTO17ZlPD5n67r3yd6T2vN7n9Lt3117G0QsUwYzpRZlOZdeL31aYYVpcN62uMbjV9+d3MJsr5MxYeftjifV+w8Du/aeHxh9mdyGhRbVsSc0/LLbe/+3yNJYxc41IHZjN1vKNu7LPz5ncbv+WdJq94BSsrnD+rjMcMg2+SuKRWEmp1SUKtvqE06tKyuroiXad9+CHLn/m0pV//FaPHH1GbwuKylOKFKnWg69SdbXV9r/Eb32n8lnea3H23umeN7QvKzg597xsS31ArCbW6JKFW31CKurikru5hGIwee8TSb/y6pU//koWHv0op6tKylGLOODfd9q7zKVkSI9ewdD27O2pi5/XvtPMDP2xy92s8pZw7LdOpGn9UQq0k1EpCrSTUSkKtLkmolYpRa1hbp2mMHviq1V/4t5Z//ROaC+dYWVWbxgtLZOjZ2aHv7NzzFjs/+GG7r34dbaucPyOTiRrfWkKtJNTqT1TRNoa1NUaL2kcesfqLH7fyqX+nOXWCPXvUpnUtq0MdN+ubhw4naUXjGjV0vebCWcPmfhf+wk84+xN/XX/LLcrxJ+XCeepAPHuCYZDxDpOJ/obrTe55g+66WzTHntQce1wtRSktcdWrqP2gXDirLi+78JG/4uyP/xXdHS9TTp+QC+foB+LZE9Qq47GMx/oD+03vudfsppcqJ45rn3hYLUUpLXFtqrpmffPQ4SStaFyDMp1qts6b3Hm3M3/rv7H9/e+TC+c0x08IkkgllVRSSSWVVBeFkKEihNSKiIqIiogqlVRSCTIMynishunLXm561yu1Z89bePB+tQ7SLhBXrYraD9ozJ3Q3HXLm7/xDWx/8kEx2NSdOyjCICFJJJZVUUkl1UURFCKkVERURVTwlUqtUUkklSK3K7q7a92a332H66ns0W2MLX/4ddehltEBce6quWd88dDjSonGNGWYz5cJZ43vf5vTf/e90d9yuOfK4MpmS+JPURGqV6mkJtRKCKqKqIirV7ws1kVATZTaTyVh/3YtM73m9DNXil+5Tu5ksLFJddSrqMGjPnjS96zVO/r1/bPqquzVPPCa7E0k8I4l4SqiVEFQE1dPiovh9oSYSaqJ0nezuGDY3TF7/RtpFi7/zm4bpVF1cllpdY7pmffPQ4SStaFxDMp0oW+fsvOX7nPkv/4G6vqF54nFJPFPxzYIgqLWKp8W3Fk+Li0KGquzuGlZWTF91j9ouWvqPv2HoOnVxWVRXi4ra99pTx+ze/Xon/8E/0t94k/bRRwRJPFPxtCAIaq0inhLEtxZPi4tCalXGu2oTk9fea1jda/nzv6ZMxoalVVFdQ7pmffPQ4SStaFwjMp2wdc7OW97tzN/5e+rymubYEZri2ZLEdyyeNpmoo5HZK16tLixZ/s3/QDczLK9Ira4Gte+1J4/aveeNTv3D/1G/sV/7+KM0xbMhie9a0HXUavbqewx7Nix/9lMynehX9ii1ukZ0zfrmocNJWtG4BpTpLhfO23nru535ycPq4pLm+DG1iStJmc4oremrXqMurlj+3K9JN5OlZVe6dDPNqWN273mjU3/vv9dvHNA+8ZjaxJWkdB19Z3rP6/Tr+y3/h19WphNZXnGN6Jr1zUOHRSsaL2BJUSa76tY5O297rzM/eVhdXNIeP6G2xZUo3UwtMX3169SlVcuf/VW172V5Ra2DK01EupmcOm5871ud/vv/yLCx3+ixx9S2uBJl1jObmrzuXsPeA1Y+/Qm1m8nKqloHL3Bds7556LBoReMFKomyu6NuXbDzjvc5+zf/rrq4pD1xSm2KIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIJ6W6Yw6mLzyterquuXPfFLte1leVWt15Ygym8qZk8ave7PTf/e/NexZ0z55VG2LIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIJ6WrpPJ1OTVr9fvv87Kpz6hdjNZ2aPW6gWsa9Y3Dx0WrWi8ACVRxmN1vG3n7d/v7F/924aVPdpTp9Qmrnghs45Uk1e+1rC2buUzn1T7XpZX1Vo935Ioswnnzhjf+zZnf/LvGzY2tSdOqk1c8RLpOmU2MXn1vfr911n51CfUbiYrq2qtXqC6Zn3z0GHRisYLTBJlvKPujm2/833O/dX/wrC6pj19Ri1x1QiZddTB9O7XGtbWrXzmk2rfy/KqWqvnSxKZTLhw1vgNb3f2P/+v9Pv2aU+eUksoIa3ahqbQFJoiGlKprgwJXa9Mdk1ec69+/3VWPvUJtZvJ8qqqegHqmvXNQ4dFKxovIEmUnW11d2znbe91/i//DcPauubMWdqobUPTsDCibWlb2tZTolArQ6WioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqK6pMw6DKZ3v9awtm7lM59U+16WV9VaPdeSyGSXC+eN732bs3/7v9YfuE45e4pUhirdoEw6ZXeqTDpl0imzSh1oirq4SNvStp6SvlIrFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFdUl6QaZ7pq85l79vuss//ovMZvK8orqBadrvSBFtrfU2cz2u/+M83/pr+k39ivnz5Aik5ky7aWv0vUuSdQmalvUUasuLqhLja/L7oShej7VUMa7BtXWn/2Ip+z93/4Xzp5WNvYZht5zJ7I7Zmfb+E3vcO7H/xaLG0YPP65MZ7I7YTqVSSfTGbVK19F1JC5pW8PSorqyqC4v6TZX1ZVlSmQ6ldmgxnOqhkxmyqkTtj74w9Rq7z/5n+TcGXXvfqkDqheK1kXVRdULQhJlZ0vtZna+7/3O/9iPq4urFh94VMa7Mt6V8USmU5nMZKjS976uJupopK4sGJaWDHuW1dUV/caSuryIyHQqXY94PpTxxDCw9ec+oi4s2fhf/wfOnjZs7Je+c9mlyGzC7q7d17/FhR/969JuaB96mMlEZh1Dlb6nVoZB+oFKhkrfyWyQbtvCpEMo0a8s6Pat6w9s6q7fq19flelUmcyonlNlMuHkcdsf+CFUm//kf9acO6Xfu4+KWl3tUmnWNw8dFi0aV7kkynhHrYPxW99j50M/Kn1r9MDDmlNnNee3lPFEZp0Mg0sKtVaCbmComslEs7VtdPK89okzRkdPak6dU7YnMlBXRuriIiFD9XxI30vfm979GsPe/VZ+/ZfoO1lcVl0+SZTZVCa7Jq96vfM/9jfUzeuVk8elVrWEppFS1BISSqHEJQltS6Em6kKrllCrZnuiPXVGe+SE5vQFZTJTlxbV5SVChuq5E+l6mU5NX/Va/fqmpS98Rtkdy8KiKq52oWvWNw8dTmobmiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIkijjMX1v9w3vMH7PD5GR5ugJ6XtS1KaoKTSFhKahFAmahrahoC3UqE2jtoWh154fa4+fNDp2Vjl3QWadurygLi+iSj94rmXWydCb3vUqw+YBS5/7tDKZsLSMKgiCIAiCIAiCIAiCIAiCIMLQKbtj3S13uPCRv6q77Q45dwYDpSFFSiFEUUPiokhckopSJKEpagmJ2jY0UVI157YtPHpWc/qs1GpYWzGsLNJXGQbPlXSddJ3pXXcb9l1v4b7Paba3WFwiEVUQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQT0nXrG8eOixaNK5Wiexsq0Nn9w3vNH7PD6mre2V7mxLaQlNQpKApNIWEUkhoGkoRFzWNWqhtUUcFUdtGbVvqoD21rT12SnP6vHS9YWVRXVmUiqG6JC6/kFknQ2/yilepa5sWvvAZZbLL4rJnXaJMxobVddsf/LDdN79V2TqPnqaQ+LoIqSIqEhdF4mmlIFIrJcQltTQkNIWmKls7Rk+cVc5vs7hg2LNMIn11SVxeiXSd9L3py+5SNw5YvO/zys4Wi4skrl7pmvXNQ4dFi8bVKFG2txgGu29+t533/3nDxgFlvOOSUtQgkYKmIJQiQSkEpYiLSqFpxEWlUAqhtgVRm6I2RW0b7dau5sRp5dy2DDGsrRgWW4aqDKSSSiqppJJKKqmkkkoqqaSSSiqppJJKKqmkkkoqqaQSF/Wd0leTV9yt7tlr4bc/p+zusrjk2ZTZzFN273mj7T/9IXXUyngsidoEISGoRNRUmkKtNA0lpEh8TWgaiac1QVGbhhIpVfpBe3pHc/ycoN+/ri610vcMpJJKKqmkkkoqqaSSSiqppJJKKqmkkkoqqaSSSiqpROg6qdX0jpcb9u6z8Hu/rWxdYGGRFFendM365qHDokXjapMo2xfUoRq/9b123v9h/eYBGY+plUJtipQiKZSiJjRFPCWUIkGKS0qhFBKaRmqlFEohKKGEUtSmoQ7a7U57fkJPXd2j7tmLytCJyy9CN5OB6V2vVFfXLPzub8p4zMIS8azIZGxY32fnvT9g+vJXai5ckOqSuCihhIQghURS1FBS1JDEUxJPKwWRoBRCKjUhkYY6WhRFc+acMu3Vjf2G1WXpO+kHEpdThK5TajW942WG9U0LX/miZus8oxEprj7pmvXNQ4dFi8bVJFG2L6hi513vt/PBjxr2XSe7Y6mVUihFUiiFoBQRSVGDpkjQFBKaIgmluKQUhKahaUSlKVIbCkJd3SOjZTn5qNEDXzB6+MvS7+r3XcfisnQddSBxOUXoZiimL7tLXdlj8Uu/Lbs7LCyS+J7UKkOvu/mg8du/37B3n+xsi/gmCQlNIfF1SSFVRFUlcUlTJEE8JS5KPCWVmrC4Kn2vnPyq5rH7jL56n/b0Cf3+fYZ910kf+hmJyylC1yFmt99pWNtr9JUvKRfOMVogxdUlXbO+eeiwaNG4WiTK1gUVO+98n+0PfcSw/wbZHUsdaAqJJAQpkpAQlCIipaguKkU8JSSUIkEpLilFKkqhFOKiyp416qC9/7MWv/hrRo980cJD91u8/z5la0t3463q+qb0PbVX47JLNyON2W2vMKysWLj/d5TxNguLJL5rQ09pTO54hclr/pSk0M98SyEpBCkElQipIqpK00iJpyQuiktKkURqUfesKdvbFr74a0Zf+azm1BPa00eNHvo9zROPG/Zu6m68iRrppmpcduk6UnS33mHYs2704P3KhfOMRqS4eqRr1jcPHRYtGleDRNm6oGLnne+z/YEfMey7XnZ3qD0llEiJWkIJpZCQSEJCkCIiJWpQQlMkLgqlSFCKS0oRpA6ytsHQW/ytf2/xd35Ns3NWQlTZOq995AFlZ6y/+ZBhY590vdSBuOzKdKq2je62lxuWly0+8Huys83CAonvRrqZ2i6Yvuw1Zne9hgwMvW8roYSEoBIhVW2KkqKqkhDiKZEghT17ZXzW4m9+wujBLyizsZRIKdJ3micf0zz5uGHjRYabDrqkm5G43Mp0pjaN7tAd6p41o0ce0Jw/SzuiFFeHdM365qHDokXjSpcoWxdUjN/+ftsf+BHDgRtkZ0f6jrgkQiKJWkIplFBCQgkpUkIpJJQiKVKK6qKmSNAUhKZI4pK1dRVLn/24xd/+tNJN1IVFmlZtR7Qts4n28YdkvKu/6ZBhY590vQyDIAiCIAiCIAiCIAiCIAiCIAiCiHQzmpHutpepS0tGD96vbG8xWiDFdypdR2nNXvoKszteIcMgwyAIgiAIgiAuKpGEhIREUkgVUVURQlyUwtqmsnXK0md/weiB/yi1VxcWaRpKoW0ltCeOaY8d0W/s1990yFMym0kiCIIgCIIgCIIgCIIgCIIgCIKI9B2l1R28XV3Zo33kAeX8WdqW0rjypWvWNm49jBaNK1hKUbYuUKvxO95n+wM/Yjhwo4x3pO8IQfwBiSSUSAkllEKKJCSUIgmlEKSISCmqi0qRoClSK3s2UC39+s9b+q1PSjdTFxfVFGqlVlJoR3RT7RMPy3isf/FBw+Y+6ToZehFBEARBEARBEARBEARBEARBPC0umk1pF8xecqe6uGD04JeVrQuMRiRqrZ6p9L1aGrODt5vd/nJPyTAIgiAIgiAIEiQklFBCJUKIqKoITVjf1J49Z+nTP2d0/29RBxYW1YRafUPTSonm5FHtsSP6jf36mw6RKNOZJIIgCIIgCIIgCIIgCIIgCIJ4WpBupjat7uBL1ZVVo8e+qpw7QzuiFLVWV6xau2Zt49bDpBWNK1QSZXtLxfgd77f9gR/RHbheGW9L35H4dhIXhYQUSighhYKERIJSXFKKIKWoiIvWNhh6y7/6c5Y+/8vSzdSFRTXxLbUjphPtkUdke0t/4y2GzQP0nQw9icspCbMpowWzl9ypjhaMHnlA2b5AO1JL8YxVouoP3Gh2xytZXJS+8x1JSFFLCCoR4qJICav7lZ1Tln/pX1n44m+IysKi6lurpZEUzalj2mNP6vfu07/4oEu6qSQuu9mUdqS79TZ1ZUX72EOac2doWrVpXLlq16xtHDwsaUXjCpRE2d6iDsbveJ/tD3xEf+AGGe9INyPxJ6q+WZDQRBJKKCEhkaAUl5QiGPbupQ6Wf/lfWfnML0rXqYvLauLbGo2YTrRHHlF2dnQvvsWweYC+o+89FzKbMlo0e8kd6mjB6NEHla3z0o7UUjwjiTKbsrxseufdhs39srur+i4klJCQSEUphr0bmnMnrfx/P2Pxvs+Iqi4sqfFt1aaRFM2po9rjTxr27tO/+KBLupnnQroZ7YLultvU5WXt4w9rzp2RplWbxhWqa9Y2Dh6WtKJxhUmibG9RB+O3fb/tD35Ed+B6ZWdH6WcigiAIgiAIgiAIgiAuSiiRFEoohRQSEgkVw8am9IOVf/8xK5/6uPSdurSixjMzGkk31Tz5qLK9o7vxFsO+A9J3DL2IIAiCIAiCIAiCIAiCIAiCIAiCzKbqaNHs0O3qqNU++pCydV7akVqKPyyJDIMy3pHdMYkMg4jZoTt1Nx9SdncEQRAEQRAEQRAEQYRSSChF3buhnDlr5Rf+uaXf+jWpDItLajwjtWkkRXPqqOb4k4aN/fqbDrqkn4kIgiAIgiAIgiAIgiAIgiAIgiDIbKaOFnS33qYuL2ufeFRz7ow0rdo0rkBds7Zx8LCkFY0rSBJle0ut1e7b32/rQx/VH7hB2dmRfob4XgUJ4qKQUEJTSPGUYWOfqFb+3b+0+sl/I11nWFlV4zuSdiSziebJR5WdHd2Ntxj2HZCuk6EncbllMlEXl8wO3k67qH38YWXrvLStWoqvSyKzmXQz/b7rDAdulL5TJrsym6lLe8xuv0tdWpLplMR3rcSwuV+5cNqej/2flj7/q5IYlpbU+I7UppEUzamjmuNPGjb361980FPSzUhcbpnO1NGC7paXqMtr2iOPas6elqZVm8YVpmvWNg4elrSicaVINDtbaq3Gb3+/7Q98VL//OhlvS98hLosgIVHDsHdTEqv/9l9Y+cTHlL4zrOxRfZfaEbOJ9slHle0t/fU3GTYP0M1kGEhcXpHpRF1c1h28Q20XtE88rFw4J22rliKJTKcy2TU7dKftD/yI3Td/HynaY09ots7L7o7+RTfpD76U6VSGgfjOVJcMm5ty4Yw9H/unVj7zCRJ1aVn13alNIymaU0c1x48YNvbrX3wricxmJC63TKfqwqLu5peoS6vaJx/VnD0tTas2jStI16xtHDwsaUXjSpAoO1vS98Zv/37bH/wLhs0XKTtb0veIy6tSqet71VKs/pv/28rP/wtNrYaVParvTW1HMptojzyibG/rb7hV3dwvfccwIC63TKfq0pLulpfQLGiPPKxcOEc7kr5TdsdmL3mZ7T/zEZN736K7+VbaBQsPfFFz6hjdTBlv6265zXDgOplMGHrEM1JRGDY2ZOuctZ/5KSu/+ouUVl1aVn1vatOQojl5THP8CcPGfv2NBz0l3QxxuWU2VRcW9DcdZGlF8+TjmrOnpGnVpnGF6Jq1jYOHJa1oPN8SGW9LP9h963vtfOhHDZsvkvE2fUfiuTCsrolY+bf/3J5//c+UoVf3rKu+d0FtR9JNtUcfV7a3DDfcbNg8IF3H0HsuZDJhYdHslttoR5qjj3HuFN3E7La7bH/wL5i8+l6ZTZV+kOnEwv33KSeOsLCgOXWcyVh/8yHD3k36QfqO6turldGCYX2vcvqEPT/7f1j9lY+rTasuraieJU1DiubUMc3xI4bN/foXH5Ra6WaeC5lOGY10Nx9iaUVz9AnNuVM0DaW4AnTN2sbBw6KVNJ5PibKzzdDbfdt7bf/ZHzNsXic72ww9icuqIgyre0Ss/rt/afVjPy1DVdf3qtWzJqhtK7Op9sgjyvYF/Y23GvYdkL5jGEhcbmU6U5eWzG65jSaao4/or7vRzgd/1OTVb5BuJru7tIvKeMfCV+7THH1MXV6R2Uz75KOa8+cM+w4YNvarS0siGKi+WYm6sKQuLdM02iOPWv3YT1v51CdoR+rSsupZ1jSUaE4cVY4+Ydj3Iv2NB6VW+g4hLqsym6kLC7qbD6nLq9qjjytnT9E0lOJ51jVrGwcPi1Y0ni+JsrOjzKZ23/pe2z/wFw2b18nOlvSDxHNiWN0jWPn4/2P1Yz8tw6Cub6i1erbFRc2IfqZ58hFle0v/4oOGzQPSzxgGxOUUZDZVl5b019+o7t1v+qo3mN71GqlV2d2VhNGCTKZGD3zR6MjD6sKi2jbKbGb0+EOaI4+pTVFX12haddRKs8DCEu0CzYgm9FVz9rSF+37Dnn/9f1n4wn+QhQV1aUVVXRalUUs0J45qjz9h2H+d/saDUqv0HeJyCjKbqQsLupsOqkur2qOPK2dP0TSUgup50jVrGwcPi1Y0nhdRdneU2dT4Le+x/UN/ybDxItm+IP3g64IgCIIgCIIgCIIgCIIgCIIgLgp1eUXqYOUXf9bKx35KGXp1fVOt1WUTNCP6TnPkEWX7vP7Fhwwb+6XrZBhEBEEQBEEQBEEQBEEQBEEQBPH7MpsyWtTd+lL9i14ss16ZTRGXtCOmE6Ov/p7R419V21ZKUduWWrXHnjB68H6jJx6V8+eU8VjZ2ZHdsbJ1XnP6tObIwxbu+7zVX/l5y5/+BaMnHjas7mFxSVVdVk1DabQnj2mOPq5/0fX6G2+lDtLNRARBEARBEARBEARBEARBEATx+zKbqQsLupsOqour2icfVc6dpmkojedF1bW+rnruJcp4LJNd47e8x4U//58Z1vfL1gUZBs+VurQiXW/53/+slZ/9p0rfqXv3qcPgObG4zO7Ywuc+SWXnQ/+J7vob2dmSridxuWU2o1Zqlb5HfEPtaRlWltSmlWFQU8RFo0VDO1K2zlv8/K8a/d5vGfZsqst71OUlT8lkpozPK+dPKxfOs7Co37tJotbqOdGODEsxevjL9vzM/27rwzF7+WsZqswmpLjcys62YWnZ5PVvk6638os/ozl5hOUVtWmp1XOtWds4eFi0aDyXEmV3LLs7dt/0fS589CcMew8oF87JMJC4rGolUReXpO8t//LP2fP//pQMvbp3nzoMnlPtiL7TPPGIcuGc/ubbDBv7mM2kVhKXW4ZBavVHlCJD1R55zOih32MYaBrfkDAaqYuL9J3m/Gnl9DHNiSc1J55UzhxTxtuUxrBnTV1Y8LwoRW0a7Ymj2ice0d9wk/7Gg/S9DB2Jy6ZWapXdXSmN/oZbWVrVHH1MOXeatqU0nmNds7Zx8LBo0XiuJMpkVxlvG7/xXbY/+tcNGweU82elVkEQBEEQBEEQBEEQBEEQBEEQBHFRqIvL0veWf+XfWPnZn5KhV/fuU4fB86IdMfSaIw8r58/qb77NsG+/zKYyDIIgCIIgCIIgCIIgCIIgCIIgCIIgCIK4KIVEc/yI0QNfVGZT2tYfFZpWXVhiaZmlZZaWWVpWFxZpGs+7UtS21Z540ujxh3Q33qJ/8UHpOuk7QRAEQRAEQRAEQRAEQRAEQZChyjBIrTKZEPrrbjWsrmuPP66cOyWlVZvGc6hr1jYOHhYtGs+FRJnsyvYFkz/1Lhd+7G+p6/uU82ekIi67GurisvS95V/6OXs+9lPS9+refeoweF61LXXQPvZVzdlT+oN36jf3y6yTOpB4rqUWSqOcPm7hK7+r7G6powVXrVLUdqQ98aT2sQd1Nx3U33hQ+k76nsSzqpKhMgzSD/5/9uAsZrP7Pgzz8/uf8+7fMjPcJA7JEUWKIrVYuyWSipzUaZxYlGwZKdqiDdwmbtBCAXLRi3oMFOhde1EU7UVQIL2wJVuxnRStNkuuHG12IMurIlOkKFJchstQ4jbbt73vOef/Kzm0HAvwIs7MNxZn+DwxVLFciiiGw681HDikPX5Me+Jp2pFsGhdJ36wfOHJUaNHYbxHKaqlsnbb3rh9z5h/9c3XzkHLqWeEFYX+ljCKnU9FXsy9/1uITv0Qd5OYhWasfCk3rBe3jD2lOPmt4za3q5hX0S1ET4aIbjZQzJ0y+dbdy5oQcT7yslSJHY+1Tx7XHvq274UbDq4+IbiWGAeHCSIakDmKoDAO1ikrZ3RMZ+htfpx66QvvYg5qTzzIaydK4CPpm/cCRo0KLxj4r3Uo5c8reO/+WM//1fy/XNpWTz4p0UWQJOZmKYTD78mcsPv6Lcug5cIWs1Q+VpiVC+9iDmhNP6V77OvXgIdGtxFBdXClHI2V7y/hbd2tOPCUnUy97UeR4rH3quNHD39IduVm95gaGleh7F0JmFVnFUBkGahVDigG1itWeOml0N91iWD9k9OiDmpPPMhrJ0thnfbN+4MhRkS0a+yi6TnPmlL13vNfpn/sf5GJDee5pEeFiyBJyOhPDYPblz1h8/Jfk0Kubh8jqh1LTEEX76Lc1zz2ju/k29cAhZbkikwgXzWii7O0a3f915enjTKcuCRFyNNF85zGjh+4zXP86w7VHWO2ImkQ4V5lV1Cr6yjBQqxhSDKiVYRB9KkOvzif6IzcZNg4ZHXtAOfUcozERSPsj+mb9wJGjQovGfuk67dZpe2+73el/+gtyvqk88x1KQ9hfiQg5nYphMPvyb1h8/CNy6NXNQyKrH2pNQ9Noj31b+8xTute9mfWrRLdLRdh/idFY7G0bfevr2qcel5OZS0YJOZ1pvvOo9uH7DEder3/1YWVvRa1EeMmyilpFXxkGahVDigG1ytqLrGKoRIi2oW0Mh280HLpKe+x+zYln5XhMhP0RfbN+4MhRoUVjP3Sd2NnSvfV2p3/u5+XapuaZ71KKiyKKnMyUrjf78mcsPvEROfTq5iGR1ctC29K22kfuN3rqu7qb3ywPXKWslmRF2HejsVgujR/4htGTj6rjiYhwyYiQ04Xm+DHtg/cYbnqzes1rxGqXrAg/qKhJrWKoDAO1iiFFRa2y9qJWMWAYKKnOJiJC1NRf/1rDoWu0D9+nPfmcHE+IcOFF36wfOHJUaNG4wKLrtFtndG99j1P/zS/ItU3lqeOiNAKBQCAQCAQCgUAgEAgEAoFAIBAIBCJTCDmbk4PZlz5t/slfog7q5iGR1ctKaWlH2kfu0zz5mO62t6ubh8RqWyQhBAKBQCAQCAQCgUAgEAgEAoFAIBCe14xFvzI69k3NYw/L8VhEuKREyPma5vgj2m/frbvlR9SrbqDbVmoKIRAIBAKB8KLIlDmIoTIM1CqGFBVDlbUXtYqBGAZlNSi1kYupHLdi1Ymkv+G1+iteZfzgvZqTz8rJlAgXVvTN+oEjR5MWjQuo9J2yddrqrbc7/U9+numm8uxxEY2LIYOczcXQm33xU+af/Ai1qpuHqNXLUTStHE+0j3xLc/xR3RvfZTi4KXb3RE37KceNHAajBx/SPv6ALA0RLj3BYkPzxCPG3/r3ulvfYnjVq8VyKWr6qwQyBzFUhoFaxZCiYqiy9qJWMRDDwFCplUIuZnI8EjVF34sh9a+5SX/lq40fuFt78jnDZOZCCtE36weOHEWLxgUSQy+2T1u96V3O/JOjcn5Qefa4KI2LIYOczRmq2Rc/Zf6pj5Cpbh6iVi9n0TTqZGb0yH2axx/Wv/lOuXmF2Nkiwn7JpiGr9vgxo2P3kUlpXLLWN7WPP2R0/9f1r3+7etURsbdDViL8RaImNRl6soohRcVQZe3FUEUlhoGhOmuoRMjFTE5GoiZB1EEMVX/kJsMVrzb+5tc0W6fU6dyFEqJv1g8cOYoWjfMVIWpVtk/rb7zNmZ87ql5xlebp4zSNiyGlXCyoafaFT5h/+qNkyo1D1OpSEE2jTmdGD31T89iDVm97r9w8JHa2iLAfIhsyNE8/bvTgPQwdTetSlpsHjY4/anTf13S3vUW94lqx2iOTCH9e1JS1ij5FVjFUUTFUaipDippiGBiqs2ovuk5Eq67P5GQkavqe6AcxDPojN6mLK03u/ipDx2RCOm8h+mb9wJGjaNE4T5Eplru6Q1fZ/tmf19/4WqMnn6QUF0WmXKyRafb5/9f80x8lqRsHqdWlJEqjzhZGD92jPfaA1TveJ9cOiN0thAuuBE3RPPNdzbfvEcsd2rFLWqa6cUD72ING939d94a3qVdeK5Z7ZCK8IGrKrKJPsmcYRMVQqSmGgVrFMDBUL4iuKqsq+oGmUTfmcjwSQ/rzYhhErVa3vI6+Gn/9K+p0RhTnK0TfrG1cdxSt0DhPpVuSafenftby9h/TPvmkSETYT5FJprq+IbOa/da/sfj0r3hB3ThArS49KUpRF+vGD/yJ5t6v6W55o9w4KIbBhZc0RTl1wvj+u7Xbp+R47JKXVW4e1D72kNH9X9fd9jb1qmvFcg8pKplV9J7XMwyiYqjUFMNArWIYGKpUxZBKX2UOoibjkeHAGqNW1PR9khgGguG1t2kfe8j42/fI9QNI5yVrX1wIQfQdy6W9d/y45ft+SvPscwy9F0RNUVPUFDVFTVFT1BQ1RU1RU9QUNUVNUVPUFDVFTVFT1BQ1RU1RU9QUNWWmXGyIbjD/7K9bfPpfeUHdOECtLlWZKZpWP5tqHr1HefaEMBOVqClqipqipqgpaoqaoqaoKWqKmqKmqClqipqipqgpaoqaoqaoKSPU+USdTgw5uFxkrYbDR7THHrD5fxzVHH9Y3byCKGJIpfe8jn4QFUOlphgGahX9wFC9oOkoy0HWXlRiIAsKUauoKWqKmqKmyBS1KjtLOV7Y+eDPGq64Wt06ISKcr+JCqJW+0115jb33fZAoYmdbRGO/ZVa52KRW08/9mvlv/hoR6sYBanVJK0U+84ScLpz+hX+pf8s72XmGrC64mkptRJmLGClDupxkrYbDRzTHH7bxL/5HzfGH1M0r1CZVS/pBVAyVmmIYqFX0A7XKqAxVDlUavCD1ajOIdizKiJr+YiH6qjlzSvf6N9j9Oz9jdPqUC6E4XxFK14khde/+B4abXq+c+K6IYt9lyrWD1N7sNz9m/rl/TYS6tkmtLmlRtM89oxkvnPnn/6vuR96heeZpIeynnIzlYu5ylLUaXn2D5rEHrf+f/5PRt++Ts02RI1HRV2qKYaBW0Q/UKgaaZVE6olZRKR3NMjUdOW7VNqj+coGsyvae1e0/rr/xVs3J50SE81GcrzrIrFbXXm/1lneL2ouh2m+ZVV0/IFYr80/9stnn/m8i1LUNsrqUBXLrhNVi4eSH/2fDre8weuIJstpXUeRorI5aVXU5ykz1msPaR79t8dH/Rfvot8RsHQ2ZYhioVfQDtYqBjCpjoA5SdVat9AOFOmmIEJn+SrUqu0v9NddavvM/YvuMzHQ+ivMUfacGw5verV57g3LqORI1qUlNalKTmtSkJjWpSU1qUpOa1KQmNalJTWpSk5rUlFnl+kH6lennPmby25+khLpYJ9MlLZNupcw37fwXP697+49qnjlOrc6qSU1qUpOa1KQmNalJTWpSk5rUpCY1qUlNalKTmtSkJnVAyNGUpiHT5ShRr361ePJhi1/53zQPf5P5nCjUKvqBWp2VxKrSddIgKtFV+oFMdTqW04moSU1qUpOa1KQmNalJTeqg7C2t3nan/vqb5PZp56P4nkQikUgkEolEIpFIJGqK2UH9DW+hmYi+2i8ZSU0Wh8TensWnftnsi58Umep8nZokEolEIpFIJBKJRCKRSCQSiUQikUgkEolEIpFIJBKJRCKRSCQSiUQikUgkEolEIpFIoqayXOqO3KZ/599Sts4gKeFiyNGM+RVKM5aZJBKJRCKRSCQSiUQikUgkEolEIpFIJBKJRCKRSCQSiUQikUgkEolEIpFIJBKJRCKRSCQSiUQiSUVsXim+e8zs//kXRg9+S0zWRDTUKnr0HUMnavWCqERXqVXUQWSqs5kcj0Rf/UBqVXb2DK+6UXfz27SnTyJIJBKJRCKRSCQSiURSnI+hVyP0r73FcMMNyumTMuybGMiNQyx3zX/jl01+51NklbMFmS4HGaGOx0ZPPqK599/LyVydrxsOXWW44mrDFVfL9SvVxYJ2QjumFBfEQGjkdEqEUqvLVqYUrB8S3zlm8hv/l3LsHjmZiBiJSukbMaRURSW6Sq3UpOvVtqgbM5oiavpBRSZNsXr92/WzmRwG56p1VjonQ0fT6g+/Tt08qDl1krQ/aqoHDrG3a/7ZXzH5ymfJlLO5lC4bgdFYbJ2w9q//d/3vvV7OF+rioNxYY3yFYX1Drm8wn8t2LKcLOZnIEl5QumToRD8w9NSOHET1l0uyLbJbipPfUVe7jCdIl7UI1g6I7zxi9psfsfrx/1J91U2y6+g7pKhEV6mVmmLoRaRcLJguxBAk4QdUq7K9rd54i3rNjcZPPW7Y2HQuWuchkpwuDNccphmTaV/UVA8cYm/H/DO/YvK7v0kOcjaXLj/peeOJcuppoz98XEmGEjSFdirmG3Kxps7X1NEaawv1wFXqxgaTg4a1TXV9wXTBeConU8pYbRuaEH0y9GLoRd/LrHIyZTw1vuePjL99j1JaNcIrnlcKi03x3WPGX/iY7r3/qfrqm+iT1ZKhUis1xdCLbiVHrf7QQp02Sjd4STJFvzJcebU8fJP6+Lew6Vy0zlUmpagHrzYcukYsd11wNUVlOHiI3R3zz3zU5Kufo/ZyOpMuX+l5zYhJkZnCi7L24sxzyulnyWpUUQdDU2gK7USdzFhssLahTtaZL+R8w3DwoFysq9MNdbbBbMZswXgqts5o7vuSyZc/oZx8Ws7XvOLPKYX5uuY7j4rf+TdWt/+0+qqb6Qe6PWqKoRd1YKjq5lSurYkhqEl4aYbKqDW86hptpnPVOld1UCPkoatYOyCWS3+mJiWoSQlqUoKalKAmJahJCWpSwvepSTIcPCT2dsw+81Hjr36O2svpTAqXvQiaVvoPApkpM4WUmWQrMr0gh06zvRJbp+R3U1vJSCmNmkaOxnI8Y7qQ04VcHGA8Z/uEcvxBZfu0nM1lKWR6xZ9TGnW2UJ46Zvy7H7d6113ymptFt6LbJdEvZdvKAwfkeCKGgfDSRYgu9Fe+xryd6GsVpXipWueqDjSNunmlGM1kv6SmsxI1SdQkUZNETRI1SdQkUdOfFzUNBw6wt232mV82/urnRO3lZCaFV/wVIojwgvT9wvMyZSaSTDJFJpli1bFaKWdOEYVMahLUEownMgqZXvEXaBp1OueZx4z+8Df0b/0Jw5VHlCj0S4aUBzbUA5sIanVOImUu1YNXGNY2lK6Tk4mXqjhHUVMIOVuT44moSSK9KL0ovSi9KL0ovSi9KJFIoqa62BBbW+af/qjxVz8n6iAnMxnhFecpglIojWxa2hGjMaMJozHtWI7GsmlkU2RbZNvSjiiNV/w1mobJVDz1iPL131KePiabViyTdqq/+pA6b0Xfk0gkEolEIpFIJBKJRKbSJ7M15uvK0DsXrXOUQZZWthMUMl0IkSlHIyKMf+/z2j/8twydOlt4xUUSIT0vAsUrXrosDeOp8vQx+djXZTsXzUx/1QG5uWCoZDpXUVMOgxhN5WhsyMG5aD0vnYNMGUE7cVY6b5EpS9COjR4+ZnzP79OtDOOJ8IpXvHyk57UjuqV47ri48oT+hmsMVx+itKIfnI8MZJWlkWWE9FIF2swBxUuW6QVZiu+JTOcjBe1Ic/KM0UNPiK1ttWlFBJle8YqXi0BGiEyWu4Zpq3/VlXI2E32lJuE8hPSijBCel+mlyEwlM8l0QSQSiUQikUgkEolEIpFETUYtyz3lsSeIVl1sijqIWr3iFS87mXRLZpv6616jHtwkk1qdlUgkEolEIpFIJBKJRPozUVPk4FykVJyPrGJYSb3zlREyaL77tDj5LPOpev2bmK7TLUVWr3jFy0nsnGb9oO4tdxquP4IqhuqC6pZ0K+eqOFcRog5ib1v0A0lkikyRKTJFpsgUmSJTZIpMkSkyRabIFJlyPNKcPGP0xLNKJeuKV92s3nqnnK7J1Z7I6hV/vYyQdWC1x2pPDr3MSqZXXCQ7p5nMde+5S/+298nRRCxXoqbIFJkiU2SKTJEpMkWmyBSZIlNkikyRKTJFpsgkiWjk7pbc21ZK61y0zlWErFWcOSX6TmjI6lxkW8jUPPUsy45xS/ayTLj5PSqae78sl9tiMpPRIL3i+0WEWqtmZ0u2rZzOGXo5DGK1q/SDzCQQRZZCKSIa2TREIcIrztPOaSYz3e136d/9k+piTSx3RE1npfMWQW3H2lOnxO6WHE2ci9a5Ko1Sqzj1rNjbZbJg6JyLHLXKs6c0T5+kLbItlEYOKzldKLfcoUrl3t+Wy20xmcsoSK/4D7KmZmdLvfpa/S3vVA9dTbeS26fEzo66d4blltg+I5Z7dB1Dx9DTd9RB1IFMoshSKEVEQ2lkKUR4xV9h5zSTme49H9C/5y51bVMst0StCBdSlqI8d1zsbcvpwrlonavSUAflxFPi1Cn1uoNib8dLlSUYUvv0c6w6ZiOaIkuhFNkt1dlC3va3ZGk193xZ7p0Wk5mMBukVZITYPqleddjuB/+x4brbhCJzEN1AP+hyT3R7ytYZsbfDzpbY3WF3S+ycEbunxN4ZsbsjVku6FX0n+k4OHd0g6kAmEbIUSqG0tCOXvZ3TjGe693xAd/tdLDbF3jZZES60qKl57jEx9DLCuWj9mfSSBJmV088oJ75juOFmMr1UORopJ7fE6ZOMi2wLUbwgIwiy25PThbztx9Bo7vmC3DstJjMZBelyV/peYnXnT+nf+F6xu8feriiF6UQItTkgg7wyUakDXaX2dD11T/S7YmdX2d1mb0tsb4udLbZPid3TYnlG7O6I5ZJ+RbcS/ZK+ox15Ubp8hETsnGY81d3+Ad3t75eLDbG3Te0JF1jIaJStU5rvPC5HE6Rz0TorEc5F7G0r331MdCsZIWr6gQVKKM+dZNXJ0ZhoZBSiIIjwgux2mK4b3vQ+gubuz7N3mumcKEiXs9jbVq+6Xv+G25XtbbGzjfSizguKPxWIkNEQwXjCZE5zQI0QmWpWWQfRD2LoZd/RLcWwK3Z3lJ0dlttiZ0c58aTmW38gTp9gPHF5SbFzhvFUd/sHdHe8X87Xxd42dXBWurBKyMlM+9C9ypOPyNnCuWqdj6YVQ1Uef0Ccepb5Oru7hB9INkXZ2VNOn6G0tK0sjRdkCQKlEEEUul05W9f/yN+WbWr+5PPK9hk5nRMF6XKV3VIuDsjJhG4X6S+VyBR6Z/Wd7wnPC0QQhShyNGY6J4raFDLVWqmDLEXsbZnUwegrn5KjMREuGztnGE10t39Ad+cH5GxN7O1Qq/0TctQqD9+jnHhaf8U1wrkpzkdpUZXjDyjHH2G8JjL9wEqrnNwRe0vaRkbjrAgEEc4qRUQhilztyNlc/46/q3/b35OzTbG3I7IiXJYSTSv2dsTOLtEQ4ZwlaophEH0nVkuxuy12zihnTilbp8XutljuUULON9TZuheky8jOGdqx7vYP6O78oJytid0darVfQsi2KKdPah/6GqWIKM5J0vqedI5COXNC+9CfWL3uHbQThhXhrxRJJrG9Ta2UERFEyKYQQSmUQimUIktQGrHak4t1w1t/QkSj+eP/T2yfEpO5jIJ02Wknyt5psX1GzhZkZ98kkSlHY7EatA/crf3m78t2LATp0hbY3aId6e74oP7OD8npTNnZIasM+yLS84qczI3u/oryyD2GtU0ynavifDUjhOaBP1aO3y9nG6KmSCKJJJJIIokkkixEt2K5R1NkabwgSzirFCJoGiJkCSJEKUSI3W05m+re9R/r3/n35XxDLndEVoTLTtPKnS25e4oSApFEEkkkkUQSSSSRRBJJJJFEEkkkkUQSSSSRRE2RKdsR0Rg98A3jL/wr5fiDcjJ3yQvsblEa/e0f1L3vZ+RkoezsUAcviCSSSCKJJJJIIokkkkgiiSSSSCKJJJJIIokk0lnZFGV3T/v1L7BzhvHU+SjOVyk0RXnmCaNv/C51kKMJNckkk0wyySSTTFmKsrtSVivGYyKIIIIIZ0U4K8JZEQjfE7s7jGf6d/2E/kffL+cbcrlNDgiXk6EUVrtiZ4vRyFmZZJJJJplkkkkmmWSSSSaZZJJJJplkkkkmmc5qRjSt5ti9Rp//FeXRu5ktRCkuaYHdLaLo7/ig7n3/iRxPxd4ZcnBWJplkkkkmmWSSSSaZZJJJJplkkkkmmWSSSSaZZBJFjieab/+x9r4/lusHna/iQmhGAu09v6s5dg+LTQLpLxGyCfaWYqgyChGyKURQCqXQNJQiS1CKKC2lECHbQilib09O1/Tv/kn9j75fztbZ2yYHhMtFRGHoNbtbZGPfNI0MyiN3a770MfHYPXJxkHZMpktWYHcbob/jp3Q/9p/RTpWtbWq1/0K2Y7F9RvvVz7B9iumCTOejeF46T1FkO5Injmv+6LPK1paczsn0F4lEou+cFSGbQgRNQyk0DRGyBBGiNETIErJpiEIEEWJvS06m+nf/pP7dH5Czdfa2ycFlI0IMPd0O0r5pxmL7pOYPP6N88w/U+SajCZkuaXvbZNXf8VNWf+c/pxmzexqVsL+SbMc0jeZrn9c88Edy/aDI6nw1axuHj4po0TgfpXhBPP048031xjfTd6IOCN8niKCc2hLLPTkaEUHTEEHbEkEEEZQioiFCNkkTIgqlyKYQRNcxnavXvpZolCcfYneLdkQE0iUtsH1aXvdm9eY3i9WSTBdeIZO9M8pzT2n2tmXTEAXpUhOet7dDHfTv/ZDV3/1HIkbsnCYqwr7KpLRyOtUcu9fks7+orJZyvk6m85N9s7Zx+KiIFo3zFKUR3VL71KPq1TfIV71GrDrq4PtEiCROnRH9SpaGUiiFCEqhFFmCUkRpiSBCREMUSpGlEEEg0a/kdC5ffROlUb7zELtbtCOiuOTtnpbX32S4+Z2iW5HVBTcMcrqQ179RzjaUx+8XO6dpR0RxKQnPW+4wdPr3fsjq7/1XIht2T6Had4nSMJmJk98x/vS/VJ54gANXkukC6Ju1jcNHRbRonK8olEaceVbz3UfVa98gr3iVWC6RhD8VCHFmS3SdbFralgiahgjZFCJE0xKFCNk2NIVSKIUShBcFkuhWTOfqq2+mtMqT32Zvm3ZEFJeysrcjrz4sb34PejLthxg6SiMP36zON7VPPMD2KdoRUVwKArncFd1S/96fsfr7/1hkEVsniSTsr0QpTObsnNR+8WPKN74i168QpbhA+mZt4/BRES0aF0IEzYinH1OeO264+c3MD4quEzWF5wWhiK0thsqoJYK2JYIIIihFREMUSqEpBEqhFIFIIokkEJ7Xr5jM1MM307TKEw+wt007IsKlKna35RXXqre8xwuiVpFEEkkkkUQSSSSRRBJJJJFEEkkkkUQSSSSBEAydKI289mZ1sal9/D52TtGOiOLlLJDLXbHcNdz5M1bv/6fK3iB2TxEEIokkkkgiiSSSSCKJJJJIIokkkkgiiSSSSCKJJJJIlCKnM7GzZfz5X9X+/m+K+QajCZkukL5Z2zh8VESLxgWSpWE0Vp58UPPME4bXvVXMDtCtUCkhoojtbdH1NA2lUAolZGmIIpqWKJRCCSIohVKI8JcJRL9iPFUPv45mpHn8Wyx3GE1cqqJfMds03HoHbUum/RKCvhNCXvc6dX5A++g3le1TcjQhipejTHR7YrVruPNDVv/gv1WWK3ZPE+FiyAgmc7G3rf3Sr2u/+gk5WzBZkNUF1DdrG4ePEi0aF0ggS0M7Vp64X/P044ab3sbiAKtdkShF7O5SB0qhbYmgaQhKjIigaYiQTVCKLEVE+OulWK0YjdXrbqEZax79JstdRhPSJSezKu1Id+u7mW2Svf0UQvSdSPLa1xnWD2kevUfZOinHE4SXk0Ss9sRqx3DHT1u9/8NitWTnBE3joogQ47nY2dJ++deNfu+TcjpnukatLrC+Wds4fJRo0biAAtk0jCaax+9TnnnccMs7WBxitUsJsbtL1zEeoxCUbCloChFEIYISlEIJP7Aguk40I3n4VjmaaI7dw2qX8cSlptYkq/62d8mDV9D3SPsqiKFHcvgWw8YV2mPfULZPyfHMy0UiVntitWO4/aet7vqwWC7ZOSGbxn6LRCmM5+xsaX7714x+9+NyOme6Rq32Qd+sbRw+SrRoXGCBbBrGM82j9yrPPGq49d3MN+lXrJai62gapTZyVNSGaFoiKA0RsglKIYpAIBAIBAKBQCAQXhRDR9vK626V44nmkT9htcd46lLSZjV0K8NNb1cO3iCGlcgUCAQCgUAgEAgEAoFAIBAIBAKBQCC8qAwDWeV1t6mHXq158GvKzik5mflhl4jVnljtGG7/aau7PiyWS7afo2kEAoFAIBAIBAKBQCAQCAQCgUAgEAgEIgqTObtbmt/+VeOvfJzpnNk6tdonfbO2cfgoWjT2QUhKkdOF5tg9ylOPGG69Xa4fVJZ7rJaUoo4KERqtLEEgimgaSkMpAoFAIBAIBAKBQCAQXhRDR2nk9W+U46l48GuiX4rxBOlSUFFWu/Lmd6qHb1a6lcgUCAQCgUAgEAgEAoFAIBAIBAKBQCAQXhR1EEOvXner4YrD2vv/QNk+zWSG9ENrtSeW2+odP2111z8TyyXbz4nSCAQCgUAgEAgEAoFAIBAIBAKBQCAQCEQpcrpgd1vzpV81+uon5HxNTNfIah/1zdrG4aNo0dhPpcjZuubhu5XHH1Bvu4PFQXHmFIFSNDFCyIKmIYJSKEWE8zf0lCJveBPTheaBP5b9SoynLhXN3q687q3qDbeIfkWmiymHXhk6ef2thquu1973VbF7Rk4XSD9scrUnltvqHT9jddc/E8sl28+K0roYUjBdY3dL+8WPGf3eJ+VsISYLmdU+65u1jcNH0aKx30qRi03No/cojz9gePN7lfGC1Z6mjBBqg6YhQjZBCRdS9B0l5JE3y9lCc/8fyL4T4xnSy1lEiJ3T6o0/or7mDXRLsrro6iC6pbzhDYarX6O9998pWyfkfJ1MPzRWe8pqV73jQ1Z3fVgsl2w/SzQuigjmG+xua7/4K0Zf/YSYzpmuyawugr5Z2zh8FC0aF0OEXGxqHr1HeeqYesuPakbr6rArmyCCKLItIgoRLrToeiHVG98iZ2va+74qh16MZ0gvZ3X3tHr9zepr3yb6jkx/E2KoYrkrj7zJ8KrXau77inL6ObnYJNPftFztiuWOeseHrO76sFgu2X6WaOy3SCKCxSa7W9ovfNTo9z7JdCFn6zKri6Rv1jYOH0WLxsUSIRebmof/RHz3EfXmHxWLK0S3kk0hQpSGCIFAIBAIBAKBQCAQCAQCgUAgEF4UfUdW9aa3yfmG9t5/J+sgJnMyvVw1ezvy6mvV179HDIOoVSAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCIQ/lVXZ2ea6NxoO36rc82Xl9HMsNsj0NyWXu2K1rd75D63u+rBYLtl+VmgEAoFAIBAIBAKBQCAQCAQCgUAgEAiUTCLk+kG5u2X0bz+i/YPfkPN1pmsyq4uob9Y2Dh9Fi8bFFCEXm5pH7+WZR9XXv1NuHqLbE1Eoxb6KEH1H7Q03vV2uHdB+43dkHcRkTqa/ERHUQexsKVsnxO6W2N0Su1tiuUOEbBpRir9I7G3Lqw6rN7+HrGT6m5Wy2xbX3mq47g3KPV9SzpyQi00yXWy53BGrXfXOf2j1k/+dWC7FmedEaey3yJRCrh+Uu6eNfusXtX/0WTlbE5O5zOoi65u1jcNH0aJx0YWcb2ieuE88dUy+9q3y4NV0q/+/PXgN9vuu78T+ev9+v///f266HUm2Zck3jM01kIQkXJI0CUm23Z3pTrPpdLaddqZ90D5oH/RZO5o+6dOdfdx2tp2ddqFZAjSbbJrdTmETQgBj7jcbsA02+CbJknWxpCMdnf/v+6l0DCykkIBBtqzzf71QJK6rROZz2bqi7nyrtmfd8NDHVBtltkKVl0eUyOYl3QvPU2U8eIe6503avW8y3vUmddudatd+NR/1p4/J5Q1tukQ3iPJdmV9RK+vc83a6CZrvSiu6TjKRKtviuuvGJpsXOPx64x1v0n31o7rzZ9Tqbqq8bDY3dPMt46/+vq1/77+UK1ty/jR973pLlRJW93LhnMmf/x+Gz39ILa3IbFlVeQXM+7Xdh48qA3qviGjLq7pnH5Xj39Re8wtqzwHZ2pTWpEiRIkWKFClSpEiRIkWKFClSpEiRIkWKFClStqUa5uqOt2p71g0PfUy2Nlleo5XrKpFxi4tn1DDV3vibxnf9R8Zf/T3tze82vv5d2uverr3mV7T736nu/xXtyH2Mm/pnH9dtbWpLq1Llmppv6Wcz4+t+RVtb0s2bVEmjhjBZYTJlmDJuydgEKVKkSJEiRYoUKVKkSJEiRYoUKVKkSJEiRcqLqtTWC3L7G4xH3qD72sd158+wtEa57uryBWlz46/+A/Pf+S90m1fk4jlJJ0WKFClSpEiRIkWKFClSpEiRIkWKFClSpEiRIkUlrO7jwhnDR/6ZyRc+LNMZsxVV5RUR835t9+GjpQb0XiFJp2Yrcuwx3cmntbverPYcZGtTqiGut4yNtqXufKu2Z52HP6rb2tKWVqhyXSRsbnDpvLrj58x/97/SfvU/4LZ7GXrGTZlvyZVNGeeu6Wbr6o43m7/pHWr9Np7+OmePy/JupXRt1MR4/y/LroMyzlUbmXTsvk2+9lHDA3+k9tyi9h+mzaWNJK63NFw6x5E3GA/dr3v0k7rzZ7SlFddLUJcvCMZf/Qfm7/7PZGvk0nlJXHeFYHUfF0/r/+I9Jl/6czWZaUsrqsorJcm8X9t9+CgG9F5BSadmK3LsMd2Jb2l3vkntPcjWlrSGuN7SRplfUXf9PHv38/BH1XxLZqsoP1MJmxvMt3jzb5n/3f9au/sNuo2L6soFGefSSlpJK2klrVFb6spFSafu+gXu/nndk1/m+adY3q1VU21Ud/+ybu9hxi36sOc23dc+qf/z/1336Kd1zx9Th+5V+w/RRhlHxPUWV10+z5E3GA/fr/vmZ9WF52W24mctqMsXJDG+6/fMf+M/kXlx6byIl0Wo1XUunNZ/5D36L/+FNkzUbBXllZRk3q/tPnwUA3qvsHS9mi7J8cd1J5/k0OvV3ltkPqeNJK671qRdUXf9PHv26776cTVekdmKn5mEzQ3GufbW3za++z9n1wG5cJY2F3+zIG1k65LxtiO85pfksc/wwgmZreo2L2uvfae67Qg1Z8+t8sjnTf71/yRnnlEre+T5p3Unn1K33iN7DtFGakRcbylsXuD2+423vcbw+Bd54QTTFRI/C0FdPi9db3zX75n/+j+UhksXRFx3hVBr61w4JR95j+6hv6SbMFtxI0gy79d2Hz6KAb0bQNIzWZITT8jzT3PbfWrfrdRcxhFx3bUm45a65xfYvdfwyKe1rU2ZLfupJWxeZBzVW39b+43/lNV1Lp2jNT+2ohsbW5dl351q722Grz+gq6bb3FBHXmf+xrexa13/0Mf1H/pf5PQzamlNhqkapnLqSd2pZ7Rb7mTf7bSRNiKut1Rx5aIcvNd46B7Dtx/SvfC8mi6Rzk8jqMsXGKba2/++8Z3/oaTn8kURysuidq1z/qT+I+/VP/xRukFmy24USeb92u7DRzGgd4NI1zOZyslvyeln1G33yK5bmW9RcxFBEARBEARBEARBEARBEARBEKRIGxm31F1vZbpL981PyzgynXnJEi5fpI3qLb+t/dp/zNp+2XhBWhMEQRAEQRAEQbworWTrsrrj9Vw8qb75eW15TffCSbYu6r/1Fd3HPyCnn2W2Qj+4Jn2v+ok8/7Tu9LOs38G+w4xzxi0RQRAEQRAEQRAEQRAEQRAEQRAEaSVbm9xyj/GWu/RPPcwLzzFZIp2XIqjLF9Rkyi/9++ptv0c3yOYFXYsUQRAEQRAEQRAEQRAEQRAEQRAEcdXu/Zw/afjIe3QPf4yul+myG0mSeb+2+/BRDOjdQNL1DFOef1JOH+PWu9hzG+OcNkriess40kbt7p9jusa3P6+bX2GY+YklXL5INfXm39be/vus7JVLF9D8VNoo01Vttqx77HN0HZuXDN/8gjzxZTYvyXSJrvf90veqH+T5p+X5p1i/nfUj1Jw2l8R1V022trjlHg7eo559VM6dYDIlvZ9EUJcvqMmMX/x76q1/TzLh0gVpRYVCkLheatd+zp40fOQ98rWP03VMl91oksz7td2Hj2JA7waTrpe+59RTujPPqIN3svcQbU4bJXG9Zb6FUne9mcmqPPEFmV9hMvVjS7h8kSr1xt9Sb/v7rOzl8gY1IiTESzff1Pbdoj/xqDz7TZkui9B1MkxI54dJ19MPnDnG6WfYd4j1O6Q1xjmJ666azLfUwbs4cCfHviHnTjBMSe/HEdTmBkvLvPXfVW/+O/QzLm9Ia1IIqlGF+J7ET62KRO3ez9nnDH/5Xt0jHydhuuxGlGTer+0+fBQD1bvhFF1P13H6Gd3Z4+rgEfYekrFoI4nrKpH5XFLqzjeqybI8+WV1ZUMmMwTlh4ttVzYI7v93+Pm/y8peubQhbSQhrgoJ8dK0UXbfwrkndN/8IpNlhoGuJ/GjFV1P13PmuJx5Ru27Re0/Ig3jnMR1V022ttTBu9h/hBOPy9njDBPSofxwQbG5wWSJN/4ub/gd6aZy6SKtEbSSKqmSKhRVVCgEiZekClG793P2Od1H38MjD5AwXUJQbjSJeb+2+/BRDOjdqLqe9Dz/jO7scfbdzp5DVNHmrrvCOJd06o43qH5JnnpYrmwwTEnnhwtXNlxT9/26vOnvsLRXLm/IOBKCFKqRokL85IpMVzh7Wh77DN0gXefH1vWSyJljujPH1N6Dav8RaZjPietvHGWcq4N3su92OfltOXdC+oGu9yNtbjBZ5vXv5v7flH7G5Q3aKEqKtJJWtrWSKmmkFYoqKhTiJxS1to+zz+n+6r3yyAOSYrrsRpZk3q+s3no0DKR3I+sH0snzz+jOnVAHblf7bpc2Ms4R1924Rddz+30yLPPs12Rzg2FKOsq/lXBlw7Z73iWv+y2W9rB5mRoRKcS2VEmhNRISP7HpMuee1z36SdcknZ9IP5COs8fl7An2HFT7j0gV8y0S11XQRhnn6uBd7D3EqW/LuRPSD3Q95UVBYfMisxVe9xvc92sMMzYv0RqFKhTVqJIiVbZV0ZqIVElrKKqokPhx1Nq6nDup+6v3yqMPSGG6REK5YVXVvF9Zu+0oGZL0bnT9gHDmmLxwkr23svcQVbQ5iest45b0gzp0nwxLHHtENi/ST0lnW8LmRdJx1zu479dZ2s2VTWkj4kUlIuWqokiVFBHbEj+22aqcOqZ79AGFdJ2fWD+QcPaE7uyzrK6zfgfBfIvEdRW0UarUwTvZc6s8/zRnjpHQT0hUa2xelKVV7vs1de876Wdy+RLVpIoq26ooL6qiSkRaSZVtrWhNEmlFUCUV2xI/TK3tk3On5K/eK48+IIXpDHHDq5r3K2uHjiYZkvReDfrBtjPHdOdOsOcWte8whTYS1998Lv2EQ69lWJZT3+bCKdoorbF1SfVTufNXeM07WdrD1hVac018R1xVKClSrirbilRJOhER4kdKhaUVjj0uj/4V/SDpvCT9IAnnnpNzx2VtXe2/k4RxJK6vhHGUNsq+O9h7G+dPcfYYmxvMN5lvsWuf3Psu7nibZEk2N2mNKqokkSppjSqEVlShqEaVFGklVba1kioptJIKmlRsKyLs2ifnTsnH3iuPfkIqTGeIV4ea9ytrh44mGZL0Xi36gcKZY7oXTrLnFrXvdqoY56ITEREREREREREREREREREREREREREREZHCfIthKgfuZW0/mxdlvslkyq51OfI2Dv8i0zW25rRGvKhKqsRVhXJVEVK+o6iiUFEhQkhFRERERLVSu9Z13/gE3/isTGak85L1A8K55+TcCVlbV/vvRDHfEp2IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiAjzLSlq3yF18LBkSdoos2VZv0fu+mVufROW2LxCKz+giirXBKmS1qiyrRVVKKoQqZJW0pptrVFNXNVKWhNRu9Z54ZR87L3y9U+Iq6ZLiFePmvcra4eOJhmS9F5N+sG2s8d1559j90G1fjtVjFtUKBQKhUKhUCgUCoVCoVAoFAqFQvmOYj6XoVcHj8j6PTJZl6VbueV1rN9LvyTzubQmVSgKVbZVie8IylUlRVzVyrZqgooXFQqFQpGuYzLRfeHPeO7bMl0i8VPpB4Rzz8nZ47K6Tx2407b5FhUKhUKhUCgUCoVCoVAoFAqFQqFQKC9qczS1ez+3vEb23yO7j7D7LlZuJROZz6XKttYQWlGNhCpao8o1qZIqqryoqEaVbVW0kpAqac221mxb3cP5U/KJ98nXPy6umi4jXl1q3q+sHTqaZEjSe7XpB9vOHJcXTrLrIPsPU0Wbe1m0LbpO7Tooe25lsosWmRetUUU1qZLyg4IqqRJXVXlRUaTKi4oqUaITV8X3abqVgzz3hDz4AVqTfiDxU+sHhHPP6c4dY3VdHbjTtvEK4rpro1Rjtqx2H2Btv3RT2bgsly/RmuoiRaqkNapIqKKa76miiipBkNakNS8qqhEUWiGipEqW9qjzp+WT/1wefUASpstenWrer6wdOppkSPRejboexdljvHCS3QfZf5gq2hxxfYXWMDKbqeVlNDYus3WZ1hBCEKSKKtuqbKuSxLagiioRCVqR2FYlQiJIP2F5j3zqg/KNT8nyGomfma4nOHdSd+4Yq+vqwJ22jVuI6ytU0eYomQxqtsR0QpVszWXrClXEtiBV0hrlqtCKarZV2VZlW5UgrZHYVo1qJLSS5b3q4ln51PvlsU9IOqZLCMqr0LxfWTt0NDEk6b1adb1rcvY4L5xk90H2H6aKcS4iCIIgCIIgCIIgCIIgCIIgCIIgrWhNTSZqdU2mM6lRrsyZX6E1dJK4JlVUkdgW25JIFVVeVBSphqCock2U6nr27OfJz8hH3ytVTKZ+5rqehHMn5eyzrO2T/XdJQ9sSEQRBEARBEARBEARBEARBEARBkCKtKGoyYWVFra4ymVBFa4yjzOe0kdiWKmmNKoJCFdX8/1QJ0pq0Jq1Ja7K8W9u8yGf/SL7xcel6pkte5eb9ytqho0kGSe/VrOtdk7PHeeEkuw7I3tt1DW1O4rorUk36npUVtbaL6Uw02ZrLvNEKRYhIFVW2VdlWJYlU0YqgShCkFdUosraf00/r/vyfqFNPy8pu15TroOtJ5IWTnHlWVtdl/U4RxjmJl0taQ5hMWF5Wq2ssLUnXUWiN1mQ+Zz6nja6JSGtU+Z7WaI0qWmMcGUeqSNhzi5pf5HN/JI99jK6T6bJryqtXMe9X1g4dTTJIeq92XS+uOntczp6QtQPsPSJVjFuIl0PGJq6aTFldZmWXms7oOqlinDMfaY1xRNGK8qIqElqThEJrtLKtNUknK3u4eEb+8p/qHv8Cq3tI57rqekl44SRnnmFtH+t3SWHcQrxc0ppUQ5hMWFpidZXVVZZmDANdJ4nvSmu0RjWqGEcKrVFFkE5NJsxmrB+iG9VnPyhf/yhdJ9Nl5aYwH9xkapgK6pmv8qkPkHD456SK+WXSeVm0Jq3RdWp5maUZe/eqS5fl4kUuXWKc04pq0kbXVBUJVSSuSRV9r5Rtw4S1dTbO8OB75bEHZHk33aCU6636iaBOfJMH349w9y9JFfNN4uVTpBqtkahhYDJhZZlxZBzVlS02N2W+pc23pIpCNRL6AVHTCcPAZKKmE7Vrn1y+zAPvk4c/Qt/LZFm5SRSD7yo3jRqmgnr26zz4ft6OIz9n2/wK8fJpTVqj69RsiaVltXsXW3OZz9m6wpUtxjlVVKmEriOh72WYqL6j79UwUWu7dS+cVZ96n3z1o8xW1TBVVV4u1U9kGnXicT75Pqq451ckUVuXiZdflYyjbYkaJmq6xFKjmmqN1qiiimoIXadc1XWSqL5naQ9XzvPAe+VL/y/DTKbLqlBuGoObUVH9VFDPfI1Pvo934fBbRNT8Eum8rFqT1gjVdSwtKVdVozXVGlVU+Z4gHeKa6ntmq2ycVp/8A3n4z5mtyHRZVXlZFdUNMl1WJx7ngX9O16u73iZFzTdI5xVTJePIOLqmutB19L3yI7SmhMmqXDjHJ/9P+dK/ZrIss2VVbjr9ytqho0kG0rvZdL0knD3O2ePsvZV9t9OKNifxSkiVtCatSSvb0tF1dB1dR9fRdSRSSCeTFc6fkgf+UB76MLMVma6oKq+YdNL3vHCS00+x+wDrd1JF2yJxI0iRKmklraSVtJJW0krGEmS6Jpc31IN/IF/8M6bLMltV5WY071fWDh2NDJLezajrpQtnj3HmWfbeyr4jtMY4dyNIkSqpkiqpkiqpkirSM1tW55/nwffJw/+G2YpMV1SVV1w66XvOneDkt9l7kP130Rrj3KtBdMzWuLKhHvxD+cKfMl2R2aqqcpOa9ytrh45GBvRuVuklHWePc/ZZ9h6SvXdQI20UEQRBEARBEARBEARBEARBEARBEARBEARBEARBEATpeqbL6sLzfOp9uoc+zGxVZiuqNTeMdNJPeOEEp77F3ttk/W6q0eYigiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiAIgiDp1GyFzUvq0++XL/xLpisyW1WtuXnVvF9ZO3Q0MqB3M+t66TvOHuP0M7L3sOw9TI3SGnFjKXS9mi6pi6f59Pt1X/mQmq3JbEW15oaTToYJ557jucdlzyHZfzc1l7ERN6CO2TJXLqlPf0A+98fMVmW2qlpzk5v3K2uHjkYG9G526aUf5OyznP4W+47I+h20UbW5iBtG16vJkto4zaffLw99mOmqzFZUa25Y6WSYcu6EnHyMPYdl/920xjhH3DDSMV1WW5fUZz4on/tjJkuytEu1ZgeY9ytrh45GBvR2gnTSD5w9xvPfYv1O1o9QWzKOiFdc16vpkto4zWc+IA99mMmKzFZUa254iUyX1LnjcuIR9t3JgTsZR1VzqXjFJcxW1NYl9ZkPyuf+BZOZLO9Rrdkh5v3K2qGjkQG9naLrZZioM8/KqcdZv0v23k5Dm3vlhH5gsqQ2TvHZD8pXPsRkRWYrqjWvHpHpsjp3Qo59lX13qoN3qDQZ55RXTj+o2ZLavMhn/4V87o8ZZrK8R7VmB5n3K2uHjkYG9HaSdDKZqjPPyolH1N7buOVuaUU1lJdXGKZMptq5p/jUB+Srf8FkRWYrqjWvPpHZijp3XI49xJ5b5eC94qrWUF5eoZ8xWeLiaT7zfvninzFZluXdqjU7zLxfWTt0NDKgt9Okk+ky507Ik19SS6vceo9kQqHK9Re6gckSiTr2kHzyPbrHHmS2JrMV1ZpXsyytcf6UPP4ZNZ1y233STVFUeVl0PcOMfuDk4/KJ98nX/4LpsiytqdbsQPN+Ze3Q0ciA3o4UmS2rjbO6Jz7LlTOy/hq1uldXqHJ9hPT0E6YzNi/w1X8jD/6BnHhCVvcxmakqN4MsrajNC7pvfobLp2Tf3Wp1ny6hXFWui3T0EyZLar4pj32cT/4z9cyXZHmXzFZVa3aoeb+yduhoGNDbwTJbkXEu3/oKxx9SOjlwhMmyuCa2tUahUCgUCoVCoVAoFArlqo6upx+YzGhbfPvLPPA+Hvp/1OZFVveprqfKTaNKZqsi8u2HOPYV1UrWb2e6KkJCoYoqCoVCoVAoFAqFQqFQrgrp6AaGKSme/hoPfkB9+U+58LzatZ9+oJodbN6vrB06Ggb0drIqNUzVbEXOHJNvfZrnHtX6XtYOsrqb9CjSkSAkxFXxAxIS0tF1pKfrmSwxXWJ+SR17mC/9iXzhT9TJbzBbleXdKDelKtVP1PIuOXdcvvVZTjyipWTtAKu7yQRFQoKQEFfFD0hISEfXkZ6up58wmVGjeu4RvvKn8rk/4tmHZTKTlb0oC+aDhe9TJGr3AW2+pfvmZ+Wpr3D767R7f1lueaOs38XSLgrjnBqlzV1T1VwTUelIRzq6nqHjymV15hl14mF56nM89XU2zqqlNXYddE1Vc3Mr19Sug9q4pXvyy/LMV7nttdq9vyS3vknW72ZlDxXanNakzVGqCiWi0pGQjm6g75hvqnPPcfyb8tSX5NkvqHPPqaVVtfugiKpm4UU5cNsvvIAlTCz8gKTT5lf0G2epYs8t7Ludfa/TDhyRXftleQ/TZSZLpPM94xab59XGeXX5DBeekVNPqBNPqrPHdeMWS2tqsiSilJ0o6bRxS79xTm1tsuegrB9h/X7twB3sOqBb3stshWFG1/uecYsrF9XGC+rSWS4+K88/oU48qc4c013ZYGlVTdckUcrCD7iUA7f9wgtYwsTCDxVR1fRbl9XmRTW/wnRFLe+S2Zqs7GKyRDrflXGTSy8YL13k8nnZ3CBRs1Umy3SdhX8ropRu6zKbF9XWJtNltbQmszVZ2c10mXS+K+0Kly9oGxfU5fOyeYGiZitquqrreqUs/EiXBgt/q1Ikxuky02XXVGuqmu78Sc4+g5LWqFJdp7pBugn9oKYrLK0hFn64Uq5pkyUmS66paqo13YXTnDuGktaoUulUP0g3qH6iJktMV0hcE5Sy8DcbLLwk6TrR0a8pLyo/qLwoFl6KpJO+ox+UVdeUH1ReFAsvRWdhYWHHGlxTZWFhYYdJdBYWFnaszsLCwo7VWVhY2LE6CwsLO1ZnYWFhx+osLCzsWJ2FhYUda/A9ZWFhYWfpLCws7FiD7yoLCws7zOA7ysLCwk4SdK4qCwsLO1FnYWFhx+osLCzsWJ2FhYUda2htFAsLCztNq9JVa6rKwsLCDlOls7CwsGN1FhYWdqzBd5WFhYWdpOgsLCzsWJ2FhYUdq7OwsLBjdRYWFnaoMviesrCwsLN0mKMsLCzsNGOnnFe2LCws7DSXh27oz1TVrqpatbCwsGOk6y50/WR2IukuW1hY2FG6YXqhq3H+FVVnLSws7DTHhvTDF7T2Ts3CwsKOUa76+rC6f/LJjTNbv7+1UYVYWFjYCVqSJ7v7f2vf47tvW3pGcsnCwsLOkO7MbFf3aOeqfjL9YtcNT1tYWNgRhuns84ffsuepzlXT5f6j/TSPoCwsLNz0piv9J/pJnu1cdejNK9/Yc3jpMcmGhYWFm1q6buPIL649sHZwcqLzHcN06aP9MPmahYWFm1rS/Ss85arOd3RD+1D6+hzmFhYWbk7J1rA8fKDruydc1fmOw29Zu7z/7tW/SNc9bGFh4aY0TJf+8jXv2v+1XbdMN13V+T79dPjTfjJ8PMloYWHhZjNPV/9zUt/wHZ3vc/gta5cP3r/7D9MPH7GwsHAzqcnyyv92328e+Nzawemm7+j8NUfeuvbxg/ctfwinLCws3BRKPfHa39jzT1b3D0/5Pp0fop9M/mk3DB+0sLBwUximS/9tuu7r/pr+te+431+36+D0MsNzG6fnt1YbX2dhYeFVq58u/eP7333g/1pdn5xL/ID+te+431+XxOqByXP0z2+cnt9RbbzbwsLCq850edcf3P/u9X+0un9yLFH+msGP0PWZ3/aGlY9UG3cfe/jsrmrtFy0sLLxqdP3wx6/9jd3/48r68GSi+SH6177jfj9Kuoyr+ydPpOtOXji5+RpVt1tYWLjhdf3wx6/73Vv++9X16RPpND9C/9p33O9v0vWZr+6bPNFPJt+6+Px4W7XxHgsLCzes6fKuP7j/3fv/h9X16RPpjP4G/Wvfcb+/Tddna2Xv5Ol+0j168dS4S7U3WlhYuOH006V/fP+71//Ryv7Jt9Jp/hb9a99xvx9H12e+tGdyohu6L2+cbs+n6+6pNu6xsLDwSqtSTwzT5f/m/nfvf9/q/smziebH0L/2Hff7cXV9xuU9w5m9R5a+srRr+vDFU+N6VbtXlYWFhZdfkvlkeeV/fd3vHPzvDty7+snV9cmZRPkxDX5Cw6ybD7Puudlq/yHq8We+fO5ftfn4D6uN77SwsPBy2ez64c/66eRP7vvN9Y+u7h+e8hIMXqJh1m3sv2f5oZX1yVMbp698+pmvXPj1yO9sXb70jsRuCwsLP2sjnuv64RPD0uT/fs279j6YLs+s7h8ueokGP4Vh1rVdt0zPLO8dPrO8d/rY5vnxw09/sV5Pfq1ae/v8yub9id0WFhZeqibdmWE6+zwemCznwTvetvtbXd89teuW6UU/pcHPwDDtxt23TZ8f1+v0dK1/BA9ubYy3P/X5c3eQN1Rrh1sb7+r64a75lUvLKrvEzMLCwneNuNx13YWun5ytak93/XAcj8x2dY8efsuep8Sxrndq1y3TuZ+R/w8ACjwHRhCoSwAAAABJRU5ErkJggg==",deepLink:"infinity://",downloadLink:"https://infinitywallet.io/download"},{key:"umami_desktop",name:"Umami",shortName:"Umami",color:"",logo:"data:image/png;base64,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",deepLink:"umami://",downloadLink:"https://umamiwallet.com/#download"},{key:"atomex_desktop",name:"Atomex Wallet",shortName:"Atomex",color:"",logo:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAWgUlEQVR4Ae3BCXxV9YH34e/535PkZl/IAglJCDthF1kqFGhZBNxQxKWO+raOtaOtVqt2qtZSa2tt3ajdnNaqnapVQR0UlB0EAQGRRTYJSwhbgOzrTXLvGTvvxxnAiEAhuSfn9zyW8ylExJMMIuJZBhHxLIOIeJZBRDzLICKeZRARzzKIiGcZRMSzDCLiWQYR8SyDiHiWQUQ8yyAinmUQEc8yiIhnGUTEswwi4lkGEfEsg4h4lkFEPMsgIp5lEBHPMoiIZxlExLMMIuJZBhHxLIOIeJZBRDzLICKeZRARzzKIiGcZRMSzDCLiWQYR8SyDiHiWQUQ8yyAinmUQEc8yiIhnGUTEswwi4lkGEfEsg4h4lkFEPMsgIp5lEBHPMoiIZxlExLMMIuJZBhHxLIOIeJZBRDzLICKeZRARzzKIiGcZRMSzDCLiWQYR8SyDiHiWQUQ8yyAinmUjntHUFKLwQAWf7C7l4JFqSsvraAyGiIzwkRQfRcf2CXTrlEJOhwRs2yBtn420aXX1Tcx/fxfvvreLlev3U1pex5dplxzNsAFZXDSqK2OHdyIq0kbaJhtpk0rK6/jzq+t5+a3NlFXWczpKyuqYvbiA2YsLSEmK5vrL+vCtK/uTlOBH2hYbaVOamkI8//pGpr+whsrqAP+s0vI6pr+whudnbuQH/zqMf7msDz5jIW2DjbQZe/ZXcPcjC1iz6SBnW0V1gAefWsqcJQU8cd9YsjLiEfczSJuw/MMiptw2kzWbDnIurVq/n8n/NoO1mw4i7mcQ11uwYg/fvn8OR8tqaQmHS2q44d5ZLFyxB3E3g7ja8rVF3P6zedTUNdKSamobuf1n81iz6SDiXgZxrd37yrnj4fnU1DbQGqprG7ht2rsUHaxE3MkgrhRoCHLXLxZwtKyW1lR8tIZ7H11EY1MIcR+DuNILr29k3eZDhIMVH+3jpVkfI+5jENc5UlrLb/+2lnAy/YU1lJTVIe5iENf5y4wNVFQFCCcl5XX8ZeYGxF0M4ipVNQ28/NZmwtErs7dQW9+IuIdBXGXe8l2UVdYTjo6U1rJo5R7EPQziKrOXFBDO5i7bhbiHQVyjoTHImo0HCWfL1+4j5DiIOxjENQoKy6iqaSCclVXWsbuoHHEHg7jGjsJSHMchnDkOFBSWIe5gENc4UFyFG+wvrkLcwSCuUV4ZwA0qqgKIOxjENeoDTbhBfUMT4g4GcQ1/lI0bREX4EHcwiGskxkfhBskJfsQdDOIamenxuEGH9HjEHQziGl1zk7Esi3BmWdA9LwVxB4O4RrdOKcTFRBDOkuL9dMpKRNzBIK4RFeljSP9MwtnwQdkYYyHuYBBXmTiyC+Fs4sjOiHsYxFXGjehMUoKfcJSSGM3Xv9IJcQ+DuEpSfBRTLuxJOPqXy/oQEx2BuIdBXOfmqwaQGB9FOElK8PPNKf0QdzGI63RIj+M7155HOLnjxsGkJEUj7mIQV7pp6gD698wgHAzu24HrJ/dF3McgrhQV6eOpB8aRnOinNaUmx/DE/eOIsA3iPgZxrc7ZSUx/YBzRfpvWEOOP4Pc/nUBOhwTEnQziaqOG5PL0gxcS7bdpSTH+CH7z4/EM7Z+JuJdBXG/c8Dye+dkkUpKiaQmpyTE89+jFjBuRh7ibQdqEUUNymPnbKQzMb8+5NKR/Jq//bgrDBmQh7mcjbUbn7CRemT6ZZ1/bwB9eWkdldYCzJSnBz+03DOb6yX2IjPAhbYONtClRkTa3XjeIKRf25C8zN/D3t7dQXlnPmUpJiuaai/L51pX9SUuJQdoWG2mTMlJj+dEtF/Bv157HwpV7mLNkJ2s/PkhlVYCQ4/BFjLFIjIticL9MLhrdhTEX5BEfG4m0TTbSpiUl+JlyYU+mXNiTuvomdhWVs3NvGfsOVVJZHSAYcvAZi6QEP1kZ8XTNTaZzdjJRkT6k7bMRVzpaVsvGbYdpnxZHry6pWBZfKtpv07tbKr27pSLyDzbiOm8t2sG9jy6itr4Ry4JJo7ry1APjiIzwIXI6DOIqG7Yd5u5fLqS2vpF/cByYvaSAV2ZvQeR0GcQ1Ssrr+O60d6kPNHGiDzYcQOR02YgrBIMOd/9yIXsPVtKczPR4zqWKqgDP/H0d67cU0yUnmW9fM5DsDgmIu9mIK/zuxbUsWrmH5qSlxPDNKf04VxqbQtxwzyzWby3mH95ft48FK3bz5h+mkpEai7iXQcLesjV7mf78GpoTEeHj1z8cQ4f0OM6VFev2sX5rMcc6cLial97ajLibQcJa0aFK7vrFApqCIZrzvevPZ/SwXM6l0vI6mvPG/O0EGoKIexkkbNUHmvj+w/M5XFpLc8Zc0Ilbv3EeFufWkP6Z+HwWJyrcX8Gq9fsR9zJIWHIch0f/YyVrNx2kObmZiTx6z9eJiPBxrmVlxDP8vGya88qcLYh7GSQszVq4g+df30hz/FE20388nrSUGFrKNRfn05wlqwo5UlqLuJNBws4nu0t54MmlhEIOzXngthEMzM+gJY29II+UxGhOVFPXyH8t+ARxJ4OElcrqALdNe5fK6gDNmTqxF9dd2puWFhXp4/Lx3WnOjHe3EQo5iPsYJGyEQg73P7GET/aU0pz8rqn89PavYiyL1nDlhF4YY3GiT3aX8NGWYsR9DBI2npu5kbcWFdCc+LhIfjdtArExkbSWXl1T6d8zgxMFQw4z525D3McgYWH1xgP86k8rcRyHExlj8eg9X6dzdhKtyQKmTuxJc95evIOqmgbEXQzS6g6X1HDnz+dTH2iiOf86dQCTRnUlHFw0uivxsZGcqKIqwNxluxB3MUirCoUc7vrFAvYdqqI5XxmYxT03D8OyCAtJCX7Gj+hMc16ZvQVxF4O0qpXr97P8wyKa0z41lifvG0dkhI9wcvVF+RhjcaIPNx+ioLAMcQ+DtKoDxVU4Dp8TGenj8fvG0iE9jnAzqE978jomcaJgMMRr72xF3MMgrWpgfga2z3Asy4I7/98QRgzKJhzZPsNVE3vRnDfmb6exKYS4g0FaVdfcFP79OxcQGeHjH4yx+MYlfbjlmoGEs0vGdMMfZXOi4qM1LF61B3EHGzltjuOwe18FBYVlFB+tpqqmAceB2JgIMtrFkpedRNecZGzbcCpuvmoAF47IY+vOEnIyE+jVJZVwl5URz8jBOcxbvosTvfbOVsaP6IyEPxs5JXX1TSxYsZs5S3by/roiKqoCnEy032bYgCzGDc9j0uiuJCf4OZmczERyMhNxk6sm9WLe8l2caOHKQoqP1pCRGouENxs5qfKqAM/N2MBf39xEaXkdp6quvonFqwpZvKqQn//+fa6alM+3rx5AZkY8bcVXz8+mY/t49h2q4ljBYIiZc7dx63WDkPDmm/Yp5HOCIYcZ72zjlh/PYdHKPdTVN3GmGptCrN9azN9nbyHkwIBeGdg+g9vZtuFIaS1rNx3kRBVVAa69pDeWZSHhyyCfU1pex60PvsO9v1rEkdJazpaa2kYe+/MqvnHnm+w9UElbMGVCT2zbcKLKqgBOyEHCm0GOs6uonGu+/ybvLtuF4zicC2s/PsgVt81g/dZi3K5LTjIjBnXkRKOG5uLzGSS8GeR/7Soq54a7Z7F9dwnn2pHSWm64ZxYfbTmEmxnL4pEffI3z+3TAZyxsn2H00FzuvXkYEv5s5H+UlNdxy4/nUHSokpZSURXgWz+azYynr6BLTjJulZkRz6u/uZyiQ1X4jEVWRjzGWEj4MwjBYIh7f7WIT3aX0tJKy+u47adzqalrxM18PkOnrESyOyRgjIW4g0F46e3NLFyxm9ayteAojz/7ASItzeBxpRV1PPbnD3AcWtV/vrmJrTuPItKSDB737KsbKK+sp7U1NAZ5/NkPcBxEWozBw6prG3j+jY2EiyUfFLKjsBSvaGgIUlXTQFVNA4GGINLybDxs9uICqmsaCBeNTSFen7uNf7/lAtqS2vpGNm47zIcfH+LjHUfYs6+cA8VV1NY34fD/WUCM36ZDejx5HZPo0z2N83q3p1+PdGJjIpBzw8bD5izdSbiZt3w3d980DNs2uFmgoYn31hTx+tztrPhoHxVV9TgOJ9XQGKS8KsDWnUeZs7QAy4L42ChGDs7m0jHdGTUkB3+UjZw9Nh4VaGhizaYDhJs9+ysoOlRJXsck3KiiKsDLb2/mxVmbKTpYgeNwxhwHKqsDvL24gNmLC8hqH88Nk/ty7SW9SYiLQv55Nh61Y08ZNbWNhJtgMMTGbYfJ65iEmzQ2hXh97jaeeG41h45Uc7Y5wL5DVfzijyt49rUNfP+bQ7hyQk8iI3zImbPxqILCMsLVzr1luElBYRkPPLmUlR/toyUUl9Rw32OLeWP+dn5+12i6d0pBzozBow4eqSZcHThcjRs4jsPr87Zz+a0zWPnRPlqSA6zecIApt81k5rvbCDkOcvpsPKqqOkC4qqppINwFgyEee/YDnnl5HcGQQ2uprA5w9y8Xsn1PKffePAzbZ5BTZ/CokOMQrkKhEOEsGAzx4PT3+MOLHxIMObS2kOPwzMvruO/xJQSDIeTUGTwqJjqCcBUbE0m4CoUcpj29jL/918c4hJdXZm/hR48vwXEc5NTYeFR6SizhKi05hhPVB5qY/sIaVn60n3bJ0YwcnM2owbl06phIS3r6P9fy1zc2Ea5emb2F9qmx3PWtociXs/GoTh0TCVd52Ukcy3Hg9p/NY+6yXXxmwfu7MZZFp46JjBqay9eG5nJ+3w7ERkdwrsx/fzdPPb+acPf0X9eS3y2NCV/tjJycjUfld03F9hmagiHCiWVBn+5pHGvvgQrmLdvFiUKOw66icnYVlfPcjA3ExUQypF8mo4flMmJQNp2zE7Esi7Ph0NEafvjrRYRCDuEu5Dj86LHF9OuRTmZ6HPLFbDwqPjaKPj3SWL+lmHCSlhJL19xkjlVZHcDhy1XXNrBo1R4WrdqD7TPkZiUyakgOo4fmcl5+e+LjIjkTjgM/mf4eJWV1uEVpeR3TfvMef3xoIsZYSPNsPMqyYNwFeazfUkw4GTk4mxh/BMfq2aUd2R0SKDpYyalqCobYubeMnXvL+MuMDSTERXF+3w6MHpLDiPOz6dQxCZ+xOBVLVxcyd9lO3Gbe8l0sWrmHscPzkOb5pn0Kj8pqH88Lr28i5DiEAwu4/9bh5GQmciyfMQzpl8naTQcprajnTAQaguzeV87iDwp5cdZm3lq0gz37KrAsi9TkaCIjfDSnKRji9ofmUVxSixvt3FvO1Im98PkM8nm+aZ/CoxLioti68ygFhWWEg3490vnBTcPwGYsTpbeL5ZqL8xk/Io/M9HgCjUHKK+ppCoY4XSHHobSino+2FPPG/O3MnLuN7nnt6JSVyInmv7+bZ1/bgFsdKa2lV5dUundKQT7PN+1TeFjn7GRenbOFUMihNVmWxUN3jKJHXgpfxOczZKTGMrR/JldflM/Uib3o1zOdaH8EpRV11NU14XD6amobWf5hEVdflI8/yuYzIcfhJ0+9R9HBStzsaFktUyb0xLIs5Hg2HpffNZXrLuvD8zM30ppGDclh/Ig8TkdGaiyXjunOpWO609gYZHPBUZau3svSDwrZ9MkRGhqDnKojpbVsKTjKVwZm8ZndReWs2rAft1v78SEK9pTRPS8FOZ6NcM9Nw3hv9V52FZXTGpIS/Dx85yiMsThTERE+BvTKYECvDO64cTBHSmtZ8dE+lqwqZNnaIo6W1eE4DieTlODnWHOW7iQYdHC7YDDEO+/tpHteCnI8GyEuNpKnH7yQq+94g+raBlqSsSx+/cOvk90hgbMpLSWGy8Z057Ix3QkGQ3z8yRGWrN7L0g8KWb+1mGDI4Vhjh+fRPS+FzziOw8IVe2gr5i/fzR03DkaOZyP/o0/3NJ68fyzf/elcAg1BWoJlwUN3jmL8iM6cSz6foX+vDPr3yuCOGwdTVlHPsrVFLF1dyOGSWoYNyOKmqf3xGYvPlFXWs3XnUdqKHYWlFJfUkNEuFvk/NvK/xo/ozPQHxnPXIwuorWvkXPIZi5/cPpLrL+tDS0tO9HPpmG5cOqYbX2RLwVHqA020FfWBJrYWHCWjXSzyfwxynImjuvC3xy6jY/t4zpWkBD+/nTaBGy/vS7jatquEtmb77lLkeAb5nEF92vPmH6Zyxfge+IzF2WJZMHxQR978/ZVMGtWFcFa4v4K2Zs++cuR4NtKstJQYHr9vLFdO6MkTz61m3eZDhEIOZ8ICuuWl8L3rBzNpdBdsnyHcFR+toa0pLqlBjmcjX8hYFsMHZTNsYEc+3HSQmXO3sWhVIUdKa3AcvlRifBQXnNeRqy/K54KBHYmK9OEWldUB2prKqgbkeDbypXzGYkj/TIb0z6Qu0MT2nSVs3H6YHYWlHC6poaq6gZDjEBcTSVq7GPI6JjGgVwY9O7cjIS4KN6oPBGlr6gKNyPFs5LRER9kMyM9gQH4GbZltG9oa22eQ4xlEmhHjt2lrYqIjkOMZRJrRLimatqZdUjRyPINIM7Iy4mlrstrHI8cziDSja24KbU233BTkeAaRZvTunkpbYlkWvbulIccziDQjp0MimelxtBVpKTHkdUxEjmcQaUZUpI+vDOxIWzG0fyb+KBs5nkHkC0wY2Zm2YsLILsjnGUS+wFfPzyGjXSxul5YSw+ihOcjnGUS+QLTf5ooLe+J2k8d2Jy4mEvk8g8hJ3HB5X2L8EbhVjD+CG6/ohzTPIHISmelxfOPS3rjV1Em9yO6QgDTPIPIlvnfD+aSlxOA27ZKiuePGwcgXM4h8iaR4P/ffOhy3uf/W4bRLika+mEHkFFw+rgeXje2OW1z8tW5cPr4HcnIGkVP08J2j6NG5HeGuS04yj9w9GmNZyMkZRE5RQlwUzzw0kYzUWMJVersY/uPhSSTERSFfziByGvKyk/jTzyeRkugn3CQl+Hn2kYvpmpuMnBqDyGnq3zODv/76UrLaxxMu2qfF8eITl9GvRzpy6gwiZ6Bvj3RefnIy/Xtl0Nr69kjn1emX06dbGnJ6DCJnKDczkZefnMz1k/vi81m0NJ/PcN2lffj7U5PJzUpETp+NyD8hNjqCh+8cxbjheTz022UUFJbREjpnJ/Hgd7/K6KG5WBZyhmxEzoJRQ3KY/aereXHWZv748joOl9RwLrRPi+OWawZy7cW9ifbbyD/HRuQs8UfZ3DS1P9deks+shTt4adbHbNh2mLOhb490rru0N5PH9iDabyNnh43IWRbjj+Cai/K55qJ8du4tY/77u1m2toiN2w5TWR3gVMTHRtKvZzojBmUzYWQXOmcnIWefjcg51CUnmS45yXzn2vNobApRdKCCXfsqOHC4ivLKemrrmrAsiPbbJCf46ZAeT6esRHKzEomwDXJu2Yi0kAjb0Dknmc45yUh4MIiIZxlExLMMIuJZBhHxLIOIeJZBRDzLICKeZRARzzKIiGcZRMSzDCLiWQYR8SyDiHiWQUQ8yyAinmUQEc8yiIhnGUTEswwi4lkGEfEsg4h4lkFEPMsgIp5lEBHPMoiIZxlExLMMIuJZBhHxLIOIeJZBRDzLICKeZRARzzKIiGcZRMSzDCLiWQYR8SyDiHiWQUQ8yyAinmUQEc8yiIhnGUTEswwi4lkGEfEsg4h4lkFEPMsgIp5lEBHPMoiIZxlExLMMIuJZBhHxLIOIeJZBRDzLICKeZRARzzKIiGcZRMSzDCLiWQYR8SyDiHjWfwNu/eoxBL4OFgAAAABJRU5ErkJggg==",deepLink:"atomex://",downloadLink:"https://atomex.me/"}],nr=[{key:"metamask_tezos_web",name:"MetaMask",shortName:"MetaMask",color:"",logo:"data:image/png;base64,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",links:{mainnet:"https://metamask.tezos.com/",ghostnet:"https://metamask.tezos.com/",mondaynet:"https://metamask.tezos.com/",dailynet:"https://metamask.tezos.com/",delphinet:"https://metamask.tezos.com/",edonet:"https://metamask.tezos.com/",florencenet:"https://metamask.tezos.com/",granadanet:"https://metamask.tezos.com/",hangzhounet:"https://metamask.tezos.com/",ithacanet:"https://metamask.tezos.com/",jakartanet:"https://metamask.tezos.com/",kathmandunet:"https://metamask.tezos.com/",limanet:"https://metamask.tezos.com/",mumbainet:"https://metamask.tezos.com/",nairobinet:"https://metamask.tezos.com/",oxfordnet:"https://metamask.tezos.com/"}},{key:"kukai_web",name:"Kukai Wallet",shortName:"Kukai",color:"",logo:"data:image/png;base64,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",links:{mainnet:"https://wallet.kukai.app",ghostnet:"https://ghostnet.kukai.app",mondaynet:"https://mondaynet.kukai.app",dailynet:"https://dailynet.kukai.app",delphinet:"https://testnet.kukai.app",edonet:"https://edonet.kukai.app",florencenet:"https://florencenet.kukai.app",granadanet:"https://granadanet.kukai.app",hangzhounet:"https://hangzhounet.kukai.app",ithacanet:"https://ithacanet.kukai.app",jakartanet:"https://jakartanet.kukai.app",kathmandunet:"https://kathmandunet.kukai.app",limanet:"https://limanet.kukai.app",mumbainet:"https://mumbainet.kukai.app",nairobinet:"https://nairobinet.kukai.app",oxfordnet:"https://oxfordnet.kukai.app"}}],ir=[{key:"airgap_ios",name:"AirGap Wallet",shortName:"AirGap",color:"rgb(4, 235, 204)",logo:"data:image/png;base64,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",universalLink:"https://wallet.airgap.it",deepLink:"airgap-wallet://"},{key:"plenty_wallet_ios",name:"Plenty Wallet - your portal to web3 ",shortName:"Plenty Wallet",color:"",logo:"data:image/png;base64,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",universalLink:"https://www.naan.app/",deepLink:"naan://"},{key:"altme_wallet",name:"Altme Wallet",shortName:"Altme",color:"",logo:"data:image/png;base64,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",universalLink:"https://app.altme.io/app/download"},{key:"autonomy-app",name:"Autonomy: Digital Art Wallet",shortName:"Autonomy",color:"",logo:"data:image/png;base64,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",universalLink:"https://autonomy.io/apps/tezos",deepLink:"autonomy-tezos://"},{key:"temple_ios",name:"Temple Wallet",shortName:"Temple",color:"",logo:"data:image/png;base64,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",universalLink:"https://templewallet.com",deepLink:"temple://"},{key:"atomex_ios",name:"Atomex Wallet",shortName:"Atomex",color:"",logo:"data:image/png;base64,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",universalLink:"https://atomex.me",deepLink:"atomex://"},{key:"umami_ios",name:"Umami Mobile",shortName:"Umami Mobile",color:"",logo:"data:image/png;base64,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",deepLink:"umami://",universalLink:"https://umamiwallet.com/"},{key:"trust_ios",name:"Trust Wallet",shortName:"Trust Wallet",color:"",supportedInteractionStandards:["wallet_connect"],logo:"data:image/png;base64,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",universalLink:"https://trustwallet.com",deepLink:"trust://"},{key:"exodus_mobile",name:"Exodus Mobile",shortName:"Exodus",color:"",logo:"data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjMwMCIgdmlld0JveD0iMCAwIDMwMCAzMDAiIHdpZHRoPSIzMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxsaW5lYXJHcmFkaWVudCBpZD0iYSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIyNTYuODc1IiB4Mj0iMTcxLjMiIHkxPSIzMjAuNjI1IiB5Mj0iLTMyLjk0NTkiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzBiNDZmOSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2JiZmJlMCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjIyLjUwMDIiIHgyPSIxNzAuNjI1IiB5MT0iNjcuNSIgeTI9IjE3OC4xMjUiPjxzdG9wIG9mZnNldD0iLjExOTc5MiIgc3RvcC1jb2xvcj0iIzg5NTJmZiIgc3RvcC1vcGFjaXR5PSIuODciLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNkYWJkZmYiIHN0b3Atb3BhY2l0eT0iMCIvPjwvbGluZWFyR3JhZGllbnQ+PG1hc2sgaWQ9ImMiIGhlaWdodD0iMzAwIiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiB3aWR0aD0iMjk2IiB4PSIzIiB5PSIwIj48cGF0aCBkPSJtMjk4LjIwNCA4My43NjQ1LTEyNy43NTQtODMuNzY0NXY0Ni44MzMybDgxLjk1NSA1My4yNTU4LTkuNjQyIDMwLjUwOWgtNzIuMzEzdjM4LjgwNGg3Mi4zMTNsOS42NDIgMzAuNTA5LTgxLjk1NSA1My4yNTZ2NDYuODMzbDEyNy43NTQtODMuNDk3LTIwLjg5MS02Ni4zNjl6IiBmaWxsPSJ1cmwoI2EpIi8+PHBhdGggZD0ibTU5LjMwMSAxNjkuNDAyaDcyLjA0NnYtMzguODA0aC03Mi4zMTM4bC05LjM3NC0zMC41MDkgODEuNjg3OC01My4yNTU4di00Ni44MzMybC0xMjcuNzU0MjMgODMuNzY0NSAyMC44OTA2MyA2Ni4zNjk1LTIwLjg5MDYzIDY2LjM2OSAxMjguMDIyMjMgODMuNDk3di00Ni44MzNsLTgxLjk1NTgtNTMuMjU2eiIgZmlsbD0idXJsKCNhKSIvPjwvbWFzaz48cGF0aCBkPSJtMjk4LjIwMyA4My43NjQ1LTEyNy43NTQtODMuNzY0NXY0Ni44MzMybDgxLjk1NiA1My4yNTU4LTkuNjQyIDMwLjUwOWgtNzIuMzE0djM4LjgwNGg3Mi4zMTRsOS42NDIgMzAuNTA5LTgxLjk1NiA1My4yNTZ2NDYuODMzbDEyNy43NTQtODMuNDk3LTIwLjg5LTY2LjM2OXoiIGZpbGw9InVybCgjYSkiLz48cGF0aCBkPSJtNTkuMzAwNyAxNjkuNDAyaDcyLjA0NTN2LTM4LjgwNGgtNzIuMzEzMWwtOS4zNzQtMzAuNTA5IDgxLjY4NzEtNTMuMjU1OHYtNDYuODMzMmwtMTI3Ljc1MzQ3IDgzLjc2NDUgMjAuODkwNTcgNjYuMzY5NS0yMC44OTA1NyA2Ni4zNjkgMTI4LjAyMTQ3IDgzLjQ5N3YtNDYuODMzbC04MS45NTUxLTUzLjI1NnoiIGZpbGw9InVybCgjYSkiLz48ZyBtYXNrPSJ1cmwoI2MpIj48cGF0aCBkPSJtMy43NTAyNCAwaDI5Mi41djMwMGgtMjkyLjV6IiBmaWxsPSJ1cmwoI2IpIi8+PC9nPjwvc3ZnPg==",supportedInteractionStandards:["beacon"],deepLink:"exodus://wc",universalLink:"https://www.exodus.com/"}],rr=zi(''),or=zi(''),sr=zi('');function ar(e){return(()=>{const t=rr();return ni((n=>Bi(t,e.style?Object.assign({overflow:"visible","font-size":"22px"},e.style):{overflow:"visible","font-size":"22px"},n))),t})()}function cr(e){return(()=>{const t=or();return ni((n=>Bi(t,e.style?Object.assign({overflow:"visible"},e.style):{overflow:"visible"},n))),t})()}function lr(e){return(()=>{const t=sr();return ni((n=>Bi(t,e.style?Object.assign({},e.style):{},n))),t})()}var ur=".loader {\n height: 3px;\n position: relative;\n background-color: #ddd;\n position: absolute;\n width: 100%;\n left: 0px;\n bottom: 0px;\n overflow: hidden;\n}\n\n.loader:before {\n content: '';\n position: absolute;\n left: -50%;\n height: 3px;\n width: 40%;\n background-color: #3880ff;\n -webkit-animation: lineAnim 1s linear infinite;\n -moz-animation: lineAnim 1s linear infinite;\n animation: lineAnim 1s linear infinite;\n}\n\n@keyframes lineAnim {\n 0% {\n left: -40%;\n }\n 50% {\n left: 20%;\n width: 80%;\n }\n 100% {\n left: 100%;\n width: 100%;\n }\n}\n";const hr=zi('
'),dr=e=>hr(),fr=zi('
'),pr=zi('
'),gr=zi('
'),yr=zi("
"),br=zi('
'),mr=zi('