ragger 1.40.1__py3-none-any.whl → 1.40.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.
ragger/__version__.py CHANGED
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '1.40.1'
32
- __version_tuple__ = version_tuple = (1, 40, 1)
31
+ __version__ = version = '1.40.3'
32
+ __version_tuple__ = version_tuple = (1, 40, 3)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -125,7 +125,7 @@ POSITIONS = {
125
125
  # indexes for left to right, from up to down
126
126
  1: Position(100, 280),
127
127
  2: Position(290, 280),
128
- 3: Position(110, 350),
128
+ 3: Position(100, 350),
129
129
  4: Position(290, 350),
130
130
  },
131
131
  DeviceType.FLEX: {
@@ -134,6 +134,16 @@ POSITIONS = {
134
134
  1: Position(140, 300),
135
135
  2: Position(350, 300),
136
136
  },
137
+ DeviceType.APEX_P: {
138
+ # On Apex, suggestions are on a single line
139
+ 1: Position(80, 190),
140
+ 2: Position(220, 300),
141
+ },
142
+ DeviceType.APEX_M: {
143
+ # On Apex, suggestions are on a single line
144
+ 1: Position(80, 190),
145
+ 2: Position(220, 300),
146
+ },
137
147
  },
138
148
  "LetterOnlyKeyboard": {
139
149
  DeviceType.STAX: {
@@ -199,7 +209,71 @@ POSITIONS = {
199
209
  "n": Position(264, 565),
200
210
  "m": Position(312, 565),
201
211
  "back": Position(400, 565),
202
- }
212
+ },
213
+ DeviceType.APEX_P: {
214
+ # first line
215
+ "q": Position(15, 270),
216
+ "w": Position(45, 270),
217
+ "e": Position(75, 270),
218
+ "r": Position(105, 270),
219
+ "t": Position(135, 270),
220
+ "y": Position(165, 270),
221
+ "u": Position(195, 270),
222
+ "i": Position(225, 270),
223
+ "o": Position(255, 270),
224
+ "p": Position(285, 270),
225
+ # second line
226
+ "a": Position(30, 320),
227
+ "s": Position(60, 320),
228
+ "d": Position(90, 320),
229
+ "f": Position(120, 320),
230
+ "g": Position(150, 320),
231
+ "h": Position(180, 320),
232
+ "j": Position(210, 320),
233
+ "k": Position(240, 320),
234
+ "l": Position(270, 320),
235
+ # third and last line
236
+ "z": Position(15, 370),
237
+ "x": Position(45, 370),
238
+ "c": Position(75, 370),
239
+ "v": Position(105, 370),
240
+ "b": Position(135, 370),
241
+ "n": Position(165, 370),
242
+ "m": Position(195, 370),
243
+ "back": Position(255, 370),
244
+ },
245
+ DeviceType.APEX_M: {
246
+ # first line
247
+ "q": Position(15, 270),
248
+ "w": Position(45, 270),
249
+ "e": Position(75, 270),
250
+ "r": Position(105, 270),
251
+ "t": Position(135, 270),
252
+ "y": Position(165, 270),
253
+ "u": Position(195, 270),
254
+ "i": Position(225, 270),
255
+ "o": Position(255, 270),
256
+ "p": Position(285, 270),
257
+ # second line
258
+ "a": Position(30, 320),
259
+ "s": Position(60, 320),
260
+ "d": Position(90, 320),
261
+ "f": Position(120, 320),
262
+ "g": Position(150, 320),
263
+ "h": Position(180, 320),
264
+ "j": Position(210, 320),
265
+ "k": Position(240, 320),
266
+ "l": Position(270, 320),
267
+ # third and last line
268
+ "z": Position(15, 370),
269
+ "x": Position(45, 370),
270
+ "c": Position(75, 370),
271
+ "v": Position(105, 370),
272
+ "b": Position(135, 370),
273
+ "n": Position(165, 370),
274
+ "m": Position(195, 370),
275
+ "back": Position(255, 370),
276
+ },
203
277
  },
204
278
  "FullKeyboardLetters": {
205
279
  DeviceType.STAX: {
@@ -273,7 +347,79 @@ POSITIONS = {
273
347
  # fourth and last line
274
348
  "change_layout": Position(72, 560),
275
349
  " ": Position(312, 560),
276
- }
350
+ },
351
+ DeviceType.APEX_P: {
352
+ # first line
353
+ "q": Position(15, 225),
354
+ "w": Position(45, 225),
355
+ "e": Position(75, 225),
356
+ "r": Position(105, 225),
357
+ "t": Position(135, 225),
358
+ "y": Position(165, 225),
359
+ "u": Position(195, 225),
360
+ "i": Position(225, 225),
361
+ "o": Position(255, 225),
362
+ "p": Position(285, 225),
363
+ # second line
364
+ "a": Position(30, 270),
365
+ "s": Position(60, 270),
366
+ "d": Position(90, 270),
367
+ "f": Position(120, 270),
368
+ "g": Position(150, 270),
369
+ "h": Position(180, 270),
370
+ "j": Position(210, 270),
371
+ "k": Position(240, 270),
372
+ "l": Position(270, 270),
373
+ # third and last line
374
+ "z": Position(60, 325),
375
+ "x": Position(90, 325),
376
+ "c": Position(120, 325),
377
+ "v": Position(150, 325),
378
+ "b": Position(180, 325),
379
+ "n": Position(210, 325),
380
+ "m": Position(240, 325),
381
+ "change_case": Position(20, 325),
382
+ "back": Position(280, 325),
383
+ # fourth and last line
384
+ "change_layout": Position(5, 370),
385
+ " ": Position(190, 370),
386
+ },
387
+ DeviceType.APEX_M: {
388
+ # first line
389
+ "q": Position(15, 225),
390
+ "w": Position(45, 225),
391
+ "e": Position(75, 225),
392
+ "r": Position(105, 225),
393
+ "t": Position(135, 225),
394
+ "y": Position(165, 225),
395
+ "u": Position(195, 225),
396
+ "i": Position(225, 225),
397
+ "o": Position(255, 225),
398
+ "p": Position(285, 225),
399
+ # second line
400
+ "a": Position(30, 270),
401
+ "s": Position(60, 270),
402
+ "d": Position(90, 270),
403
+ "f": Position(120, 270),
404
+ "g": Position(150, 270),
405
+ "h": Position(180, 270),
406
+ "j": Position(210, 270),
407
+ "k": Position(240, 270),
408
+ "l": Position(270, 270),
409
+ # third and last line
410
+ "z": Position(60, 325),
411
+ "x": Position(90, 325),
412
+ "c": Position(120, 325),
413
+ "v": Position(150, 325),
414
+ "b": Position(180, 325),
415
+ "n": Position(210, 325),
416
+ "m": Position(240, 325),
417
+ "change_case": Position(20, 325),
418
+ "back": Position(280, 325),
419
+ # fourth and last line
420
+ "change_layout": Position(5, 370),
421
+ " ": Position(190, 370),
422
+ },
277
423
  },
278
424
  "FullKeyboardSpecialCharacters1": {
279
425
  DeviceType.STAX: {
@@ -343,7 +489,75 @@ POSITIONS = {
343
489
  # fourth and last line
344
490
  "change_layout": Position(72, 560),
345
491
  " ": Position(312, 560),
346
- }
492
+ },
493
+ DeviceType.APEX_P: {
494
+ # first line
495
+ "1": Position(15, 220),
496
+ "2": Position(45, 220),
497
+ "3": Position(75, 220),
498
+ "4": Position(105, 220),
499
+ "5": Position(135, 220),
500
+ "6": Position(165, 220),
501
+ "7": Position(195, 220),
502
+ "8": Position(225, 220),
503
+ "9": Position(255, 220),
504
+ "0": Position(285, 220),
505
+ # second line
506
+ "-": Position(30, 270),
507
+ "/": Position(60, 270),
508
+ ":": Position(90, 270),
509
+ ";": Position(120, 270),
510
+ "(": Position(150, 270),
511
+ ")": Position(180, 270),
512
+ "&": Position(210, 270),
513
+ "@": Position(240, 270),
514
+ "\"": Position(270, 270),
515
+ # third line
516
+ "more_specials": Position(35, 320),
517
+ ".": Position(90, 320),
518
+ ",": Position(120, 320),
519
+ "?": Position(150, 320),
520
+ "!": Position(180, 320),
521
+ "'": Position(210, 320),
522
+ "back": Position(265, 320),
523
+ # fourth and last line
524
+ "change_layout": Position(50, 370),
525
+ " ": Position(190, 370),
526
+ },
527
+ DeviceType.APEX_M: {
528
+ # first line
529
+ "1": Position(15, 220),
530
+ "2": Position(45, 220),
531
+ "3": Position(75, 220),
532
+ "4": Position(105, 220),
533
+ "5": Position(135, 220),
534
+ "6": Position(165, 220),
535
+ "7": Position(195, 220),
536
+ "8": Position(225, 220),
537
+ "9": Position(255, 220),
538
+ "0": Position(285, 220),
539
+ # second line
540
+ "-": Position(30, 270),
541
+ "/": Position(60, 270),
542
+ ":": Position(90, 270),
543
+ ";": Position(120, 270),
544
+ "(": Position(150, 270),
545
+ ")": Position(180, 270),
546
+ "&": Position(210, 270),
547
+ "@": Position(240, 270),
548
+ "\"": Position(270, 270),
549
+ # third line
550
+ "more_specials": Position(35, 320),
551
+ ".": Position(90, 320),
552
+ ",": Position(120, 320),
553
+ "?": Position(150, 320),
554
+ "!": Position(180, 320),
555
+ "'": Position(210, 320),
556
+ "back": Position(265, 320),
557
+ # fourth and last line
558
+ "change_layout": Position(50, 370),
559
+ " ": Position(190, 370),
560
+ },
347
561
  },
348
562
  "FullKeyboardSpecialCharacters2": {
349
563
  DeviceType.STAX: {
@@ -413,7 +627,75 @@ POSITIONS = {
413
627
  # fourth and last line
414
628
  "change_layout": Position(72, 560),
415
629
  " ": Position(312, 560),
416
- }
630
+ },
631
+ DeviceType.APEX_P: {
632
+ # first line
633
+ "[": Position(15, 220),
634
+ "]": Position(45, 220),
635
+ "{": Position(75, 220),
636
+ "}": Position(105, 220),
637
+ "#": Position(135, 220),
638
+ "%": Position(165, 220),
639
+ "^": Position(195, 220),
640
+ "*": Position(225, 220),
641
+ "+": Position(255, 220),
642
+ "=": Position(285, 220),
643
+ # second line
644
+ "_": Position(30, 270),
645
+ "\\": Position(60, 270),
646
+ "|": Position(90, 270),
647
+ "~": Position(120, 270),
648
+ ">": Position(150, 270),
649
+ "<": Position(180, 270),
650
+ "$": Position(210, 270),
651
+ "`": Position(240, 270),
652
+ "\"": Position(270, 270),
653
+ # third line
654
+ "more_specials": Position(35, 320),
655
+ ".": Position(90, 320),
656
+ ",": Position(120, 320),
657
+ "?": Position(150, 320),
658
+ "!": Position(180, 320),
659
+ "'": Position(210, 320),
660
+ "back": Position(265, 320),
661
+ # fourth and last line
662
+ "change_layout": Position(50, 370),
663
+ " ": Position(190, 370),
664
+ },
665
+ DeviceType.APEX_M: {
666
+ # first line
667
+ "[": Position(15, 220),
668
+ "]": Position(45, 220),
669
+ "{": Position(75, 220),
670
+ "}": Position(105, 220),
671
+ "#": Position(135, 220),
672
+ "%": Position(165, 220),
673
+ "^": Position(195, 220),
674
+ "*": Position(225, 220),
675
+ "+": Position(255, 220),
676
+ "=": Position(285, 220),
677
+ # second line
678
+ "_": Position(30, 270),
679
+ "\\": Position(60, 270),
680
+ "|": Position(90, 270),
681
+ "~": Position(120, 270),
682
+ ">": Position(150, 270),
683
+ "<": Position(180, 270),
684
+ "$": Position(210, 270),
685
+ "`": Position(240, 270),
686
+ "\"": Position(270, 270),
687
+ # third line
688
+ "more_specials": Position(35, 320),
689
+ ".": Position(90, 320),
690
+ ",": Position(120, 320),
691
+ "?": Position(150, 320),
692
+ "!": Position(180, 320),
693
+ "'": Position(210, 320),
694
+ "back": Position(265, 320),
695
+ # fourth and last line
696
+ "change_layout": Position(50, 370),
697
+ " ": Position(190, 370),
698
+ },
417
699
  },
418
700
  "TappableCenter": {
419
701
  DeviceType.STAX: STAX_CENTER,
@@ -19,17 +19,22 @@ class NavigationScenarioData:
19
19
  dismiss_warning: Sequence[InstructionType]
20
20
  pattern: str = ""
21
21
 
22
- def __init__(self, device: Device, backend: BackendInterface, use_case: UseCase, approve: bool):
22
+ def __init__(self,
23
+ device: Device,
24
+ backend: BackendInterface,
25
+ use_case: UseCase,
26
+ approve: bool,
27
+ nb_warnings: int = 1):
23
28
  if device.is_nano:
24
29
  self.navigation = NavInsID.RIGHT_CLICK
25
30
  self.validation = [NavInsID.BOTH_CLICK]
26
31
 
27
32
  if backend.sdk_graphics == GraphicalLibrary.BAGL:
28
- self.dismiss_warning = [NavInsID.RIGHT_CLICK]
33
+ self.dismiss_warning = [NavInsID.RIGHT_CLICK] * nb_warnings
29
34
  # Legacy navigation scenario when running an App compiled with bagl sdk library
30
35
  self.pattern = r"^(Accept risk|Accept|Approve|Sign|Confirm)$" if approve else r"^(Cancel|Reject)$"
31
36
  else:
32
- self.dismiss_warning = [NavInsID.BOTH_CLICK]
37
+ self.dismiss_warning = [NavInsID.BOTH_CLICK] * nb_warnings
33
38
  # navigation scenario when running an App compiled with nbgl sdk library
34
39
  if use_case == UseCase.ADDRESS_CONFIRMATION:
35
40
  self.pattern = r"^(Accept risk|Accept|Approve|Sign|Confirm)$" if approve else r"^(Cancel|Reject)$"
@@ -54,7 +59,7 @@ class NavigationScenarioData:
54
59
 
55
60
  elif device.touchable:
56
61
  self.navigation = NavInsID.SWIPE_CENTER_TO_LEFT
57
- self.dismiss_warning = [NavInsID.USE_CASE_CHOICE_REJECT]
62
+ self.dismiss_warning = [NavInsID.USE_CASE_CHOICE_REJECT] * nb_warnings
58
63
 
59
64
  if use_case == UseCase.ADDRESS_CONFIRMATION:
60
65
  if approve:
@@ -133,10 +138,7 @@ class NavigateWithScenario:
133
138
  test_name: Optional[str] = None,
134
139
  custom_screen_text: Optional[str] = None,
135
140
  do_comparison: bool = True):
136
- scenario = NavigationScenarioData(self.device,
137
- self.backend,
138
- UseCase.TX_REVIEW,
139
- approve=True)
141
+ scenario = NavigationScenarioData(self.device, self.backend, UseCase.TX_REVIEW, True)
140
142
  self._navigate_with_scenario(scenario, path, test_name, custom_screen_text, do_comparison)
141
143
 
142
144
  def review_approve_with_warning(self,
@@ -144,11 +146,10 @@ class NavigateWithScenario:
144
146
  test_name: Optional[str] = None,
145
147
  custom_screen_text: Optional[str] = None,
146
148
  do_comparison: bool = True,
147
- warning_path: str = "warning"):
148
- scenario = NavigationScenarioData(self.device,
149
- self.backend,
150
- UseCase.TX_REVIEW,
151
- approve=True)
149
+ warning_path: str = "warning",
150
+ nb_warnings: int = 1):
151
+ scenario = NavigationScenarioData(self.device, self.backend, UseCase.TX_REVIEW, True,
152
+ nb_warnings)
152
153
  self._navigate_warning(scenario, test_name, do_comparison, warning_path)
153
154
  self._navigate_with_scenario(scenario, path, test_name, custom_screen_text, do_comparison)
154
155
 
@@ -157,10 +158,7 @@ class NavigateWithScenario:
157
158
  test_name: Optional[str] = None,
158
159
  custom_screen_text: Optional[str] = None,
159
160
  do_comparison: bool = True):
160
- scenario = NavigationScenarioData(self.device,
161
- self.backend,
162
- UseCase.TX_REVIEW,
163
- approve=False)
161
+ scenario = NavigationScenarioData(self.device, self.backend, UseCase.TX_REVIEW, False)
164
162
  self._navigate_with_scenario(scenario, path, test_name, custom_screen_text, do_comparison)
165
163
 
166
164
  def review_reject_with_warning(self,
@@ -168,11 +166,10 @@ class NavigateWithScenario:
168
166
  test_name: Optional[str] = None,
169
167
  custom_screen_text: Optional[str] = None,
170
168
  do_comparison: bool = True,
171
- warning_path: str = "warning"):
172
- scenario = NavigationScenarioData(self.device,
173
- self.backend,
174
- UseCase.TX_REVIEW,
175
- approve=False)
169
+ warning_path: str = "warning",
170
+ nb_warnings: int = 1):
171
+ scenario = NavigationScenarioData(self.device, self.backend, UseCase.TX_REVIEW, False,
172
+ nb_warnings)
176
173
  self._navigate_warning(scenario, test_name, do_comparison, warning_path)
177
174
  self._navigate_with_scenario(scenario, path, test_name, custom_screen_text, do_comparison)
178
175
 
@@ -181,10 +178,8 @@ class NavigateWithScenario:
181
178
  test_name: Optional[str] = None,
182
179
  custom_screen_text: Optional[str] = None,
183
180
  do_comparison: bool = True):
184
- scenario = NavigationScenarioData(self.device,
185
- self.backend,
186
- UseCase.ADDRESS_CONFIRMATION,
187
- approve=True)
181
+ scenario = NavigationScenarioData(self.device, self.backend, UseCase.ADDRESS_CONFIRMATION,
182
+ True)
188
183
  self._navigate_with_scenario(scenario, path, test_name, custom_screen_text, do_comparison)
189
184
 
190
185
  def address_review_reject(self,
@@ -192,8 +187,6 @@ class NavigateWithScenario:
192
187
  test_name: Optional[str] = None,
193
188
  custom_screen_text: Optional[str] = None,
194
189
  do_comparison: bool = True):
195
- scenario = NavigationScenarioData(self.device,
196
- self.backend,
197
- UseCase.ADDRESS_CONFIRMATION,
198
- approve=False)
190
+ scenario = NavigationScenarioData(self.device, self.backend, UseCase.ADDRESS_CONFIRMATION,
191
+ False)
199
192
  self._navigate_with_scenario(scenario, path, test_name, custom_screen_text, do_comparison)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ragger
3
- Version: 1.40.1
3
+ Version: 1.40.3
4
4
  Summary: Testing framework using Speculos and LedgerComm as backends
5
5
  Author-email: Ledger <hello@ledger.fr>
6
6
  Project-URL: Homepage, https://github.com/LedgerHQ/ragger
@@ -1,5 +1,5 @@
1
1
  ragger/__init__.py,sha256=Vbk78M7VtDVMTu02zYQquYSTxtgbieknkvr3uXONrig,713
2
- ragger/__version__.py,sha256=XulopT_VgT2mWr-TUuH1VMduLqKc7_3J0NxfyFwMu44,706
2
+ ragger/__version__.py,sha256=NM8z5Idkygww-PdAmCt9VmeNR_ut-W4tJNek-KVzqM8,706
3
3
  ragger/error.py,sha256=kd9yldPMis080jID6QjyDiCh7TDAVUtF5eczUH5pcKw,1251
4
4
  ragger/logger.py,sha256=XF3DsHDLGOHAG7cqVj_7BQlHKj9J8zw8A9soFHIydc8,2457
5
5
  ragger/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -21,7 +21,7 @@ ragger/firmware/structs.py,sha256=pkUzEkq-kiUntWK2mt1Vkalgoe-3tbvBcLfe12L-CNo,18
21
21
  ragger/firmware/touch/__init__.py,sha256=qI5Hff1FKY_5CpBQFIOHoN8AaL9IGMwmhbNjOer5X9c,672
22
22
  ragger/firmware/touch/element.py,sha256=9HmV0pbKGFrNp0nOTJmeyUV7dOLu2_ejeLltmtYPgRA,1337
