micrOSDevToolKit 2.17.0__py3-none-any.whl → 2.17.1__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.

Potentially problematic release.


This version of micrOSDevToolKit might be problematic. Click here for more details.

@@ -9,7 +9,7 @@
9
9
  10
10
10
  ],
11
11
  "micrOSloader.py": [
12
- 7.12,
12
+ 7.06,
13
13
  1
14
14
  ],
15
15
  "Hooks.py": [
@@ -213,7 +213,7 @@
213
213
  0
214
214
  ],
215
215
  "modules/LM_esp32.py": [
216
- 6.52,
216
+ 6.79,
217
217
  0
218
218
  ],
219
219
  "modules/LM_veml7700.py": [
@@ -241,7 +241,7 @@
241
241
  0
242
242
  ],
243
243
  "modules/LM_cluster.py": [
244
- 8.87,
244
+ 8.82,
245
245
  0
246
246
  ],
247
247
  "modules/LM_oledui.py": [
@@ -323,11 +323,11 @@
323
323
  },
324
324
  "summary": {
325
325
  "core": [
326
- 3923,
326
+ 3925,
327
327
  24
328
328
  ],
329
329
  "load": [
330
- 9871,
330
+ 9880,
331
331
  56
332
332
  ],
333
333
  "core_dep": [
@@ -339,7 +339,7 @@
339
339
  4
340
340
  ],
341
341
  "core_score": 9.24,
342
- "load_score": 8.35,
343
- "version": "2.17.0-0"
342
+ "load_score": 8.36,
343
+ "version": "2.17.1-0"
344
344
  }
345
345
  }
micrOS/source/Shell.py CHANGED
@@ -25,7 +25,7 @@ from Debug import syslog
25
25
 
26
26
  class Shell:
27
27
  __slots__ = ['__devfid', '__auth_mode', '__hwuid', '__auth_ok', '__conf_mode']
28
- MICROS_VERSION = '2.17.0-0'
28
+ MICROS_VERSION = '2.17.1-0'
29
29
 
30
30
  def __init__(self):
31
31
  """
micrOS/source/Web.py CHANGED
@@ -41,7 +41,7 @@ class WebEngine:
41
41
  "png": "image/png",
42
42
  "gif": "image/gif"}
43
43
  METHODS = ("GET", "POST")
44
- UI_RAM_REQ = 50 # in kilobytes
44
+ MEM_LIMITED = (None, 0)
45
45
 
46
46
  def __init__(self, client, version):
47
47
  self.client = client
@@ -62,11 +62,11 @@ class WebEngine:
62
62
  @staticmethod
63
63
  def is_mem_limited() -> (bool, int):
64
64
  """Check if memory is limited for the FE"""
65
- collect()
66
- mfree = int(mem_free() * 0.001)
67
- if mfree < WebEngine.UI_RAM_REQ:
68
- return True, mfree
69
- return False, mfree
65
+ if WebEngine.MEM_LIMITED[0] is None:
66
+ collect()
67
+ mfree = int(mem_free() * 0.001)
68
+ WebEngine.MEM_LIMITED = (mfree < 50, mfree) # 50 kb memory requirement
69
+ return WebEngine.MEM_LIMITED
70
70
 
71
71
  async def response(self, request:str) -> bool:
72
72
  """HTTP GET/POST REQUEST - WEB INTERFACE"""
@@ -55,6 +55,8 @@ def _is_micrOS():
55
55
 
56
56
  def __recovery_mode():
57
57
  # Recovery/Update mode (webrepl) - dependencies: Network, ConfigHandler
58
+ from sys import path
59
+ path.insert(0, "/modules")
58
60
  from Network import auto_nw_config
59
61
  from Config import cfgget
60
62
  pwd = cfgget('appwd') # Get pwd from config
@@ -36,7 +36,7 @@ async def _reboot(tag:str):
36
36
  (Enable function return before restart...)
37
37
  """
38
38
  with micro_task(tag) as my_task:
39
- await my_task.feed(3000)
39
+ await my_task.feed(5000)
40
40
  soft_reset()
41
41
 
42
42
 
@@ -93,30 +93,32 @@ async def _align_channel(tag:str, sta:STA_IF, ap:AP_IF):
93
93
  with micro_task(tag) as my_task:
