nmarshall commited on
Commit
1c40132
·
1 Parent(s): 8dc2612

gameplay: port inactivity deadlines and effects

Browse files
crates/urt-gameplay/src/bin/urt-client-processing.rs CHANGED
@@ -85,6 +85,40 @@ fn main() {
85
  w[12]
86
  );
87
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
  _ => panic!("unknown policy"),
89
  }
90
  }
 
85
  w[12]
86
  );
87
  }
88
+ "idle" => {
89
+ assert_eq!(w.len(), 16);
90
+ let mut state = InactivityState {
91
+ deadline: w[12],
92
+ warned: w[13],
93
+ };
94
+ let out = client_inactivity(
95
+ &mut state,
96
+ InactivityInput {
97
+ entity_flags: w[0],
98
+ idle_seconds: w[1],
99
+ pause: w[2],
100
+ pause_anchor: w[3],
101
+ tick: w[4],
102
+ moves: [w[5] as u8, w[6] as u8, w[7] as u8],
103
+ buttons: w[8],
104
+ health: w[9],
105
+ exempt: w[10],
106
+ mode: w[11],
107
+ msec: w[14],
108
+ slot: 2,
109
+ },
110
+ )
111
+ .unwrap();
112
+ assert_eq!(w[15], 2);
113
+ println!(
114
+ r#"{{"accepted":{},"events":[{}],"deadline":{},"warned":{},"health":{}}}"#,
115
+ out.accepted,
116
+ events(&out.effects),
117
+ state.deadline,
118
+ state.warned,
119
+ w[9]
120
+ );
121
+ }
122
  _ => panic!("unknown policy"),
123
  }
124
  }
crates/urt-gameplay/src/client_processing.rs CHANGED
@@ -215,3 +215,188 @@ mod command_tests {
215
  assert_eq!(s.buttons, 0);
216
  }
217
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
215
  assert_eq!(s.buttons, 0);
216
  }
217
  }
218
+
219
+ #[derive(Clone, Copy, Debug, PartialEq, Eq)]
220
+ pub struct InactivityState {
221
+ pub deadline: u32,
222
+ pub warned: u32,
223
+ }
224
+ #[derive(Clone, Copy, Debug, PartialEq, Eq)]
225
+ pub struct InactivityInput {
226
+ pub entity_flags: u32,
227
+ pub idle_seconds: u32,
228
+ pub pause: u32,
229
+ pub pause_anchor: u32,
230
+ pub tick: u32,
231
+ pub moves: [u8; 3],
232
+ pub buttons: u32,
233
+ pub health: u32,
234
+ pub exempt: u32,
235
+ pub mode: u32,
236
+ pub msec: u32,
237
+ pub slot: i32,
238
+ }
239
+ #[derive(Clone, Debug, PartialEq, Eq)]
240
+ pub struct InactivityOutcome {
241
+ pub accepted: bool,
242
+ pub effects: Vec<ProcessingEffect>,
243
+ }
244
+ const WARN_DROP: &[u8] = b"cp \"Ten seconds until inactivity drop!\n\"";
245
+ const WARN_SPEC: &[u8] = b"cp \"Ten seconds until forced spectator mode!\n\"";
246
+ const IDLE_DROP: &[u8] = b"Dropped due to inactivity";
247
+ const IDLE_MOVED: &[u8] = b"cp \"You were moved to spectator due to inactivity!\n\"";
248
+ /// Original150382 with native team/send/drop effects captured. Arithmetic wraps
249
+ /// as words before signed comparisons; dead-client time extension precedes exemption.
250
+ pub fn client_inactivity(
251
+ state: &mut InactivityState,
252
+ input: InactivityInput,
253
+ ) -> Result<InactivityOutcome, Error> {
254
+ if !(0..64).contains(&input.slot) {
255
+ return Err(Error::InvalidIndex);
256
+ }
257
+ let mut accepted = true;
258
+ let mut effects = vec![];
259
+ if input.entity_flags & 8 != 0 {
260
+ } else if input.idle_seconds == 0 {
261
+ state.deadline = input.tick.wrapping_add(60000);
262
+ state.warned = 0;
263
+ } else if input.pause != 0 {
264
+ let limit = input
265
+ .pause_anchor
266
+ .wrapping_add(input.idle_seconds.wrapping_mul(1000));
267
+ if (state.deadline as i32) < limit as i32 {
268
+ state.deadline = limit;
269
+ }
270
+ } else if input.moves.iter().any(|v| *v != 0) || input.buttons & 1 != 0 {
271
+ let limit = input
272
+ .tick
273
+ .wrapping_add(input.idle_seconds.wrapping_mul(1000));
274
+ if (state.deadline as i32) < limit as i32 {
275
+ state.deadline = limit;
276
+ }
277
+ state.warned = 0;
278
+ } else if input.health as i32 <= 0 {
279
+ state.deadline = state.deadline.wrapping_add(input.msec);
280
+ } else if input.exempt != 0 {
281
+ } else if input.tick as i32 > state.deadline as i32 {
282
+ accepted = false;
283
+ if input.mode == 1 {
284
+ effects.push(ProcessingEffect::Team {
285
+ slot: input.slot,
286
+ text: b"s".to_vec(),
287
+ force: 0,
288
+ });
289
+ effects.push(ProcessingEffect::Send {
290
+ slot: input.slot,
291
+ text: IDLE_MOVED.to_vec(),
292
+ });
293
+ } else {
294
+ effects.push(ProcessingEffect::Drop {
295
+ slot: input.slot,
296
+ text: IDLE_DROP.to_vec(),
297
+ });
298
+ }
299
+ } else if input.tick as i32 > state.deadline.wrapping_sub(10000) as i32 && state.warned == 0 {
300
+ state.warned = 1;
301
+ effects.push(ProcessingEffect::Send {
302
+ slot: input.slot,
303
+ text: if input.mode == 1 {
304
+ WARN_SPEC.to_vec()
305
+ } else {
306
+ WARN_DROP.to_vec()
307
+ },
308
+ });
309
+ }
310
+ Ok(InactivityOutcome { accepted, effects })
311
+ }
312
+ #[cfg(test)]
313
+ mod inactivity_tests {
314
+ use super::*;
315
+ fn input() -> InactivityInput {
316
+ InactivityInput {
317
+ entity_flags: 0,
318
+ idle_seconds: 60,
319
+ pause: 0,
320
+ pause_anchor: 3000,
321
+ tick: 10000,
322
+ moves: [0; 3],
323
+ buttons: 0,
324
+ health: 1,
325
+ exempt: 0,
326
+ mode: 1,
327
+ msec: 100,
328
+ slot: 2,
329
+ }
330
+ }
331
+ #[test]
332
+ fn warning_boundary_repeat_suppression_and_timeout_order() {
333
+ let mut s = InactivityState {
334
+ deadline: 20000,
335
+ warned: 0,
336
+ };
337
+ assert!(
338
+ client_inactivity(&mut s, input())
339
+ .unwrap()
340
+ .effects
341
+ .is_empty()
342
+ );
343
+ let i = InactivityInput {
344
+ tick: 10001,
345
+ ..input()
346
+ };
347
+ assert_eq!(client_inactivity(&mut s, i).unwrap().effects.len(), 1);
348
+ assert_eq!(s.warned, 1);
349
+ assert!(client_inactivity(&mut s, i).unwrap().effects.is_empty());
350
+ let out = client_inactivity(&mut s, InactivityInput { tick: 20001, ..i }).unwrap();
351
+ assert!(!out.accepted);
352
+ assert!(matches!(
353
+ &out.effects[..],
354
+ [ProcessingEffect::Team { .. }, ProcessingEffect::Send { .. }]
355
+ ));
356
+ }
357
+ #[test]
358
+ fn pause_and_activity_preserve_later_deadlines_and_dead_extension_wraps() {
359
+ let mut s = InactivityState {
360
+ deadline: 0,
361
+ warned: 1,
362
+ };
363
+ client_inactivity(
364
+ &mut s,
365
+ InactivityInput {
366
+ pause: 2,
367
+ ..input()
368
+ },
369
+ )
370
+ .unwrap();
371
+ assert_eq!(
372
+ s,
373
+ InactivityState {
374
+ deadline: 63000,
375
+ warned: 1
376
+ }
377
+ );
378
+ s.deadline = 90000;
379
+ client_inactivity(
380
+ &mut s,
381
+ InactivityInput {
382
+ moves: [0, 128, 0],
383
+ ..input()
384
+ },
385
+ )
386
+ .unwrap();
387
+ assert_eq!(s.deadline, 90000);
388
+ assert_eq!(s.warned, 0);
389
+ s.deadline = 20;
390
+ client_inactivity(
391
+ &mut s,
392
+ InactivityInput {
393
+ health: 0,
394
+ exempt: 1,
395
+ msec: u32::MAX,
396
+ ..input()
397
+ },
398
+ )
399
+ .unwrap();
400
+ assert_eq!(s.deadline, 19);
401
+ }
402
+ }
docs/FINDINGS.md CHANGED
@@ -1889,3 +1889,5 @@ RE-976: Forty-eight source command-rewrite cases recover pause-mask1 and mode10/
1889
  RE-977: Rust matches48 source command rewrites, retaining pause-mask1 selection, mode10/client-mask16 locking, saved-angle direction and independent server masking. The low adjacent command byte survives clearing movement bytes, and command time is not modified by this API. Unit tests cover non-locking pause bits, angle restore/save order and low-byte preservation. [Evidence](research/RUST_CLIENT_COMMAND_REWRITE.md).
1890
 
1891
  RE-978: A120-case source contract executes actual150382 through all bounded policy branches: protected entities, disabled config, pause anchoring, signed movement bytes/attack, dead-client deadline extension, exemptions, warnings and timeout. Word arithmetic wraps before signed comparisons. Mode1 queues team-to-s then a message; other modes request a drop. Native effects remain captured; source deadline/warning fields and supplied health are verified. [Evidence](research/QVM_CLIENT_INACTIVITY.md).
 
 
 
1889
  RE-977: Rust matches48 source command rewrites, retaining pause-mask1 selection, mode10/client-mask16 locking, saved-angle direction and independent server masking. The low adjacent command byte survives clearing movement bytes, and command time is not modified by this API. Unit tests cover non-locking pause bits, angle restore/save order and low-byte preservation. [Evidence](research/RUST_CLIENT_COMMAND_REWRITE.md).
1890
 
1891
  RE-978: A120-case source contract executes actual150382 through all bounded policy branches: protected entities, disabled config, pause anchoring, signed movement bytes/attack, dead-client deadline extension, exemptions, warnings and timeout. Word arithmetic wraps before signed comparisons. Mode1 queues team-to-s then a message; other modes request a drop. Native effects remain captured; source deadline/warning fields and supplied health are verified. [Evidence](research/QVM_CLIENT_INACTIVITY.md).
1892
+
1893
+ RE-979: Rust matches120 original inactivity cases, including signed wrap, pause anchoring, negative movement bytes, warning suppression, strict deadlines and mode-specific effect order. Dead-client extension precedes exemption, and activity clears warning state without shortening a later deadline. Unit tests cover warning equality/repetition, team-before-message ordering, pause bits and wrapped extension. Native callbacks remain captured plans. [Evidence](research/RUST_CLIENT_INACTIVITY.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -1943,3 +1943,5 @@ RE-964–973 completed timer deadline/phase/recovery contracts, whole-body compo
1943
  - [x] RE-977 Rust client command rewriting and byte preservation ([evidence](research/RUST_CLIENT_COMMAND_REWRITE.md)).
1944
 
1945
  - [x] RE-978 Original inactivity policy and ordered warning timeout effects ([evidence](research/QVM_CLIENT_INACTIVITY.md)).
 
 
 
1943
  - [x] RE-977 Rust client command rewriting and byte preservation ([evidence](research/RUST_CLIENT_COMMAND_REWRITE.md)).
1944
 
1945
  - [x] RE-978 Original inactivity policy and ordered warning timeout effects ([evidence](research/QVM_CLIENT_INACTIVITY.md)).
1946
+
1947
+ - [x] RE-979 Rust inactivity deadlines and typed timeout effects ([evidence](research/RUST_CLIENT_INACTIVITY.md)).
docs/RESEARCH_LEDGER.md CHANGED
@@ -2585,3 +2585,7 @@ Rust matches48 source command rewrites, retaining pause-mask1 selection, mode10/
2585
  ## 2026-10-28 — RE-978 Original inactivity policy and ordered warning timeout effects
2586
 
2587
  A120-case source contract executes actual150382 through all bounded policy branches: protected entities, disabled config, pause anchoring, signed movement bytes/attack, dead-client deadline extension, exemptions, warnings and timeout. Word arithmetic wraps before signed comparisons. Mode1 queues team-to-s then a message; other modes request a drop. Native effects remain captured; source deadline/warning fields and supplied health are verified. Focused `cargo xtask test-group qvm-client-inactivity` passes with deterministic report regeneration, relevant regressions and storage/documentation/whitespace checks. Full suite deferred to the tenth-commit boundary. Original assets unchanged; native IO effects remain captured.
 
 
 
 
 
2585
  ## 2026-10-28 — RE-978 Original inactivity policy and ordered warning timeout effects
2586
 
2587
  A120-case source contract executes actual150382 through all bounded policy branches: protected entities, disabled config, pause anchoring, signed movement bytes/attack, dead-client deadline extension, exemptions, warnings and timeout. Word arithmetic wraps before signed comparisons. Mode1 queues team-to-s then a message; other modes request a drop. Native effects remain captured; source deadline/warning fields and supplied health are verified. Focused `cargo xtask test-group qvm-client-inactivity` passes with deterministic report regeneration, relevant regressions and storage/documentation/whitespace checks. Full suite deferred to the tenth-commit boundary. Original assets unchanged; native IO effects remain captured.
2588
+
2589
+ ## 2026-10-28 — RE-979 Rust inactivity deadlines and typed timeout effects
2590
+
2591
+ Rust matches120 original inactivity cases, including signed wrap, pause anchoring, negative movement bytes, warning suppression, strict deadlines and mode-specific effect order. Dead-client extension precedes exemption, and activity clears warning state without shortening a later deadline. Unit tests cover warning equality/repetition, team-before-message ordering, pause bits and wrapped extension. Native callbacks remain captured plans. Focused `cargo xtask test-group rust-client-inactivity` passes with deterministic report regeneration, relevant regressions and storage/documentation/whitespace checks. Full suite deferred to the tenth-commit boundary. Original assets unchanged; native IO effects remain captured.
docs/REVERSE_ENGINEERING_TODO.md CHANGED
@@ -1980,3 +1980,5 @@ RE-964–973 recover the complete bounded timer body and its caller timing prefi
1980
  - [x] RE-977 Rust client command rewriting and byte preservation ([evidence](research/RUST_CLIENT_COMMAND_REWRITE.md)).
1981
 
1982
  - [x] RE-978 Original inactivity policy and ordered warning timeout effects ([evidence](research/QVM_CLIENT_INACTIVITY.md)).
 
 
 
1980
  - [x] RE-977 Rust client command rewriting and byte preservation ([evidence](research/RUST_CLIENT_COMMAND_REWRITE.md)).
1981
 
1982
  - [x] RE-978 Original inactivity policy and ordered warning timeout effects ([evidence](research/QVM_CLIENT_INACTIVITY.md)).
1983
+
1984
+ - [x] RE-979 Rust inactivity deadlines and typed timeout effects ([evidence](research/RUST_CLIENT_INACTIVITY.md)).
docs/research/README.md CHANGED
@@ -1515,3 +1515,5 @@ The extension collector adds five focused tests for native tail calls, command-r
1515
  - [RE-977: Rust client command rewriting and byte preservation](RUST_CLIENT_COMMAND_REWRITE.md).
1516
 
1517
  - [RE-978: Original inactivity policy and ordered warning timeout effects](QVM_CLIENT_INACTIVITY.md).
 
 
 
1515
  - [RE-977: Rust client command rewriting and byte preservation](RUST_CLIENT_COMMAND_REWRITE.md).
1516
 
1517
  - [RE-978: Original inactivity policy and ordered warning timeout effects](QVM_CLIENT_INACTIVITY.md).
1518
+
1519
+ - [RE-979: Rust inactivity deadlines and typed timeout effects](RUST_CLIENT_INACTIVITY.md).
docs/research/RUST_CLIENT_INACTIVITY.md ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ # Rust inactivity deadlines and typed timeout effects
2
+
3
+ RE-979. Focused validation: `cargo xtask test-group rust-client-inactivity`. [Machine report](rust-client-inactivity.json).
4
+
5
+ Rust matches120 original inactivity cases, including signed wrap, pause anchoring, negative movement bytes, warning suppression, strict deadlines and mode-specific effect order. Dead-client extension precedes exemption, and activity clears warning state without shortening a later deadline. Unit tests cover warning equality/repetition, team-before-message ordering, pause bits and wrapped extension. Native callbacks remain captured plans.
docs/research/rust-client-inactivity.json ADDED
@@ -0,0 +1,2287 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "limits": "Finite source/Rust contract parity; native time/file/network replies remain supplied or captured.",
3
+ "probes": [
4
+ {
5
+ "rust": {
6
+ "accepted": true,
7
+ "deadline": 0,
8
+ "events": [],
9
+ "health": 1,
10
+ "warned": 1
11
+ },
12
+ "source": {
13
+ "accepted": true,
14
+ "deadline": 0,
15
+ "events": [],
16
+ "health": 1,
17
+ "warned": 1
18
+ }
19
+ },
20
+ {
21
+ "rust": {
22
+ "accepted": true,
23
+ "deadline": 0,
24
+ "events": [],
25
+ "health": 1,
26
+ "warned": 1
27
+ },
28
+ "source": {
29
+ "accepted": true,
30
+ "deadline": 0,
31
+ "events": [],
32
+ "health": 1,
33
+ "warned": 1
34
+ }
35
+ },
36
+ {
37
+ "rust": {
38
+ "accepted": true,
39
+ "deadline": 0,
40
+ "events": [],
41
+ "health": 1,
42
+ "warned": 1
43
+ },
44
+ "source": {
45
+ "accepted": true,
46
+ "deadline": 0,
47
+ "events": [],
48
+ "health": 1,
49
+ "warned": 1
50
+ }
51
+ },
52
+ {
53
+ "rust": {
54
+ "accepted": true,
55
+ "deadline": 0,
56
+ "events": [],
57
+ "health": 1,
58
+ "warned": 1
59
+ },
60
+ "source": {
61
+ "accepted": true,
62
+ "deadline": 0,
63
+ "events": [],
64
+ "health": 1,
65
+ "warned": 1
66
+ }
67
+ },
68
+ {
69
+ "rust": {
70
+ "accepted": true,
71
+ "deadline": 0,
72
+ "events": [],
73
+ "health": 1,
74
+ "warned": 1
75
+ },
76
+ "source": {
77
+ "accepted": true,
78
+ "deadline": 0,
79
+ "events": [],
80
+ "health": 1,
81
+ "warned": 1
82
+ }
83
+ },
84
+ {
85
+ "rust": {
86
+ "accepted": true,
87
+ "deadline": 0,
88
+ "events": [],
89
+ "health": 1,
90
+ "warned": 1
91
+ },
92
+ "source": {
93
+ "accepted": true,
94
+ "deadline": 0,
95
+ "events": [],
96
+ "health": 1,
97
+ "warned": 1
98
+ }
99
+ },
100
+ {
101
+ "rust": {
102
+ "accepted": true,
103
+ "deadline": 70000,
104
+ "events": [],
105
+ "health": 1,
106
+ "warned": 0
107
+ },
108
+ "source": {
109
+ "accepted": true,
110
+ "deadline": 70000,
111
+ "events": [],
112
+ "health": 1,
113
+ "warned": 0
114
+ }
115
+ },
116
+ {
117
+ "rust": {
118
+ "accepted": true,
119
+ "deadline": 70000,
120
+ "events": [],
121
+ "health": 1,
122
+ "warned": 0
123
+ },
124
+ "source": {
125
+ "accepted": true,
126
+ "deadline": 70000,
127
+ "events": [],
128
+ "health": 1,
129
+ "warned": 0
130
+ }
131
+ },
132
+ {
133
+ "rust": {
134
+ "accepted": true,
135
+ "deadline": 70000,
136
+ "events": [],
137
+ "health": 1,
138
+ "warned": 0
139
+ },
140
+ "source": {
141
+ "accepted": true,
142
+ "deadline": 70000,
143
+ "events": [],
144
+ "health": 1,
145
+ "warned": 0
146
+ }
147
+ },
148
+ {
149
+ "rust": {
150
+ "accepted": true,
151
+ "deadline": 70000,
152
+ "events": [],
153
+ "health": 1,
154
+ "warned": 0
155
+ },
156
+ "source": {
157
+ "accepted": true,
158
+ "deadline": 70000,
159
+ "events": [],
160
+ "health": 1,
161
+ "warned": 0
162
+ }
163
+ },
164
+ {
165
+ "rust": {
166
+ "accepted": true,
167
+ "deadline": 70000,
168
+ "events": [],
169
+ "health": 1,
170
+ "warned": 0
171
+ },
172
+ "source": {
173
+ "accepted": true,
174
+ "deadline": 70000,
175
+ "events": [],
176
+ "health": 1,
177
+ "warned": 0
178
+ }
179
+ },
180
+ {
181
+ "rust": {
182
+ "accepted": true,
183
+ "deadline": 70000,
184
+ "events": [],
185
+ "health": 1,
186
+ "warned": 0
187
+ },
188
+ "source": {
189
+ "accepted": true,
190
+ "deadline": 70000,
191
+ "events": [],
192
+ "health": 1,
193
+ "warned": 0
194
+ }
195
+ },
196
+ {
197
+ "rust": {
198
+ "accepted": true,
199
+ "deadline": 63000,
200
+ "events": [],
201
+ "health": 1,
202
+ "warned": 0
203
+ },
204
+ "source": {
205
+ "accepted": true,
206
+ "deadline": 63000,
207
+ "events": [],
208
+ "health": 1,
209
+ "warned": 0
210
+ }
211
+ },
212
+ {
213
+ "rust": {
214
+ "accepted": true,
215
+ "deadline": 63000,
216
+ "events": [],
217
+ "health": 1,
218
+ "warned": 0
219
+ },
220
+ "source": {
221
+ "accepted": true,
222
+ "deadline": 63000,
223
+ "events": [],
224
+ "health": 1,
225
+ "warned": 0
226
+ }
227
+ },
228
+ {
229
+ "rust": {
230
+ "accepted": true,
231
+ "deadline": 63000,
232
+ "events": [],
233
+ "health": 1,
234
+ "warned": 0
235
+ },
236
+ "source": {
237
+ "accepted": true,
238
+ "deadline": 63000,
239
+ "events": [],
240
+ "health": 1,
241
+ "warned": 0
242
+ }
243
+ },
244
+ {
245
+ "rust": {
246
+ "accepted": true,
247
+ "deadline": 63000,
248
+ "events": [],
249
+ "health": 1,
250
+ "warned": 0
251
+ },
252
+ "source": {
253
+ "accepted": true,
254
+ "deadline": 63000,
255
+ "events": [],
256
+ "health": 1,
257
+ "warned": 0
258
+ }
259
+ },
260
+ {
261
+ "rust": {
262
+ "accepted": true,
263
+ "deadline": 63000,
264
+ "events": [],
265
+ "health": 1,
266
+ "warned": 0
267
+ },
268
+ "source": {
269
+ "accepted": true,
270
+ "deadline": 63000,
271
+ "events": [],
272
+ "health": 1,
273
+ "warned": 0
274
+ }
275
+ },
276
+ {
277
+ "rust": {
278
+ "accepted": true,
279
+ "deadline": 63000,
280
+ "events": [],
281
+ "health": 1,
282
+ "warned": 0
283
+ },
284
+ "source": {
285
+ "accepted": true,
286
+ "deadline": 63000,
287
+ "events": [],
288
+ "health": 1,
289
+ "warned": 0
290
+ }
291
+ },
292
+ {
293
+ "rust": {
294
+ "accepted": true,
295
+ "deadline": 90000,
296
+ "events": [],
297
+ "health": 1,
298
+ "warned": 1
299
+ },
300
+ "source": {
301
+ "accepted": true,
302
+ "deadline": 90000,
303
+ "events": [],
304
+ "health": 1,
305
+ "warned": 1
306
+ }
307
+ },
308
+ {
309
+ "rust": {
310
+ "accepted": true,
311
+ "deadline": 90000,
312
+ "events": [],
313
+ "health": 1,
314
+ "warned": 1
315
+ },
316
+ "source": {
317
+ "accepted": true,
318
+ "deadline": 90000,
319
+ "events": [],
320
+ "health": 1,
321
+ "warned": 1
322
+ }
323
+ },
324
+ {
325
+ "rust": {
326
+ "accepted": true,
327
+ "deadline": 90000,
328
+ "events": [],
329
+ "health": 1,
330
+ "warned": 1
331
+ },
332
+ "source": {
333
+ "accepted": true,
334
+ "deadline": 90000,
335
+ "events": [],
336
+ "health": 1,
337
+ "warned": 1
338
+ }
339
+ },
340
+ {
341
+ "rust": {
342
+ "accepted": true,
343
+ "deadline": 90000,
344
+ "events": [],
345
+ "health": 1,
346
+ "warned": 1
347
+ },
348
+ "source": {
349
+ "accepted": true,
350
+ "deadline": 90000,
351
+ "events": [],
352
+ "health": 1,
353
+ "warned": 1
354
+ }
355
+ },
356
+ {
357
+ "rust": {
358
+ "accepted": true,
359
+ "deadline": 90000,
360
+ "events": [],
361
+ "health": 1,
362
+ "warned": 1
363
+ },
364
+ "source": {
365
+ "accepted": true,
366
+ "deadline": 90000,
367
+ "events": [],
368
+ "health": 1,
369
+ "warned": 1
370
+ }
371
+ },
372
+ {
373
+ "rust": {
374
+ "accepted": true,
375
+ "deadline": 90000,
376
+ "events": [],
377
+ "health": 1,
378
+ "warned": 1
379
+ },
380
+ "source": {
381
+ "accepted": true,
382
+ "deadline": 90000,
383
+ "events": [],
384
+ "health": 1,
385
+ "warned": 1
386
+ }
387
+ },
388
+ {
389
+ "rust": {
390
+ "accepted": true,
391
+ "deadline": 70000,
392
+ "events": [],
393
+ "health": 1,
394
+ "warned": 0
395
+ },
396
+ "source": {
397
+ "accepted": true,
398
+ "deadline": 70000,
399
+ "events": [],
400
+ "health": 1,
401
+ "warned": 0
402
+ }
403
+ },
404
+ {
405
+ "rust": {
406
+ "accepted": true,
407
+ "deadline": 70000,
408
+ "events": [],
409
+ "health": 1,
410
+ "warned": 0
411
+ },
412
+ "source": {
413
+ "accepted": true,
414
+ "deadline": 70000,
415
+ "events": [],
416
+ "health": 1,
417
+ "warned": 0
418
+ }
419
+ },
420
+ {
421
+ "rust": {
422
+ "accepted": true,
423
+ "deadline": 70000,
424
+ "events": [],
425
+ "health": 1,
426
+ "warned": 0
427
+ },
428
+ "source": {
429
+ "accepted": true,
430
+ "deadline": 70000,
431
+ "events": [],
432
+ "health": 1,
433
+ "warned": 0
434
+ }
435
+ },
436
+ {
437
+ "rust": {
438
+ "accepted": true,
439
+ "deadline": 70000,
440
+ "events": [],
441
+ "health": 1,
442
+ "warned": 0
443
+ },
444
+ "source": {
445
+ "accepted": true,
446
+ "deadline": 70000,
447
+ "events": [],
448
+ "health": 1,
449
+ "warned": 0
450
+ }
451
+ },
452
+ {
453
+ "rust": {
454
+ "accepted": true,
455
+ "deadline": 70000,
456
+ "events": [],
457
+ "health": 1,
458
+ "warned": 0
459
+ },
460
+ "source": {
461
+ "accepted": true,
462
+ "deadline": 70000,
463
+ "events": [],
464
+ "health": 1,
465
+ "warned": 0
466
+ }
467
+ },
468
+ {
469
+ "rust": {
470
+ "accepted": true,
471
+ "deadline": 70000,
472
+ "events": [],
473
+ "health": 1,
474
+ "warned": 0
475
+ },
476
+ "source": {
477
+ "accepted": true,
478
+ "deadline": 70000,
479
+ "events": [],
480
+ "health": 1,
481
+ "warned": 0
482
+ }
483
+ },
484
+ {
485
+ "rust": {
486
+ "accepted": true,
487
+ "deadline": 70000,
488
+ "events": [],
489
+ "health": 1,
490
+ "warned": 0
491
+ },
492
+ "source": {
493
+ "accepted": true,
494
+ "deadline": 70000,
495
+ "events": [],
496
+ "health": 1,
497
+ "warned": 0
498
+ }
499
+ },
500
+ {
501
+ "rust": {
502
+ "accepted": true,
503
+ "deadline": 70000,
504
+ "events": [],
505
+ "health": 1,
506
+ "warned": 0
507
+ },
508
+ "source": {
509
+ "accepted": true,
510
+ "deadline": 70000,
511
+ "events": [],
512
+ "health": 1,
513
+ "warned": 0
514
+ }
515
+ },
516
+ {
517
+ "rust": {
518
+ "accepted": true,
519
+ "deadline": 70000,
520
+ "events": [],
521
+ "health": 1,
522
+ "warned": 0
523
+ },
524
+ "source": {
525
+ "accepted": true,
526
+ "deadline": 70000,
527
+ "events": [],
528
+ "health": 1,
529
+ "warned": 0
530
+ }
531
+ },
532
+ {
533
+ "rust": {
534
+ "accepted": true,
535
+ "deadline": 70000,
536
+ "events": [],
537
+ "health": 1,
538
+ "warned": 0
539
+ },
540
+ "source": {
541
+ "accepted": true,
542
+ "deadline": 70000,
543
+ "events": [],
544
+ "health": 1,
545
+ "warned": 0
546
+ }
547
+ },
548
+ {
549
+ "rust": {
550
+ "accepted": true,
551
+ "deadline": 70000,
552
+ "events": [],
553
+ "health": 1,
554
+ "warned": 0
555
+ },
556
+ "source": {
557
+ "accepted": true,
558
+ "deadline": 70000,
559
+ "events": [],
560
+ "health": 1,
561
+ "warned": 0
562
+ }
563
+ },
564
+ {
565
+ "rust": {
566
+ "accepted": true,
567
+ "deadline": 70000,
568
+ "events": [],
569
+ "health": 1,
570
+ "warned": 0
571
+ },
572
+ "source": {
573
+ "accepted": true,
574
+ "deadline": 70000,
575
+ "events": [],
576
+ "health": 1,
577
+ "warned": 0
578
+ }
579
+ },
580
+ {
581
+ "rust": {
582
+ "accepted": true,
583
+ "deadline": 70000,
584
+ "events": [],
585
+ "health": 1,
586
+ "warned": 0
587
+ },
588
+ "source": {
589
+ "accepted": true,
590
+ "deadline": 70000,
591
+ "events": [],
592
+ "health": 1,
593
+ "warned": 0
594
+ }
595
+ },
596
+ {
597
+ "rust": {
598
+ "accepted": true,
599
+ "deadline": 70000,
600
+ "events": [],
601
+ "health": 1,
602
+ "warned": 0
603
+ },
604
+ "source": {
605
+ "accepted": true,
606
+ "deadline": 70000,
607
+ "events": [],
608
+ "health": 1,
609
+ "warned": 0
610
+ }
611
+ },
612
+ {
613
+ "rust": {
614
+ "accepted": true,
615
+ "deadline": 70000,
616
+ "events": [],
617
+ "health": 1,
618
+ "warned": 0
619
+ },
620
+ "source": {
621
+ "accepted": true,
622
+ "deadline": 70000,
623
+ "events": [],
624
+ "health": 1,
625
+ "warned": 0
626
+ }
627
+ },
628
+ {
629
+ "rust": {
630
+ "accepted": true,
631
+ "deadline": 70000,
632
+ "events": [],
633
+ "health": 1,
634
+ "warned": 0
635
+ },
636
+ "source": {
637
+ "accepted": true,
638
+ "deadline": 70000,
639
+ "events": [],
640
+ "health": 1,
641
+ "warned": 0
642
+ }
643
+ },
644
+ {
645
+ "rust": {
646
+ "accepted": true,
647
+ "deadline": 70000,
648
+ "events": [],
649
+ "health": 1,
650
+ "warned": 0
651
+ },
652
+ "source": {
653
+ "accepted": true,
654
+ "deadline": 70000,
655
+ "events": [],
656
+ "health": 1,
657
+ "warned": 0
658
+ }
659
+ },
660
+ {
661
+ "rust": {
662
+ "accepted": true,
663
+ "deadline": 70000,
664
+ "events": [],
665
+ "health": 1,
666
+ "warned": 0
667
+ },
668
+ "source": {
669
+ "accepted": true,
670
+ "deadline": 70000,
671
+ "events": [],
672
+ "health": 1,
673
+ "warned": 0
674
+ }
675
+ },
676
+ {
677
+ "rust": {
678
+ "accepted": true,
679
+ "deadline": 70000,
680
+ "events": [],
681
+ "health": 1,
682
+ "warned": 0
683
+ },
684
+ "source": {
685
+ "accepted": true,
686
+ "deadline": 70000,
687
+ "events": [],
688
+ "health": 1,
689
+ "warned": 0
690
+ }
691
+ },
692
+ {
693
+ "rust": {
694
+ "accepted": true,
695
+ "deadline": 70000,
696
+ "events": [],
697
+ "health": 1,
698
+ "warned": 0
699
+ },
700
+ "source": {
701
+ "accepted": true,
702
+ "deadline": 70000,
703
+ "events": [],
704
+ "health": 1,
705
+ "warned": 0
706
+ }
707
+ },
708
+ {
709
+ "rust": {
710
+ "accepted": true,
711
+ "deadline": 70000,
712
+ "events": [],
713
+ "health": 1,
714
+ "warned": 0
715
+ },
716
+ "source": {
717
+ "accepted": true,
718
+ "deadline": 70000,
719
+ "events": [],
720
+ "health": 1,
721
+ "warned": 0
722
+ }
723
+ },
724
+ {
725
+ "rust": {
726
+ "accepted": true,
727
+ "deadline": 70000,
728
+ "events": [],
729
+ "health": 1,
730
+ "warned": 0
731
+ },
732
+ "source": {
733
+ "accepted": true,
734
+ "deadline": 70000,
735
+ "events": [],
736
+ "health": 1,
737
+ "warned": 0
738
+ }
739
+ },
740
+ {
741
+ "rust": {
742
+ "accepted": true,
743
+ "deadline": 70000,
744
+ "events": [],
745
+ "health": 1,
746
+ "warned": 0
747
+ },
748
+ "source": {
749
+ "accepted": true,
750
+ "deadline": 70000,
751
+ "events": [],
752
+ "health": 1,
753
+ "warned": 0
754
+ }
755
+ },
756
+ {
757
+ "rust": {
758
+ "accepted": true,
759
+ "deadline": 70000,
760
+ "events": [],
761
+ "health": 1,
762
+ "warned": 0
763
+ },
764
+ "source": {
765
+ "accepted": true,
766
+ "deadline": 70000,
767
+ "events": [],
768
+ "health": 1,
769
+ "warned": 0
770
+ }
771
+ },
772
+ {
773
+ "rust": {
774
+ "accepted": true,
775
+ "deadline": 9000,
776
+ "events": [],
777
+ "health": 0,
778
+ "warned": 0
779
+ },
780
+ "source": {
781
+ "accepted": true,
782
+ "deadline": 9000,
783
+ "events": [],
784
+ "health": 0,
785
+ "warned": 0
786
+ }
787
+ },
788
+ {
789
+ "rust": {
790
+ "accepted": true,
791
+ "deadline": 9100,
792
+ "events": [],
793
+ "health": 0,
794
+ "warned": 0
795
+ },
796
+ "source": {
797
+ "accepted": true,
798
+ "deadline": 9100,
799
+ "events": [],
800
+ "health": 0,
801
+ "warned": 0
802
+ }
803
+ },
804
+ {
805
+ "rust": {
806
+ "accepted": true,
807
+ "deadline": 8999,
808
+ "events": [],
809
+ "health": 0,
810
+ "warned": 0
811
+ },
812
+ "source": {
813
+ "accepted": true,
814
+ "deadline": 8999,
815
+ "events": [],
816
+ "health": 0,
817
+ "warned": 0
818
+ }
819
+ },
820
+ {
821
+ "rust": {
822
+ "accepted": true,
823
+ "deadline": 9000,
824
+ "events": [],
825
+ "health": 0,
826
+ "warned": 0
827
+ },
828
+ "source": {
829
+ "accepted": true,
830
+ "deadline": 9000,
831
+ "events": [],
832
+ "health": 0,
833
+ "warned": 0
834
+ }
835
+ },
836
+ {
837
+ "rust": {
838
+ "accepted": true,
839
+ "deadline": 9100,
840
+ "events": [],
841
+ "health": 0,
842
+ "warned": 0
843
+ },
844
+ "source": {
845
+ "accepted": true,
846
+ "deadline": 9100,
847
+ "events": [],
848
+ "health": 0,
849
+ "warned": 0
850
+ }
851
+ },
852
+ {
853
+ "rust": {
854
+ "accepted": true,
855
+ "deadline": 8999,
856
+ "events": [],
857
+ "health": 0,
858
+ "warned": 0
859
+ },
860
+ "source": {
861
+ "accepted": true,
862
+ "deadline": 8999,
863
+ "events": [],
864
+ "health": 0,
865
+ "warned": 0
866
+ }
867
+ },
868
+ {
869
+ "rust": {
870
+ "accepted": true,
871
+ "deadline": 0,
872
+ "events": [],
873
+ "health": 1,
874
+ "warned": 0
875
+ },
876
+ "source": {
877
+ "accepted": true,
878
+ "deadline": 0,
879
+ "events": [],
880
+ "health": 1,
881
+ "warned": 0
882
+ }
883
+ },
884
+ {
885
+ "rust": {
886
+ "accepted": true,
887
+ "deadline": 0,
888
+ "events": [],
889
+ "health": 1,
890
+ "warned": 0
891
+ },
892
+ "source": {
893
+ "accepted": true,
894
+ "deadline": 0,
895
+ "events": [],
896
+ "health": 1,
897
+ "warned": 0
898
+ }
899
+ },
900
+ {
901
+ "rust": {
902
+ "accepted": true,
903
+ "deadline": 0,
904
+ "events": [],
905
+ "health": 1,
906
+ "warned": 0
907
+ },
908
+ "source": {
909
+ "accepted": true,
910
+ "deadline": 0,
911
+ "events": [],
912
+ "health": 1,
913
+ "warned": 0
914
+ }
915
+ },
916
+ {
917
+ "rust": {
918
+ "accepted": true,
919
+ "deadline": 0,
920
+ "events": [],
921
+ "health": 1,
922
+ "warned": 0
923
+ },
924
+ "source": {
925
+ "accepted": true,
926
+ "deadline": 0,
927
+ "events": [],
928
+ "health": 1,
929
+ "warned": 0
930
+ }
931
+ },
932
+ {
933
+ "rust": {
934
+ "accepted": true,
935
+ "deadline": 0,
936
+ "events": [],
937
+ "health": 1,
938
+ "warned": 0
939
+ },
940
+ "source": {
941
+ "accepted": true,
942
+ "deadline": 0,
943
+ "events": [],
944
+ "health": 1,
945
+ "warned": 0
946
+ }
947
+ },
948
+ {
949
+ "rust": {
950
+ "accepted": true,
951
+ "deadline": 0,
952
+ "events": [],
953
+ "health": 1,
954
+ "warned": 0
955
+ },
956
+ "source": {
957
+ "accepted": true,
958
+ "deadline": 0,
959
+ "events": [],
960
+ "health": 1,
961
+ "warned": 0
962
+ }
963
+ },
964
+ {
965
+ "rust": {
966
+ "accepted": false,
967
+ "deadline": 9999,
968
+ "events": [
969
+ {
970
+ "op": "drop",
971
+ "slot": 2,
972
+ "text": "44726f707065642064756520746f20696e6163746976697479"
973
+ }
974
+ ],
975
+ "health": 1,
976
+ "warned": 0
977
+ },
978
+ "source": {
979
+ "accepted": false,
980
+ "deadline": 9999,
981
+ "events": [
982
+ {
983
+ "op": "drop",
984
+ "slot": 2,
985
+ "text": "44726f707065642064756520746f20696e6163746976697479"
986
+ }
987
+ ],
988
+ "health": 1,
989
+ "warned": 0
990
+ }
991
+ },
992
+ {
993
+ "rust": {
994
+ "accepted": false,
995
+ "deadline": 9999,
996
+ "events": [
997
+ {
998
+ "op": "drop",
999
+ "slot": 2,
1000
+ "text": "44726f707065642064756520746f20696e6163746976697479"
1001
+ }
1002
+ ],
1003
+ "health": 1,
1004
+ "warned": 0
1005
+ },
1006
+ "source": {
1007
+ "accepted": false,
1008
+ "deadline": 9999,
1009
+ "events": [
1010
+ {
1011
+ "op": "drop",
1012
+ "slot": 2,
1013
+ "text": "44726f707065642064756520746f20696e6163746976697479"
1014
+ }
1015
+ ],
1016
+ "health": 1,
1017
+ "warned": 0
1018
+ }
1019
+ },
1020
+ {
1021
+ "rust": {
1022
+ "accepted": false,
1023
+ "deadline": 9999,
1024
+ "events": [
1025
+ {
1026
+ "op": "drop",
1027
+ "slot": 2,
1028
+ "text": "44726f707065642064756520746f20696e6163746976697479"
1029
+ }
1030
+ ],
1031
+ "health": 1,
1032
+ "warned": 0
1033
+ },
1034
+ "source": {
1035
+ "accepted": false,
1036
+ "deadline": 9999,
1037
+ "events": [
1038
+ {
1039
+ "op": "drop",
1040
+ "slot": 2,
1041
+ "text": "44726f707065642064756520746f20696e6163746976697479"
1042
+ }
1043
+ ],
1044
+ "health": 1,
1045
+ "warned": 0
1046
+ }
1047
+ },
1048
+ {
1049
+ "rust": {
1050
+ "accepted": false,
1051
+ "deadline": 9999,
1052
+ "events": [
1053
+ {
1054
+ "force": 0,
1055
+ "op": "team",
1056
+ "slot": 2,
1057
+ "text": "73"
1058
+ },
1059
+ {
1060
+ "op": "send",
1061
+ "slot": 2,
1062
+ "text": "63702022596f752077657265206d6f76656420746f20737065637461746f722064756520746f20696e6163746976697479210a22"
1063
+ }
1064
+ ],
1065
+ "health": 1,
1066
+ "warned": 0
1067
+ },
1068
+ "source": {
1069
+ "accepted": false,
1070
+ "deadline": 9999,
1071
+ "events": [
1072
+ {
1073
+ "force": 0,
1074
+ "op": "team",
1075
+ "slot": 2,
1076
+ "text": "73"
1077
+ },
1078
+ {
1079
+ "op": "send",
1080
+ "slot": 2,
1081
+ "text": "63702022596f752077657265206d6f76656420746f20737065637461746f722064756520746f20696e6163746976697479210a22"
1082
+ }
1083
+ ],
1084
+ "health": 1,
1085
+ "warned": 0
1086
+ }
1087
+ },
1088
+ {
1089
+ "rust": {
1090
+ "accepted": false,
1091
+ "deadline": 9999,
1092
+ "events": [
1093
+ {
1094
+ "force": 0,
1095
+ "op": "team",
1096
+ "slot": 2,
1097
+ "text": "73"
1098
+ },
1099
+ {
1100
+ "op": "send",
1101
+ "slot": 2,
1102
+ "text": "63702022596f752077657265206d6f76656420746f20737065637461746f722064756520746f20696e6163746976697479210a22"
1103
+ }
1104
+ ],
1105
+ "health": 1,
1106
+ "warned": 0
1107
+ },
1108
+ "source": {
1109
+ "accepted": false,
1110
+ "deadline": 9999,
1111
+ "events": [
1112
+ {
1113
+ "force": 0,
1114
+ "op": "team",
1115
+ "slot": 2,
1116
+ "text": "73"
1117
+ },
1118
+ {
1119
+ "op": "send",
1120
+ "slot": 2,
1121
+ "text": "63702022596f752077657265206d6f76656420746f20737065637461746f722064756520746f20696e6163746976697479210a22"
1122
+ }
1123
+ ],
1124
+ "health": 1,
1125
+ "warned": 0
1126
+ }
1127
+ },
1128
+ {
1129
+ "rust": {
1130
+ "accepted": false,
1131
+ "deadline": 9999,
1132
+ "events": [
1133
+ {
1134
+ "force": 0,
1135
+ "op": "team",
1136
+ "slot": 2,
1137
+ "text": "73"
1138
+ },
1139
+ {
1140
+ "op": "send",
1141
+ "slot": 2,
1142
+ "text": "63702022596f752077657265206d6f76656420746f20737065637461746f722064756520746f20696e6163746976697479210a22"
1143
+ }
1144
+ ],
1145
+ "health": 1,
1146
+ "warned": 0
1147
+ },
1148
+ "source": {
1149
+ "accepted": false,
1150
+ "deadline": 9999,
1151
+ "events": [
1152
+ {
1153
+ "force": 0,
1154
+ "op": "team",
1155
+ "slot": 2,
1156
+ "text": "73"
1157
+ },
1158
+ {
1159
+ "op": "send",
1160
+ "slot": 2,
1161
+ "text": "63702022596f752077657265206d6f76656420746f20737065637461746f722064756520746f20696e6163746976697479210a22"
1162
+ }
1163
+ ],
1164
+ "health": 1,
1165
+ "warned": 0
1166
+ }
1167
+ },
1168
+ {
1169
+ "rust": {
1170
+ "accepted": true,
1171
+ "deadline": 19999,
1172
+ "events": [
1173
+ {
1174
+ "op": "send",
1175
+ "slot": 2,
1176
+ "text": "6370202254656e207365636f6e647320756e74696c20696e61637469766974792064726f70210a22"
1177
+ }
1178
+ ],
1179
+ "health": 1,
1180
+ "warned": 1
1181
+ },
1182
+ "source": {
1183
+ "accepted": true,
1184
+ "deadline": 19999,
1185
+ "events": [
1186
+ {
1187
+ "op": "send",
1188
+ "slot": 2,
1189
+ "text": "6370202254656e207365636f6e647320756e74696c20696e61637469766974792064726f70210a22"
1190
+ }
1191
+ ],
1192
+ "health": 1,
1193
+ "warned": 1
1194
+ }
1195
+ },
1196
+ {
1197
+ "rust": {
1198
+ "accepted": true,
1199
+ "deadline": 19999,
1200
+ "events": [
1201
+ {
1202
+ "op": "send",
1203
+ "slot": 2,
1204
+ "text": "6370202254656e207365636f6e647320756e74696c20696e61637469766974792064726f70210a22"
1205
+ }
1206
+ ],
1207
+ "health": 1,
1208
+ "warned": 1
1209
+ },
1210
+ "source": {
1211
+ "accepted": true,
1212
+ "deadline": 19999,
1213
+ "events": [
1214
+ {
1215
+ "op": "send",
1216
+ "slot": 2,
1217
+ "text": "6370202254656e207365636f6e647320756e74696c20696e61637469766974792064726f70210a22"
1218
+ }
1219
+ ],
1220
+ "health": 1,
1221
+ "warned": 1
1222
+ }
1223
+ },
1224
+ {
1225
+ "rust": {
1226
+ "accepted": true,
1227
+ "deadline": 19999,
1228
+ "events": [
1229
+ {
1230
+ "op": "send",
1231
+ "slot": 2,
1232
+ "text": "6370202254656e207365636f6e647320756e74696c20696e61637469766974792064726f70210a22"
1233
+ }
1234
+ ],
1235
+ "health": 1,
1236
+ "warned": 1
1237
+ },
1238
+ "source": {
1239
+ "accepted": true,
1240
+ "deadline": 19999,
1241
+ "events": [
1242
+ {
1243
+ "op": "send",
1244
+ "slot": 2,
1245
+ "text": "6370202254656e207365636f6e647320756e74696c20696e61637469766974792064726f70210a22"
1246
+ }
1247
+ ],
1248
+ "health": 1,
1249
+ "warned": 1
1250
+ }
1251
+ },
1252
+ {
1253
+ "rust": {
1254
+ "accepted": true,
1255
+ "deadline": 19999,
1256
+ "events": [
1257
+ {
1258
+ "op": "send",
1259
+ "slot": 2,
1260
+ "text": "6370202254656e207365636f6e647320756e74696c20666f7263656420737065637461746f72206d6f6465210a22"
1261
+ }
1262
+ ],
1263
+ "health": 1,
1264
+ "warned": 1
1265
+ },
1266
+ "source": {
1267
+ "accepted": true,
1268
+ "deadline": 19999,
1269
+ "events": [
1270
+ {
1271
+ "op": "send",
1272
+ "slot": 2,
1273
+ "text": "6370202254656e207365636f6e647320756e74696c20666f7263656420737065637461746f72206d6f6465210a22"
1274
+ }
1275
+ ],
1276
+ "health": 1,
1277
+ "warned": 1
1278
+ }
1279
+ },
1280
+ {
1281
+ "rust": {
1282
+ "accepted": true,
1283
+ "deadline": 19999,
1284
+ "events": [
1285
+ {
1286
+ "op": "send",
1287
+ "slot": 2,
1288
+ "text": "6370202254656e207365636f6e647320756e74696c20666f7263656420737065637461746f72206d6f6465210a22"
1289
+ }
1290
+ ],
1291
+ "health": 1,
1292
+ "warned": 1
1293
+ },
1294
+ "source": {
1295
+ "accepted": true,
1296
+ "deadline": 19999,
1297
+ "events": [
1298
+ {
1299
+ "op": "send",
1300
+ "slot": 2,
1301
+ "text": "6370202254656e207365636f6e647320756e74696c20666f7263656420737065637461746f72206d6f6465210a22"
1302
+ }
1303
+ ],
1304
+ "health": 1,
1305
+ "warned": 1
1306
+ }
1307
+ },
1308
+ {
1309
+ "rust": {
1310
+ "accepted": true,
1311
+ "deadline": 19999,
1312
+ "events": [
1313
+ {
1314
+ "op": "send",
1315
+ "slot": 2,
1316
+ "text": "6370202254656e207365636f6e647320756e74696c20666f7263656420737065637461746f72206d6f6465210a22"
1317
+ }
1318
+ ],
1319
+ "health": 1,
1320
+ "warned": 1
1321
+ },
1322
+ "source": {
1323
+ "accepted": true,
1324
+ "deadline": 19999,
1325
+ "events": [
1326
+ {
1327
+ "op": "send",
1328
+ "slot": 2,
1329
+ "text": "6370202254656e207365636f6e647320756e74696c20666f7263656420737065637461746f72206d6f6465210a22"
1330
+ }
1331
+ ],
1332
+ "health": 1,
1333
+ "warned": 1
1334
+ }
1335
+ },
1336
+ {
1337
+ "rust": {
1338
+ "accepted": true,
1339
+ "deadline": 10000,
1340
+ "events": [
1341
+ {
1342
+ "op": "send",
1343
+ "slot": 2,
1344
+ "text": "6370202254656e207365636f6e647320756e74696c20696e61637469766974792064726f70210a22"
1345
+ }
1346
+ ],
1347
+ "health": 1,
1348
+ "warned": 1
1349
+ },
1350
+ "source": {
1351
+ "accepted": true,
1352
+ "deadline": 10000,
1353
+ "events": [
1354
+ {
1355
+ "op": "send",
1356
+ "slot": 2,
1357
+ "text": "6370202254656e207365636f6e647320756e74696c20696e61637469766974792064726f70210a22"
1358
+ }
1359
+ ],
1360
+ "health": 1,
1361
+ "warned": 1
1362
+ }
1363
+ },
1364
+ {
1365
+ "rust": {
1366
+ "accepted": true,
1367
+ "deadline": 10000,
1368
+ "events": [
1369
+ {
1370
+ "op": "send",
1371
+ "slot": 2,
1372
+ "text": "6370202254656e207365636f6e647320756e74696c20696e61637469766974792064726f70210a22"
1373
+ }
1374
+ ],
1375
+ "health": 1,
1376
+ "warned": 1
1377
+ },
1378
+ "source": {
1379
+ "accepted": true,
1380
+ "deadline": 10000,
1381
+ "events": [
1382
+ {
1383
+ "op": "send",
1384
+ "slot": 2,
1385
+ "text": "6370202254656e207365636f6e647320756e74696c20696e61637469766974792064726f70210a22"
1386
+ }
1387
+ ],
1388
+ "health": 1,
1389
+ "warned": 1
1390
+ }
1391
+ },
1392
+ {
1393
+ "rust": {
1394
+ "accepted": true,
1395
+ "deadline": 10000,
1396
+ "events": [
1397
+ {
1398
+ "op": "send",
1399
+ "slot": 2,
1400
+ "text": "6370202254656e207365636f6e647320756e74696c20696e61637469766974792064726f70210a22"
1401
+ }
1402
+ ],
1403
+ "health": 1,
1404
+ "warned": 1
1405
+ },
1406
+ "source": {
1407
+ "accepted": true,
1408
+ "deadline": 10000,
1409
+ "events": [
1410
+ {
1411
+ "op": "send",
1412
+ "slot": 2,
1413
+ "text": "6370202254656e207365636f6e647320756e74696c20696e61637469766974792064726f70210a22"
1414
+ }
1415
+ ],
1416
+ "health": 1,
1417
+ "warned": 1
1418
+ }
1419
+ },
1420
+ {
1421
+ "rust": {
1422
+ "accepted": true,
1423
+ "deadline": 10000,
1424
+ "events": [
1425
+ {
1426
+ "op": "send",
1427
+ "slot": 2,
1428
+ "text": "6370202254656e207365636f6e647320756e74696c20666f7263656420737065637461746f72206d6f6465210a22"
1429
+ }
1430
+ ],
1431
+ "health": 1,
1432
+ "warned": 1
1433
+ },
1434
+ "source": {
1435
+ "accepted": true,
1436
+ "deadline": 10000,
1437
+ "events": [
1438
+ {
1439
+ "op": "send",
1440
+ "slot": 2,
1441
+ "text": "6370202254656e207365636f6e647320756e74696c20666f7263656420737065637461746f72206d6f6465210a22"
1442
+ }
1443
+ ],
1444
+ "health": 1,
1445
+ "warned": 1
1446
+ }
1447
+ },
1448
+ {
1449
+ "rust": {
1450
+ "accepted": true,
1451
+ "deadline": 10000,
1452
+ "events": [
1453
+ {
1454
+ "op": "send",
1455
+ "slot": 2,
1456
+ "text": "6370202254656e207365636f6e647320756e74696c20666f7263656420737065637461746f72206d6f6465210a22"
1457
+ }
1458
+ ],
1459
+ "health": 1,
1460
+ "warned": 1
1461
+ },
1462
+ "source": {
1463
+ "accepted": true,
1464
+ "deadline": 10000,
1465
+ "events": [
1466
+ {
1467
+ "op": "send",
1468
+ "slot": 2,
1469
+ "text": "6370202254656e207365636f6e647320756e74696c20666f7263656420737065637461746f72206d6f6465210a22"
1470
+ }
1471
+ ],
1472
+ "health": 1,
1473
+ "warned": 1
1474
+ }
1475
+ },
1476
+ {
1477
+ "rust": {
1478
+ "accepted": true,
1479
+ "deadline": 10000,
1480
+ "events": [
1481
+ {
1482
+ "op": "send",
1483
+ "slot": 2,
1484
+ "text": "6370202254656e207365636f6e647320756e74696c20666f7263656420737065637461746f72206d6f6465210a22"
1485
+ }
1486
+ ],
1487
+ "health": 1,
1488
+ "warned": 1
1489
+ },
1490
+ "source": {
1491
+ "accepted": true,
1492
+ "deadline": 10000,
1493
+ "events": [
1494
+ {
1495
+ "op": "send",
1496
+ "slot": 2,
1497
+ "text": "6370202254656e207365636f6e647320756e74696c20666f7263656420737065637461746f72206d6f6465210a22"
1498
+ }
1499
+ ],
1500
+ "health": 1,
1501
+ "warned": 1
1502
+ }
1503
+ },
1504
+ {
1505
+ "rust": {
1506
+ "accepted": true,
1507
+ "deadline": 19999,
1508
+ "events": [],
1509
+ "health": 1,
1510
+ "warned": 1
1511
+ },
1512
+ "source": {
1513
+ "accepted": true,
1514
+ "deadline": 19999,
1515
+ "events": [],
1516
+ "health": 1,
1517
+ "warned": 1
1518
+ }
1519
+ },
1520
+ {
1521
+ "rust": {
1522
+ "accepted": true,
1523
+ "deadline": 19999,
1524
+ "events": [],
1525
+ "health": 1,
1526
+ "warned": 1
1527
+ },
1528
+ "source": {
1529
+ "accepted": true,
1530
+ "deadline": 19999,
1531
+ "events": [],
1532
+ "health": 1,
1533
+ "warned": 1
1534
+ }
1535
+ },
1536
+ {
1537
+ "rust": {
1538
+ "accepted": true,
1539
+ "deadline": 19999,
1540
+ "events": [],
1541
+ "health": 1,
1542
+ "warned": 1
1543
+ },
1544
+ "source": {
1545
+ "accepted": true,
1546
+ "deadline": 19999,
1547
+ "events": [],
1548
+ "health": 1,
1549
+ "warned": 1
1550
+ }
1551
+ },
1552
+ {
1553
+ "rust": {
1554
+ "accepted": true,
1555
+ "deadline": 19999,
1556
+ "events": [],
1557
+ "health": 1,
1558
+ "warned": 1
1559
+ },
1560
+ "source": {
1561
+ "accepted": true,
1562
+ "deadline": 19999,
1563
+ "events": [],
1564
+ "health": 1,
1565
+ "warned": 1
1566
+ }
1567
+ },
1568
+ {
1569
+ "rust": {
1570
+ "accepted": true,
1571
+ "deadline": 19999,
1572
+ "events": [],
1573
+ "health": 1,
1574
+ "warned": 1
1575
+ },
1576
+ "source": {
1577
+ "accepted": true,
1578
+ "deadline": 19999,
1579
+ "events": [],
1580
+ "health": 1,
1581
+ "warned": 1
1582
+ }
1583
+ },
1584
+ {
1585
+ "rust": {
1586
+ "accepted": true,
1587
+ "deadline": 19999,
1588
+ "events": [],
1589
+ "health": 1,
1590
+ "warned": 1
1591
+ },
1592
+ "source": {
1593
+ "accepted": true,
1594
+ "deadline": 19999,
1595
+ "events": [],
1596
+ "health": 1,
1597
+ "warned": 1
1598
+ }
1599
+ },
1600
+ {
1601
+ "rust": {
1602
+ "accepted": true,
1603
+ "deadline": 20000,
1604
+ "events": [],
1605
+ "health": 1,
1606
+ "warned": 0
1607
+ },
1608
+ "source": {
1609
+ "accepted": true,
1610
+ "deadline": 20000,
1611
+ "events": [],
1612
+ "health": 1,
1613
+ "warned": 0
1614
+ }
1615
+ },
1616
+ {
1617
+ "rust": {
1618
+ "accepted": true,
1619
+ "deadline": 20000,
1620
+ "events": [],
1621
+ "health": 1,
1622
+ "warned": 0
1623
+ },
1624
+ "source": {
1625
+ "accepted": true,
1626
+ "deadline": 20000,
1627
+ "events": [],
1628
+ "health": 1,
1629
+ "warned": 0
1630
+ }
1631
+ },
1632
+ {
1633
+ "rust": {
1634
+ "accepted": true,
1635
+ "deadline": 20000,
1636
+ "events": [],
1637
+ "health": 1,
1638
+ "warned": 0
1639
+ },
1640
+ "source": {
1641
+ "accepted": true,
1642
+ "deadline": 20000,
1643
+ "events": [],
1644
+ "health": 1,
1645
+ "warned": 0
1646
+ }
1647
+ },
1648
+ {
1649
+ "rust": {
1650
+ "accepted": true,
1651
+ "deadline": 20000,
1652
+ "events": [],
1653
+ "health": 1,
1654
+ "warned": 0
1655
+ },
1656
+ "source": {
1657
+ "accepted": true,
1658
+ "deadline": 20000,
1659
+ "events": [],
1660
+ "health": 1,
1661
+ "warned": 0
1662
+ }
1663
+ },
1664
+ {
1665
+ "rust": {
1666
+ "accepted": true,
1667
+ "deadline": 20000,
1668
+ "events": [],
1669
+ "health": 1,
1670
+ "warned": 0
1671
+ },
1672
+ "source": {
1673
+ "accepted": true,
1674
+ "deadline": 20000,
1675
+ "events": [],
1676
+ "health": 1,
1677
+ "warned": 0
1678
+ }
1679
+ },
1680
+ {
1681
+ "rust": {
1682
+ "accepted": true,
1683
+ "deadline": 20000,
1684
+ "events": [],
1685
+ "health": 1,
1686
+ "warned": 0
1687
+ },
1688
+ "source": {
1689
+ "accepted": true,
1690
+ "deadline": 20000,
1691
+ "events": [],
1692
+ "health": 1,
1693
+ "warned": 0
1694
+ }
1695
+ },
1696
+ {
1697
+ "rust": {
1698
+ "accepted": false,
1699
+ "deadline": 9999,
1700
+ "events": [
1701
+ {
1702
+ "op": "drop",
1703
+ "slot": 2,
1704
+ "text": "44726f707065642064756520746f20696e6163746976697479"
1705
+ }
1706
+ ],
1707
+ "health": 1,
1708
+ "warned": 0
1709
+ },
1710
+ "source": {
1711
+ "accepted": false,
1712
+ "deadline": 9999,
1713
+ "events": [
1714
+ {
1715
+ "op": "drop",
1716
+ "slot": 2,
1717
+ "text": "44726f707065642064756520746f20696e6163746976697479"
1718
+ }
1719
+ ],
1720
+ "health": 1,
1721
+ "warned": 0
1722
+ }
1723
+ },
1724
+ {
1725
+ "rust": {
1726
+ "accepted": false,
1727
+ "deadline": 9999,
1728
+ "events": [
1729
+ {
1730
+ "op": "drop",
1731
+ "slot": 2,
1732
+ "text": "44726f707065642064756520746f20696e6163746976697479"
1733
+ }
1734
+ ],
1735
+ "health": 1,
1736
+ "warned": 0
1737
+ },
1738
+ "source": {
1739
+ "accepted": false,
1740
+ "deadline": 9999,
1741
+ "events": [
1742
+ {
1743
+ "op": "drop",
1744
+ "slot": 2,
1745
+ "text": "44726f707065642064756520746f20696e6163746976697479"
1746
+ }
1747
+ ],
1748
+ "health": 1,
1749
+ "warned": 0
1750
+ }
1751
+ },
1752
+ {
1753
+ "rust": {
1754
+ "accepted": false,
1755
+ "deadline": 9999,
1756
+ "events": [
1757
+ {
1758
+ "op": "drop",
1759
+ "slot": 2,
1760
+ "text": "44726f707065642064756520746f20696e6163746976697479"
1761
+ }
1762
+ ],
1763
+ "health": 1,
1764
+ "warned": 0
1765
+ },
1766
+ "source": {
1767
+ "accepted": false,
1768
+ "deadline": 9999,
1769
+ "events": [
1770
+ {
1771
+ "op": "drop",
1772
+ "slot": 2,
1773
+ "text": "44726f707065642064756520746f20696e6163746976697479"
1774
+ }
1775
+ ],
1776
+ "health": 1,
1777
+ "warned": 0
1778
+ }
1779
+ },
1780
+ {
1781
+ "rust": {
1782
+ "accepted": false,
1783
+ "deadline": 9999,
1784
+ "events": [
1785
+ {
1786
+ "force": 0,
1787
+ "op": "team",
1788
+ "slot": 2,
1789
+ "text": "73"
1790
+ },
1791
+ {
1792
+ "op": "send",
1793
+ "slot": 2,
1794
+ "text": "63702022596f752077657265206d6f76656420746f20737065637461746f722064756520746f20696e6163746976697479210a22"
1795
+ }
1796
+ ],
1797
+ "health": 1,
1798
+ "warned": 0
1799
+ },
1800
+ "source": {
1801
+ "accepted": false,
1802
+ "deadline": 9999,
1803
+ "events": [
1804
+ {
1805
+ "force": 0,
1806
+ "op": "team",
1807
+ "slot": 2,
1808
+ "text": "73"
1809
+ },
1810
+ {
1811
+ "op": "send",
1812
+ "slot": 2,
1813
+ "text": "63702022596f752077657265206d6f76656420746f20737065637461746f722064756520746f20696e6163746976697479210a22"
1814
+ }
1815
+ ],
1816
+ "health": 1,
1817
+ "warned": 0
1818
+ }
1819
+ },
1820
+ {
1821
+ "rust": {
1822
+ "accepted": false,
1823
+ "deadline": 9999,
1824
+ "events": [
1825
+ {
1826
+ "force": 0,
1827
+ "op": "team",
1828
+ "slot": 2,
1829
+ "text": "73"
1830
+ },
1831
+ {
1832
+ "op": "send",
1833
+ "slot": 2,
1834
+ "text": "63702022596f752077657265206d6f76656420746f20737065637461746f722064756520746f20696e6163746976697479210a22"
1835
+ }
1836
+ ],
1837
+ "health": 1,
1838
+ "warned": 0
1839
+ },
1840
+ "source": {
1841
+ "accepted": false,
1842
+ "deadline": 9999,
1843
+ "events": [
1844
+ {
1845
+ "force": 0,
1846
+ "op": "team",
1847
+ "slot": 2,
1848
+ "text": "73"
1849
+ },
1850
+ {
1851
+ "op": "send",
1852
+ "slot": 2,
1853
+ "text": "63702022596f752077657265206d6f76656420746f20737065637461746f722064756520746f20696e6163746976697479210a22"
1854
+ }
1855
+ ],
1856
+ "health": 1,
1857
+ "warned": 0
1858
+ }
1859
+ },
1860
+ {
1861
+ "rust": {
1862
+ "accepted": false,
1863
+ "deadline": 9999,
1864
+ "events": [
1865
+ {
1866
+ "force": 0,
1867
+ "op": "team",
1868
+ "slot": 2,
1869
+ "text": "73"
1870
+ },
1871
+ {
1872
+ "op": "send",
1873
+ "slot": 2,
1874
+ "text": "63702022596f752077657265206d6f76656420746f20737065637461746f722064756520746f20696e6163746976697479210a22"
1875
+ }
1876
+ ],
1877
+ "health": 1,
1878
+ "warned": 0
1879
+ },
1880
+ "source": {
1881
+ "accepted": false,
1882
+ "deadline": 9999,
1883
+ "events": [
1884
+ {
1885
+ "force": 0,
1886
+ "op": "team",
1887
+ "slot": 2,
1888
+ "text": "73"
1889
+ },
1890
+ {
1891
+ "op": "send",
1892
+ "slot": 2,
1893
+ "text": "63702022596f752077657265206d6f76656420746f20737065637461746f722064756520746f20696e6163746976697479210a22"
1894
+ }
1895
+ ],
1896
+ "health": 1,
1897
+ "warned": 0
1898
+ }
1899
+ },
1900
+ {
1901
+ "rust": {
1902
+ "accepted": true,
1903
+ "deadline": 9000,
1904
+ "events": [],
1905
+ "health": 1,
1906
+ "warned": 0
1907
+ },
1908
+ "source": {
1909
+ "accepted": true,
1910
+ "deadline": 9000,
1911
+ "events": [],
1912
+ "health": 1,
1913
+ "warned": 0
1914
+ }
1915
+ },
1916
+ {
1917
+ "rust": {
1918
+ "accepted": true,
1919
+ "deadline": 9000,
1920
+ "events": [],
1921
+ "health": 1,
1922
+ "warned": 0
1923
+ },
1924
+ "source": {
1925
+ "accepted": true,
1926
+ "deadline": 9000,
1927
+ "events": [],
1928
+ "health": 1,
1929
+ "warned": 0
1930
+ }
1931
+ },
1932
+ {
1933
+ "rust": {
1934
+ "accepted": true,
1935
+ "deadline": 9000,
1936
+ "events": [],
1937
+ "health": 1,
1938
+ "warned": 0
1939
+ },
1940
+ "source": {
1941
+ "accepted": true,
1942
+ "deadline": 9000,
1943
+ "events": [],
1944
+ "health": 1,
1945
+ "warned": 0
1946
+ }
1947
+ },
1948
+ {
1949
+ "rust": {
1950
+ "accepted": true,
1951
+ "deadline": 9000,
1952
+ "events": [],
1953
+ "health": 1,
1954
+ "warned": 0
1955
+ },
1956
+ "source": {
1957
+ "accepted": true,
1958
+ "deadline": 9000,
1959
+ "events": [],
1960
+ "health": 1,
1961
+ "warned": 0
1962
+ }
1963
+ },
1964
+ {
1965
+ "rust": {
1966
+ "accepted": true,
1967
+ "deadline": 9000,
1968
+ "events": [],
1969
+ "health": 1,
1970
+ "warned": 0
1971
+ },
1972
+ "source": {
1973
+ "accepted": true,
1974
+ "deadline": 9000,
1975
+ "events": [],
1976
+ "health": 1,
1977
+ "warned": 0
1978
+ }
1979
+ },
1980
+ {
1981
+ "rust": {
1982
+ "accepted": true,
1983
+ "deadline": 9000,
1984
+ "events": [],
1985
+ "health": 1,
1986
+ "warned": 0
1987
+ },
1988
+ "source": {
1989
+ "accepted": true,
1990
+ "deadline": 9000,
1991
+ "events": [],
1992
+ "health": 1,
1993
+ "warned": 0
1994
+ }
1995
+ },
1996
+ {
1997
+ "rust": {
1998
+ "accepted": true,
1999
+ "deadline": 9000,
2000
+ "events": [],
2001
+ "health": 1,
2002
+ "warned": 0
2003
+ },
2004
+ "source": {
2005
+ "accepted": true,
2006
+ "deadline": 9000,
2007
+ "events": [],
2008
+ "health": 1,
2009
+ "warned": 0
2010
+ }
2011
+ },
2012
+ {
2013
+ "rust": {
2014
+ "accepted": true,
2015
+ "deadline": 9000,
2016
+ "events": [],
2017
+ "health": 1,
2018
+ "warned": 0
2019
+ },
2020
+ "source": {
2021
+ "accepted": true,
2022
+ "deadline": 9000,
2023
+ "events": [],
2024
+ "health": 1,
2025
+ "warned": 0
2026
+ }
2027
+ },
2028
+ {
2029
+ "rust": {
2030
+ "accepted": true,
2031
+ "deadline": 9000,
2032
+ "events": [],
2033
+ "health": 1,
2034
+ "warned": 0
2035
+ },
2036
+ "source": {
2037
+ "accepted": true,
2038
+ "deadline": 9000,
2039
+ "events": [],
2040
+ "health": 1,
2041
+ "warned": 0
2042
+ }
2043
+ },
2044
+ {
2045
+ "rust": {
2046
+ "accepted": true,
2047
+ "deadline": 9000,
2048
+ "events": [],
2049
+ "health": 1,
2050
+ "warned": 0
2051
+ },
2052
+ "source": {
2053
+ "accepted": true,
2054
+ "deadline": 9000,
2055
+ "events": [],
2056
+ "health": 1,
2057
+ "warned": 0
2058
+ }
2059
+ },
2060
+ {
2061
+ "rust": {
2062
+ "accepted": true,
2063
+ "deadline": 9000,
2064
+ "events": [],
2065
+ "health": 1,
2066
+ "warned": 0
2067
+ },
2068
+ "source": {
2069
+ "accepted": true,
2070
+ "deadline": 9000,
2071
+ "events": [],
2072
+ "health": 1,
2073
+ "warned": 0
2074
+ }
2075
+ },
2076
+ {
2077
+ "rust": {
2078
+ "accepted": true,
2079
+ "deadline": 9000,
2080
+ "events": [],
2081
+ "health": 1,
2082
+ "warned": 0
2083
+ },
2084
+ "source": {
2085
+ "accepted": true,
2086
+ "deadline": 9000,
2087
+ "events": [],
2088
+ "health": 1,
2089
+ "warned": 0
2090
+ }
2091
+ },
2092
+ {
2093
+ "rust": {
2094
+ "accepted": true,
2095
+ "deadline": 4294967295,
2096
+ "events": [],
2097
+ "health": 0,
2098
+ "warned": 0
2099
+ },
2100
+ "source": {
2101
+ "accepted": true,
2102
+ "deadline": 4294967295,
2103
+ "events": [],
2104
+ "health": 0,
2105
+ "warned": 0
2106
+ }
2107
+ },
2108
+ {
2109
+ "rust": {
2110
+ "accepted": true,
2111
+ "deadline": 99,
2112
+ "events": [],
2113
+ "health": 0,
2114
+ "warned": 0
2115
+ },
2116
+ "source": {
2117
+ "accepted": true,
2118
+ "deadline": 99,
2119
+ "events": [],
2120
+ "health": 0,
2121
+ "warned": 0
2122
+ }
2123
+ },
2124
+ {
2125
+ "rust": {
2126
+ "accepted": true,
2127
+ "deadline": 4294967294,
2128
+ "events": [],
2129
+ "health": 0,
2130
+ "warned": 0
2131
+ },
2132
+ "source": {
2133
+ "accepted": true,
2134
+ "deadline": 4294967294,
2135
+ "events": [],
2136
+ "health": 0,
2137
+ "warned": 0
2138
+ }
2139
+ },
2140
+ {
2141
+ "rust": {
2142
+ "accepted": true,
2143
+ "deadline": 4294967295,
2144
+ "events": [],
2145
+ "health": 0,
2146
+ "warned": 0
2147
+ },
2148
+ "source": {
2149
+ "accepted": true,
2150
+ "deadline": 4294967295,
2151
+ "events": [],
2152
+ "health": 0,
2153
+ "warned": 0
2154
+ }
2155
+ },
2156
+ {
2157
+ "rust": {
2158
+ "accepted": true,
2159
+ "deadline": 99,
2160
+ "events": [],
2161
+ "health": 0,
2162
+ "warned": 0
2163
+ },
2164
+ "source": {
2165
+ "accepted": true,
2166
+ "deadline": 99,
2167
+ "events": [],
2168
+ "health": 0,
2169
+ "warned": 0
2170
+ }
2171
+ },
2172
+ {
2173
+ "rust": {
2174
+ "accepted": true,
2175
+ "deadline": 4294967294,
2176
+ "events": [],
2177
+ "health": 0,
2178
+ "warned": 0
2179
+ },
2180
+ "source": {
2181
+ "accepted": true,
2182
+ "deadline": 4294967294,
2183
+ "events": [],
2184
+ "health": 0,
2185
+ "warned": 0
2186
+ }
2187
+ },
2188
+ {
2189
+ "rust": {
2190
+ "accepted": true,
2191
+ "deadline": 63000,
2192
+ "events": [],
2193
+ "health": 1,
2194
+ "warned": 1
2195
+ },
2196
+ "source": {
2197
+ "accepted": true,
2198
+ "deadline": 63000,
2199
+ "events": [],
2200
+ "health": 1,
2201
+ "warned": 1
2202
+ }
2203
+ },
2204
+ {
2205
+ "rust": {
2206
+ "accepted": true,
2207
+ "deadline": 63000,
2208
+ "events": [],
2209
+ "health": 1,
2210
+ "warned": 1
2211
+ },
2212
+ "source": {
2213
+ "accepted": true,
2214
+ "deadline": 63000,
2215
+ "events": [],
2216
+ "health": 1,
2217
+ "warned": 1
2218
+ }
2219
+ },
2220
+ {
2221
+ "rust": {
2222
+ "accepted": true,
2223
+ "deadline": 63000,
2224
+ "events": [],
2225
+ "health": 1,
2226
+ "warned": 1
2227
+ },
2228
+ "source": {
2229
+ "accepted": true,
2230
+ "deadline": 63000,
2231
+ "events": [],
2232
+ "health": 1,
2233
+ "warned": 1
2234
+ }
2235
+ },
2236
+ {
2237
+ "rust": {
2238
+ "accepted": true,
2239
+ "deadline": 63000,
2240
+ "events": [],
2241
+ "health": 1,
2242
+ "warned": 1
2243
+ },
2244
+ "source": {
2245
+ "accepted": true,
2246
+ "deadline": 63000,
2247
+ "events": [],
2248
+ "health": 1,
2249
+ "warned": 1
2250
+ }
2251
+ },
2252
+ {
2253
+ "rust": {
2254
+ "accepted": true,
2255
+ "deadline": 63000,
2256
+ "events": [],
2257
+ "health": 1,
2258
+ "warned": 1
2259
+ },
2260
+ "source": {
2261
+ "accepted": true,
2262
+ "deadline": 63000,
2263
+ "events": [],
2264
+ "health": 1,
2265
+ "warned": 1
2266
+ }
2267
+ },
2268
+ {
2269
+ "rust": {
2270
+ "accepted": true,
2271
+ "deadline": 63000,
2272
+ "events": [],
2273
+ "health": 1,
2274
+ "warned": 1
2275
+ },
2276
+ "source": {
2277
+ "accepted": true,
2278
+ "deadline": 63000,
2279
+ "events": [],
2280
+ "health": 1,
2281
+ "warned": 1
2282
+ }
2283
+ }
2284
+ ],
2285
+ "source_report": "docs/research/qvm-client-inactivity.json",
2286
+ "source_report_sha256": "3d010d28d54b43f61776347d5e434b4568b6aed358ca1a0be00efaa8053c5f36"
2287
+ }
docs/research/rust-health-impulse.json CHANGED
@@ -2985,7 +2985,7 @@
2985
  "exit_code": 2