23
23
  ragger/firmware/touch/layouts.py,sha256=XB1jLcJCy_PlnEr9QdSTXOF8hL9B3nRalpMMbalBu0w,2646
24
- ragger/firmware/touch/positions.py,sha256=5EfTSBJ525Y0vFPOIzvJeD4o2llTyXxiqfdZNJ--mEQ,23498
24
+ ragger/firmware/touch/positions.py,sha256=D32_o0ND98ioG1Lt7eNBt0FcaDS5VsLIU6kKmbMAHMM,33462
25
25
  ragger/firmware/touch/screen.py,sha256=-t8mRceda9XDl7djZIrpWNsdrIq3Gy2AQbERsOsimUg,7033
26
26
  ragger/firmware/touch/use_cases.py,sha256=s8vOumOMxWfs5IRfOIq4i2O-n_ft2RdFdCSRHJgtH4E,3092
27
27
  ragger/gui/__init__.py,sha256=m3w6D_46oAKlRFMMsBwdvTvdnshUFDgcjWn_OT06hbE,962
@@ -43,15 +43,15 @@ ragger/gui/assets/touch_action.png,sha256=E3rTXz6NgPH1UqxaTwVzC9doK-i3nZZMkwb_Zd
43
43
  ragger/navigator/__init__.py,sha256=AJSPE4k4Cu_v1NqeBnClMu-tAvQ_A6YXFTCy5TuVvxI,950
44
44
  ragger/navigator/instruction.py,sha256=l1-0KBDnoDpz_G5AUDEw8UDOsf3TphTm5Jy412TsY7w,2652
45
45
  ragger/navigator/nano_navigator.py,sha256=D-00Vytb9bsOFsf4nn7BPqlS1d5K7UB9PLjozmdYpuk,1674
46
- ragger/navigator/navigation_scenario.py,sha256=6TnR7-wIuju0erLMYXu-rJPGny9cr-7GdFKRdyEc4YY,9766
46
+ ragger/navigator/navigation_scenario.py,sha256=7ac3L8raD5v0NecbKE3NSoZdNllvEMcXVkxNjMV_vk4,9420
47
47
  ragger/navigator/navigator.py,sha256=ZT2smrw0Xz5XXhz2cZ3DJjbG4NwwQnCrQwvarbjZPTc,29146
48
48
  ragger/navigator/touch_navigator.py,sha256=k3PNaQ9sjfz4qFm-QuNPbnIJLXiICb_LeLbqnfjgdGM,5018
49
49
  ragger/utils/__init__.py,sha256=PUabSv1qx0XyKWovIxvGBI71sd3O3bKp3gCsUxlWm1E,997
50
50
  ragger/utils/misc.py,sha256=_ft_CrwEcZ-VVZCBG-_QjYQuTZn-Fht36k3C6BXhHOs,6930
51
51
  ragger/utils/packing.py,sha256=2xaRR-FhwVfknP74ZGo-O4JTE6R0HpNqhxKJ9aMrns4,766
52
52
  ragger/utils/structs.py,sha256=JMfuX5u-4gSZfqH0SER05B15-mj0YyHjnxLAgxAYtAM,1413
53
- ragger-1.40.1.dist-info/licenses/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
54
- ragger-1.40.1.dist-info/METADATA,sha256=s08pwIDG6iKsjUYBNJqniv36bwaV_dUawmWIlyPoLQs,10660
55
- ragger-1.40.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
56
- ragger-1.40.1.dist-info/top_level.txt,sha256=kqJEoAZ6qn0T3iuVa-710gBK7Ik1euCwNwBbyFraRQg,7
57
- ragger-1.40.1.dist-info/RECORD,,
53
+ ragger-1.40.3.dist-info/licenses/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
54
+ ragger-1.40.3.dist-info/METADATA,sha256=TnmWkCAAnu45k1OFY3G4QoArChZyC7nwfWFwyw6_CcY,10660
55
+ ragger-1.40.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
56
+ ragger-1.40.3.dist-info/top_level.txt,sha256=kqJEoAZ6qn0T3iuVa-710gBK7Ik1euCwNwBbyFraRQg,7
57
+ ragger-1.40.3.dist-info/RECORD,,