94
94
  while True:
95
95
  my_task.out = "Sync in progress..."
96
- _channel = Cluster.CHANNEL
96
+ ch = Cluster.CHANNEL
97
97
  _refresh_ms = Cluster.REFRESH_MS
98
98
  for s, b, c, *_ in sta.scan():
99
99
  sta_name = (s.decode() if isinstance(s, bytes) else s)
100
100
  if sta_name.endswith(Cluster.ANCHOR_SSID_POSTFIX):
101
101
  my_task.out = f"Anchor {sta_name} channel: {c} (refresh: {int(_refresh_ms/60_000)}min)"
102
- _channel = c
102
+ ch = c
103
+ break
103
104
 
104
- if not _initialized or _channel != Cluster.CHANNEL:
105
- Cluster.CHANNEL = _channel
105
+ if not _initialized or ch != Cluster.CHANNEL:
106
+ Cluster.CHANNEL = ch
106
107
  if not sta.isconnected():
107
108
  # ENABLE ESPNOW STA MAC ACCESS - AFTER THIS ALL DEVICES CAN REACH EACH OTHER ON STA MAC ADDRESS
108
- try: sta.config(channel=_channel)
109
+ try: sta.config(channel=ch)
109
110
  except Exception as e:
110
- my_task.out = f"STA Failed to set {_channel} channel: {e}"
111
+ my_task.out = f"STA Failed to set {ch} channel: {e}"
111
112
  # ensure AP advertises/operates on the same channel (important when STA not connected yet)
112
- try: ap.config(channel=_channel)
113
+ try: ap.config(channel=ch)
113
114
  except Exception as e:
114
- my_task.out = f"AP Failed to set {_channel} channel: {e}"
115
+ my_task.out = f"AP Failed to set {ch} channel: {e}"
115
116
  _initialized = True
116
117
  await my_task.feed(_refresh_ms)
117
118
 
118
119
 