2986
  }
2987
  ],
2988
- "rust_unit_tests": 234,
2989
  "source_report": "docs/research/qvm-health-impulse.json",
2990
  "source_report_sha256": "625fd8064004ea6dbdf398d51d0af844d9c635ff04c0a0790886dddb6ab81e71"
2991
  }
 
2985
  "exit_code": 2
2986
  }
2987
  ],
2988
+ "rust_unit_tests": 236,
2989
  "source_report": "docs/research/qvm-health-impulse.json",
2990
  "source_report_sha256": "625fd8064004ea6dbdf398d51d0af844d9c635ff04c0a0790886dddb6ab81e71"
2991
  }
scripts/analyze_rust_client_inactivity.py ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Compare recovered Rust policy with original QVM fixtures."""
2
+ import hashlib,json,os,subprocess
3
+ from pathlib import Path
4
+ from analyze_qvm import write_json
5
+ from rust_lifecycle_support import result
6
+
7
+ def main():
8
+ subprocess.run(['cargo','build','--offline','--package','urt-gameplay','--bin','urt-client-processing'],check=True,capture_output=True)
9
+ binary=Path(os.environ.get('CARGO_TARGET_DIR','target'))/'debug'/'urt-client-processing'
10
+ path=Path('docs/research/qvm-client-inactivity.json');data=path.read_bytes();probes=[]
11
+ for p in json.loads(data)['probes']:
12
+ probes.append(dict(source={k:p[k] for k in ['accepted', 'events', 'deadline', 'warned', 'health']},rust=result(binary,'idle',encode(p['input']))))
13
+ write_json(Path('docs/research/rust-client-inactivity.json'),dict(source_report=str(path),source_report_sha256=hashlib.sha256(data).hexdigest(),probes=probes,limits='Finite source/Rust contract parity; native time/file/network replies remain supplied or captured.'))
14
+
15
+ def encode(a):return [a['entity_flags'],a['idle_seconds'],a['pause'],a['pause_anchor'],a['tick'],*a['moves'],a['buttons'],a['health'],a['exempt'],a['mode'],a['deadline'],a['warned'],a['msec'],2]
16
+ if __name__=='__main__':main()
scripts/test_rust_client_inactivity.py ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ import hashlib,json,unittest
2
+ from pathlib import Path
3
+ class PortTests(unittest.TestCase):
4
+ def test_original_parity(self):
5
+ r=json.loads(Path('docs/research/rust-client-inactivity.json').read_text());self.assertGreaterEqual(len(r['probes']),12)
6
+ for p in r['probes']:self.assertEqual(p['source'],p['rust'])
7
+ def test_identity(self):
8
+ r=json.loads(Path('docs/research/rust-client-inactivity.json').read_text());self.assertEqual(hashlib.sha256(Path(r['source_report']).read_bytes()).hexdigest(),r['source_report_sha256'])
9
+ if __name__=='__main__':unittest.main()
xtask/checks.tsv CHANGED
@@ -3596,3 +3596,25 @@ report scripts/analyze_qvm_client_inactivity.py docs/research/qvm-client-inactiv
3596
  edge docs/research/qvm-client-inactivity.json scripts/test_qvm_client_inactivity.py
3597
  group qvm-client-inactivity scripts/analyze_qvm_client_inactivity.py
3598
  edge scripts/analyze_qvm_client_inactivity.py scripts/analyze_qvm_resumer_audit.py
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3596
  edge docs/research/qvm-client-inactivity.json scripts/test_qvm_client_inactivity.py
3597
  group qvm-client-inactivity scripts/analyze_qvm_client_inactivity.py
3598
  edge scripts/analyze_qvm_client_inactivity.py scripts/analyze_qvm_resumer_audit.py
3599
+ report scripts/analyze_rust_client_inactivity.py docs/research/rust-client-inactivity.json
3600
+ edge docs/research/rust-client-inactivity.json scripts/test_rust_client_inactivity.py
3601
+ group rust-client-inactivity scripts/analyze_rust_client_inactivity.py
3602
+ edge scripts/analyze_rust_client_inactivity.py scripts/analyze_qvm_resumer_audit.py
3603
+ edge Cargo.toml scripts/analyze_rust_client_inactivity.py
3604
+ edge Cargo.lock scripts/analyze_rust_client_inactivity.py
3605
+ edge crates/urt-gameplay/Cargo.toml scripts/analyze_rust_client_inactivity.py
3606
+ edge crates/urt-gameplay/src/lib.rs scripts/analyze_rust_client_inactivity.py
3607
+ edge crates/urt-gameplay/src/filter_loading.rs scripts/analyze_rust_client_inactivity.py
3608
+ edge crates/urt-gameplay/src/filter_lifecycle.rs scripts/analyze_rust_client_inactivity.py
3609
+ edge crates/urt-gameplay/src/native_policy.rs scripts/analyze_rust_client_inactivity.py
3610
+ edge crates/urt-gameplay/src/bin/urt-filter-loading.rs scripts/analyze_rust_client_inactivity.py
3611
+ edge crates/urt-gameplay/src/qvm_format.rs scripts/analyze_rust_client_inactivity.py
3612
+ edge docs/research/qvm-client-inactivity.json scripts/analyze_rust_client_inactivity.py
3613
+ group rust-client-inactivity scripts/analyze_rust_health_impulse.py
3614
+ group gameplay scripts/analyze_rust_client_inactivity.py
3615
+ edge crates/urt-gameplay/src/filter_commands.rs scripts/analyze_rust_client_inactivity.py
3616
+ edge crates/urt-gameplay/src/bin/urt-filter-commands.rs scripts/analyze_rust_client_inactivity.py
3617
+ edge crates/urt-gameplay/src/client_timer.rs scripts/analyze_rust_client_inactivity.py
3618
+ edge crates/urt-gameplay/src/bin/urt-client-timer.rs scripts/analyze_rust_client_inactivity.py
3619
+ edge crates/urt-gameplay/src/client_processing.rs scripts/analyze_rust_client_inactivity.py
3620
+ edge crates/urt-gameplay/src/bin/urt-client-processing.rs scripts/analyze_rust_client_inactivity.py