《《软件教研室》PPT课件》由会员分享,可在线阅读,更多相关《《软件教研室》PPT课件(69页珍藏版)》请在金锄头文库上搜索。
1、软件教研室软件教研室第三章 中断与处理机调度中断与中断系统处理机调度调度级别与多级调度实时调度软件教研室软件教研室3.1 中断与中断系统3.1.1 中断的概念3.1.2 中断装置3.1.3 中断处理程序软件教研室软件教研室3.1.1 中断的概念处理机在运行过程中,出现了某一事件,必须中止正在运行的程序,转去处理这个事件,然后再返回原来运行的程序,这一过程称为中断。中断系统:中断装置(硬件)中断处理程序(软件)软件教研室软件教研室3.1.2 中断装置发现并响应中断的硬件机构识别中断源,当有多个中断源时,按紧迫程度排队;保存现场;引出中断处理程序。软件教研室软件教研室中断响应和处理的过程正正运运行
2、行程程序序 1 6处理程序 4PSW,PCPC:PSW, PC系统桟psw, pc.253HALOS软件教研室软件教研室3.1.2.1 中断源与中断字中断源引起中断的事件。中断寄存器保存与中断事件相关信息的寄存器。中断字中断寄存器的内容。例:IO中断:设备状态寄存器。软件教研室软件教研室3.1.2.2 中断类型与中断向量强迫性中断运行程序不期望的时钟中断、IO中断、控制台中断硬件故障中断(power failure、内存校验错)程序性中断(越界,越权、非法指令)自愿性中断运行程序期望的系统调用: fd=open(fname,mode)访管指令:准备参数 svc n 取返回值软件教研室软件教研室
3、3.1.2.2 中断类型与中断向量运行程序中断装置中断处理程序clockIOconsolepower failuremalfunction强迫中断:中断装置 中断处 理程序运行程序访管指令自愿中断:SVC ntrap n软件教研室软件教研室3.1.2.2 中断类型与中断向量中断向量:中断处理程序的运行环境与入口地址(PSW,PC)每类中断事件有一个中断向量,中断向量的存放位置是由硬件规定的,中断向量的内容是OS在系统初始化时设置好的。软件教研室软件教研室3.1.2.2 中断类型与中断向量PSW1, PC1 时钟中断向量PSW2, PC2 I/O中断向量PSW3, PC3 控制台中断向量PSW4
4、, PC4 硬件故障PSW5, PC5 程序错误 PSWn, PCn 访管中断向量00000008001600240030 0090时钟中断处理程序PC1:I/O中断处理程序PC2:访管中断处理程序PCn:系统空间软件教研室软件教研室3.1.2.3 中断嵌套与系统栈一般原则:高优先级别中断可以嵌入低优先级中断实现方法:中断响应后立即屏蔽不高于当前中断优先级的中断源。软件教研室软件教研室中断嵌套与系统栈进入中断后一般需要进一步保存现场进入中断后一般需要进一步保存现场进入中断后一般需要进一步保存现场进入中断后一般需要进一步保存现场 关中断(屏蔽所有中断) 进一步保存现场(地址寄存器,通用寄存器等)
5、 开中断(或开放高优先级中断) . 中断处理 . 恢复现场 中断返回软件教研室软件教研室中断嵌套与系统栈中断嵌套:目态PSW1: PC1管态PSW2: PC2管态PSWn: PCnPSWn-1 PCn-1PSW2 PC2PSW1 PC1系统栈:指针软件教研室软件教研室3.1.2.4 中断优先级与中断屏蔽中断优先级:硬件规定的中断响应次序,依据:紧迫程度;处理时间。中断屏蔽:高优先级中断事件处理不受低优先级中断打扰;程序调整中断响应次序。软件教研室软件教研室3.1.3 中断处理程序强迫性中断: 自愿性中断: 转中断处理程序 是否嵌套中断由系统栈恢复现场 需要切换进程 返回上层中断 由系统栈恢复现
6、场 转CPU分派 返回目态程序 (dispatcher)保存现场信息取中断字分析中断原因保存现场信息取访管号分析调用功能TFFT软件教研室软件教研室3.2 处理机调度处理机调度算法按什么原则分配处理机调度时机何时重新分配处理机调度过程如何完成分配软件教研室软件教研室3.2.1 处理机调度算法考虑因素(scheduling criteria)CPU利用率 ; (max)吞吐量 ; (max)周转时间 ; (min)响应时间 ; (min)系统开销 ; (min)软件教研室软件教研室基本概念 阵发期 :CPU burst cycle: 进程(线程)使用CPU计算;I/O burst cycle:
7、进程(线程)使用设备I/O。剥夺式(preemptive)就绪进程可以从运行进程手中抢占CPU。非剥夺式(non-preemptive)就绪进程不可从运行进程手中抢占CPU。软件教研室软件教研室3.2.1.1 先到先服务算法FCFS(First Come First Serve)按进程申请CPU(就绪)的次序。Gantt图(到达次序:P1,P2,P3)processBurst timeP127P23P35P1P2P30 27 30 35软件教研室软件教研室3.2.1.1 先到先服务算法平均等待时间:(0+27+30)/3 = 19(ms)Gantt图(到达次序:P2,P3,P1)平均等待时间(
8、0+3+8)/3 = 3.67P1P2 P30 3 8 35软件教研室软件教研室3.2.1.2 短作业优先SJF(Shortest Job First)按CPU burst长度Gantt chart:ProcessBurst timeP112P25P37P43P1P3P2P40 3 8 15 27软件教研室软件教研室3.2.1.2 短作业优先(SJF)平均等待时间:(0+3+8+15)/4 = 6.5 (ms)特点:假定所有任务同时到达,平均等待时间最短。长作业可能被饿死。软件教研室软件教研室3.2.1.3 最高优先数算法(HPF)静态优先数(static)优先数在进程创建时分配,生存期内不变
9、。响应速度慢,开销小。适合批处理进程动态优先数(dynamic)进程创建时继承优先数,生存期内可以修改。响应速度快,开销大。软件教研室软件教研室3.2.1.3 最高优先数算法(Cont.)非剥夺式静态优先数获得处理机的进程运行,直至终止等待剥夺式动(静)态优先数获得处理机的进程运行,直至终止等待出现高优先级的进程软件教研室软件教研室3.2.1.4 循环轮转算法(RR)基本轮转时间片(quantum,time slice)长度固定,不变;所有进程等速向前推进。改进轮转时间片长度不定,可变。软件教研室软件教研室3.2.1.4 循环轮转算法 (Cont.)时间片长度: 几十毫秒几百毫秒(eg. 50
10、ms)过长:响应速度慢;过短:系统开销(overhead)大。适应系统:分时软件教研室软件教研室3.2.1.5 多级队列算法(MLQ)多级队列多个就绪队列,进程所属的队列固定。例如:通用系统中: 队列1:实时进程就绪队列(HPF) 队列2:分时进程就绪队列 (RR) 队列3:批处理进程就绪队列 (HPF)软件教研室软件教研室3.2.1.6 最短剩余时间(SRTN)Shortest Remaining Time Next可剥夺SJF软件教研室软件教研室3. 2.1.7 反馈排队算法(FB)Feed-Back:多个就绪队列,进程所属队列可变。Q1(RR,HPF)Q2(RR,HPF)Qn(RR,HP
11、F)运行s1时间片运行s2时间片.创建唤醒优先级 时间片运行sn时间片软件教研室软件教研室3.2.1.7 反馈排队算法 (Cont.)调度效果: 资源利用率高被唤醒的进程尽早投入运行; 响应速度快交互式进程反应及时; 系统开销小计算量大的进程落入底层队列。软件教研室软件教研室3.2.2 处理机调度时机l中断处理完毕,没有嵌套中断,即将返回目态。Pi=Pj: 未发生进程切换;未发生进程切换;PiPj: 发生了进程切换发生了进程切换。目态(Pi运行)目态(Pj运行)管态管态.中断返回返回返回中断中断软件教研室软件教研室3.2.2 处理机调度时机(Cont.)l必然引起进程切换的中断进程自愿结束,
12、exit()进程被强行终止;l非法指令,越界,kill进程等待l可能引起进程切换的中断时钟系统调用软件教研室软件教研室3.2.3 处理机调度过程l保存下降进程的现场系统栈PCBl选择上升进程按处理机调度算法l恢复上升进程的现场PCB 寄存器软件教研室软件教研室3.3 调度级别与多级调度3.3.1 交换与中级调度Swapping and mid-level scheduling3.3.2 作业与高级调度Job and high-level scheduling软件教研室软件教研室3.3.1 交换与中级调度术语交换(swapping)中级调度(mid-level scheduling)并发度(de
13、gree of multi-programming)目标:控制并发度并发度过高系统开销大、响应速度慢内存等资源紧张进程(线程)频繁进入等待状态软件教研室软件教研室3.3.1 交换与中级调度剥夺就绪等待运行 选中等待事件事件发生就绪挂起等待挂起无终止创建创建结束换出换出换入换入事件发生软件教研室软件教研室3.3.2 作业与高级调度作业状态:提交: 输入机向输入井传送后备: 在输入井,尚未进入内存执行: 分解为进程,在内存处理完成: 处理完毕,结果在输出井退出: 由输出井向打印机传送软件教研室软件教研室3.3.2 作业与高级调度l状态转换:提交后备: 由SPOOLing输入进程完成后备执行: 由作
14、业调度(1)(高级调度)完成执行完成: 由作业调度(2)完成完成退出: 由SOOPLing输出进程完成提交后备执行完成退出SPOOLing输入作业调度1作业调度2SPOOLing输出软件教研室软件教研室3.4 实时调度(real-time scheduling)实时任务:具有明确时间约束的计算任务。Eg.某时刻前必须开始处理某时刻前必须处理完毕实时调度:合理安排就绪实时任务的执行次序,满足每个实时任务时间约束条件的调度。软件教研室软件教研室实时任务分类硬实时 与 软实时 硬实时 :必须满足任务截止期要求 . 软实时 :期望满足截止期要求 . 周期性与随机性 周期性 :每隔固定时间发生一次 随机
15、性:由随机事件触发,其发生时刻不确定 软件教研室软件教研室术语解释Ready time: 就绪时间Starting deadline: 开始截止期Processing time: 处理时间Completion deadline: 完成截止期Occurring frequency: 发生频率软件教研室软件教研室周期性实时事务周期性实时事务:令Ci为任务Pi处理时间,Ti为任务Pi的发生周期,则任务P1,Pm可调度的必要条件为: 软件教研室软件教研室周期性实时事务l例:T1=100, T2=200, T3=500 (ms)C1=50, C2=30, C3=100 (ms)C1/T1+C2/T2+C
16、3/T3=0.5+0.15+0.2=0.850)goodness=quantum+priority软件教研室软件教研室Linux 进程调度l调度发生时刻: 运行进程的quantum减至0; 运行进程执行系统调用exit ;运行进程因等待I/O、信号灯而被封锁 ;原来具有高goodness的进程被解除封锁 .l调度效果 :实时优先于分时 交互和I/O进程优先于CPU进程 软件教研室软件教研室Linux 对称多处理lLinux2.0是支持对称多处理硬件的第一个Linux核心 ; 进程或线程可以同时运行在多个处理机上 .l为保持核心非剥夺同步要求,SMP通过一个唯一的核心自旋锁(spin-lock)
17、来保证任何时刻最多只有一个处理机执行核心代码, 支持真正意义上的SMP:将一个自旋锁分解为若干个相互独立的自旋锁,分别用于保护核心代码不相交的子集 .软件教研室软件教研室3.6.2 Windows 2000/XP线程调度Main Features:Thread level scheduling;Real time + foreground + background;real time: no deadline scheduling;foreground: GUI windowbackground: non-interactivePreemptive + dynamic priority + R
18、R + Feed back;Symmetric Multi-Processor(SMP) support;软件教研室软件教研室优先级别16个实时优先级(16-31)一些内核线程应用程序提升为实时优先级需要有权限不是真正意义上的实时调度15个可变线程优先级(1-15)基本优先级 vs. 当前优先级可动态提升运行完一个quantum之后自动下降1个系统线程优先级(0)软件教研室软件教研室优先级提升优先级提升IO操作完成事件等待结束前台进程中的线程完成一个等待操作由于窗口活动而唤醒GUI线程就绪超过一定时限,未获得处理机优先级提升不会超过15软件教研室软件教研室抢占CPU抢先情形被唤醒线程优先级高于
19、运行线程优先级;某线程的优先级动态变化被抢先线程回到相应就绪队列时间配额实时线程:重新分配完整时间配额其它线程:保持剩余配额软件教研室软件教研室时间配额(quantum)配额长度:6-36时钟中断(15ms发生一次)减3,2-12次时钟中断(30ms-180ms)配额用完配额用完后进入就绪队列,优先级下降软件教研室软件教研室SMP上的线程调度线程与CPU的亲合关系每个进程有一个处理器亲合掩码,缺省为所有处理器的集合线程继承其进程的亲合掩码亲合掩码可以修改SetProcessAffinityMask, SetThreadAffinityMask;软件教研室软件教研室SMP上的线程调度线程的理想处
20、理器(Ideal processor)首选处理器:第二处理器:(在内核线程控制块中)理想处理器确定线程创建时随机确定,分散各个线程与处理机对应关系。线程可修改SetThreadIdealProcessor软件教研室软件教研室就绪线程的处理器选择有空闲处理器首选处理器第二处理器当前执行处理器(正执行调度代码)由高到低顺序找空闲的处理器无空闲处理器,考虑抢先首选处理器第二处理器可运行编号最大处理器不能抢先进入相应的就绪队列软件教研室软件教研室处理器对就绪线程的选择处理器对就绪线程的选择空闲处理器调度空闲处理器调度线程上次在此线程上次在此CPU上运行(二级缓上运行(二级缓冲利用)冲利用)线程的理想处
21、理器是该线程的理想处理器是该CPU处于就绪状态时间超过处于就绪状态时间超过2个个quantum优先级别大于等于优先级别大于等于24软件教研室软件教研室UjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbJ8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0y)v&s#pXmUiRfNcK9H5E2B+x(u%rZoWkT
22、hQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4C1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8H5D2A-x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcL9H6E2
23、B+y(u%r#oWlThQeNbJ8G5D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$rZnWkThPeMaJ7G4C1z-w&t!pYmVjRgOdL9I6E3B0y(v%s#oXlTiQfNbK8H5D2A-x*u$qZnWkShPdMaJ7F4C1z)w&t!pYm
24、UjRgOcL9I6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*t$qZnVkShPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlTiQeNbJ8G5D1A-x*t$qYnVkSgPdMaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXmUiRfNcK9H5E2B+x(u$rZoWkThQeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$rZnWkThPeMbJ7G
25、4C1z-w&t!qYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQe7F4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbK8G5D1A-x*t$qZnVk
26、SgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0y)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%s#oXlTiQfNbK8H5D
27、2A-x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#pX
28、lUiQfNcK8H5E2w*t!qYnVjSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$rZnWkThPeMaJ7G4C1z-w&t!pYmVjRgOdL9I6E3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*t$qZnVkShPdMaI7F4C0z)w&s!pYmUjRfOcL9H6E3
29、B+y(u%r#oWlTiQeNbJ8G5D1A-x*t$qYnVkSgPdMaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+x(u%rZoWlThQeNbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0y)v&s#pXmUiRfNcK9H5E2B+x(u$rZoWkThQeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7G4C1z)w&t!pYm
30、VjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(v%r#kShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G5D1A-w*t$qYnVkSgPdLaI7F3C
31、0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0y)v%s#pXlUiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z-w&t!pYmVjRgOdL9I6E3B0y(v%s#oXlTiQfNbK8H5D2A-x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*t$qZnV
32、kShPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+x(u%rZoWlThQeMbJC0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-x*t$qYnVkSgPdMaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2B+x(u$rZoWkThQeMbJ7G4D1z
33、-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$rZnWkThPeMaJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbJ8G5D1A-x*t$qYnVkSgPdMaI7F3C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZkShP
34、dMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbJ8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0y)v&s#pXmUiRfNcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4C1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+
35、x*u$rZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8H5D2A-x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNb4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%s#oXlTiQfNbK8H5D2A-x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*t$qZnVkShPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlThQeN
36、bJ8G5D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w&t!qYmVjSgOdLaI6F3B0y)v%s#pXlQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$rZnWkThPeMaJ7G4C1z-w&t!pYmVjRgOdL9I6E3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*t$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbJ8G5D1A-x*t$qYnVkSgPd6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL