shaw
dec47e8fae
fix(profit-control): stop leaking profit policy, close veto livelock, restore passthrough turn pricing
审计修复,逐条如下。
H1 利润策略泄露给所有普通用户
profit_control_enabled / profit_min_margin / profit_safety_buffer 从
dto.Group 移到 dto.AdminGroup(后者内嵌前者),赋值相应从
groupFromServiceBase 移到 GroupFromServiceAdmin;前端 TS 同步从 Group 移到
AdminGroup。dto.Group 是 GET /api/v1/groups/available 的响应体,该响应本就带
rate_multiplier,相乘即可反推运营方上游采购成本上限。
api_contract_test.go 的 /groups/available golden JSON 回滚这三个字段,并把
fixture 改成非零值(require.JSONEq 是精确比对,缺字段即失败)。
新增 dto 层边界测试:普通用户 DTO 不含三字段、管理员 DTO 仍含。
M1 利润终检 continue 与 failover 503 退避互动产生活锁
FailoverState 新增 profitVetoedAccountIDs / profitVetoCount 与
RecordProfitVeto():加入排除集 + 计数,达 maxProfitVetoAttempts(10) 返回
FailoverExhausted。HandleSelectionExhausted 的 503 清空分支改为清空后把利润
否决的账号放回排除集;若排除集已全部由利润否决贡献,清空不会带来任何新候选,
直接判定耗尽(否则 SwitchCount 永不前进、退避条件永远成立,每 2s 空转一轮)。
五个 handler 否决点(gateway_handler ×2 / responses / chat_completions /
gemini_v1beta)改为经 RecordProfitVeto 决策,耗尽时按无可用账号终止。
回归测试钉死:503 之后持续利润否决必须有限步终止且不 spin;未启用利润控制的
请求退避语义完全不变。
M2 排队等槽后才终检,延迟可放大到 N × WaitPlan.Timeout
OpenAI 侧选号循环(自有 failedAccountIDs map,非 FailoverState)新增
recordOpenAIProfitVeto + handleOpenAIProfitVetoExhausted,共用同一上限语义。
覆盖 responses / messages-dispatch / chat_completions / alpha_search /
embeddings / images / grok_media 七处,以及 WS 两处否决分支。
M4 ws_v2 透传 ingress 绕过 per-turn 重定价(选方案 B:最小止血)
透传 relay 只回调 AfterTurn、没有任何 turn 起始回调,hooks.BeforeTurn 永远
不触发,而 handler 把 turnPricingAt 初始化成建连时刻 ⇒ 透传连接全部 turn 按
建连时刻的高峰因子结算,客户端峰前建连保活即可全程谷价——正是本 PR 想堵的
漏洞。改为 openAIWSTurnPricing 零值起步、只由 BeforeTurn 冻结;透传路径保持
零值,RecordUsage 回退记录时刻,与引入利润控制前的基线一致。
未选方案 A(给透传补 turn 起始回调):passthrough_relay.go 是 #5167 刚修过的
取消传播/close frame 时序敏感区;且 BeforeTurn 还承担 turn>1 的并发槽位抢占,
接进去等于给透传连接引入 per-turn 抢槽,风险远超本次修复范围。透传仍有建连时
的准入门,只是没有 turn 级复核,已在两处注释写明。
测试:service 层钉死透传 ingress 不触发 BeforeTurn(含失败时的复核指引),
handler 层钉死零值语义与逐 turn 覆盖。
M5 装门读分组走了带账号计数聚合的 GetByID
SchedulerSnapshotService 新增 GetGroupByIDLite,openai/gateway 两处装门改用
之。门只需要平台/倍率/利润/高峰字段,且该查询发生在「是否启用利润控制」判定
之前,未启用的分组同样付代价。两个测试 stub 的 GetByID 改成 panic 守卫。
M6 认证快照注释与真实读取路径相反
门解析优先取 ctxkey.Group,而它就是本快照物化出来的对象,直连流量走的正是这
条路。改正注释,与 api_key_repo.go 投影处的说明对齐,避免后人照旧注释删列。
M3 rate_multiplier 为 nil 时利润门 fail-closed(不改行为,加护栏)
保留 fail-closed。补 repository 层测试钉死账号调度快照的 full/metadata 两份
payload 都必须保留 RateMultiplier(含 0 值),漏列在 CI 就红。
L1 迁移号注释 191 / 191-192 改为实际的 192/193。
L2 admin group Create 的利润配置预校验改用与 CreateGroup 一致的归一化平台
(新增 service.NormalizeGroupPlatform,两边共用)。保留预校验而非删除:
service 层返回的是无类型 error,经 ErrorFrom 会变成 500,删掉会把合法的
400 降级成 500。
L3 前端利润校验的上界改为判定换算后的小数(后端按小数校验 [0,1)),
99.999% 会四舍五入进位成 1.0 而被后端 400;i18n en/zh 同步改为 0-99.99。
L4 clampProfitControlThreshold / profitControlOverThreshold 抽为共用函数,
线上装门/否决点与 profit-preview 不再各自实现,附边界语义测试。
L5 profit-preview 补「默认 D 有账号但最低有效 D 归零」的告警(两档都为 0 由
既有告警覆盖,不重复)。
2026-08-01 22:39:33 +08:00
..
2026-07-26 13:43:06 +08:00
2026-03-07 13:39:47 +08:00
2026-07-23 15:50:44 +08:00
2026-07-02 10:43:08 +08:00
2026-07-16 19:57:48 +08:00
2026-01-15 15:14:44 +08:00
2026-06-26 16:19:41 +08:00
2026-07-01 12:21:45 +08:00
2026-07-01 12:21:45 +08:00
2026-05-08 03:44:04 +08:00
2026-07-14 17:05:46 +08:00
2026-01-07 16:59:35 +08:00
2026-07-17 19:15:16 +08:00
2025-12-26 16:45:40 +08:00
2026-07-15 20:30:23 +08:00
2026-07-15 20:30:23 +08:00
2026-02-24 16:48:16 +08:00
2026-03-06 05:07:52 +08:00
2026-07-13 23:32:16 +08:00
2026-04-25 14:52:58 +08:00
2026-06-30 10:40:05 +08:00
2026-03-08 14:12:17 +08:00
2026-05-26 11:24:25 -07:00
2026-06-16 17:59:06 +08:00
2026-04-19 18:45:04 +08:00
2026-06-16 11:44:39 +08:00
2026-03-31 13:24:22 +08:00
2026-07-17 22:10:18 +08:00
2026-08-01 22:11:09 +08:00
2026-07-01 12:21:45 +08:00
2026-07-26 01:56:10 +08:00
2026-07-14 22:31:39 +08:00
2026-04-05 17:11:01 +08:00
2026-07-18 21:05:50 +08:00
2026-07-21 05:02:30 -07:00
2026-05-26 13:57:59 +08:00
2026-07-21 05:02:30 -07:00
2026-07-31 16:11:45 +08:00
2026-07-04 08:28:30 +08:00
2026-07-01 12:21:45 +08:00
2026-07-01 12:21:45 +08:00
2026-07-27 15:20:03 +00:00
2026-06-07 15:23:45 +08:00
2026-04-14 09:32:11 +08:00
2026-07-03 17:22:49 +00:00
2026-07-31 21:49:44 +08:00
2026-07-03 14:41:18 +08:00
2026-08-01 22:11:10 +08:00
2026-08-01 22:11:10 +08:00
2026-05-03 20:33:14 +08:00
2026-06-10 14:16:51 +08:00
2026-06-10 14:16:51 +08:00
2026-07-25 12:50:46 +08:00
2026-08-01 22:39:31 +08:00
2026-08-01 22:39:33 +08:00
2026-07-08 08:49:22 +08:00
2026-07-28 17:21:32 +08:00
2026-04-22 13:19:28 +08:00
2026-07-16 15:37:35 +08:00
2026-08-01 22:11:09 +08:00
2026-05-23 10:18:43 +08:00
2026-07-23 09:19:25 +08:00
2026-06-01 08:41:35 +08:00
2026-05-08 03:44:04 +08:00
2026-07-28 17:21:32 +08:00
2026-08-01 22:11:09 +08:00
2026-07-28 17:21:32 +08:00
2026-05-30 17:52:18 +08:00
2026-04-23 16:34:37 +08:00
2026-07-25 22:20:27 +08:00
2026-04-23 16:34:37 +08:00
2026-06-04 01:06:41 +08:00
2026-07-19 12:17:31 +08:00
2026-07-09 20:06:09 +08:00
2026-04-23 16:34:37 +08:00
2026-07-06 11:43:16 +08:00
2026-07-13 23:32:16 +08:00
2026-07-28 17:21:32 +08:00
2026-07-28 17:21:32 +08:00
2026-08-01 22:39:31 +08:00
2026-07-28 17:21:32 +08:00
2026-04-25 20:22:07 +08:00
2026-05-03 22:12:57 +08:00
2026-04-21 09:53:15 -07:00
2026-04-21 09:53:15 -07:00
2026-02-02 22:13:50 +08:00
2026-04-21 09:53:15 -07:00
2026-07-02 10:43:08 +08:00
2026-05-30 20:01:38 +08:00
2026-05-30 20:01:38 +08:00
2026-04-04 14:32:26 +08:00
2026-04-04 14:32:26 +08:00
2026-05-31 22:00:03 +08:00
2026-07-08 08:49:22 +08:00
2026-07-26 20:23:50 +09:00
2026-07-26 20:23:50 +09:00
2026-07-26 20:23:50 +09:00
2026-07-08 08:49:22 +08:00
2026-07-08 08:49:22 +08:00
2026-06-25 16:29:33 +08:00
2026-07-18 15:35:30 +08:00
2026-07-26 20:23:50 +09:00
2026-07-08 08:49:22 +08:00
2026-05-12 16:12:08 +08:00
2026-03-27 20:11:24 +08:00
2026-03-27 20:18:07 +08:00
2026-06-10 08:58:06 +08:00
2026-02-11 13:41:55 +08:00
2026-04-01 12:24:52 +08:00
2026-03-25 19:03:12 +08:00
2026-03-25 17:38:41 +08:00
2026-03-16 04:58:23 +08:00
2026-03-16 04:58:23 +08:00
2026-05-31 22:00:03 +08:00
2026-05-31 22:00:03 +08:00
2026-05-31 22:00:03 +08:00
2026-05-31 22:00:03 +08:00
2026-07-18 21:43:54 +08:00
2026-07-18 21:43:54 +08:00
2026-02-07 12:31:10 +08:00
2026-02-07 14:39:25 +08:00
2026-03-23 03:49:28 +08:00
2026-07-05 08:34:34 +08:00
2026-08-01 22:39:31 +08:00
2026-01-11 10:55:25 +08:00
2026-08-01 22:39:31 +08:00
2026-07-21 11:16:04 +08:00
2026-08-01 22:39:33 +08:00
2026-03-15 14:04:13 +08:00
2026-07-28 17:21:32 +08:00
2026-07-28 17:21:32 +08:00
2026-07-28 17:21:32 +08:00
2026-02-23 12:45:37 +08:00
2026-07-28 17:21:32 +08:00
2026-07-28 20:02:52 +08:00
2026-07-08 15:26:54 +08:00
2026-07-16 13:47:50 +08:00
2026-07-23 16:43:18 +08:00
2026-07-26 10:14:55 -04:00
2026-07-18 00:11:18 +08:00
2026-07-18 00:11:18 +08:00
2026-01-11 10:55:26 +08:00
2026-07-28 17:21:32 +08:00
2026-05-26 10:49:20 +08:00
2026-07-28 17:21:32 +08:00
2026-05-26 10:49:20 +08:00
2026-07-25 19:40:53 +08:00
2026-04-21 09:53:15 -07:00
2026-04-22 14:56:56 +08:00
2026-04-22 14:56:56 +08:00
2026-07-28 17:21:32 +08:00
2026-05-26 10:49:20 +08:00
2026-06-30 13:22:27 +08:00
2026-07-25 19:40:53 +08:00
2026-05-19 15:27:47 +08:00
2026-05-26 10:49:20 +08:00
2026-07-28 17:21:32 +08:00
2026-07-20 15:20:51 +08:00
2026-07-20 15:20:51 +08:00
2026-04-14 09:36:40 +08:00
2026-04-14 09:36:26 +08:00
2026-04-14 09:31:45 +08:00
2026-05-20 13:25:18 +08:00
2026-07-07 18:53:56 +08:00
2026-07-07 18:53:56 +08:00
2026-07-07 18:53:56 +08:00
2026-07-04 05:30:50 +08:00
2026-07-07 18:53:56 +08:00
2026-07-04 05:30:50 +08:00
2026-07-07 18:53:56 +08:00
2026-07-06 12:22:04 +08:00
2026-07-24 01:22:34 +08:00
2026-07-07 18:53:56 +08:00
2026-07-07 03:31:39 +08:00
2026-07-07 18:53:56 +08:00
2026-07-07 03:31:39 +08:00
2026-07-07 18:53:56 +08:00
2026-07-07 03:31:39 +08:00
2026-07-24 01:22:34 +08:00
2026-07-24 01:22:34 +08:00
2026-07-04 05:30:50 +08:00
2026-07-24 01:22:34 +08:00
2026-07-24 01:22:34 +08:00
2026-07-04 05:30:50 +08:00
2026-07-04 05:30:50 +08:00
2026-07-04 05:30:50 +08:00
2026-07-07 18:53:56 +08:00
2026-07-07 18:53:56 +08:00
2026-07-07 18:53:56 +08:00
2026-07-24 01:22:34 +08:00
2026-06-10 09:00:21 +08:00
2026-07-25 11:22:42 +08:00
2026-03-13 17:00:16 +08:00
2026-03-13 17:00:16 +08:00
2026-03-13 19:15:27 +08:00
2026-03-13 19:15:27 +08:00
2025-12-25 17:15:01 +08:00
2026-06-22 10:30:27 +08:00
2026-05-26 10:49:20 +08:00
2026-05-29 17:19:15 +08:00
2026-05-29 17:19:15 +08:00
2026-05-29 17:19:15 +08:00
2026-07-01 00:37:51 +08:00
2026-05-12 15:21:31 +08:00
2026-04-17 22:06:32 +08:00
2026-07-31 11:49:30 +08:00
2026-07-01 17:54:39 +08:00
2026-07-31 11:49:30 +08:00
2026-05-15 01:28:13 +08:00
2026-07-01 17:46:12 +08:00
2026-05-21 11:46:24 +08:00
2026-04-20 23:38:59 +08:00
2026-04-20 20:21:02 +08:00
2026-07-18 13:53:36 +08:00
2026-07-18 13:53:36 +08:00
2026-07-14 12:24:42 +08:00
2026-07-16 16:30:19 +08:00
2026-07-21 11:55:38 +08:00
2026-07-21 11:55:38 +08:00
2026-07-14 12:24:42 +08:00
2026-07-16 16:30:19 +08:00
2026-04-20 20:21:02 +08:00
2026-05-19 22:05:43 +08:00
2026-07-14 12:24:42 +08:00
2026-07-16 16:30:19 +08:00
2026-07-14 12:24:42 +08:00
2026-07-28 16:19:41 +08:00
2026-07-28 16:19:41 +08:00
2026-07-23 11:18:10 +08:00
2026-07-23 11:18:10 +08:00
2026-05-15 13:14:07 +08:00
2026-04-14 09:20:39 +08:00
2026-07-15 09:35:34 -07:00
2026-02-08 12:05:39 +08:00
2026-08-01 10:32:43 +08:00
2026-08-01 10:32:43 +08:00
2026-07-25 11:22:42 +08:00
2026-04-25 20:39:58 -04:00
2026-04-29 16:53:09 +08:00
2026-07-03 22:36:39 +08:00
2026-07-25 10:20:50 +08:00
2026-07-23 09:20:18 +08:00
2026-07-23 09:20:18 +08:00
2026-07-25 10:20:50 +08:00
2026-07-23 09:20:18 +08:00
2026-07-13 15:32:42 +08:00
2026-07-13 15:32:42 +08:00
2026-07-03 21:02:31 +08:00
2026-07-31 23:12:22 +08:00
2026-06-12 01:47:01 +08:00
2026-05-22 14:54:06 +08:00
2026-05-22 14:54:06 +08:00
2026-07-14 17:39:49 +08:00
2026-07-14 17:39:49 +08:00
2026-07-31 23:12:22 +08:00
2026-05-07 14:31:19 +08:00
2026-07-14 17:39:49 +08:00
2026-07-31 23:12:22 +08:00
2026-07-31 23:12:22 +08:00
2026-07-01 12:21:45 +08:00
2026-07-01 12:21:45 +08:00
2026-08-01 22:11:09 +08:00
2026-07-13 23:32:16 +08:00
2026-08-01 22:11:09 +08:00
2026-07-01 12:21:45 +08:00
2026-03-12 16:53:18 +08:00
2026-06-05 22:47:24 +08:00
2026-03-12 16:53:18 +08:00
2026-03-18 14:16:50 +08:00
2026-02-28 15:01:20 +08:00
2026-02-28 15:01:20 +08:00
2026-02-28 15:01:20 +08:00
2026-02-28 15:05:54 +08:00
2025-12-28 09:49:54 +08:00
2026-02-09 07:02:12 +08:00
2026-02-09 07:02:12 +08:00
2026-05-26 10:49:20 +08:00
2026-07-30 16:28:19 +08:00
2026-07-09 10:03:49 +08:00
2026-07-28 12:28:46 +08:00
2026-07-28 12:28:46 +08:00
2026-05-20 13:25:58 +08:00
2026-07-31 23:12:02 +08:00
2026-07-31 23:12:02 +08:00
2026-06-29 10:29:23 +08:00
2026-02-10 11:42:39 +08:00
2026-02-10 21:40:31 +08:00
2026-02-12 23:43:47 +08:00
2026-03-27 14:33:05 +08:00
2026-07-18 20:41:12 +08:00
2026-02-07 12:31:10 +08:00
2026-02-09 21:35:41 +08:00
2026-02-21 14:16:18 +08:00
2026-07-31 11:58:28 +08:00
2026-08-01 11:29:58 +08:00
2026-06-19 07:53:32 -07:00
2026-05-30 20:01:39 +08:00
2026-07-07 22:14:46 +08:00
2026-07-01 11:32:22 +08:00
2026-06-19 08:01:29 -07:00
2026-06-19 08:01:29 -07:00
2026-06-19 08:01:29 -07:00
2026-05-11 21:26:41 +08:00
2026-02-06 09:54:29 +08:00
2026-04-04 11:25:01 +08:00
2026-04-04 11:25:01 +08:00
2026-07-27 19:28:45 +08:00
2026-07-26 21:20:37 +08:00
2026-07-26 21:20:37 +08:00
2026-07-01 10:54:18 +08:00
2026-03-26 11:17:25 +08:00
2026-07-20 21:00:29 +08:00
2026-07-20 21:00:29 +08:00
2026-07-27 08:19:19 +08:00
2026-07-27 08:19:19 +08:00
2026-08-01 11:29:58 +08:00
2026-08-01 11:29:58 +08:00
2026-03-03 13:20:58 +08:00
2026-07-25 21:59:20 +07:00
2026-05-11 21:26:41 +08:00
2026-07-17 22:10:18 +08:00
2026-07-17 22:10:18 +08:00
2026-07-17 22:10:18 +08:00
2026-07-20 22:43:11 +08:00
2026-06-06 01:01:58 +08:00
2026-08-01 22:39:33 +08:00
2026-08-01 22:39:33 +08:00
2026-07-27 19:28:45 +08:00
2026-08-01 22:39:31 +08:00
2026-07-07 13:53:39 +08:00
2026-08-01 22:39:31 +08:00
2026-08-01 22:39:31 +08:00
2026-07-17 21:59:57 +08:00
2026-07-17 21:59:57 +08:00
2026-02-06 16:09:58 +08:00
2026-08-01 22:39:32 +08:00
2026-02-07 14:32:08 +08:00
2026-05-21 11:46:24 +08:00
2026-03-13 17:00:16 +08:00
2026-05-31 16:38:42 +08:00
2026-04-05 17:11:01 +08:00
2026-07-01 21:01:11 -05:00
2026-04-17 22:06:32 +08:00
2026-08-01 22:39:32 +08:00
2026-06-18 22:50:46 +08:00
2026-06-16 20:25:09 +08:00
2026-05-11 21:26:41 +08:00
2026-05-11 17:27:04 +08:00
2026-07-16 15:45:22 +08:00
2026-08-01 11:29:58 +08:00
2026-07-23 10:26:58 +08:00
2026-08-01 22:39:31 +08:00
2026-02-28 15:01:20 +08:00
2026-07-07 13:41:40 +08:00
2026-07-07 13:41:40 +08:00
2026-04-14 09:36:40 +08:00
2026-05-30 20:01:38 +08:00
2026-07-24 03:00:26 +08:00
2026-07-31 16:11:45 +08:00
2026-07-26 09:52:47 +08:00
2026-07-27 13:19:00 +09:00
2026-07-31 16:11:45 +08:00
2026-07-17 22:10:18 +08:00
2026-03-12 11:04:14 +08:00
2026-02-03 21:34:55 +08:00
2026-06-08 00:01:30 +08:00
2026-03-02 16:04:20 +08:00
2025-12-26 00:11:03 -08:00
2026-01-04 15:36:00 +08:00
2026-02-09 07:02:12 +08:00
2026-03-24 09:32:01 +08:00
2026-03-24 09:32:01 +08:00
2026-01-14 15:55:44 +08:00
2026-04-29 16:53:09 +08:00
2026-03-16 01:31:54 +08:00
2026-07-31 16:11:45 +08:00
2026-07-31 16:11:45 +08:00
2025-12-26 00:11:03 -08:00
2026-06-09 13:53:19 +08:00
2026-07-15 09:40:08 +08:00
2026-07-15 09:40:08 +08:00
2026-07-20 10:40:18 +08:00
2026-07-22 13:32:35 +08:00
2026-07-15 09:40:08 +08:00
2026-07-15 09:40:08 +08:00
2026-07-14 01:09:07 +08:00
2026-07-14 14:55:30 +08:00
2026-07-19 12:17:52 +08:00
2026-07-19 12:17:52 +08:00
2026-07-19 12:17:42 +08:00
2026-07-19 12:17:42 +08:00
2026-07-19 22:40:58 +08:00
2026-07-19 22:40:58 +08:00
2026-07-15 09:40:08 +08:00
2026-07-31 03:02:01 +00:00
2026-07-22 13:32:35 +08:00
2026-07-18 14:37:25 +08:00
2026-07-18 14:37:25 +08:00
2026-07-02 20:22:17 +00:00
2026-07-02 20:22:17 +00:00
2026-05-27 18:00:45 +08:00
2026-07-01 17:46:12 +08:00
2026-08-01 22:39:33 +08:00
2026-07-16 18:18:28 +08:00
2026-01-05 17:07:29 +08:00
2026-08-01 22:39:33 +08:00
2026-05-28 00:02:50 +08:00
2026-03-27 14:33:05 +08:00
2026-07-15 23:58:46 +08:00
2026-07-15 23:58:46 +08:00
2026-02-23 12:45:37 +08:00
2026-02-23 12:45:37 +08:00
2026-02-23 12:45:37 +08:00
2026-06-09 20:08:20 +08:00
2026-06-09 20:08:20 +08:00
2026-03-19 16:56:18 +08:00
2026-06-06 01:01:58 +08:00
2026-07-08 13:50:49 +08:00
2026-05-12 15:21:31 +08:00
2026-05-12 15:21:31 +08:00
2026-07-15 03:54:32 +08:00
2026-07-17 15:07:41 +08:00
2026-07-16 00:16:21 +08:00
2026-07-15 03:54:32 +08:00
2026-07-17 15:07:41 +08:00
2026-06-11 17:45:09 +08:00
2026-06-11 16:56:43 +08:00
2026-07-20 15:20:51 +08:00
2026-07-20 15:20:51 +08:00
2026-07-31 15:04:56 +08:00
2026-07-31 15:04:56 +08:00
2026-07-15 19:57:37 -07:00
2026-07-19 00:56:21 -07:00
2026-03-27 20:11:24 +08:00
2026-07-18 00:11:18 +08:00
2026-07-18 00:11:18 +08:00
2026-06-05 22:47:24 +08:00
2026-06-05 22:47:24 +08:00
2026-07-13 09:54:51 +08:00
2026-03-18 11:08:58 +08:00
2026-03-18 11:08:58 +08:00
2026-07-13 16:29:18 +08:00
2026-07-13 16:29:18 +08:00
2026-07-10 10:00:47 +08:00
2026-07-15 09:35:34 -07:00
2026-07-04 08:28:30 +08:00
2026-07-04 08:28:30 +08:00
2026-07-28 12:28:46 +08:00
2026-07-19 11:23:26 +08:00
2026-04-14 09:36:40 +08:00
2026-04-14 09:35:20 +08:00
2026-07-15 09:40:08 +08:00
2026-07-15 09:40:08 +08:00
2026-06-08 00:01:30 +08:00
2026-07-14 01:09:07 +08:00
2026-07-23 15:50:44 +08:00
2026-07-25 21:59:20 +07:00
2026-07-25 18:34:37 +08:00
2026-04-23 12:58:13 +08:00
2026-07-15 22:52:35 +08:00
2026-07-15 22:52:35 +08:00
2026-07-25 05:31:31 +08:00
2026-07-25 15:37:05 +08:00
2026-07-15 22:52:35 +08:00
2026-02-28 15:01:20 +08:00
2026-07-20 16:12:56 +08:00
2026-07-05 17:24:38 +08:00
2026-07-01 12:21:45 +08:00
2026-08-01 22:39:31 +08:00
2026-08-01 21:54:11 +08:00
2026-07-16 00:40:46 +08:00
2026-08-01 22:39:32 +08:00
2026-07-14 19:04:04 +08:00
2026-07-14 19:24:56 +08:00
2026-07-14 19:24:56 +08:00
2026-07-13 11:10:33 +08:00
2026-07-17 08:44:23 +08:00
2026-07-17 18:12:33 +08:00
2026-07-21 05:02:30 -07:00
2026-07-21 05:02:30 -07:00
2026-04-04 11:25:01 +08:00
2026-07-01 12:21:45 +08:00
2026-07-01 12:21:45 +08:00
2026-06-26 16:19:41 +08:00
2026-07-06 19:03:36 +08:00
2026-07-06 19:03:36 +08:00
2026-02-28 15:01:20 +08:00
2026-02-28 15:01:20 +08:00
2026-07-10 23:32:34 +08:00
2026-07-21 05:02:30 -07:00
2026-07-21 05:02:30 -07:00
2026-04-09 12:29:49 +08:00
2026-07-10 23:32:34 +08:00
2026-07-27 18:42:34 +08:00
2026-07-27 18:42:34 +08:00
2026-06-22 16:07:41 +00:00
2026-06-22 16:07:41 +00:00
2026-06-29 10:25:43 +08:00
2026-07-20 18:49:24 +08:00
2026-07-24 20:15:58 +08:00
2026-07-10 09:56:33 +08:00
2026-07-08 10:04:14 +08:00
2026-07-11 12:51:53 +08:00
2026-04-25 14:52:58 +08:00
2026-04-25 14:52:58 +08:00
2026-04-25 14:52:58 +08:00
2026-08-01 10:01:47 +08:00
2026-07-13 08:54:31 +08:00
2026-07-10 10:25:09 +08:00
2026-07-10 10:18:16 +08:00
2026-07-27 14:54:01 +08:00
2026-07-27 14:54:01 +08:00
2026-07-01 01:30:42 +08:00
2026-05-05 19:36:33 +08:00
2026-07-14 16:53:21 +08:00
2026-07-14 16:53:21 +08:00
2026-07-14 16:53:21 +08:00
2026-04-11 22:48:45 +08:00
2026-06-12 01:47:01 +08:00
2026-06-12 01:47:01 +08:00
2026-06-12 01:47:01 +08:00
2026-06-12 01:47:01 +08:00
2026-05-28 19:39:52 +08:00
2026-07-17 18:12:33 +08:00
2026-07-15 23:58:46 +08:00
2026-07-15 23:58:46 +08:00
2026-06-09 21:56:35 +08:00
2026-07-10 15:16:09 +08:00
2026-07-10 15:16:09 +08:00
2026-07-15 13:01:16 +08:00
2026-07-15 13:01:16 +08:00
2026-05-03 17:43:56 +08:00
2026-07-25 01:40:26 +08:00
2026-07-22 13:32:35 +08:00
2026-07-10 15:13:11 +08:00
2026-07-22 13:32:35 +08:00
2026-07-19 19:48:25 +08:00
2026-08-01 10:01:47 +08:00
2026-06-12 01:47:01 +08:00
2026-07-19 12:17:23 +08:00
2026-07-19 12:17:23 +08:00
2026-07-28 09:19:13 +08:00
2026-07-21 15:22:12 +08:00
2026-07-17 16:59:40 +08:00
2026-07-24 01:22:34 +08:00
2026-07-21 15:22:12 +08:00
2026-07-22 13:32:35 +08:00
2026-07-20 16:12:56 +08:00
2026-07-31 18:57:43 +08:00
2026-07-31 18:57:43 +08:00
2026-07-31 03:02:01 +00:00
2026-07-22 12:15:48 +08:00
2026-07-22 12:15:48 +08:00
2026-07-31 20:27:46 +08:00
2026-07-27 14:54:01 +08:00
2026-07-27 14:54:01 +08:00
2026-07-15 14:07:01 +08:00
2026-07-09 15:49:10 +08:00
2026-07-10 15:13:11 +08:00
2026-08-01 10:01:47 +08:00
2026-07-17 22:10:18 +08:00
2026-07-15 00:00:40 +08:00
2026-06-25 16:18:11 +08:00
2026-07-14 21:57:26 +08:00
2026-07-14 21:57:26 +08:00
2026-08-01 10:01:47 +08:00
2026-07-28 17:21:32 +08:00
2026-07-31 21:21:13 +08:00
2026-07-31 21:48:10 +08:00
2026-07-09 20:06:09 +08:00
2026-07-19 18:50:33 +08:00
2026-07-20 16:29:12 +08:00
2026-07-19 18:50:33 +08:00
2026-08-01 10:01:47 +08:00
2026-06-04 11:34:54 +08:00
2026-07-13 14:42:16 +08:00
2026-08-01 22:39:32 +08:00
2026-07-06 19:03:36 +08:00
2026-06-04 22:07:36 +08:00
2026-07-31 21:21:13 +08:00
2026-03-16 10:28:51 +08:00
2026-07-01 12:21:45 +08:00
2026-08-01 10:01:47 +08:00
2026-01-15 23:52:50 +08:00
2026-07-31 10:30:30 +08:00
2026-07-22 13:32:35 +08:00
2026-08-01 22:39:31 +08:00
2026-07-11 12:51:53 +08:00
2026-07-14 20:31:17 +08:00
2026-07-16 17:11:00 +08:00
2026-07-15 04:20:11 +08:00
2026-07-15 06:59:00 +08:00
2026-07-14 20:31:17 +08:00
2026-06-23 16:57:16 +08:00
2026-07-14 11:24:44 +08:00
2026-07-15 03:15:47 +08:00
2026-07-17 18:12:33 +08:00
2026-07-17 08:44:23 +08:00
2026-07-17 18:12:33 +08:00
2026-02-28 15:01:20 +08:00
2026-07-25 12:50:46 +08:00
2026-07-27 22:22:46 +08:00
2026-07-25 12:51:20 +08:00
2026-07-25 12:50:46 +08:00
2026-08-01 22:39:32 +08:00
2026-05-05 19:36:33 +08:00
2026-05-11 12:03:17 +08:00
2026-05-05 19:36:33 +08:00
2026-07-13 17:57:08 +08:00
2026-06-29 18:33:37 +08:00
2026-05-05 19:36:33 +08:00
2026-05-05 19:36:33 +08:00
2026-05-05 19:36:33 +08:00
2026-07-10 15:13:11 +08:00
2026-07-10 15:13:11 +08:00
2026-07-13 17:57:08 +08:00
2026-07-28 10:08:39 +08:00
2026-07-28 11:23:53 +08:00
2026-07-31 21:49:44 +08:00
2026-04-05 17:11:01 +08:00
2026-06-22 16:07:41 +00:00
2026-02-28 15:01:20 +08:00
2026-07-02 14:37:30 +08:00
2026-07-31 18:55:15 +08:00
2026-02-28 15:01:20 +08:00
2026-02-28 15:01:20 +08:00
2026-03-23 00:10:22 +08:00
2026-07-02 14:37:30 +08:00
2026-08-01 22:39:33 +08:00
2026-08-01 22:39:32 +08:00
2026-08-01 22:39:31 +08:00
2026-08-01 22:39:33 +08:00
2026-07-31 10:30:30 +08:00
2026-07-31 10:30:30 +08:00
2026-07-15 02:51:56 +08:00
2026-07-15 02:51:56 +08:00
2026-07-15 18:30:16 +08:00
2026-07-15 18:30:16 +08:00
2026-07-10 11:09:06 +08:00
2026-07-21 11:16:04 +08:00
2026-07-21 11:16:04 +08:00
2026-07-16 00:19:20 +08:00
2026-07-25 01:40:26 +08:00
2026-07-15 22:23:57 +08:00
2026-07-15 22:23:57 +08:00
2026-07-28 09:19:13 +08:00
2026-07-28 09:19:13 +08:00
2026-07-28 09:19:13 +08:00
2026-07-24 02:59:32 +08:00
2026-07-15 22:37:30 +08:00
2026-05-19 15:48:36 +08:00
2026-07-01 12:21:45 +08:00
2026-07-15 21:20:41 +08:00
2026-05-05 03:26:54 +08:00
2026-07-15 02:41:23 +08:00
2026-02-28 15:01:20 +08:00
2026-03-09 15:08:37 +08:00
2026-07-18 03:24:04 +08:00
2026-07-02 14:37:30 +08:00
2026-05-23 10:18:43 +08:00
2026-06-22 16:07:41 +00:00
2026-07-06 11:43:16 +08:00
2026-07-06 11:43:16 +08:00
2026-02-28 15:01:20 +08:00
2026-02-28 15:01:20 +08:00
2026-07-25 15:37:06 +08:00
2026-06-07 22:31:45 +08:00
2026-07-25 15:37:05 +08:00
2026-05-29 12:20:30 +08:00
2026-07-15 22:15:44 +08:00
2026-07-18 19:17:53 +08:00
2026-07-13 15:32:42 +08:00
2026-07-14 19:04:04 +08:00
2026-02-28 15:01:20 +08:00
2026-02-28 15:01:20 +08:00
2026-05-28 01:27:11 +08:00
2026-07-16 17:11:00 +08:00
2026-07-10 06:37:06 +00:00
2026-08-01 22:39:33 +08:00
2026-07-10 10:11:21 +08:00
2026-07-21 05:02:30 -07:00
2026-02-28 15:01:20 +08:00
2026-07-24 02:59:32 +08:00
2026-08-01 22:39:32 +08:00
2026-07-15 22:52:35 +08:00
2026-07-16 17:11:00 +08:00
2026-07-26 13:43:06 +08:00
2026-07-26 13:43:06 +08:00
2026-07-26 13:43:06 +08:00
2026-08-01 22:39:33 +08:00
2026-02-28 15:01:20 +08:00
2026-07-13 15:32:42 +08:00
2026-07-14 19:04:04 +08:00
2026-07-31 21:21:13 +08:00
2026-06-30 10:40:05 +08:00
2026-06-30 10:41:41 +08:00
2026-07-15 22:52:35 +08:00
2026-02-28 15:01:20 +08:00
2026-06-06 16:54:56 +08:00
2026-07-10 11:56:47 +08:00
2026-07-26 13:43:06 +08:00
2026-07-18 19:17:53 +08:00
2026-07-02 20:04:47 +00:00
2026-07-15 23:58:46 +08:00
2026-03-14 18:47:37 +08:00
2026-06-07 22:31:45 +08:00
2026-06-08 00:01:30 +08:00
2026-01-15 15:14:44 +08:00
2026-01-15 15:14:44 +08:00
2026-07-18 00:11:18 +08:00
2026-05-04 13:35:26 +08:00
2026-04-29 15:01:02 +08:00
2026-07-29 13:25:03 +08:00
2026-07-02 20:04:47 +00:00
2026-01-10 01:38:47 +08:00
2026-03-04 13:45:49 +08:00
2026-03-04 13:45:49 +08:00
2026-01-15 15:14:44 +08:00
2026-01-15 23:02:15 +08:00
2026-03-04 13:45:49 +08:00
2026-07-18 00:11:18 +08:00
2026-07-18 00:42:16 +08:00
2026-07-18 00:11:18 +08:00
2026-02-12 16:27:29 +08:00
2026-07-14 16:18:26 +08:00
2026-05-26 17:21:56 +08:00
2026-07-14 16:18:26 +08:00
2026-07-18 00:11:18 +08:00
2026-02-12 14:20:14 +08:00
2026-02-12 14:20:14 +08:00
2026-02-12 14:20:14 +08:00
2026-07-18 00:11:18 +08:00
2026-03-04 15:22:46 +08:00
2026-03-04 13:45:49 +08:00
2026-07-18 00:11:18 +08:00
2026-02-09 08:27:14 +08:00
2026-01-12 14:17:42 +08:00
2026-01-12 14:17:42 +08:00
2026-01-09 20:53:44 +08:00
2026-07-18 00:11:18 +08:00
2026-01-11 23:57:20 +08:00
2026-07-18 00:11:18 +08:00
2026-07-28 12:28:46 +08:00
2026-07-19 11:39:20 +08:00
2026-07-14 14:55:30 +08:00
2026-05-19 19:37:41 +08:00
2026-07-18 00:11:18 +08:00
2026-07-18 00:11:18 +08:00
2026-07-18 00:11:18 +08:00
2026-07-18 00:11:18 +08:00
2026-07-18 00:11:18 +08:00
2026-07-14 01:29:46 +08:00
2026-07-14 01:29:46 +08:00
2026-07-18 00:11:18 +08:00
2026-07-18 00:11:18 +08:00
2026-01-23 19:39:48 +08:00
2026-03-04 13:45:49 +08:00
2026-05-19 19:37:41 +08:00
2026-07-18 03:24:04 +08:00
2026-06-12 01:47:01 +08:00
2026-07-14 14:55:30 +08:00
2026-07-14 14:55:30 +08:00
2026-01-09 20:53:44 +08:00
2026-03-18 16:22:19 +08:00
2026-02-12 14:20:56 +08:00
2026-07-28 14:12:46 +08:00
2026-07-28 14:12:46 +08:00
2026-07-06 14:34:17 +08:00
2026-07-06 15:00:29 +08:00
2026-07-06 15:00:29 +08:00
2026-07-15 11:17:45 +08:00
2026-07-15 11:17:45 +08:00
2026-07-06 15:00:29 +08:00
2026-07-06 15:00:29 +08:00
2026-07-31 14:21:36 +08:00
2026-07-31 14:21:36 +08:00
2026-05-11 11:17:26 +08:00
2026-04-23 19:22:43 +08:00
2026-07-22 19:18:04 +08:00
2026-07-10 10:56:49 +08:00
2026-06-05 22:47:24 +08:00
2026-04-22 11:28:58 +08:00
2026-05-20 16:08:41 +08:00
2026-07-14 01:29:30 +08:00
2026-05-11 11:17:26 +08:00
2026-05-11 11:17:26 +08:00
2026-07-22 19:18:04 +08:00
2026-07-22 19:18:04 +08:00
2026-06-30 10:19:50 +08:00
2026-07-14 01:29:30 +08:00
2026-04-22 12:30:17 +08:00
2026-05-19 16:56:31 +08:00
2026-07-06 15:00:29 +08:00
2026-04-22 12:30:17 +08:00
2026-07-26 03:18:30 +08:00
2026-07-26 03:18:30 +08:00
2026-07-26 03:18:30 +08:00
2026-07-22 19:18:04 +08:00
2026-04-22 02:32:53 +08:00
2026-04-21 12:50:55 +08:00
2026-05-26 10:49:20 +08:00
2026-07-31 21:20:32 +08:00
2026-07-31 09:42:46 +08:00
2026-08-01 22:39:33 +08:00
2026-08-01 22:39:31 +08:00
2026-08-01 22:39:33 +08:00
2026-01-10 13:14:35 +08:00
2026-01-10 13:14:35 +08:00
2026-06-18 23:07:25 +08:00
2026-06-08 00:01:30 +08:00
2026-06-08 00:01:30 +08:00
2026-06-08 00:01:30 +08:00
2026-02-20 12:13:04 +08:00
2026-06-08 00:01:30 +08:00
2026-03-17 08:40:08 +08:00
2026-07-15 23:58:46 +08:00
2026-06-08 00:01:30 +08:00
2026-01-03 06:29:02 -08:00
2026-07-07 23:19:23 +08:00
2026-03-14 02:21:22 +08:00
2026-07-05 08:34:34 +08:00
2026-05-23 10:18:43 +08:00
2026-07-04 08:28:30 +08:00
2026-07-04 08:28:30 +08:00
2026-05-23 10:18:43 +08:00
2026-07-18 15:35:30 +08:00
2026-06-05 18:12:33 +08:00
2026-07-01 12:21:45 +08:00
2026-07-18 20:41:12 +08:00
2026-07-17 22:10:18 +08:00
2026-05-19 15:53:28 +08:00
2026-05-19 15:53:28 +08:00
2026-05-20 16:08:41 +08:00
2026-07-02 16:38:42 +00:00
2026-07-10 10:56:49 +08:00
2026-07-14 14:55:30 +08:00
2026-07-16 13:47:50 +08:00
2026-07-25 19:40:53 +08:00
2026-07-25 19:40:53 +08:00
2026-05-21 21:02:26 +08:00
2026-05-21 21:02:26 +08:00
2026-02-28 15:01:20 +08:00
2026-02-28 15:01:20 +08:00
2026-02-28 15:01:20 +08:00
2026-02-28 20:34:22 +08:00
2026-03-08 06:59:53 +08:00
2026-03-08 06:59:53 +08:00
2026-03-05 16:37:07 +08:00
2026-07-15 00:12:40 +08:00
2026-01-12 14:19:06 +08:00
2026-02-07 12:31:10 +08:00
2026-07-13 21:56:47 +08:00
2026-02-09 21:35:41 +08:00
2026-07-17 22:10:18 +08:00
2026-07-16 00:11:17 +08:00
2026-07-17 22:10:18 +08:00
2026-07-15 04:23:06 +08:00
2026-07-15 05:31:50 +08:00
2026-07-15 00:12:40 +08:00
2026-07-15 13:24:08 +08:00
2026-07-15 04:23:06 +08:00
2026-08-01 22:39:33 +08:00
2026-07-16 13:47:50 +08:00
2026-07-24 01:22:34 +08:00
2026-07-24 01:22:34 +08:00
2026-02-02 22:13:50 +08:00
2026-07-28 11:45:18 +08:00
2026-07-10 09:56:33 +08:00
2026-07-08 08:49:20 +08:00
2026-07-27 15:12:51 +08:00
2026-07-27 15:12:51 +08:00
2026-07-30 16:28:19 +08:00
2026-07-30 16:28:19 +08:00
2026-04-21 20:36:10 +08:00
2026-03-12 02:42:57 +03:00
2026-06-13 04:12:13 +08:00
2026-06-26 16:19:41 +08:00
2026-06-26 16:19:41 +08:00
2026-04-22 16:51:23 +08:00
2026-06-30 14:03:33 +08:00
2026-07-30 16:28:19 +08:00
2026-07-30 16:28:19 +08:00
2026-06-05 14:00:57 +08:00
2026-04-22 13:18:10 +08:00
2026-07-27 15:12:51 +08:00
2026-07-30 16:28:19 +08:00
2026-06-05 14:00:57 +08:00
2025-12-26 16:45:40 +08:00
2026-07-30 16:28:19 +08:00
2026-07-01 12:21:45 +08:00
2026-07-01 12:21:45 +08:00
2026-05-19 19:37:41 +08:00
2026-07-01 12:21:45 +08:00
2026-04-21 10:13:28 -07:00
2026-02-06 22:55:12 +08:00
2026-02-07 21:18:03 +08:00
2026-04-23 21:40:58 +08:00
2026-07-30 02:37:14 +08:00
2026-07-19 21:37:26 +08:00
2026-07-10 10:56:49 +08:00
2026-06-05 22:47:24 +08:00
2026-02-10 17:52:10 +08:00
2026-02-10 17:51:49 +08:00
2026-07-30 02:37:14 +08:00
2026-07-30 02:37:14 +08:00
2026-07-01 22:19:21 +08:00
2026-07-30 02:37:14 +08:00
2026-02-23 12:45:37 +08:00
2026-02-23 12:45:37 +08:00
2026-02-07 12:31:10 +08:00
2026-01-11 21:54:52 -08:00
2026-04-04 11:13:58 +08:00
2026-06-16 19:37:31 +08:00
2026-07-28 10:08:39 +08:00
2026-07-28 10:08:39 +08:00
2026-02-10 17:52:10 +08:00
2026-02-12 19:01:09 +08:00
2026-03-27 14:33:05 +08:00
2026-02-02 22:13:50 +08:00
2026-06-26 10:36:09 +08:00
2026-06-26 10:36:09 +08:00
2026-01-15 18:27:06 +08:00
2026-07-25 21:59:20 +07:00
2026-07-29 18:35:56 +08:00
2026-07-15 09:40:08 +08:00
2026-07-15 09:40:08 +08:00
2026-07-10 02:27:33 -04:00
2026-07-09 11:05:05 -04:00
2026-07-16 16:49:08 +08:00
2026-07-16 16:49:08 +08:00
2026-02-12 19:01:09 +08:00
2026-07-09 22:30:04 +08:00
2026-07-09 22:30:04 +08:00
2026-08-01 22:11:09 +08:00
2026-08-01 22:11:10 +08:00
2026-08-01 22:11:10 +08:00
2026-07-22 13:32:35 +08:00
2026-07-22 13:32:35 +08:00
2026-07-31 16:11:45 +08:00
2026-07-31 16:11:45 +08:00
2026-04-16 01:53:22 +08:00
2026-04-17 22:07:15 +08:00
2026-07-06 12:22:04 +08:00
2026-03-12 16:53:18 +08:00
2026-02-28 15:01:20 +08:00
2026-02-28 15:01:20 +08:00
2026-03-12 18:38:09 +08:00
2026-06-12 01:47:01 +08:00
2026-07-27 00:43:53 +08:00
2026-02-28 15:01:20 +08:00
2026-07-25 15:16:05 +08:00
2026-08-01 11:29:58 +08:00
2026-08-01 11:29:58 +08:00
2026-06-30 15:31:28 +08:00
2026-05-19 15:27:47 +08:00
2026-01-01 18:58:34 +08:00
2026-03-06 16:47:51 +08:00
2026-03-06 16:47:51 +08:00
2026-04-23 16:34:37 +08:00
2026-07-06 20:27:13 +08:00
2026-07-06 20:27:13 +08:00
2026-05-29 17:19:15 +08:00
2026-05-29 17:19:15 +08:00
2026-05-29 17:19:15 +08:00
2026-04-23 16:34:37 +08:00
2026-04-21 01:00:59 +08:00
2026-07-28 17:21:32 +08:00
2026-07-28 17:21:32 +08:00
2026-07-28 17:21:32 +08:00
2026-07-30 02:37:14 +08:00
2026-07-19 21:37:26 +08:00
2026-07-10 10:56:49 +08:00
2026-07-30 02:37:14 +08:00
2026-07-06 12:22:04 +08:00
2026-07-14 01:29:30 +08:00
2026-07-14 01:29:30 +08:00
2026-07-09 15:38:59 +08:00
2026-04-14 09:36:40 +08:00
2026-04-14 17:35:27 +08:00
2026-01-16 15:25:33 +08:00
2026-07-26 09:50:28 -04:00