reproto 0.1.1__py3-none-any.whl → 0.1.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. .git/COMMIT_EDITMSG +29 -1
  2. .git/index +0 -0
  3. .git/logs/HEAD +4 -0
  4. .git/logs/refs/heads/iyue +4 -0
  5. .git/logs/refs/remotes/gitlab/iyue +4 -0
  6. .git/logs/refs/remotes/origin/iyue +4 -0
  7. .git/objects/00/81a7e1ec3251cc192ed2b73d5be897593fb872 +0 -0
  8. .git/objects/00/885cebf557ff261574deb93cb96449d06db01c +0 -0
  9. .git/objects/02/33f5b60263e5dc6d041c0b223a0724eb650faa +0 -0
  10. .git/objects/03/3fab23ccc74b707a31f6f37dc5df42c100aac0 +0 -0
  11. .git/objects/07/557fbd1d149ce51af8e98e8ca8590757a89dfa +0 -0
  12. .git/objects/07/b71df33935c14ddf99e3480c04eca4685028bc +0 -0
  13. .git/objects/0b/e20ea749c6ae1075ae98f9426e00b0a4a235af +0 -0
  14. .git/objects/12/f9cc4ad0b4f0af4f7bae379f281b2cebe7cc7f +0 -0
  15. .git/objects/13/5f50fea51c72f977f48d06a7584aba0f61e260 +0 -0
  16. .git/objects/1b/97584ebada3e93d7a2cfa4a1aae0b79c414d20 +0 -0
  17. .git/objects/1b/f0c1ad9586578e8332d061f7648dcb041ec063 +0 -0
  18. .git/objects/1e/46816d16e7c9db7575f1964403c3daa105be5c +0 -0
  19. .git/objects/24/d78e796570a8572a03bc1dd26608a7cfb506f8 +2 -0
  20. .git/objects/27/24208ca2442e8ab9b453d0eb230fa41243b270 +0 -0
  21. .git/objects/2a/fe93d8bcbeab9e136d8b6766604c32b3610314 +0 -0
  22. .git/objects/2d/2b812ca27c477f9e1b2c2706a5eb795ffcf8eb +0 -0
  23. .git/objects/2d/8a0da260a710010ae62be134ac1cea6ceecfd1 +0 -0
  24. .git/objects/2d/e8ecbb5ab5de1a032bef3f4606ce5fa7c6c4e8 +0 -0
  25. .git/objects/30/9347e5681d80bd3c7949882e27090dd9070d16 +0 -0
  26. .git/objects/33/633c9df669ff8cf38638717937a54990814268 +0 -0
  27. .git/objects/39/993e3600bf4ab82aa361b738ee97a108787450 +0 -0
  28. .git/objects/3b/ab663710fd6b43d9372313fced9043c4cb07dd +0 -0
  29. .git/objects/3e/b3f1273caf6814dfa69325ccbd9fd1340cf20a +0 -0
  30. .git/objects/3f/b8830f516342a0ae1cb7c34b65016827cb9570 +4 -0
  31. .git/objects/41/f40c22247de377be99e30784229f3f128508a2 +0 -0
  32. .git/objects/45/fbc774dedb61c7c205ea732f59a8dca8d13555 +3 -0
  33. .git/objects/48/cb11e75518a53be14146018214110986fade67 +0 -0
  34. .git/objects/4f/c6dc41f9c0a1a8e0eedd3ba49c43d78d0dbaba +0 -0
  35. .git/objects/59/4c23f158ccbd0a4288f9ea046d06160195afbf +0 -0
  36. .git/objects/5b/d4d87753b79e9157817f0c2e6964a731052854 +0 -0
  37. .git/objects/60/5cb6fd6a9f8894ad4d43a9b8e4785c1b3b0e17 +1 -0
  38. .git/objects/60/f61a0ea50091eac8d344c86597375cbdfc2785 +0 -0
  39. .git/objects/63/ddda2a403efaab3f4c6597b3a73a7b1147adb5 +0 -0
  40. .git/objects/65/0189fe083bd711e45d463b229a72be619abad2 +0 -0
  41. .git/objects/66/663db35bfec8ef5f1a5b1c840fde1bb62a0eb8 +0 -0
  42. .git/objects/66/6c5c5fc30435228116fa08c9d821bebaaa8926 +0 -0
  43. .git/objects/7c/ef0adfb28fd774bc78061c6f088e1ef9b050f6 +0 -0
  44. .git/objects/7d/dc129188a10c68ab756ef2cacb292c76920403 +0 -0
  45. .git/objects/80/17038e0f7818a44a742f77c86f4f88ed768fcd +0 -0
  46. .git/objects/87/c7db6c91c17a2df84b56d30bd24a0f6b9dbdd9 +0 -0
  47. .git/objects/8a/0ed0ed8886fbc823e8d2258fa6d18699e94e25 +0 -0
  48. .git/objects/8d/d857b3d0ab3f5cd2e9173d532ef86e30df8eda +0 -0
  49. .git/objects/92/984cf67b2c25d435468a8218daa26ba0466054 +0 -0
  50. .git/objects/93/140b54b1fb9116ee214afee8abf2c72a232487 +0 -0
  51. .git/objects/93/68f2c32f83054ab072b7c9686d8baa0bad7f12 +4 -0
  52. .git/objects/9a/5ad062be9f6e001f4237a598a08981aba731e6 +0 -0
  53. .git/objects/9e/23448ac58f907d9d123c32bdccedbb3d6741b5 +0 -0
  54. .git/objects/a0/d192999af7e2cbfa6a9ccd04d720a04e5a06d5 +0 -0
  55. .git/objects/a1/655e0cb323c300562f97dcc67d5a446908c8ec +0 -0
  56. .git/objects/a5/38cc82cef7c49500d3522220f0f60a9ebc1ae6 +0 -0
  57. .git/objects/a9/41063a7ce89c353fa24378ec7c3f12f08f9df8 +0 -0
  58. .git/objects/a9/cc7923c34a4c97c5711d6309672f41d46c612a +0 -0
  59. .git/objects/ac/5c983d949d8c928bb022badf801e45e75e785e +0 -0
  60. .git/objects/af/c9cc15629847447063e86a82b8b56abb4fc08f +0 -0
  61. .git/objects/b0/82ca2c1b5a03edff25da3c2b2b573d049877e9 +0 -0
  62. .git/objects/b1/db1c131cf32916028342c0037ce8eb57a8eb26 +0 -0
  63. .git/objects/b2/8334b94392b8af397a05ed702690fa6c9ab1ca +0 -0
  64. .git/objects/b8/7c89dcfce9e244ff5ef6a4bd394de12e8c8092 +0 -0
  65. .git/objects/bc/e98bdb71c8681acb460195fdcbbe5d36290976 +0 -0
  66. .git/objects/c1/87d5e047eca86cfd8d444be2987aaa3f62c4d6 +0 -0
  67. .git/objects/c4/c2da96b0bb8db2acb0e6615cf340c7e51af26b +0 -0
  68. .git/objects/c5/13a96e7584636b20b12280c029750d5bc3da1e +0 -0
  69. .git/objects/c7/c34283697bd3cce07db53953eda25ee7cc371e +0 -0
  70. .git/objects/c9/d60d922a04b87587cd67b0abf9fe5a7b7b76cd +0 -0
  71. .git/objects/d2/69b1676dbf32f76a7c405d0b4ea6a70ac3a626 +0 -0
  72. .git/objects/d3/5a918b1d9125ad35d60e08b181323df3246f1a +0 -0
  73. .git/objects/d8/eaf86669fbfd10497570c1784db1ed2696b588 +0 -0
  74. .git/objects/d9/3bd435c8c7ad4efb83dff04d5450fabb9e3faf +0 -0
  75. .git/objects/d9/90e6d553577d37ebce8b28b3015ecbde038b42 +0 -0
  76. .git/objects/da/13cc15bcd8ee39c81f36dee7f179a569ecab0b +0 -0
  77. .git/objects/e3/27755808d88c7ae5c06c229cf18bd0519646df +0 -0
  78. .git/objects/e4/4c1d8a90207ac082d8ab7ff0db66708e2ebc31 +0 -0
  79. .git/objects/e5/83e7c40be934d16a1fa2e973487b395d930f42 +0 -0
  80. .git/objects/ed/1ae867d5e63195845afc58d88c38ecbdea97df +0 -0
  81. .git/objects/ef/f44e5099da27f7fb1ef14bb34902ccf4250b89 +0 -0
  82. .git/objects/f5/1be495b96272fa2e47f30071aed35ac1f0dd2c +0 -0
  83. .git/objects/f8/ed595d25bd9d500e765a792c513878f7ddb1f7 +0 -0
  84. .git/objects/fd/0bc07dc3c95e6168ab6d367d9eca139ac1e539 +0 -0
  85. .git/refs/heads/iyue +1 -1
  86. .git/refs/remotes/gitlab/iyue +1 -1
  87. .git/refs/remotes/origin/iyue +1 -1
  88. .gitignore +2 -1
  89. README.md +104 -190
  90. core/__init__.py +23 -0
  91. core/info_decoder.py +520 -10
  92. core/reconstructor.py +159 -21
  93. generation/__init__.py +17 -0
  94. generation/proto_generator.py +62 -16
  95. include/google/protobuf/any.proto +162 -0
  96. include/google/protobuf/api.proto +207 -0
  97. include/google/protobuf/compiler/plugin.proto +180 -0
  98. include/google/protobuf/cpp_features.proto +67 -0
  99. include/google/protobuf/descriptor.proto +1417 -0
  100. include/google/protobuf/duration.proto +115 -0
  101. include/google/protobuf/empty.proto +51 -0
  102. include/google/protobuf/field_mask.proto +245 -0
  103. include/google/protobuf/go_features.proto +80 -0
  104. include/google/protobuf/java_features.proto +130 -0
  105. include/google/protobuf/source_context.proto +48 -0
  106. include/google/protobuf/struct.proto +95 -0
  107. include/google/protobuf/timestamp.proto +144 -0
  108. include/google/protobuf/type.proto +193 -0
  109. include/google/protobuf/wrappers.proto +157 -0
  110. main.py +53 -56
  111. models/__init__.py +31 -24
  112. parsing/__init__.py +22 -0
  113. parsing/enum_parser.py +10 -2
  114. parsing/java_parser.py +302 -13
  115. pyproject.toml +1 -1
  116. reproto-0.1.3.dist-info/METADATA +209 -0
  117. {reproto-0.1.1.dist-info → reproto-0.1.3.dist-info}/RECORD +125 -31
  118. utils/__init__.py +40 -0
  119. utils/builtin_proto.py +269 -0
  120. utils/file_cache.py +8 -1
  121. utils/report_utils.py +71 -0
  122. utils/type_index.py +8 -1
  123. utils/type_utils.py +39 -6
  124. core/bytecode_parser.py +0 -274
  125. reproto-0.1.1.dist-info/METADATA +0 -295
  126. {reproto-0.1.1.dist-info → reproto-0.1.3.dist-info}/WHEEL +0 -0
  127. {reproto-0.1.1.dist-info → reproto-0.1.3.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,209 @@
1
+ Metadata-Version: 2.3
2
+ Name: reproto
3
+ Version: 0.1.3
4
+ Summary: 一个强大的逆向工程工具, 能够从任何使用Google Protobuf Lite的Android应用中自动重构出完整的.proto文件结构.
5
+ License: Proprietary
6
+ Keywords: protobuf,reverse-engineering,android,jadx,proto
7
+ Author: iyue
8
+ Author-email: ys1231@126.com
9
+ Requires-Python: >=3.12,<4.0
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: License :: Other/Proprietary License
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
16
+ Classifier: Topic :: Software Development :: Code Generators
17
+ Classifier: Topic :: Software Development :: Disassemblers
18
+ Requires-Dist: loguru (>=0.7.3)
19
+ Project-URL: Homepage, https://github.com/ys1231/reproto
20
+ Project-URL: Repository, https://github.com/ys1231/reproto.git
21
+ Description-Content-Type: text/markdown
22
+
23
+ # Protobuf Reconstructor
24
+
25
+ 🔧 **从JADX反编译的Java源码自动重构Protobuf .proto文件**
26
+
27
+ 一个强大的逆向工程工具,能够从任何使用Google Protobuf Lite的Android应用中自动重构出完整的.proto文件结构。
28
+
29
+ ## ✨ 特性
30
+
31
+ - 🎯 **精准解析**: 基于Google Protobuf Lite字节码的逆向工程
32
+ - 🔄 **递归依赖**: 自动发现和处理所有依赖的消息和枚举类型
33
+ - 📦 **完整支持**: 支持oneof、repeated、map、枚举等所有Protobuf特性
34
+ - 🌐 **通用性**: 适用于任何Android应用,无需硬编码映射
35
+ - 🧠 **智能推断**: 从Java源码直接读取类型信息,确保高准确性
36
+ - 📝 **标准输出**: 严格遵循Google Proto Style Guide
37
+
38
+ ## 🛠️ 安装
39
+
40
+ ### 方式一:拉取代码
41
+ ```bash
42
+ # 克隆项目
43
+ git clone <repository_url>
44
+ cd reproto
45
+
46
+ # 安装依赖
47
+ pip install -r requirements.txt
48
+ ```
49
+
50
+ ### 方式二:pip安装
51
+ ```bash
52
+ # 从本地构建安装
53
+ pip install .
54
+
55
+ # 在线安装
56
+ pip install reproto
57
+ ```
58
+
59
+ ## 📖 使用
60
+
61
+ ### 命令行使用
62
+ ```bash
63
+ # 基本用法 python main.py or 命令 reproto
64
+ reproto <java_sources_dir> <root_class> <output_dir> [--verbose]
65
+
66
+ # 示例:重构普通类
67
+ reproto ./out_jadx/sources com.example.messaging.v1.models.MessageData ./protos_generated
68
+
69
+ # 示例:重构内部类(注意:包含$的类名需要用单引号包裹)
70
+ reproto ./out_jadx/sources 'com.example.account.v1.Models$Onboarded' ./output
71
+
72
+ # 详细输出
73
+ reproto ./out_jadx/sources com.example.Model ./output --verbose
74
+ ```
75
+
76
+ ### 代码使用
77
+ ```python
78
+ # 作为包使用
79
+ from core import ProtoReconstructor
80
+ from utils.logger import setup_logger
81
+ from pathlib import Path
82
+
83
+ # 初始化
84
+ setup_logger("./logs")
85
+ sources_dir = Path("./out_jadx/sources")
86
+ output_dir = Path("./protos_generated")
87
+
88
+ # 创建重构器并执行
89
+ reconstructor = ProtoReconstructor(sources_dir, output_dir)
90
+ results = reconstructor.reconstruct_from_root("com.example.Model")
91
+
92
+ # 查看结果
93
+ for class_name, definition in results.items():
94
+ print(f"生成: {class_name} -> {definition.proto_filename}")
95
+ ```
96
+
97
+ ### 参数说明
98
+ - `java_sources_dir`: JADX反编译的Java源码目录路径
99
+ - `root_class`: 要重构的根类完整类名
100
+ - `output_dir`: 生成的proto文件输出目录路径
101
+ - `--verbose`: 显示详细处理信息
102
+
103
+ ## ⚠️ 注意事项
104
+
105
+ ### 重要提醒
106
+ - **内部类命名**: 包含`$`符号的类名(如内部类)必须用**单引号包裹**
107
+ ```bash
108
+ # ✅ 正确
109
+ reproto ./sources 'com.example.Outer$Inner' ./output
110
+
111
+ # ❌ 错误
112
+ reproto ./sources com.example.Outer$Inner ./output
113
+ ```
114
+
115
+ ### 使用建议
116
+ 1. **JADX反编译**: 先使用JADX反编译APK文件
117
+ ```bash
118
+ jadx -d out_jadx app.apk
119
+ ```
120
+
121
+ 2. **类名查找**: 在JADX GUI中找到目标Protobuf类的完整类名
122
+
123
+ 3. **输出目录**: 确保输出目录有写入权限
124
+
125
+ 4. **日志查看**: 使用`--verbose`参数查看详细处理过程
126
+
127
+ ## 📊 输出示例
128
+
129
+ ### 输入:Java源码
130
+ ```java
131
+ public final class SearchResult extends GeneratedMessageLite {
132
+ private MapFieldLite<String, Contact> contacts_;
133
+ private Internal.ProtobufList<String> phoneNumbers_;
134
+
135
+ public static final int CONTACTS_FIELD_NUMBER = 1;
136
+ public static final int PHONE_NUMBERS_FIELD_NUMBER = 2;
137
+ }
138
+ ```
139
+
140
+ ### 输出:Proto文件
141
+ ```protobuf
142
+ syntax = "proto3";
143
+
144
+ package com.example.search.v1.models;
145
+
146
+ option java_package = "com.example.search.v1.models";
147
+ option java_multiple_files = true;
148
+
149
+ message SearchResult {
150
+ map<string, Contact> contacts = 1;
151
+ repeated string phone_numbers = 2;
152
+ }
153
+ ```
154
+
155
+ ## 🛠️ 支持的特性
156
+
157
+ ### Protobuf类型支持
158
+ - ✅ 基础类型:`string`, `int32`, `int64`, `bool`, `float`, `double`
159
+ - ✅ 消息类型:嵌套消息和引用消息
160
+ - ✅ 枚举类型:完整的枚举值解析
161
+ - ✅ 重复字段:`repeated` 类型
162
+ - ✅ 映射字段:`map<key, value>` 类型
163
+ - ✅ Oneof字段:互斥字段组
164
+ - ✅ Google Well-Known Types
165
+
166
+ ### 特殊Java类型
167
+ - `MapFieldLite<K, V>` → `map<K, V>`
168
+ - `Internal.ProtobufList<T>` → `repeated T`
169
+ - `Internal.IntList` → `repeated enum` (枚举列表)
170
+
171
+ ## 📁 项目结构
172
+
173
+ ```
174
+ reproto/
175
+ ├── main.py # 主程序入口
176
+ ├── core/ # 核心组件
177
+ │ ├── reconstructor.py # 主协调器
178
+ │ └── info_decoder.py # 字节码解码器
179
+ ├── parsing/ # 解析模块
180
+ │ ├── java_parser.py # Java文件解析器
181
+ │ └── enum_parser.py # 枚举解析器
182
+ ├── generation/ # 生成模块
183
+ │ └── proto_generator.py # Proto文件生成器
184
+ ├── models/ # 数据模型
185
+ │ └── message_definition.py # 消息和枚举定义
186
+ ├── utils/ # 工具函数
187
+ │ ├── logger.py # 日志系统
188
+ │ ├── file_cache.py # 文件缓存系统
189
+ │ ├── type_utils.py # 类型处理工具
190
+ │ └── report_utils.py # 结果统计工具
191
+ └── include/ # Google Protobuf标准文件
192
+ └── google/protobuf/ # Well-Known Types
193
+ ```
194
+
195
+ ## 🔧 开发
196
+
197
+ ```bash
198
+ # 使用Poetry管理依赖
199
+ poetry install
200
+ poetry shell
201
+
202
+ # 运行测试
203
+ reproto ../out_jadx/sources com.example.TestClass ../test_output --verbose
204
+ ```
205
+
206
+ ---
207
+
208
+ **🚀 立即开始重构你的Protobuf文件!**
209
+
@@ -1,4 +1,4 @@
1
- .git/COMMIT_EDITMSG,sha256=OJTijUraf8zRGEsGyQ_Q3EFxeT206AEhvBZe9ph_cdI,28
1
+ .git/COMMIT_EDITMSG,sha256=EwGSPDXcG7NYrPVVf9yXMFd9roBbDcpRt9JIhQTqlhw,982
2
2
  .git/FETCH_HEAD,sha256=1W_vttZCTHf9DXnCOhWjilD3kVx9WT2Xu85YBetV3ok,191
3
3
  .git/HEAD,sha256=ly8yuQLWQE8njkYAapHLPJ1xVg6_fMgQjCoHqKvFIdw,21
4
4
  .git/config,sha256=9ZAySfDWBdI-K9eOXyrEQOhiX68AiaP0Z4CLzH07H10,399
@@ -17,52 +17,88 @@
17
17
  .git/hooks/push-to-checkout.sample,sha256=pT0HQXmLKHxt16-mSu5HPzBeZdP0lGO7nXQI7DsSv18,2783
18
18
  .git/hooks/sendemail-validate.sample,sha256=ROv8kj3FRmvACWAvDs8Ge5xlRZq_6IaN3Em3jmztepI,2308
19
19
  .git/hooks/update.sample,sha256=jV8vqD4QPPCLV-qmdSHfkZT0XL28s32lKtWGCXoU0QY,3650
20
- .git/index,sha256=1ZM4jn-WDgRjp1f-_9M6vBnK5C1UuidTQaIKeFiExKs,2255
20
+ .git/index,sha256=duwg4sdUR_alJ5nxmVjRRMxG428rf-bBytr9LNrO1_0,4051
21
21
  .git/info/exclude,sha256=ZnH-g7egfIky7okWTR8nk7IxgFjri5jcXAbuClo7DsE,240
22
- .git/logs/HEAD,sha256=KQbF4Gvsf1mX1Oincff6xO_eckSlWyiiuaEuggXtB3c,2515
23
- .git/logs/refs/heads/iyue,sha256=KQbF4Gvsf1mX1Oincff6xO_eckSlWyiiuaEuggXtB3c,2515
24
- .git/logs/refs/remotes/gitlab/iyue,sha256=MXaTNGsoegnTSIVXcmAVD4v2x2eYUJ7mT_klhYK_POY,1768
22
+ .git/logs/HEAD,sha256=xSZx97kdcyJM7yzEX-YE16uicQjg_g7zN92fe7pgDXw,3237
23
+ .git/logs/refs/heads/iyue,sha256=xSZx97kdcyJM7yzEX-YE16uicQjg_g7zN92fe7pgDXw,3237
24
+ .git/logs/refs/remotes/gitlab/iyue,sha256=Iic8I88_Gr5u6r4Y_zbsnmidUOKFz43p3HdDu5Lo74k,2312
25
25
  .git/logs/refs/remotes/origin/HEAD,sha256=4vCPTgC0N80jhmkFXNUlYvHtGllYJkQTGZEn6LlqZgs,163
26
- .git/logs/refs/remotes/origin/iyue,sha256=q1Kmpw0iGhVPUH8py7HBY_0VtLLXRvfzwoKBRx9JBbc,1768
26
+ .git/logs/refs/remotes/origin/iyue,sha256=GbAv5EUPHJKfS6YHcslLUSKoV6gFzBx2jv5HHppCxfM,2312
27
+ .git/objects/00/81a7e1ec3251cc192ed2b73d5be897593fb872,sha256=qvjEp_xD7FT8C2qIxFzoHETfgdG_Ilj-ZKMURK0woik,2268
28
+ .git/objects/00/885cebf557ff261574deb93cb96449d06db01c,sha256=AFzclJZweg-CmVNt99YI3Ho9dqghj1vsZrPI4Jy9mkI,288
29
+ .git/objects/02/33f5b60263e5dc6d041c0b223a0724eb650faa,sha256=M92vMZ87NltwEsn7mZuk87PtBP687n4-ET0qrPtk7Tg,507
30
+ .git/objects/03/3fab23ccc74b707a31f6f37dc5df42c100aac0,sha256=QeXQ9x_0kJVZzjaA6G8MSPxwkIdZxg3bQpOt3gPmUio,3536
31
+ .git/objects/07/557fbd1d149ce51af8e98e8ca8590757a89dfa,sha256=JWG_MmB15Ez0qpSsbn7QUORFRbzUVxt7KpR7tlikJsQ,2257
32
+ .git/objects/07/b71df33935c14ddf99e3480c04eca4685028bc,sha256=jk2YdZfFLF0_L6dtC5g3NXzhkuPzW8x5n5F2pD-Ih4s,1032
27
33
  .git/objects/09/a92517fe9eeb33d2fd7c979e01d163665f7abc,sha256=wyFL5jJ16f0xCpL1MB5EiJvs2opieE0hMEmyDpUV3ps,9356
34
+ .git/objects/0b/e20ea749c6ae1075ae98f9426e00b0a4a235af,sha256=oRIrMdIqLj8tPUctDVp0A3INeadtii7UAn40HVOJQDY,19177
28
35
  .git/objects/0c/7b11b535a18f311aedadbe91e14fc9fe6b50d9,sha256=1nmf96foQAXQrObKn9gOPugLMlpj7soMif1MBARmKd8,427
36
+ .git/objects/12/f9cc4ad0b4f0af4f7bae379f281b2cebe7cc7f,sha256=eA2WMZnt5zYXRw6O8u_slLMZxbwvOoOR9EAX8I2iDM0,168
37
+ .git/objects/13/5f50fea51c72f977f48d06a7584aba0f61e260,sha256=ecYtHQ_j-MSBN5YdAbHdDdfuJB4WJudHggEe9zUA0FY,1239
29
38
  .git/objects/14/d323d58fb90c209a730c17e23fd82a6c735fc1,sha256=rTCuhPM5LYusLIMDv7CLC557SlRFvvbBzgr4jwrjMVg,426
30
39
  .git/objects/15/eb3f02479e633439ec83c143e703f8448043a1,sha256=duJXtvq_NNhYKG7WdejXgoMlyHIaCUG5jv9SJpU_orc,14711
31
40
  .git/objects/18/89a4fb55eb3abdc528ce87f0cea039278c06fd,sha256=Uz8TPtDNnPWR5pfsIx7tMDCDFBdWLIkaPcnYPIJ12oM,2880
32
41
  .git/objects/1a/4435c23bdf5543e3270aa69361c9c68f205efb,sha256=iNhiztqM2EYiQYjGpjBWg9h0l6YNbQHYafclGl1DB5I,96
42
+ .git/objects/1b/97584ebada3e93d7a2cfa4a1aae0b79c414d20,sha256=iW2wr9kcCBpIXh_0s-7WifsBkzO4TLRB2X78Sw-2dqE,166
43
+ .git/objects/1b/f0c1ad9586578e8332d061f7648dcb041ec063,sha256=9xYaVwWrVnbs7fSO_yO6YTbAQ3aMkJXp97uQ6tX99cE,1767
44
+ .git/objects/1e/46816d16e7c9db7575f1964403c3daa105be5c,sha256=Wqo7uWsh11BefjHvh2CEqowaA6zmNR-TcvNJv6WYjr4,459
33
45
  .git/objects/20/cf56ec106bcd66420dd000279f983571b918b6,sha256=0dwZwG7CpR7yYYNvgYDxHLPj2P7eRLK7fTW_En419pk,166
34
46
  .git/objects/21/55b64d52922c88527c102d62f23e5c2abbae79,sha256=6LLW2HrSfqqVwvO59yc-EcUp6MHw6zfHwu8TB775dII,13853
35
47
  .git/objects/23/bfbca38e177bcbb423dd782c35b19d127a5ab0,sha256=hYW2b3t3bVGNh4pqyyA7DMlyF4LfNZco5NwedWMwwuI,3700
48
+ .git/objects/24/d78e796570a8572a03bc1dd26608a7cfb506f8,sha256=V9cd-XeITtK7Mq7ecpJpWGpi23_5Ny-qnsY4jRHWdDQ,606
36
49
  .git/objects/26/1f67f3b731b32f6d77de9dd7be2d61e2a14ace,sha256=mcasCBpCulVy2N-X_d2hg8567PdhZRof4ea5nYoelJM,96
50
+ .git/objects/27/24208ca2442e8ab9b453d0eb230fa41243b270,sha256=3nPNI4PWt3CdzVHzOVuTD522nSv9SS1T2U1kPBBt40I,50
37
51
  .git/objects/29/4708b82b343e04e7a6685f5cd1287f3d17f7a9,sha256=YE3F4zucGeMHEw7bTEvQc0uJEUUCfEgw-mZTWupuNhA,96
52
+ .git/objects/2a/fe93d8bcbeab9e136d8b6766604c32b3610314,sha256=rG2er-EGko6WdUiYq106KxXwc-kQDXj8FAqt931D3nw,459
38
53
  .git/objects/2b/64656ce2df6259c822733b03f26eb828fe9269,sha256=62hS2mVKecw3uXd8yGs7djzHNeouyhbP6KhR1gGYosg,166
39
54
  .git/objects/2c/fcddd7eebeb4eee0562dc384a79366bc7b04bb,sha256=FHxE2giqoo-1IB9Q8i_XQUypGvQbRlRnTK0sbsNDcJE,96
55
+ .git/objects/2d/2b812ca27c477f9e1b2c2706a5eb795ffcf8eb,sha256=hATm5xxgdr9nhfzRX98_KBaPYdY9BbWNuTmJO7__Oxk,5518
56
+ .git/objects/2d/8a0da260a710010ae62be134ac1cea6ceecfd1,sha256=4F5UqKkv_Lg1gt2nwo6_WklFZxldCeEGbmwpSOSVvrs,122
40
57
  .git/objects/2d/a515dbb88d31400d5b84d41caf270e9309232d,sha256=cP9jUGnu5pVr9ks-YJZSEjsgb7GKD2XEr8XvQosqs2s,122
58
+ .git/objects/2d/e8ecbb5ab5de1a032bef3f4606ce5fa7c6c4e8,sha256=TB1KNq7_JLKvNuYVyzJDi0sD8jvM3mmFqy4exWpiQxs,780
41
59
  .git/objects/2e/2c1c42f5ac5d665cc672d3792078b756d9ab0e,sha256=5LG3jHGORJeswNw0lz5dc6QSsxztyMstbRDADhZDnZY,166
60
+ .git/objects/30/9347e5681d80bd3c7949882e27090dd9070d16,sha256=8MrOQUbawLupyywR0LMr9ldryJuFnShbWE11kaI9Qsw,97
42
61
  .git/objects/33/181441ab38eded005db356da89b54c7d29f452,sha256=iIM6a2aGs_TGZjxHKnkYYyZj_hA77nAF7r2lMOtN1VA,2021
43
62
  .git/objects/33/52dfa8f5d9eb46cc98ea7ccecf02e4d9df95f7,sha256=KNAvQNdSalt8CxCZVVb8e6KBC4zqVtusT5MriFLPbIQ,4409
63
+ .git/objects/33/633c9df669ff8cf38638717937a54990814268,sha256=T-g8iQIgxPSszRTJtvY9SLL6b6PPTLFwI99ZRIxuODY,252
44
64
  .git/objects/34/192f0df5f5b694c881d086019eda349608d222,sha256=zcWIY4oDFz6n17MRjbwFrN1o-HEY0--gqK96dohmZfE,4901
45
65
  .git/objects/35/8bace20b731ff1bbb256d2a0158dfc84720978,sha256=hEPGT0bRzT1GlXErWRWJ7ogflTWj3SutlHRKCBH1TII,426
46
66
  .git/objects/38/907894973091f8e9b224a13fe596e1cb309cf5,sha256=XBdeTonV9fezxtk3kzI6DmEPb3WftSPaIWT30MKKw1E,802
67
+ .git/objects/39/993e3600bf4ab82aa361b738ee97a108787450,sha256=-hGYJt8FRCO90QesR_7HwxAo5gqkNWXOyOlKyVuctxc,17191
68
+ .git/objects/3b/ab663710fd6b43d9372313fced9043c4cb07dd,sha256=C2MsAjEcFMNDimrinw_yA4EvTmYGRkHkoTHOCv4dhf8,5608
47
69
  .git/objects/3c/6f0120229cc2cd8123efbeb7f186eb0a485f29,sha256=iyh7Xt-m7vou3slm58k8xSl3Cn2yYXTuv5WziSWHrW0,802
48
70
  .git/objects/3c/c3ca375694d43e35cdc88d4a5d067e510df427,sha256=A79FHqMtws8sYqMG9CmHWbEPaxF8htYc_E2wVuMi2u4,6570
49
71
  .git/objects/3d/3cc6aab4eefed46c77dda27503bebcce88962c,sha256=6NOdtY3stGMa7_trzPhvb2T21Ng0WqFIJhkPhsW-ACU,420
72
+ .git/objects/3e/b3f1273caf6814dfa69325ccbd9fd1340cf20a,sha256=kBQ8krCCjNFnKOXS4OPkX60C7wQdUWtNJB1zs-LrPVc,2656
50
73
  .git/objects/3e/d953d5ed2c66722045f5e39d068696a0853b4f,sha256=GelU4l-EVo8Y5rXSksIEnewIasEr9N54pTJcgrY3VVk,166
74
+ .git/objects/3f/b8830f516342a0ae1cb7c34b65016827cb9570,sha256=j36c6Wtp0Lp9HVP1xvV-2c25opLFzd3kzuxRHirgb9Y,803
51
75
  .git/objects/40/84f4567d983a977c49598b7d886e46b13ff50b,sha256=R3w6EvxpJRcVuJvbCslrGDK07kcOjECGGosj5tO-JBo,426
76
+ .git/objects/41/f40c22247de377be99e30784229f3f128508a2,sha256=3k-QVtbIvbMHt2cHrPJ0oh4TckwD6Pux6_v5J-EJhvY,2189
52
77
  .git/objects/44/4af3a0d68ba81976f67c7b638c9b0db4640709,sha256=s__MvPzT4Ndsip8kgkfMh-Y0oZ28tv2kVqaz_ExQKvU,166
78
+ .git/objects/45/fbc774dedb61c7c205ea732f59a8dca8d13555,sha256=4AN9Jlc9SttC8DK9ADUjw9wTEYnASrz4HubQCpVgXVc,417
53
79
  .git/objects/48/369b05749e384be9be58e5f943f3a0040d0f37,sha256=KP9dXx-XniZuIEXESlrL_MWWi55zGiFr7xtmp3oD67o,8551
80
+ .git/objects/48/cb11e75518a53be14146018214110986fade67,sha256=08B_QIXJL2_dGh_r-GmudDgLAmT-Bia0eRYyIbOKvFw,2562
54
81
  .git/objects/4b/43f5f577e1cdc35f8e06d178d8f5c892034061,sha256=eawBjiWutNeKjIzvNonVMMKUVsz_-jn3Uew_NsKQJ-I,1150
55
82
  .git/objects/4b/442fccf86631bf5196ee5b48ab8d58228ab59c,sha256=5LFRUcM6cV7lW29hge4-op6hYtbn5SZ6Ouz_4tW6k8w,4842
56
83
  .git/objects/4c/16984be6ef7b24d01604821e9728cb579acd69,sha256=sy5h3rBsk0JcPlpA7L0WhJESaYjNZnTvrB1F1CRPSJQ,167
57
84
  .git/objects/4d/6d457bfabc4af842e5ddc2d56eb059d5dfdc9d,sha256=HLQ8aGvln8ZuhdINhhbr_aTt2BttkJOY8k6LhciAMLE,672
85
+ .git/objects/4f/c6dc41f9c0a1a8e0eedd3ba49c43d78d0dbaba,sha256=VpE09gk2-91HvTU-HX-eYwdTUVgUxwQn5YtroMt08Uo,1675
58
86
  .git/objects/55/6723fdd4f525eed41c52fa80defca3f0c81c47,sha256=vwGNz5lxU_wrrRWVPU64TccYo4Vo4uUGC3-GwVIs1xs,4520
59
87
  .git/objects/56/79064a3138031d3a92d60aa629b82009fd0d1d,sha256=4pQvc0ulzTZ9RQEVr5yy37dV-uhP1VU58UyKcCugHHw,426
60
88
  .git/objects/58/0d8f872aa869e42ba608f64888b1349f8b3ff4,sha256=sag83Y6gsy8I31WmM2lVeBM-AYKgo5su3H97fuDOj14,13984
89
+ .git/objects/59/4c23f158ccbd0a4288f9ea046d06160195afbf,sha256=exJLnFGpuGY_PAAr3VIy6Ez0fLQ4DdDTL8wMqImKh8Y,1160
61
90
  .git/objects/5a/11f9d70791e06a0570e01d3dcbbae39cde55db,sha256=wjd8hb5D03icknLFsPqMas6xAFfG30_Wg-PJJH03ezg,13722
91
+ .git/objects/5b/d4d87753b79e9157817f0c2e6964a731052854,sha256=PK8JbTxqE1VLYE1hCBt6rPI6nSmJKnVnVYbpo42DftU,57
62
92
  .git/objects/5c/715dcb05e32db7a7a3b030f07524bdd8a56849,sha256=wLXhy_1PP8n3Gd6NsvY1eFlK1pjkIjW35im_BD-0yMU,426
63
93
  .git/objects/5d/e2e9d536c2c0b78e8f9b3b61daa531a55332dc,sha256=Wiyz9xFF5A95FEnxZULmV9TSJf0-erTb_qIhLFIvmag,6558
64
94
  .git/objects/5e/9daac72a48ce60688ab2eeddcc3d9152329e20,sha256=7sVW8qTIBHufxZ3WCnNwmX33RpciuLTPritqr84UmKk,426
95
+ .git/objects/60/5cb6fd6a9f8894ad4d43a9b8e4785c1b3b0e17,sha256=zmGY1G58wmmZq2KD_Bu3Sy4-9iKKFiYMK52xOHbYfA0,343
96
+ .git/objects/60/f61a0ea50091eac8d344c86597375cbdfc2785,sha256=q08wTKfTUrWaDDDEIiQMxG0rfLK5LyogjwXQTQ88QQI,1986
97
+ .git/objects/63/ddda2a403efaab3f4c6597b3a73a7b1147adb5,sha256=r4ZyBKnna37wrE8JwnYWK84WB1OVsnXGU3N8vGnP5mg,18987
98
+ .git/objects/65/0189fe083bd711e45d463b229a72be619abad2,sha256=A_rjGnyEfF5LPXsd1JWYWya49pffPhLzU4Gkg7p9Fcs,506
65
99
  .git/objects/65/a4f0ada7519f8b1e6a7c7e287541b8effde9fd,sha256=jSGkVjAMcm2nrF6w_0U7lmzoBgwIJaf4P8POOlABxEQ,188
100
+ .git/objects/66/663db35bfec8ef5f1a5b1c840fde1bb62a0eb8,sha256=5xcSNodjk8EYRqTQHZIX7-0mG35aBsCzOkiqK2sIzRc,252
101
+ .git/objects/66/6c5c5fc30435228116fa08c9d821bebaaa8926,sha256=dym8X8VQl5GHh61t4umiy4z0oA_ATiKybPr4jIRjJk4,1165
66
102
  .git/objects/66/7291e131d4769e7d028346a0cc7a0c05d500e5,sha256=3D6kzCQW7DkYuwARYA74Tlfzeaiaob9ux4YE6hYohas,4026
67
103
  .git/objects/67/f27f77274917580e687fd00ca18da0660215c1,sha256=dxM9_T9v3VBrSXF3dbH6zsmbGQJn43-_DnHiDYs8108,15542
68
104
  .git/objects/67/f54a4a3ede6749acc7c718ad97a86634215b5e,sha256=n0_tiP-u_DP9uhXCryaz98mNJYcUX8RYiS48FvxIxCA,744
@@ -71,83 +107,141 @@
71
107
  .git/objects/76/311aa8e59d780763e0d66787067cc5d9613a67,sha256=J9Xy8ESXbWUbC_4sA0KumGVKm09tzlqA8C5oJ63a_b4,2167
72
108
  .git/objects/78/3e7e252c20e73e33615c703174766036546ff6,sha256=cQ-PXyvzEYjb2Lr24anO9aGui5IxBxZCYXL6zZRc0xc,810
73
109
  .git/objects/7c/00eec7ae9ef5f94fc337e5c8f9793a2a48810d,sha256=Ju-Yuy5EARcIThU4vkHrZuHQWu3MjXSZYGtBDTWR18c,96
110
+ .git/objects/7c/ef0adfb28fd774bc78061c6f088e1ef9b050f6,sha256=d9SniNMBerFoLZP7nlahqG6nPtrR6YVMjSSiJm5RRXs,2887
111
+ .git/objects/7d/dc129188a10c68ab756ef2cacb292c76920403,sha256=7jgXb9blUSWiQVPh8rpVxhpRQg9RyQS3zUSC1n7oGbY,17336
74
112
  .git/objects/7e/5935774ee7a85f2523427c9100f9c578ac172f,sha256=ywEI3w5JgIOgFDJ6cxc6NJnLfEr2Cjynke78KmwJhSE,165
113
+ .git/objects/80/17038e0f7818a44a742f77c86f4f88ed768fcd,sha256=ZCTiAwFMKB3R7tU1zMGM-WZNU3Fy_DeAM2r-ukPIwdQ,284
114
+ .git/objects/87/c7db6c91c17a2df84b56d30bd24a0f6b9dbdd9,sha256=073he9D2S-4EPQh6cBs0Xm2dEOxPTwZrGstzcSkJGCE,3897
115
+ .git/objects/8a/0ed0ed8886fbc823e8d2258fa6d18699e94e25,sha256=VpidpA9wUduTJVrffzMKo4KL6HAhkBBxZEaNdGX9Ejw,122
75
116
  .git/objects/8c/809c42c7ae13007fd885ee7bcffae7acf2c520,sha256=HYoU3_cZUGur3rWrgRvzHRAv0JfrXgc34R8UeGbC5Bc,14180
76
117
  .git/objects/8d/44142ae2d6dbb59d4ebed8587bccd051e5766b,sha256=l1G5ZzQBQW8Lxd3WvGLRcY6quM6dBL4zdNT5ovjv3Dc,802
77
118
  .git/objects/8d/4a5767bef0c342f1660526f9671c0944922c40,sha256=kP0nfEnyNmuEJ4wLQabhPPx60OIa5Dxqn7R9Ni89CqY,1900
119
+ .git/objects/8d/d857b3d0ab3f5cd2e9173d532ef86e30df8eda,sha256=dTFdFA8EPaLpDuJ4X-hfXjbwiAfKBY-EvFJ77H2mRxY,18883
120
+ .git/objects/92/984cf67b2c25d435468a8218daa26ba0466054,sha256=EyDEXseNoUivqR25-icLPWkaKt2pimwOucf7u4TyAIw,130
78
121
  .git/objects/92/c6018b4fb8e3b6c2f3f3054a56f2bfaca27470,sha256=Oox2busLjPpkXw6To9NfgDMXHuknlICbhyhyTWUT1lU,96
122
+ .git/objects/93/140b54b1fb9116ee214afee8abf2c72a232487,sha256=7VYYZiscg3mWnC4xmuQViLHakgctCXCTAonqA_76BAw,283
123
+ .git/objects/93/68f2c32f83054ab072b7c9686d8baa0bad7f12,sha256=GEtc_eOpbXXtFY1zj1dOlStEULevK-Lxr8O7PhjbvOg,431
79
124
  .git/objects/94/ce01b61b90d1fb21d2d339fbeb22e821b6f413,sha256=oSSA97T7TGnstzHDjUrdwzwZO4d1qIUyjo6lz_EbNbM,122
80
125
  .git/objects/95/295a15779ebefd563ec777c3d3cced7e8d0209,sha256=IIN8_K0K-3LAkUI4Ra3DS8yUsfpsqteSDGhgvRpSfZ4,426
81
126
  .git/objects/97/56fe0931216a7c40cbf250e1ab8a6dfd589f13,sha256=Su7Q-bXO0K9QKEGC249NVuUS62xmQs5TgWfEmdbauaI,97
82
127
  .git/objects/97/71dd4958faa94d3db229c129f6af35b508905a,sha256=Tc_ZkUqvJ4rk0QG5Bvwkp4DkMM9DlsmjdMIyDaO1S2k,756
128
+ .git/objects/9a/5ad062be9f6e001f4237a598a08981aba731e6,sha256=K1HnCs6nMYhqr8xsnBRqv6rRibDz4wPp8CoMT00hGOc,381
83
129
  .git/objects/9a/e313cdf64cd82416c1238eb493e6396f799f12,sha256=9bPRhebwMVqtGqJUxfVq-TEUxceuOdSvicWe1H8F7Ks,876
130
+ .git/objects/9e/23448ac58f907d9d123c32bdccedbb3d6741b5,sha256=iqH9u5FAMzeSJ8QgFQnE1D2jPxIWx7b66Vd0RrqetvI,96
84
131
  .git/objects/9e/9978522bc8ca79133d7c11ef8ca3fe3c7eed0a,sha256=FkHx7Pp6DCZ5e4bRo2RjRU875YBgl9tEw7Z_9Rii8cE,13109
85
132
  .git/objects/9f/b57064e0c53ed80af8507acaab718a1e80184e,sha256=DGx0Ie-bppvghrmiV5w7mn24c6YlvHvYLIQsm-_jzsQ,635
133
+ .git/objects/a0/d192999af7e2cbfa6a9ccd04d720a04e5a06d5,sha256=Zd6l-w5TxqsdgCZqkDz_pr9BWPJGb5bmbDrFlMl2Qx8,882
86
134
  .git/objects/a0/d630c3f6024b196d4ee933ab13a32905efdaaa,sha256=nNyB1T2FVU2vm3f-aAjEl-vBLbxYsKHibRIPhqCX9jQ,426
135
+ .git/objects/a1/655e0cb323c300562f97dcc67d5a446908c8ec,sha256=_b3Xk8IbERvYune9G8gOgOxFqc2o33xxzzAB_bZNIWM,806
87
136
  .git/objects/a3/cedc28e563a1845a7860161b39b0fe58d5f0d3,sha256=Vee0H8dhSj4ERNDSAnRU6vebs0tbY1-lgYr1Nz5X7bc,122
137
+ .git/objects/a5/38cc82cef7c49500d3522220f0f60a9ebc1ae6,sha256=hgFU3fWeozpZCBrngHHTeUYH3C6lqKBSSz15-OuI_jM,9716
88
138
  .git/objects/a5/b7e4e1b63bfb65288f6553687aaabcfb4d51b1,sha256=9tl9xb48EdvQk9GIg6mEzXSwqUgD6yEVZx-sVxaQVKw,1064
139
+ .git/objects/a9/41063a7ce89c353fa24378ec7c3f12f08f9df8,sha256=j-hYLtVwUhhYEY4BLe7J6m51GlpKdbZWUgKJwsEUt1M,389
140
+ .git/objects/a9/cc7923c34a4c97c5711d6309672f41d46c612a,sha256=NvxVg0v7oBl27tQ8feThD45Gw97gZ6ZbbqVUZbp3CYQ,1041
141
+ .git/objects/ac/5c983d949d8c928bb022badf801e45e75e785e,sha256=eji1dZ5VSnUSuD_KuyL2kD5ZqVTmxl6QzKh37HhFhPI,1068
89
142
  .git/objects/ae/046e08176523e8a98dc7294436319f724db13c,sha256=9hdXV7BKRhfFTOz3FSuoYwGrcjvk2uTPo3CD1czuKcU,803
143
+ .git/objects/af/c9cc15629847447063e86a82b8b56abb4fc08f,sha256=dzjzk6kncEmUtMbBEhkOuThFWDb4-2AyaFmKHpGU_RI,3155
90
144
  .git/objects/b0/7a43f0462bf25a8b1f4c0ca60c1b533dae1dde,sha256=JWzlC7nXy3RXBUxEcge1_ciMw6q3C5phffVck9MVlJk,404
145
+ .git/objects/b0/82ca2c1b5a03edff25da3c2b2b573d049877e9,sha256=Tn8y8C287Wd8ZZsQ4FgduAQMlD-ANm8l0i6XeA0J9mc,476
146
+ .git/objects/b1/db1c131cf32916028342c0037ce8eb57a8eb26,sha256=bgcHj-13lalI3KZLo4PS1xneLz-E1oSxp1qIfCiqSH0,17243
147
+ .git/objects/b2/8334b94392b8af397a05ed702690fa6c9ab1ca,sha256=QnXhDj4XDoGwytea6h_RgeaoWX3jXffxX6S7DcMzRZo,3461
91
148
  .git/objects/b3/28dc445ee33220db9359370fc0089a77174101,sha256=cipG_34_tKM5VPfYW2wRCmBYOqlmTBIUjakeph9sfl4,3652
92
149
  .git/objects/b3/d2b3037bede44e7e4d18dc99419f8c712c9c62,sha256=OIWo7wvTTKYZkYkxcZrOtnvfqgGlPezaE6sglITaF_Y,1156
150
+ .git/objects/b8/7c89dcfce9e244ff5ef6a4bd394de12e8c8092,sha256=kE2ed_VMlop9lFeD9xXhrmql0ybRkMT6SbgWSP-0f7I,1249
151
+ .git/objects/bc/e98bdb71c8681acb460195fdcbbe5d36290976,sha256=o-hyZsAo9YH-jq5u10qF9Ub07ttduIWahRk7XC15Huo,96
152
+ .git/objects/c1/87d5e047eca86cfd8d444be2987aaa3f62c4d6,sha256=NL3ke3EzpuAgSXzGAaSX6IyTxnnTtbx-_4PRxUYVnRM,122
93
153
  .git/objects/c3/93db4841dbbb8acf54e9af12b6705c9f5ecde9,sha256=g36XyKIObniMsMBcIzsoG7f82SzOgn_Bdx-V9Rezjbg,3864
94
154
  .git/objects/c3/c8594874dd9ff9c21662fd06cac9b5baadbba0,sha256=5YUWDZ-BMZvyOJksaoiKeZC0N-eRcOJemLb_jNUHcC4,14309
155
+ .git/objects/c4/c2da96b0bb8db2acb0e6615cf340c7e51af26b,sha256=CiygqPJlDIOMLlTCLtqGjX1-0nLuibvSqApdkzgx_Dk,130
156
+ .git/objects/c5/13a96e7584636b20b12280c029750d5bc3da1e,sha256=VLZ8PjQLeTsUdf5hJgRYEVffMMDcVPaND5S6p_G0QQ4,507
157
+ .git/objects/c7/c34283697bd3cce07db53953eda25ee7cc371e,sha256=Dml4LNMu14Kq4DUCqcD7PhPdwxCnnVe77BqS9bZYJr8,170
95
158
  .git/objects/c8/2a656fe6b5d479b327cdf5fe3bf60db987a2a2,sha256=YNf8mWKTqJHeBDQCTfOU8b0ZDDSfbAb1fBGGDsySrHk,426
96
159
  .git/objects/c8/cb3bb9552dcf6a368a1418996c4b925db2d8ab,sha256=3AlcdjxamfHKOBmAuectuKNLwOYa1BovnOmVElfwPb4,13097
97
160
  .git/objects/c9/a6ca8f8efee4a5632e9a655ced29f1b708f35e,sha256=IOmxZbePi1cWHt2HzdDNtWy0SYR2XvigDkGK2fyNbWU,4957
98
161
  .git/objects/c9/cdef9ab627b874ffe6455a47583a75bf16496d,sha256=7y908SUa7dmWJyNXDKS_tOdrcfmI6OjZc7zvtL38M5Y,428
162
+ .git/objects/c9/d60d922a04b87587cd67b0abf9fe5a7b7b76cd,sha256=__y7gpz4_Vp-4bf0WIBORv-fmu9OFyi42u7lE5mbpbU,2868
99
163
  .git/objects/cd/2d6c229438c6b1c694b9392a85888d89ef49c1,sha256=IW9iGk3Eb-i_Ht64HQcltVp27ziQHz5IP6k5p57YFtY,122
100
164
  .git/objects/d0/9c84ad2142a187bf26a1714b7041b62e404c8f,sha256=twhhaZbfU_mgu5LIlt9ZeGjp_PT_gri_9H231H5nrNc,2172
165
+ .git/objects/d2/69b1676dbf32f76a7c405d0b4ea6a70ac3a626,sha256=m7rrmOVyAvhOIaRUmhbOzSTY5WKs47KUo7wFsM4XR90,2368
166
+ .git/objects/d3/5a918b1d9125ad35d60e08b181323df3246f1a,sha256=XiS705YKH6IJsELw5ZgbSeLdKH2qw96denj85BNEJJY,284
167
+ .git/objects/d8/eaf86669fbfd10497570c1784db1ed2696b588,sha256=YLEdJmuYNQDi1sYzQr0H1gFdExgTKIsY_Ugosmnzf3Q,314
168
+ .git/objects/d9/3bd435c8c7ad4efb83dff04d5450fabb9e3faf,sha256=Dfce7XnTEPSLCJamlY36SeWUBiScdITejT2zhr9xwbg,2816
101
169
  .git/objects/d9/6d7456245232b3e159dcf691f11e51224c557a,sha256=3w45hxiT2rn6ljSdgo36fHMMWZt30r5C1FPvbnjq9tc,597
170
+ .git/objects/d9/90e6d553577d37ebce8b28b3015ecbde038b42,sha256=KAWFa4xuE56xukGPMlcOjxQ6xh1FlSrTYvgGyMypTX0,96
171
+ .git/objects/da/13cc15bcd8ee39c81f36dee7f179a569ecab0b,sha256=j1qdeViwHsSkT6l8xwFVDZ82wa2y638a6LsvVrUQnho,2154
102
172
  .git/objects/db/beedb30613f79ae3ff67df1428cf8ade223711,sha256=tTGayiwSvdy-uBiXQKRhNnToZ_dc1BmeXZ2mltuRfxY,3812
103
173
  .git/objects/df/f8f64cee2b97df7d86f73207c5e690f98f0208,sha256=eRT2hUSKxaIPfQVnE9NaRGxbAvBVCSreSOGzVGtd7As,213
104
174
  .git/objects/e2/b7433fbfbfac5bc800a962be2f4adbed145b42,sha256=eqX17kz7wSegBgSYS8q4oMPsZVvNWoDbpCRw7oI5PmE,15527
175
+ .git/objects/e3/27755808d88c7ae5c06c229cf18bd0519646df,sha256=GQJi0cnGbjOZLiK8-PyTZlVupBaT6g-ar2N-RJp0NN4,9619
105
176
  .git/objects/e4/1e5aa2bc3074c2014d01ab1f603f69c327a83f,sha256=5daI7Vb9ehvOwoqgaBAKilm6Z6YdA4Rk4MFjJChbWpA,379
177
+ .git/objects/e4/4c1d8a90207ac082d8ab7ff0db66708e2ebc31,sha256=YJmX3vsaaoauuSFWAJqD3wriTdWueanhd_r5zroQqY8,232
178
+ .git/objects/e5/83e7c40be934d16a1fa2e973487b395d930f42,sha256=BLXKgjdPyjn2Y-x-OQfbdg5JXCq3Nrnvwh5PfGMpmxQ,1848
106
179
  .git/objects/e8/1433b6ad92206cdadbee1f474b4f99383314cb,sha256=mRMdmx6wCs6b-63QL72Iutm2AUVCOIYs7J5XbAsLluc,426
107
180
  .git/objects/e8/2f42ea26b8bf4f0bc92c0648ac8f190f14226d,sha256=xtbEwloZnqXdNdViAevzyprosfPQ1P--xAu6URGlaYI,155
108
181
  .git/objects/e9/a15996cb55ac72aeb6611d26e8d22246589943,sha256=sTn6X3xMp3_WYpj1CmP2hDqviX86aJHTCzzi_ZTpBKw,4643
109
182
  .git/objects/eb/528f06c622d54e411e9e05b3a200b4ac624a90,sha256=i9b0c6j5KYuoPAR_-5923QJwBZM2_aq2Y-CElPjRT0M,4596
183
+ .git/objects/ed/1ae867d5e63195845afc58d88c38ecbdea97df,sha256=Qo5oowjv4LCkhCgdr9UwcDCzcOQdkWxWuY-gL9zD78k,48
110
184
  .git/objects/ed/fb5bbf938de738d1f658f80e23c675bb8b3fae,sha256=MOYiuXKTxnd9YcqU3-HUVUq2g9fPU1-AKZOQ-3xsWCk,4237
111
185
  .git/objects/ef/4844af55f7f64b8dd24b81b5a8322a8c80208e,sha256=hO8yllVMOtIE4HeOvwKSqQUByH6lvaA4L-RYrSU4vlg,167
186
+ .git/objects/ef/f44e5099da27f7fb1ef14bb34902ccf4250b89,sha256=-QgSwHLJXN1UHaeMpGc8blhSm0nm_4GuSCdC-h_IM0o,2816
112
187
  .git/objects/f2/2bfffda9fb6a7f37bed04b7c40c9466ef09454,sha256=goQNyEV3NqzS28mMXuus1SWzwb8yXnvEPef14Ugzh5Q,750
113
188
  .git/objects/f5/18c69a6e1bf3052b79da01502b2837ea58f0f4,sha256=r98SFbCvw7yeAYTjzkw-2VMhOVbpm79FLZQiC5A1-pw,123
189
+ .git/objects/f5/1be495b96272fa2e47f30071aed35ac1f0dd2c,sha256=xjweeKCHsLUlfdROM1YxycVfwVexy-_1VhEA8Ki4Rfc,5050
114
190
  .git/objects/f7/25a430eb3364460ba854dbc8809edc21dc6c70,sha256=LdyMmAWGLWbn5G5fC7eAPi4NFOboKcJ6iJJdxENSUCk,2505
191
+ .git/objects/f8/ed595d25bd9d500e765a792c513878f7ddb1f7,sha256=yI_zqHGWaq_FUbEiqDWJcqrceTz2TNfSGcOjk7UeZ3c,97
115
192
  .git/objects/fa/fc981b0d80d8d0323c04365785f66996ed5211,sha256=t9N37kVA7j_i4nz0dDMHOQpvziBu5MUpDlG06Hdj77c,4395
116
193
  .git/objects/fc/e15b9dbffd9f37b1f2d46944ee2d0394df6565,sha256=81qdzKkVZ5C_1oej2Mm0q2RLifilVFolIs95mrUfpg4,163
194
+ .git/objects/fd/0bc07dc3c95e6168ab6d367d9eca139ac1e539,sha256=29lnkRe3MYSLwu997QipK5TLUYzZuOKhQmO3usm17H0,3002
117
195
  .git/objects/fd/267d9de63212db235135fa6834f62572224fc6,sha256=vzhjdZvcXQ8Fgja_XwvbBkuLuRhzSYf_3mckDyZEoso,426
118
196
  .git/objects/pack/pack-289f7bb06603881c49190e6036de6390223baf77.idx,sha256=KRv1SBEe9bYL9d5V301LwPOBqFs3tMnB0dl4PriMMIw,2416
119
197
  .git/objects/pack/pack-289f7bb06603881c49190e6036de6390223baf77.pack,sha256=R4oMXhr-NcPAUBXStCbAaUvGUDW_SBECmPIbiB9Gy48,42003
120
198
  .git/objects/pack/pack-289f7bb06603881c49190e6036de6390223baf77.rev,sha256=22_3sqyTNB5IbwAK5oCqNz0UxDDqoZ5jcF7p_44Lalo,244
121
199
  .git/packed-refs,sha256=4H0m4wd6q98wZkBk7WfvVeTBuuxQdTE65XxsswYP-oQ,112
122
- .git/refs/heads/iyue,sha256=R9_PlsRLn-c1Boht7Ouun-MAQQj_9PDIfKr5H-8LOmc,41
123
- .git/refs/remotes/gitlab/iyue,sha256=R9_PlsRLn-c1Boht7Ouun-MAQQj_9PDIfKr5H-8LOmc,41
200
+ .git/refs/heads/iyue,sha256=UKeAS3b7ttvVhUvr-gyA4_GMYKp_xV5sAPccBx2q1kw,41
201
+ .git/refs/remotes/gitlab/iyue,sha256=UKeAS3b7ttvVhUvr-gyA4_GMYKp_xV5sAPccBx2q1kw,41
124
202
  .git/refs/remotes/origin/HEAD,sha256=G8pFPTbCqnJ2IkCzz9J-STqOXWU6TrlXfpt1wx5bUWE,30
125
- .git/refs/remotes/origin/iyue,sha256=R9_PlsRLn-c1Boht7Ouun-MAQQj_9PDIfKr5H-8LOmc,41
126
- .gitignore,sha256=7KBWk3hOUkvfJh1A-RNk5jHepGKp71qPlktu8nyEptI,2085
203
+ .git/refs/remotes/origin/iyue,sha256=UKeAS3b7ttvVhUvr-gyA4_GMYKp_xV5sAPccBx2q1kw,41
204
+ .gitignore,sha256=HHs2RDf54i9UJ3Z-pqWWCy8wyQLN7FCvz8Zm-RGN65s,2091
127
205
  .python-version,sha256=NxOs_9lT1XG8y-FjlRru-YinX5RcBJt_ulPwgDESZ_o,7
128
206
  ARCHITECTURE.md,sha256=HiUhP4wGzy4lD01MpHjOgAhuAUwpNsEac3tZaE65kos,12047
129
- README.md,sha256=khO65a7VGeyjyUxxXpu1W_EosoPLzJyWCol6jDVzw9k,8484
130
- core/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
131
- core/bytecode_parser.py,sha256=bv01quLoLeKHjswLU86g4w3MeZR9uh7WIJsnV2sGE2g,11399
132
- core/info_decoder.py,sha256=n4A6U9jxzRLdzP48QBxBpJ6AKsccR2PWfbG8wKKqwl0,49802
133
- core/reconstructor.py,sha256=_Kym2_gqDi76MgOK7E7DiQX447Dm8fwnPtHKpN631dM,55500
134
- generation/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
135
- generation/proto_generator.py,sha256=8Pfgr8gFw6-UodVX5JBQk6OrRbGUEQHCZ120euqN8Pg,19715
136
- main.py,sha256=3G649-aTByEjMS4tb1A9wcO9NVUxXVSvdwGTq9hXxBI,7081
137
- models/__init__.py,sha256=WScv63rvEl65y5CWjpb6__hvjNvjpCkl6lz1Z2u0IYc,811
207
+ README.md,sha256=CNBsu4ulQZ5JiU2aqlU3FsLof6DmpKfMtbhhjdGfp60,5399
208
+ core/__init__.py,sha256=PetkS7P_cuz8h9SSQmEJEQKUaaWf6geQnLKRq9uQzjY,688
209
+ core/info_decoder.py,sha256=WgvTTiVr2_bTtH7ip0Pf0C5OKNn-qeSELYOT10r04Aw,73764
210
+ core/reconstructor.py,sha256=LdSH6Z90xR3XdfOP27t-JMbbKU1RKKKwgL6K3WboMm4,62820
211
+ generation/__init__.py,sha256=fqZNYz3HzZb0TeF9KMiQ-Q0BdWuzKkSJ8hEXF4kzHuQ,427
212
+ generation/proto_generator.py,sha256=QTh2-b4rbY3sQZQFBAunL3rCiumvxzOHEvQ4tCEqSkM,22254
213
+ include/google/protobuf/any.proto,sha256=vPXebORjsaOP92t3lVqn5YC07BKvNKknsdRcnvsPr2Y,6154
214
+ include/google/protobuf/api.proto,sha256=naqFihxSn0f51O0bwt8Nq2FUrUL5nPA1Gz2p1Nr_jrA,7729
215
+ include/google/protobuf/compiler/plugin.proto,sha256=fjnlljCh8BGNcVv9D-NIHBYN4hRP9ZUsXj7SCizk-oI,8556
216
+ include/google/protobuf/cpp_features.proto,sha256=wM9-hphZYrcNfiAeZGrRCXBxfyLI3TOK-0F95Dd0_5U,2185
217
+ include/google/protobuf/descriptor.proto,sha256=QovXz8dMTlPcqwbTcICqWJRSwvkzYLy6zNXR14pQ6LE,57489
218
+ include/google/protobuf/duration.proto,sha256=o_cwH_KVbsLjDCJB7OBxl-SobHUjSNVgciSBnUkhyf4,4892
219
+ include/google/protobuf/empty.proto,sha256=7O89VMyeB5ZzuYFsZ7rHcPfzv22totRZa6adcdqpceY,2363
220
+ include/google/protobuf/field_mask.proto,sha256=F7DzQsw6Ji4xfVaITz9XWvv6xRKtBXk0nMdFDkHyaJE,8185
221
+ include/google/protobuf/go_features.proto,sha256=LszrrwacFcejrI113S_c0PEwe_mUlp_NbRt9Y6WrVIU,2521
222
+ include/google/protobuf/java_features.proto,sha256=pkYTdwIlZ4HcTT8IpOCnjJMjcAknQH4ltsYNsv9j-kc,4835
223
+ include/google/protobuf/source_context.proto,sha256=N9NAHeia8dFJb8lJkkpfIBG9L6376w2hyqJ3FZqWd20,2341
224
+ include/google/protobuf/struct.proto,sha256=G_B7qLmiTjoDkN3aw60NtBxjKH0lJ4iwI5giC5q8kA8,3778
225
+ include/google/protobuf/timestamp.proto,sha256=FAUsYELB3S0LUCRfKBLqq26vgtsLbozkg-rlJ_c7bug,6449
226
+ include/google/protobuf/type.proto,sha256=4jDg5K64fJXp8casv8DHE9s_iAlPFJsVRxelHQIPdQs,6367
227
+ include/google/protobuf/wrappers.proto,sha256=aHjcdTTPmAXu5WNFzcOLXpyjneziRnEMZjxwB6Z_70k,5392
228
+ main.py,sha256=EnjOjWcpCoK6JrblcLXPvkS-RiXwbkBjs8gL7QP8jG4,5933
229
+ models/__init__.py,sha256=KVthXPEPwpKg45LaaX5EIHu6UMY8eLXMnx4rfJB84Xs,825
138
230
  models/message_definition.py,sha256=AszUZnNPSBn9SMXne5ORDBiGZz1W2pcYmU8ftGC3Mks,4873
139
- parsing/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
140
- parsing/enum_parser.py,sha256=4BjMk1NIYgt2FDZUjTZyOvFfC1uJp_MBZipVdk1tqes,6175
141
- parsing/java_parser.py,sha256=lFdnTzG0OeMlpzUkFDy4_mhOfW0B6gDEKO-3GfAvlVQ,21786
142
- pyproject.toml,sha256=7pAFQe6zD5eqAkTInATLVoUlGjhfjsTtdrTJYZO1c0E,1378
231
+ parsing/__init__.py,sha256=WBrRACzmxAN4_k7uUo3KSeywvlTJYp5iVSOnU2gNoF8,596
232
+ parsing/enum_parser.py,sha256=Yf59cDLTwIbPRQsuj0tgYUmmtpjY02llmSZ3XlsCqUk,6492
233
+ parsing/java_parser.py,sha256=PZ5gs2aJqcX8sRlC29QIOsrbI-OCRtaHsxkMyvYnkCA,33774
234
+ pyproject.toml,sha256=WSHU6modzAkZB__A3-T2NdhK1Kcyfn371uLL2TeIgR4,1378
143
235
  requirements.txt,sha256=cQGj3IS6Kj88jbwj_jeKkokMnG-fEezWve91mfW4CJs,96
144
- utils/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
145
- utils/file_cache.py,sha256=eOBkfrumWg0EU1EfLESnRN1kcidi_MocxV_EWP8lEhQ,5207
236
+ utils/__init__.py,sha256=QTPe5H6T5qiqVRlhI7UJzIJrnerHvsGN38xEa-8V5is,1369
237
+ utils/builtin_proto.py,sha256=PiRdcJGKr02d8NbbedS14mjl6khtTbUzmlpso4q-NHA,9339
238
+ utils/file_cache.py,sha256=m6-fAQsSBVn8-BodjPsmA2C_OqWjnt6mjUyGhT1pFno,5433
146
239
  utils/file_utils.py,sha256=N1Ei7hmyeOkIyZJFEXyNbtTrfeVF2hP-U8evXAVW2MA,4085
147
240
  utils/logger.py,sha256=473DfzFVXzdGpiRTJGY6bBd-V5G80_P07gQqcvDChpQ,2447
148
- utils/type_index.py,sha256=So8FYyGtR0ff-ZhVHjXUdhXiXQEujlcCEJlj7OPQMsg,12128
149
- utils/type_utils.py,sha256=M3eB7GavxQYAVFOf3E1pO1vK9VD6_lKrutnSH1tx_Gs,14695
150
- reproto-0.1.1.dist-info/METADATA,sha256=pIVlOz9VFGwSkENYwX2B2VdzHHvhkxotl1SL9iI1Rpw,9433
151
- reproto-0.1.1.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
152
- reproto-0.1.1.dist-info/entry_points.txt,sha256=6Oro9lK_2DXDgHiB3andNuIE78wxfooqacqp8yY1C-g,37
153
- reproto-0.1.1.dist-info/RECORD,,
241
+ utils/report_utils.py,sha256=ftXU27nscrKUPMVWRnjLwckrt4NVBkKAc4zGmgNHwbc,2873
242
+ utils/type_index.py,sha256=ni9hhR321unTQ9kfgsTum59VEh9nJMlUG0ca3V4rSHk,12354
243
+ utils/type_utils.py,sha256=H32JSIvq1TmZkAZZesEs4VQVc1VXQuJlSLTINTBVkK4,15947
244
+ reproto-0.1.3.dist-info/METADATA,sha256=ph3duIhum8nQPtVURrh9SSx8sA0WuET5qi1Zl3pGplg,6348
245
+ reproto-0.1.3.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
246
+ reproto-0.1.3.dist-info/entry_points.txt,sha256=6Oro9lK_2DXDgHiB3andNuIE78wxfooqacqp8yY1C-g,37
247
+ reproto-0.1.3.dist-info/RECORD,,
utils/__init__.py CHANGED
@@ -1,3 +1,43 @@
1
+ """
2
+ 工具模块
3
+
4
+ 包含各种辅助工具和实用程序:
5
+ - 日志系统:统一的日志管理
6
+ - 文件缓存:优化文件I/O性能
7
+ - 类型工具:类型转换和命名规范处理
8
+ - 内置Proto:Google Protobuf标准类型支持
9
+ - 报告工具:重构结果统计和展示
10
+ """
11
+
12
+ # 智能导入:同时支持相对导入(包环境)和绝对导入(开发环境)
13
+ try:
14
+ # 相对导入(包环境)
15
+ from .logger import setup_logger, get_logger
16
+ from .file_cache import get_file_cache
17
+ from .type_utils import type_mapper, naming_converter, field_name_processor
18
+ from .builtin_proto import get_builtin_manager
19
+ from .type_index import get_type_index
20
+ from .report_utils import print_results_summary
21
+ except ImportError:
22
+ # 绝对导入(开发环境)
23
+ from utils.logger import setup_logger, get_logger
24
+ from utils.file_cache import get_file_cache
25
+ from utils.type_utils import type_mapper, naming_converter, field_name_processor
26
+ from utils.builtin_proto import get_builtin_manager
27
+ from utils.type_index import get_type_index
28
+ from utils.report_utils import print_results_summary
29
+
30
+ __all__ = [
31
+ 'setup_logger',
32
+ 'get_logger',
33
+ 'get_file_cache',
34
+ 'type_mapper',
35
+ 'naming_converter',
36
+ 'field_name_processor',
37
+ 'get_builtin_manager',
38
+ 'get_type_index',
39
+ 'print_results_summary'
40
+ ]
1
41
 
2
42
 
3
43