119
- def __configure_cluster_network(anchor=False):
120
+ @micro_task("cluster", _wrap=True)
121
+ async def _network(tag:str, anchor=False):
120
122
  """
121
123
  Support hybrid AP/STA ESPNow communication
122
124
  For ESPNow communication all device should use the same Wifi channel!
@@ -140,23 +142,25 @@ def __configure_cluster_network(anchor=False):
140
142
  if not sta.active(): sta.active(True)
141
143
  return sta
142
144
 
143
- # CONFIGURE WIFI CHANNEL SYNC ROLES
144
- micros_nw = ifconfig()[0]
145
- # MICROS in STA MODE
146
- if micros_nw == "STA":
147
- if anchor:
148
- # CREATE CHANNEL ANCHOR - AP channel is inherited from STA
149
- Cluster.ANCHOR_ENABLED = _conf_ap_anchor()
150
- else:
151
- # MICROS in AP MODE: CLUSTER FOLLOWER - WIFI CHANNEL SYNC WITH ANCHOR
152
- ap, sta = WLAN(AP_IF), _enable_sta()
153
- _align_channel(sta, ap)
154
- if anchor:
155
- # MICROS in AP MODE - RECONFIGURE AP NAME to match Anchor
156
- # EXPERIMENTAL FEATURE: Scans and Advertise the channel as well.
157
- Cluster.ANCHOR_ENABLED = _conf_ap_anchor()
158
- return status()
159
-
145
+ with micro_task(tag) as my_task:
146
+ # CONFIGURE WIFI CHANNEL SYNC ROLES
147
+ my_task.out = "Configure cluster network"
148
+ micros_nw = ifconfig()[0]
149
+ # MICROS in STA MODE
150
+ if micros_nw == "STA":
151
+ if anchor:
152
+ # CREATE CHANNEL ANCHOR - AP channel is inherited from STA
153
+ Cluster.ANCHOR_ENABLED = _conf_ap_anchor()
154
+ else:
155
+ # MICROS in AP MODE: CLUSTER FOLLOWER - WIFI CHANNEL SYNC WITH ANCHOR
156
+ ap, sta = WLAN(AP_IF), _enable_sta()
157
+ # Sync Channel with Cluster Anchor
158
+ _align_channel(sta, ap)
159
+ if anchor:
160
+ # MICROS in AP MODE - RECONFIGURE AP NAME to match Anchor
161
+ # EXPERIMENTAL FEATURE: Scans and Advertise the channel as well.
162
+ Cluster.ANCHOR_ENABLED = _conf_ap_anchor()
163
+ my_task.out = status()
160
164
 
161
165
  #########################################################
162
166
  # CLUSTER WIDE FEATURES #
@@ -232,8 +236,9 @@ def load(anchor:bool=False, refresh:int=None):
232
236
  return "ESPNow is disabled"
233
237
  if refresh is not None:
234
238
  Cluster.REFRESH_MS = 60_000 if refresh < 1 else refresh * 60_000
235
- out = __configure_cluster_network(anchor)
236
- return f"Enable cluster module access\n{out}"
239
+ # Configure cluster network - after micrOS network setup
240
+ _network(anchor)
241
+ return f"Enable cluster module access"
237
242
 
238
243
 
239
244
  def help(widgets=True):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: micrOSDevToolKit
3
- Version: 2.17.0
3
+ Version: 2.17.1
4
4
  Summary: Development and deployment environment for micrOS, the diy micropython automation OS (IoT)
5
5
  Home-page: https://github.com/BxNxM/micrOS
6
6
  Author: Marcell Ban
@@ -33,7 +33,7 @@ micrOS/micropython/esp32s3_spiram_oct-20231005-v1.21.0.bin,sha256=S-sv_QeL_Tylg1
33
33
  micrOS/micropython/esp32s3_spiram_oct-20241129-v1.24.1.bin,sha256=VbOF_F0YeqttkQd2ePTW66Jd34RU8u9ccFfcv8kxO_U,1662672
34
34
  micrOS/micropython/rpi-pico-w-20241129-v1.24.1.uf2,sha256=v4aYIbWaE94_f6DDzBWS-a9L1BzlcdkZwld9R7bOVA4,1727488
35
35
  micrOS/micropython/tinypico-20241129-v1.24.1.bin,sha256=Kf3cr766a5SK99CZy8bwdWjwvAZxls3tBYvaHBsw7ac,1527200
36
- micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json,sha256=vWGw8wCL8KD0Uz8EqpXtLGndDB5ClF2c9ULZf_9Cmuk,6338
36
+ micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json,sha256=C7NUIDrkLDo7FXoG7zQQyZAyIyn6f0eUqPDEWJW1qnU,6338
37
37
  micrOS/source/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
38
38
  micrOS/source/Common.py,sha256=uvfLeei3Koi3MWraIk1LU4ArO7C5krcHm9mSN3tOTDM,16793
39
39
  micrOS/source/Config.py,sha256=094MYe1UUbRy5qRiC-HBR9GvVOXY7-2fqF9UvEtfIGo,9187
@@ -48,14 +48,14 @@ micrOS/source/Network.py,sha256=bFG_OE1baHQFJgpcNC_KAKTGPQlgN7pisV07CI30k1g,1016
48
48
  micrOS/source/Notify.py,sha256=5_Sqy2FeBVG6HznC48Rgg812AglGjO8pkDYGSpp5qSg,2637
49
49
  micrOS/source/Scheduler.py,sha256=EhOdDQqN4V1G0TD2jU5cmjUjY_g-sU8NwFoUfniBKF0,9628
50
50
  micrOS/source/Server.py,sha256=gNT3pcNsw8NVwldEe3c6uXlyMdawNS6F1bKUoy-OpLQ,16862
51
- micrOS/source/Shell.py,sha256=JDeb0JMA8s7QSlaue70kPAywGVS-OC6jkdhGDVXAYyQ,13309
51
+ micrOS/source/Shell.py,sha256=bGsDJ2teXwxUGnFgL5-5BiqvvUlurRU4coINHNc1hxs,13309
52
52
  micrOS/source/Tasks.py,sha256=9ITabnBkiI9W6g_wechD0fdRZvynTFyaFzUk3qNnmM4,23996
53
53
  micrOS/source/Time.py,sha256=8EHp86CAkbGIErGgN-VGAsslUBFIooRGkHB1hUYwwOE,6408
54
54
  micrOS/source/Types.py,sha256=Ft_gHokGNa9aQRGSwE3NYIvYZuolT3zfkD5JzhycQ1s,3499
55
- micrOS/source/Web.py,sha256=2wWj8Tfjq8GiNqSQ4gmSfxtVTMIfOrDCIhQHY3IKH-c,10997
55
+ micrOS/source/Web.py,sha256=EeZzKcZMTDVls5Qu-kT8dnX2Mt8L6M4eLiCBhDBJa40,11059
56
56
  micrOS/source/main.py,sha256=cVlhoWwU9dSKEol0HWPihFAPzrUUvzSGwZNNMrpyfSY,440
57
57
  micrOS/source/micrOS.py,sha256=QM1lgUnv2qrklj5-qgU6MM_6YsTKq4VGk71Od3Dzx1M,2872
58
- micrOS/source/micrOSloader.py,sha256=jefxV3yxmk8-UFeVADHZ9t_ezC2F_4bqMljRfv6tb4I,4571
58
+ micrOS/source/micrOSloader.py,sha256=wFS1i90q5po-fKpnEpwL_O4KQV9QujgwAR1QvXpjNvA,4627
59
59
  micrOS/source/microIO.py,sha256=h7i78Rl_DKG5vwpCgk1dsY-Z9ikvmOQLMiusYP_yRMI,7096
60
60
  micrOS/source/reset.py,sha256=i7wsPkOXE7Mm0xOiw1CjqCvCdNjBvYswn9CRDvE2VbE,248
61
61
  micrOS/source/urequests.py,sha256=SrzOgo8UF9YncjfeItM9-xqUr5xEoUt1kOcPxisn6uw,9456
@@ -83,7 +83,7 @@ micrOS/source/modules/LM_aht10.py,sha256=aC6-cvfG6OWoBinYD47mYGg7eIY8BfJxg6yMENr
83
83
  micrOS/source/modules/LM_bme280.py,sha256=4v7HtJ3HgbLwpRe-OwKR-D2nTM_PBDyFR8SHInig3Is,12708
84
84
  micrOS/source/modules/LM_buzzer.py,sha256=S8pwUZI8OidoATQPVmdvrSiJjPycDYp0gJiMxey7WCQ,12432
85
85
  micrOS/source/modules/LM_cct.py,sha256=D6lGBO4YAU44rt_ymm0rlkbqSH4agaacZXz7Om22Bmk,14207
86
- micrOS/source/modules/LM_cluster.py,sha256=39Aw_bWGb7yoLMBMQh1-uom-7SxWgRh_v-a0JgMGiAU,8695
86
+ micrOS/source/modules/LM_cluster.py,sha256=iI-l6TJP4ejOY8tlE3OgjP82AL7dPNmn2fnaq4CRIdo,8937
87
87
  micrOS/source/modules/LM_co2.py,sha256=Eopq9eEPV9W2x5mx5EJGllg09_HFTYiI1hZE2T_PWTY,5460
88
88
  micrOS/source/modules/LM_dashboard_be.py,sha256=KVaJH37TCJkEwZJdGAVKpJtZXyVqYKDupyJO5BXvI0c,966
89
89
  micrOS/source/modules/LM_dht11.py,sha256=pmmtpxnYHApo63WvQXHlgx_z3A86dMSi1Stb9pSRpYY,2010
@@ -139,8 +139,8 @@ micrOS/source/web/udashboard.js,sha256=42mPR_NU3jOqUgLi7yZv2L7bN6uGqw9LpScDrGGF5
139
139
  micrOS/source/web/ustyle.css,sha256=P-s8ENwAcWoZi5bocrK3_kVzEjaRFKtFvEF6JRh4MBY,1429
140
140
  micrOS/source/web/uwidgets.js,sha256=BGeUSbNHn6PClgIgIE6QszwQVJ6j7lzgCBwvIX8cYgo,6631
141
141
  micrOS/source/web/uwidgets_pro.js,sha256=gbkk3SVttEVvDCwde-pJhAh4k7GuCFPdcWNq32pcKPE,3639
142
- microsdevtoolkit-2.17.0.data/scripts/devToolKit.py,sha256=4GutIOErF1ny0HSNWQZzEneZdUWhSdqKPBjpRFTr5do,11192
143
- microsdevtoolkit-2.17.0.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
142
+ microsdevtoolkit-2.17.1.data/scripts/devToolKit.py,sha256=4GutIOErF1ny0HSNWQZzEneZdUWhSdqKPBjpRFTr5do,11192
143
+ microsdevtoolkit-2.17.1.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
144
144
  toolkit/DevEnvCompile.py,sha256=wNBf0T7w07SYC3eLFow3JtZApHQK-92Fu7CvJHqWuSM,13189
145
145
  toolkit/DevEnvOTA.py,sha256=8IfAcvV0L_H91FAiZDRBmC06cWOXXCpoSDO-JWE6CG4,26889
146
146
  toolkit/DevEnvUSB.py,sha256=WsVKtVePRG3JJz0rooNWtnV-wMjEva1EiI9S8vSq210,37013
@@ -305,15 +305,15 @@ toolkit/workspace/precompiled/Network.mpy,sha256=foBjsIZ1SafRplCw8v5GgDU_WjPTaRz
305
305
  toolkit/workspace/precompiled/Notify.mpy,sha256=i8LNNynvNxi-tA5QT0pQJ8NJ_DNxJNW4NTZRD6gGS7M,970
306
306
  toolkit/workspace/precompiled/Scheduler.mpy,sha256=S-ZS1N420Xew74F_90O4FvFvrvmRTMiCh-C8szrdhfI,2198
307
307
  toolkit/workspace/precompiled/Server.mpy,sha256=Q6kIxjxhbkJ1nvxiPQD_6KvQYNfOhM3NTWbLMAIZaWA,4896
308
- toolkit/workspace/precompiled/Shell.mpy,sha256=jNoIReiaZJjZHre1uEs778qc2NKK1OMaLEtZBK0799g,4821
308
+ toolkit/workspace/precompiled/Shell.mpy,sha256=OHOR-0z3OB4eQaVnF6QoUTxzWLZDmKG2eLdkTAdb_cQ,4821
309
309
  toolkit/workspace/precompiled/Tasks.mpy,sha256=1iBQXjiJm-s8OfqL2hAehhG_EqSfmubVRAgrJw_rNhc,6660
310
310
  toolkit/workspace/precompiled/Time.mpy,sha256=3thC6iKW4UJdjNP-Jo1Ol0Zn-e4oy2H1wiIz7SH182E,2865
311
311
  toolkit/workspace/precompiled/Types.mpy,sha256=5QGhswa0jWAU1Ywpyl_92miQg4qDHReXLqq3iHBwUCs,1397
312
- toolkit/workspace/precompiled/Web.mpy,sha256=1htc810w1K2HYcMYdTnfextffueRyKTZUZZGvhk06RY,4015
312
+ toolkit/workspace/precompiled/Web.mpy,sha256=X3-nqKYY_RSLsAspTFY_O7H5vkUR0OwECFbSyxqSUUc,4030
313
313
  toolkit/workspace/precompiled/_mpy.version,sha256=Kik-fvRGfWAmpEjKdJLq7nPOqYR_jVgB0aiXZ8LMvMA,6
314
314
  toolkit/workspace/precompiled/main.py,sha256=cVlhoWwU9dSKEol0HWPihFAPzrUUvzSGwZNNMrpyfSY,440
315
315
  toolkit/workspace/precompiled/micrOS.mpy,sha256=zNzWg5S_-sHW_kxX9FOPlMboGMCNe_kzc1WWdN1_PEg,1208
316
- toolkit/workspace/precompiled/micrOSloader.mpy,sha256=_bEuY-6W0D5ogEWjPGifXE0qYuD75WdNEPvUNdOpAdY,1538
316
+ toolkit/workspace/precompiled/micrOSloader.mpy,sha256=jnrYRrHlo7YnBS2BTbF6-7lMJzyD3XoxhHLYel5ngd8,1578
317
317
  toolkit/workspace/precompiled/microIO.mpy,sha256=pyfx0fA6VPniMKvmOID9Uzkq0loakhntT59hbtinsH4,1722
318
318
  toolkit/workspace/precompiled/reset.mpy,sha256=D-ZwUk-oR8OAg5ERWJXErdPAGbx_3M13hK4IBawhIg0,217
319
319
  toolkit/workspace/precompiled/urequests.mpy,sha256=tG4ttpfHPkyNk5vvbXDHKZm8zYPNEw1NYE0Ltnrjca8,2516
@@ -336,7 +336,7 @@ toolkit/workspace/precompiled/modules/LM_aht10.mpy,sha256=ju5Xs_Krt212I6h2CSo7gl
336
336
  toolkit/workspace/precompiled/modules/LM_bme280.mpy,sha256=qDxvzKhQkPaKpgXB2KZZ3D8F9nTlDiVDISof7NXxXtQ,4438
337
337
  toolkit/workspace/precompiled/modules/LM_buzzer.mpy,sha256=m5jzlBr9r6bRAix-F4ebc_neubx48uThRxk173P75sY,5990
338
338
  toolkit/workspace/precompiled/modules/LM_cct.mpy,sha256=VuGs1sTDwcYq0G62xSd8UbcnXqIVxydnmV1GQrUgskc,3907
339
- toolkit/workspace/precompiled/modules/LM_cluster.mpy,sha256=qB-R2DjGerrev5cNJ8ZFSuAiYKzodtpP1OIfaxACnF8,2971
339
+ toolkit/workspace/precompiled/modules/LM_cluster.mpy,sha256=GjZHkj6Y-XKBAnQRkEIPmKb_xEox9j738_531E8z1og,3020
340
340
  toolkit/workspace/precompiled/modules/LM_co2.mpy,sha256=ma_cjCG8LoBMq_dt74PsrL-sn6U61a58pl_JgyxXdDM,1487
341
341
  toolkit/workspace/precompiled/modules/LM_dashboard_be.py,sha256=KVaJH37TCJkEwZJdGAVKpJtZXyVqYKDupyJO5BXvI0c,966
342
342
  toolkit/workspace/precompiled/modules/LM_dht11.mpy,sha256=esQhbgiMGiGChsTUAn1VbG9K6JHU3tQAxRKKfVMloEQ,745
@@ -392,7 +392,7 @@ toolkit/workspace/precompiled/web/udashboard.js,sha256=42mPR_NU3jOqUgLi7yZv2L7bN
392
392
  toolkit/workspace/precompiled/web/ustyle.css,sha256=P-s8ENwAcWoZi5bocrK3_kVzEjaRFKtFvEF6JRh4MBY,1429
393
393
  toolkit/workspace/precompiled/web/uwidgets.js,sha256=BGeUSbNHn6PClgIgIE6QszwQVJ6j7lzgCBwvIX8cYgo,6631
394
394
  toolkit/workspace/precompiled/web/uwidgets_pro.js,sha256=gbkk3SVttEVvDCwde-pJhAh4k7GuCFPdcWNq32pcKPE,3639
395
- microsdevtoolkit-2.17.0.dist-info/METADATA,sha256=cK46J4Jpr8LhuXxRprdj2PbkpwY30vl21nxI6KF61EQ,55554
396
- microsdevtoolkit-2.17.0.dist-info/WHEEL,sha256=SmOxYU7pzNKBqASvQJ7DjX3XGUF92lrGhMb3R6_iiqI,91
397
- microsdevtoolkit-2.17.0.dist-info/top_level.txt,sha256=rOGOIXqLBdGZAoDTiLdZ9B_leFB7bMv7YabLwuIc2bc,25
398
- microsdevtoolkit-2.17.0.dist-info/RECORD,,
395
+ microsdevtoolkit-2.17.1.dist-info/METADATA,sha256=3u5qBpL3EpfQAP1TaLziNBhQE2jrbLFUoaHpFS-E4jo,55554
396
+ microsdevtoolkit-2.17.1.dist-info/WHEEL,sha256=SmOxYU7pzNKBqASvQJ7DjX3XGUF92lrGhMb3R6_iiqI,91
397
+ microsdevtoolkit-2.17.1.dist-info/top_level.txt,sha256=rOGOIXqLBdGZAoDTiLdZ9B_leFB7bMv7YabLwuIc2bc,25
398
+ microsdevtoolkit-2.17.1.dist-info/RECORD,,
Binary file
Binary file