źyŽz{NÅ Ł”‚,Schema’’’’’’’’ Example One’’’’’’’’Guide’’’’’’’’’’’’,čk}ś~Š7ĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĮš vŹĖ¾},ĶĶĶ» ū ’’’’ĶĶĶĶ’’’’ĶĶĶĶÅ’ĶĶ’’’’ĶĶĶĶ«F Doit Ŗ ’ĶĶ’’’’ĶĶĶ͇DNwRake $ ’ĶĶ’’’’ĶĶĶĶ DNetworkTable Ć ’ĶĶ’’’’ĶĶĶ͈DConnList u’ĶĶ’’’’ĶĶĶĶ®FEnsureComplete ¬ ’ĶĶ’’’’ĶĶĶ͌F SetUp ‹ ‰ ’ĶĶ’’’’ĶĶĶĶVDBackupOn ¶ ’ĶĶ’’’’ĶĶĶ͊Isc ‘ ’ĶĶ’’’’ĶĶĶĶ­Iscenario ‘ ’ĶĶ’’’’ĶĶĶ͐FAddServer ‘    ’ĶĶ’’’’ĶĶĶĶ&DChannels ¹ Server’ĶĶ’’’’ĶĶĶĶŽIsv  ’ĶĶ’’’’ĶĶĶͰEListObjects q Æ ’ĶĶ’’’’ĶĶĶĶ‘? ServerContainer€5' ’  “ „ ” ’ĶĶ’’’’ĶĶĶĶWDDevelopmentOn ¶ ’ĶĶ’’’’ĶĶĶĶ•DBox ” ’ĶĶ’’’’ĶĶĶͱ?"CmdSwitchChannel€!' ²  ³  “ ’ĶĶ’’’’ĶĶĶĶ–DDisksList t’ĶĶ’’’’ĶĶĶĶDSomeDisks » ’ĶĶ’’’’ĶĶĶĶ—DAppStripe Ŗ ’ĶĶ’’’’ĶĶĶ͵DSetting D ’ĶĶ’’’’ĶĶĶ͜F SetUp › ˜ ’ĶĶ’’’’ĶĶĶĶXD Datas Č ’ĶĶ’’’’ĶĶĶĶ™Isv  ’ĶĶ’’’’ĶĶĶͶDNewSomeDisks 5 ’ĶĶ’’’’ĶĶĶ͚Iconfigstripe  ’ĶĶ’’’’ĶĶĶĶ'DInbuiltDisks 5 ’ĶĶ’’’’ĶĶĶĶ FAddApp Ÿ  ’ĶĶ’’’’ĶĶĶ͹F Doit ø · ’ĶĶ’’’’ĶĶĶĶžIab × ’ĶĶ’’’’ĶĶĶĶYDActions Ļ ’ĶĶ’’’’ĶĶĶĶ”?ServerBox€6' ¢  £ ¢ ¤ ’ĶĶ’’’’ĶĶĶͽFEnsureComplete ¼ ŗ ’ĶĶ’’’’ĶĶĶĶ„DDataObject  ’ĶĶ’’’’ĶĶĶĶDScenarios Ó ’ĶĶ’’’’ĶĶĶĶ©F SetUp Ø ¦ ’ĶĶ’’’’ĶĶĶĶ»Iscenario ‘ ’ĶĶ’’’’ĶĶĶͧIsv  ’ĶĶ’’’’ĶĶĶĶ\ESyncCalls Ę  [ Z ’ĶĶ’’’’ĶĶĶĶŖ?AppHorzStripe€7' «  £’ĶĶ’’’’ĶĶĶĶĄEListObjects q æ ¾ ’ĶĶ’’’’ĶĶĶͬ?DiskHolder€8' ­  ®  Æ ’ĶĶ’’’’ĶĶĶĶ*EAllDisks ¼  ) ( ’ĶĶ’’’’ĶĶĶͱDStartTop ° ’ĶĶ’’’’ĶĶĶĶĮ?8CmdChangeNetworkNameMapping€"' Ā  Ć  Ä ’ĶĶ’’’’ĶĶĶͲDBottomMsg G ’ĶĶ’’’’ĶĶĶĶ_EAsyncCalls Ę  ^ ] ’ĶĶ’’’’ĶĶĶͳDDataStripe Ā ’ĶĶ’’’’ĶĶĶĶÅD&NetworkNameMapping J ’ĶĶ’’’’ĶĶĶĶ·FAddDisks ¶ “ ’ĶĶ’’’’ĶĶĶĶ?System€'    ’ĶĶ’’’’ĶĶĶ͵Isd 5 ’ĶĶ’’’’ĶĶĶĶĘDNewServer  ’ĶĶ’’’’ĶĶĶͼFAddData » ø ’ĶĶ’’’’ĶĶĶĶ`? Data€' a  b  c  Ē ’ĶĶ’’’’ĶĶĶ͹Id ` ’ĶĶ’’’’ĶĶĶĶÉF Doit Č Ē ’ĶĶ’’’’ĶĶĶĶŗIknd ½ ’ĶĶ’’’’ĶĶĶĶ,HCanProdData + ’ĶĶ’’’’ĶĶĶͽAAppKindEnum€9' ¾ ’ĶĶ’’’’ĶĶĶĶĶFEnsureComplete Ģ Ź ’ĶĶ’’’’ĶĶĶĶæJ eProd’ĶĶ’’’’ĶĶĶĶdDProductionOn ¼  ProductionDatasüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüG˜­ö ˆ™(’ĶĶ’’’’ĶĶĶĶĄJeBackup’ĶĶ’’’’ĶĶĶĶĖIscenario ‘ ’ĶĶ’’’’ĶĶĶĶĮJ eDev’ĶĶ’’’’ĶĶĶĶ?NamedObj€'      ’ĶĶ’’’’ĶĶĶĶĀ?DataHorzStripe€:' Ć  ”’ĶĶ’’’’ĶĶĶĶŠEListObjects q Ļ Ī ’ĶĶ’’’’ĶĶĶĶÄ?DiskBox€;' Å  Ę Ŗ Ē ’ĶĶ’’’’ĶĶĶĶeDBackupOn ¼ BackupDatas’ĶĶ’’’’ĶĶĶĶĢF SetUp Ė Č ’ĶĶ’’’’ĶĶĶĶŃ?CmdCopyData€#' Ņ  Ó  Ō ’ĶĶ’’’’ĶĶĶĶÉIlf’ĶĶ’’’’ĶĶĶĶ.HCanBackupData - ’ĶĶ’’’’ĶĶĶĶŹItp’ĶĶ’’’’ĶĶĶĶÕDScenario ‘ ’ĶĶ’’’’ĶĶĶĶĶ?DataBox€<' Ī  Ļ « Š ’ĶĶ’’’’ĶĶĶĶfDDevelopmentOn ¼ "DevelopmentDatas’ĶĶ’’’’ĶĶĶĶŃDDataObject ` ’ĶĶ’’’’ĶĶĶĶÖD Data ` ’ĶĶ’’’’ĶĶĶĶÖF SetUp Õ Ņ ’ĶĶ’’’’ĶĶĶĶD ChannelSwitches ¾ ’ĶĶ’’’’ĶĶĶĶÓId ` ’ĶĶ’’’’ĶĶĶĶŁF Doit Ų × ’ĶĶ’’’’ĶĶĶĶŌIknd ½ ’ĶĶ’’’’ĶĶĶĶgDUsedBy Å  Datas’ĶĶ’’’’ĶĶĶĶ×?ApplicationBox€=' Ų  Ł ¤ Ś ’ĶĶ’’’’ĶĶĶĶŻFEnsureComplete Ü Ś ’ĶĶ’’’’ĶĶĶĶŪDDataObject Q ’ĶĶ’’’’ĶĶĶĶ0HCanDevAppData / ’ĶĶ’’’’ĶĶĶĶąF SetUp ß Ü ’ĶĶ’’’’ĶĶĶĶŪIscenario ‘ ’ĶĶ’’’’ĶĶĶĶŻIa Q ’ĶĶ’’’’ĶĶĶĶM Tasks i ’ĶĶ’’’’ĶĶĶĶŽIknd ½ ’ĶĶ’’’’ĶĶĶĶąEListObjects q ß Ž ’ĶĶ’’’’ĶĶĶĶį?SomeDisksBox€>' ā  ć  ä ’ĶĶ’’’’ĶĶĶĶD Name ’ĶĶ’’’’ĶĶĶĶåDDataObject 5 ’ĶĶ’’’’ĶĶĶĶį?CmdRemoveData€$' ā  ć  ä ’ĶĶ’’’’ĶĶĶĶéF SetUp č ę ’ĶĶ’’’’ĶĶĶĶj? Task€' k  l  m  Ź ’ĶĶ’’’’ĶĶĶĶēIsd 5 ’ĶĶ’’’’ĶĶĶĶåD Data ` ’ĶĶ’’’’ĶĶĶĶź?(ChannelSwitchStripe€?' ė  ģ ¦ ķ  Ö ’ĶĶ’’’’ĶĶĶĶ1? ChannelEndPoint€' 2  3  ø ’ĶĶ’’’’ĶĶĶĶīDDataObject > ’ĶĶ’’’’ĶĶĶĶęDSomeDisks 5 ’ĶĶ’’’’ĶĶĶĶļDBotStripe I’ĶĶ’’’’ĶĶĶĶnD Paths Ļ ’ĶĶ’’’’ĶĶĶĶšDBox ü ’ĶĶ’’’’ĶĶĶĶéF Doit č ē ’ĶĶ’’’’ĶĶĶĶõF SetUp ō ń ’ĶĶ’’’’ĶĶĶĶņIcs > ’ĶĶ’’’’ĶĶĶĶķFEnsureComplete ģ ź ’ĶĶ’’’’ĶĶĶĶóIconfigstripe  ’ĶĶ’’’’ĶĶĶĶpDUserPath o ’ĶĶ’’’’ĶĶĶĶūFAddConn ś ö ’ĶĶ’’’’ĶĶĶĶėIscenario ‘ ’ĶĶ’’’’ĶĶĶĶ÷Isvs ‘ ’ĶĶ’’’’ĶĶĶĶ4DServer  Channels’ĶĶ’’’’ĶĶĶĶųIcss D ’ĶĶ’’’’ĶĶĶĶšEListObjects q ļ ī ’ĶĶ’’’’ĶĶĶĶłIconfigstripe  ’ĶĶ’’’’ĶĶĶĶqD Users Ķ ’ĶĶ’’’’ĶĶĶĶü?ChannelBox€@' ż  ž   ’ üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüė礗Ž’’ĶĶ’’’’ĶĶĶĶń?CmdLoadData€%' ņ  ó  ō ’ĶĶ’’’’ĶĶĶĶDTopStripe  ’ĶĶ’’’’ĶĶĶĶEGetName    ’ĶĶ’’’’ĶĶĶĶDBotStripe  ’ĶĶ’’’’ĶĶĶĶõDScenario ‘ ’ĶĶ’’’’ĶĶĶĶDDataObject > ’ĶĶ’’’’ĶĶĶĶr?UserGroup€' s  t  u  Ģ ’ĶĶ’’’’ĶĶĶĶF SetUp   ’ĶĶ’’’’ĶĶĶĶöD Data ` ’ĶĶ’’’’ĶĶĶĶIcs > ’ĶĶ’’’’ĶĶĶĶ5?SomeDisks€' 6  7  8  ŗ ’ĶĶ’’’’ĶĶĶĶ FAddSetting     ’ĶĶ’’’’ĶĶĶĶ÷DSomeDisks 5 ’ĶĶ’’’’ĶĶĶĶIs D ’ĶĶ’’’’ĶĶĶĶvD Tasks Ė  Users’ĶĶ’’’’ĶĶĶĶ Iconfigstripe  ’ĶĶ’’’’ĶĶĶĶśF Doit ł ų ’ĶĶ’’’’ĶĶĶĶ ?$ChannelHorzStripe€A'   ž’ĶĶ’’’’ĶĶĶĶ DApplications Å ’ĶĶ’’’’ĶĶĶĶ?ChannelPoint€B'    Ÿ  ’ĶĶ’’’’ĶĶĶĶžFEnsureComplete ż ū ’ĶĶ’’’’ĶĶĶĶDDataObject D ’ĶĶ’’’’ĶĶĶĶw?AppAction€' x  y  Ī ’ĶĶ’’’’ĶĶĶĶF SetUp   ’ĶĶ’’’’ĶĶĶĶüIscenario ‘ ’ĶĶ’’’’ĶĶĶĶIs D ’ĶĶ’’’’ĶĶĶĶ:DNumber 9 ’ĶĶ’’’’ĶĶĶĶ?ChannelConn€C'   ¬’ĶĶ’’’’ĶĶĶĶEListObjects q  ’ ’ĶĶ’’’’ĶĶĶĶ?InternalConn€D'    ­  ’ĶĶ’’’’ĶĶĶĶ{D Name  z ’ĶĶ’’’’ĶĶĶĶDDataObject  ’ĶĶ’’’’ĶĶĶĶ?CmdInstallApp€&'      ’ĶĶ’’’’ĶĶĶĶ!F SetUp   ’ĶĶ’’’’ĶĶĶĶFSetName   ’ĶĶ’’’’ĶĶĶĶIs  ’ĶĶ’’’’ĶĶĶĶDApp Q ’ĶĶ’’’’ĶĶĶĶ"?AccessPointBox€E' #  ®’ĶĶ’’’’ĶĶĶĶ|D Calls Ń ’ĶĶ’’’’ĶĶĶĶ$?NetworkRake€F' %  Ø’ĶĶ’’’’ĶĶĶĶDServer  ’ĶĶ’’’’ĶĶĶĶ&?&NetworkTableStripe€G' '  ( § ) ’ĶĶ’’’’ĶĶĶĶ;D ProductionDatas É ’ĶĶ’’’’ĶĶĶĶ*DDataObject ‘ ’ĶĶ’’’’ĶĶĶĶ F Doit   ’ĶĶ’’’’ĶĶĶĶ.F SetUp - + ’ĶĶ’’’’ĶĶĶĶ}DCalledBy Ń ’ĶĶ’’’’ĶĶĶĶ,Isc ‘ ’ĶĶ’’’’ĶĶĶĶFEnsureComplete   ’ĶĶ’’’’ĶĶĶĶ2FAddNwMapping 1 / ’ĶĶ’’’’ĶĶĶĶD Title ’ĶĶ’’’’ĶĶĶĶ0Isv  ’ĶĶ’’’’ĶĶĶĶ Iscenario ‘ ’ĶĶ’’’’ĶĶĶĶ3?"NetworkTableLine€H' 4  5 Æ 6 ’ĶĶ’’’’ĶĶĶĶ~DApp Q Actions’ĶĶ’’’’ĶĶĶĶ7DDataObject J ’ĶĶ’’’’ĶĶĶĶEListObjects q   ’ĶĶ’’’’ĶĶĶĶ8DNwName ’ĶĶ’’’’ĶĶĶĶ<DBackupDatas É ’ĶĶ’’’’ĶĶĶĶ9DSvName ’ĶĶ’’’’ĶĶĶĶ? CmdUninstallApp€''      ’ĶĶ’’’’ĶĶĶĶ=F SetUp < : ’ĶĶ’’’’ĶĶĶĶDStartPaths Ļ üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüü0°S&t<– ’ĶĶ’’’’ĶĶĶĶ;Inw J ’ĶĶ’’’’ĶĶĶĶDApp Q ’ĶĶ’’’’ĶĶĶͤM ReconfigDiagram ? ’ĶĶ’’’’ĶĶĶĶIn ’ĶĶ’’’’ĶĶĶĶ@?(ReconfigDiagramBase€I' A  B  C ’ĶĶ’’’’ĶĶĶĶDServer  ’ĶĶ’’’’ĶĶĶĶDDScenario ‘ ’ĶĶ’’’’ĶĶĶĶ€?ActionFlow€'   ‚  Š ’ĶĶ’’’’ĶĶĶĶFDFinished E ’ĶĶ’’’’ĶĶĶĶF Doit   ’ĶĶ’’’’ĶĶĶĶGDCurrentCommand ¤ ’ĶĶ’’’’ĶĶĶĶ=D"DevelopmentDatas É ’ĶĶ’’’’ĶĶĶĶHDTimerBox š ’ĶĶ’’’’ĶĶĶĶFEnsureComplete   ’ĶĶ’’’’ĶĶĶĶJDElapsedMins I ’ĶĶ’’’’ĶĶĶ̓D From w  Calls’ĶĶ’’’’ĶĶĶĶKDCountDown’ĶĶ’’’’ĶĶĶĶIscenario ‘ ’ĶĶ’’’’ĶĶĶĶNF"BuildDisplayBase M L ’ĶĶ’’’’ĶĶĶĶ D Datas Č ’ĶĶ’’’’ĶĶĶĶSFAddServer R O ’ĶĶ’’’’ĶĶĶĶ!EListObjects q   ’ĶĶ’’’’ĶĶĶĶPIsv  ’ĶĶ’’’’ĶĶĶĶ„DTo w CalledBy’ĶĶ’’’’ĶĶĶĶQIcs  ’ĶĶ’’’’ĶĶĶĶ"?CmdRunScript€(' #  $  % ’ĶĶ’’’’ĶĶĶĶXFAddApps W T ’ĶĶ’’’’ĶĶĶĶ>?ChannelSwitch€' ?  @  A  ½ ’ĶĶ’’’’ĶĶĶĶUIss ‘ ’ĶĶ’’’’ĶĶĶĶ&DCommands Õ ’ĶĶ’’’’ĶĶĶĶVIsv  ’ĶĶ’’’’ĶĶĶ͆D Async … ’ĶĶ’’’’ĶĶĶĶ[FSetUpIterate ~ Z Y ’ĶĶ’’’’ĶĶĶĶ)F Doit ( ' ’ĶĶ’’’’ĶĶĶĶ^FIterate ~ ] \ ’ĶĶ’’’’ĶĶĶĶOM,HardwareConfiguration  ’ĶĶ’’’’ĶĶĶĶ_? ReconfigDiagram€J' `  a ø b ’ĶĶ’’’’ĶĶĶĶ-FEnsureComplete , * ’ĶĶ’’’’ĶĶĶĶcD"OrigScenarioList Ó Scenarios’ĶĶ’’’’ĶĶĶ͈DDependency Š  ‡ ’ĶĶ’’’’ĶĶĶĶfFBuildDisplay e d ’ĶĶ’’’’ĶĶĶĶ+Iscenario ‘ ’ĶĶ’’’’ĶĶĶĶg?"ReconfigSelected€K' h  i  j  ‘ ’ĶĶ’’’’ĶĶĶĶBDSettings Į ’ĶĶ’’’’ĶĶĶĶmFBuildDisplay l k ’ĶĶ’’’’ĶĶĶĶ0EListObjects q / . ’ĶĶ’’’’ĶĶĶĶn?CommandStripe€L' o  p ŗ q @ ’ĶĶ’’’’ĶĶĶ͉DSwitchTime’ĶĶ’’’’ĶĶĶĶrDDataObject ‘ ’ĶĶ’’’’ĶĶĶĶ}MCommonShapes 3 ’ĶĶ’’’’ĶĶĶĶsDFirstCommand | ’ĶĶ’’’’ĶĶĶĶM Main  ’ĶĶ’’’’ĶĶĶĶtDCurrent | ’ĶĶ’’’’ĶĶĶĶ4?MainVertStripe€)' 5  ”’ĶĶ’’’’ĶĶĶĶxF SetUp w u ’ĶĶ’’’’ĶĶĶ͊ADependencyEnum€' ‹ ’ĶĶ’’’’ĶĶĶĶvIsc ‘ ’ĶĶ’’’’ĶĶĶĶ6?MainHorzStripe€*' 7  •’ĶĶ’’’’ĶĶĶĶ{FHit z y ’ĶĶ’’’’ĶĶĶĶCDSomeDisksOrder ¼ ’ĶĶ’’’’ĶĶĶĶ|?CommandLine€M' }  ~ ¹  @ üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüÆc,QėdE’ĶĶ’’’’ĶĶĶĶ8? SmallHorzStripe€+' 9  –’ĶĶ’’’’ĶĶĶĶ€DDataObject ¤ ’ĶĶ’’’’ĶĶĶ͌JeDepend’ĶĶ’’’’ĶĶĶ́DMsg ’ĶĶ’’’’ĶĶĶĶ:?TitleBox€,' ;  < — = ’ĶĶ’’’’ĶĶĶĶ‚D Next | ’ĶĶ’’’’ĶĶĶĶ?Server€'       µ ’ĶĶ’’’’ĶĶĶ̓DMaster n ’ĶĶ’’’’ĶĶĶĶ>D Names ’ĶĶ’’’’ĶĶĶ͈F SetUp ‡ „ ’ĶĶ’’’’ĶĶĶĶJePartial’ĶĶ’’’’ĶĶĶĶ…Icmd ¤ ’ĶĶ’’’’ĶĶĶĶBF SetUp A ? ’ĶĶ’’’’ĶĶĶ͆Imst n ’ĶĶ’’’’ĶĶĶĶD?*ChannelSwitchSetting€' E  F  G  Ą ’ĶĶ’’’’ĶĶĶĶ‹FSetCurrent Š ‰ ’ĶĶ’’’’ĶĶĶĶ@Ipr ’ĶĶ’’’’ĶĶĶĶŽFHit  Œ ’ĶĶ’’’’ĶĶĶĶŽJeSwitch’ĶĶ’’’’ĶĶĶĶ?CommandPointer€N'   »’ĶĶ’’’’ĶĶĶĶFFChangeTitle ~ E C ’ĶĶ’’’’ĶĶĶĶ‘?RefreshLine€O' ’  “ ¼ ” @ ’ĶĶ’’’’ĶĶĶĶ D Tasks Ė ’ĶĶ’’’’ĶĶĶĶ—FHit – • ’ĶĶ’’’’ĶĶĶĶDINewText ’ĶĶ’’’’ĶĶĶ͘?CopyBox€P' ™  ½’ĶĶ’’’’ĶĶĶĶ1M"ReconfigExamples  ’ĶĶ’’’’ĶĶĶ͚?TimerBox€Q' ›  œ ·  ’ĶĶ’’’’ĶĶĶĶG?InfoTextBox€-' H  I ˜ J ’ĶĶ’’’’ĶĶĶĶžDWid’ĶĶ’’’’ĶĶĶĶHDChannelSwitch > Settings’ĶĶ’’’’ĶĶĶ͟DEt’ĶĶ’’’’ĶĶĶĶNFAdd M K ’ĶĶ’’’’ĶĶĶĶ£FSetElapsed ¢   ’ĶĶ’’’’ĶĶĶĶ‘?Scenario€' ’  “  ”  Ņ ’ĶĶ’’’’ĶĶĶĶ”Iem’ĶĶ’’’’ĶĶĶĶLIitl O ’ĶĶ’’’’ĶĶĶͱMGuideGroup ¦ ’ĶĶ’’’’ĶĶĶĶ"DNumber ! ’ĶĶ’’’’ĶĶĶͧ? Guide€R' Ø  ©  Ŗ ’ĶĶ’’’’ĶĶĶĶO?InfoTextLine€.' P  Q  R ’ĶĶ’’’’ĶĶĶĶ­FScenarioList } ¬ « ’ĶĶ’’’’ĶĶĶĶ•DServers · ’ĶĶ’’’’ĶĶĶͰFTaskList } Æ ® ’ĶĶ’’’’ĶĶĶĶTDMargin S ’ĶĶ’’’’ĶĶĶͳR(Reconfigure Example ø’ĶĶ’’’’ĶĶĶĶIDSomeDisks 5 ’ĶĶ’’’’ĶĶĶĶ“R*Reconfigure Selected  ‘ ’ĶĶ’’’’ĶĶĶĶU? HeadingTextLine€/' V  W ™ X ’ĶĶ’’’’ĶĶĶͶ@ServerSet€S'   ’ĶĶ’’’’ĶĶĶĶ–DSomeDisks ¼ ’ĶĶ’’’’ĶĶĶĶ·@ServerList€T'   ’ĶĶ’’’’ĶĶĶĶYDMsg ’ĶĶ’’’’ĶĶĶ͹@(ChannelEndPointList€U'  1 ’ĶĶ’’’’ĶĶĶĶDServers ¶ ’ĶĶ’’’’ĶĶĶĶ»@SomeDisksSet€V'  5 ’ĶĶ’’’’ĶĶĶĶ]F SetUp \ Z ’ĶĶ’’’’ĶĶĶͼ@SomeDisksList€W'  5 ’ĶĶ’’’’ĶĶĶĶ—D ChannelSwitches æ ’ĶĶ’’’’ĶĶĶ;@"ChannelSwitchSet€X'  > ’ĶĶ’’’’ĶĶĶĶ[Imsg ’ĶĶ’’’’ĶĶĶĶæ@$ChannelSwitchList€Y'  > ’ĶĶ’’’’ĶĶĶĶJ?&NetworkNameMapping€' K  L  Ā üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüü:˜“DØĢŹ’ĶĶ’’’’ĶĶĶĶĮ@2ChannelSwitchSettingList€Z'  D ’ĶĶ’’’’ĶĶĶĶ^?BlankTextLine€0' _  š’ĶĶ’’’’ĶĶĶĶĆ@.NetworkNameMappingList€['  J ’ĶĶ’’’’ĶĶĶ͘DApplications Ę ’ĶĶ’’’’ĶĶĶĶÅ@ApplicationSet€\'  Q ’ĶĶ’’’’ĶĶĶĶ`? IntInfoTextLine€1' a  b › c ’ĶĶ’’’’ĶĶĶĶĘ@ ApplicationList€]'  Q ’ĶĶ’’’’ĶĶĶĶ#DProductionApps Ę ProductionOn’ĶĶ’’’’ĶĶĶĶČ@DataSet€^'  ` ’ĶĶ’’’’ĶĶĶĶdDVal’ĶĶ’’’’ĶĶĶĶÉ@DataList€_'  ` ’ĶĶ’’’’ĶĶĶĶ™D Datas É ’ĶĶ’’’’ĶĶĶĶĖ@TaskSet€`'  j ’ĶĶ’’’’ĶĶĶĶeDMsg ’ĶĶ’’’’ĶĶĶĶĶ@UserGroupSet€a'  r ’ĶĶ’’’’ĶĶĶĶMDNetworkName ’ĶĶ’’’’ĶĶĶĶĻ@AppActionSet€b'  w ’ĶĶ’’’’ĶĶĶĶiF SetUp h f ’ĶĶ’’’’ĶĶĶĶŃ@ActionFlowList€c'  € ’ĶĶ’’’’ĶĶĶ͚DNetworkTable Ć ’ĶĶ’’’’ĶĶĶĶÓ@ScenarioList€d'  ‘ ’ĶĶ’’’’ĶĶĶĶgImsg ’ĶĶ’’’’ĶĶĶĶÕ@CommandList€e'  ¤ ’ĶĶ’’’’ĶĶĶĶ DUserGroups Ķ ’ĶĶ’’’’ĶĶĶĶ×@0ChannelSwitchStripeList€f'  ź ’ĶĶ’’’’ĶĶĶĶj?$FloatInfoTextLine€2' k  l œ m ’ĶĶ’’’’ĶĶĶĶß«"CentredNameStyleA’ĶĶ’’’’ĶĶĶĶ›DOfflineDatas É ’ĶĶ’’’’ĶĶĶĶą«SmallNamesA’ĶĶ’’’’ĶĶĶĶnDVal’ĶĶ’’’’ĶĶĶĶį«TitleStyle A’’ĶĶ’’’’ĶĶĶĶNDServer  ’ĶĶ’’’’ĶĶĶĶā«InfoTextStyleA’ĶĶ’’’’ĶĶĶĶoDMsg ’ĶĶ’’’’ĶĶĶĶć«CommandStyle A@’ĶĶ’’’’ĶĶĶ͜DCommands Õ ’ĶĶ’’’’ĶĶĶĶä« RedHeadingStyle@A’’ĶĶ’’’’ĶĶĶĶsF SetUp r p ’ĶĶ’’’’ĶĶĶĶå«*CommandLineUnderline A@’ĶĶ’’’’ĶĶĶĶ$DBackupApps Ę BackupOn’ĶĶ’’’’ĶĶĶĶę«FaintStyle AČČČ’ĶĶ’’’’ĶĶĶĶqImsg ’ĶĶ’’’’ĶĶĶĶē«"RefreshLineStyle A’’ĶĶ’’’’ĶĶĶĶ FCheckServer Ÿ  ’ĶĶ’’’’ĶĶĶĶč«$TableHeadingStyle A’’’@’ĶĶ’’’’ĶĶĶĶt?"TextInfoTextLine€3' u  v  w ’ĶĶ’’’’ĶĶĶĶé«HeadMsgStyle`A’ĶĶ’’’’ĶĶĶĶhMApplications P ’ĶĶ’’’’ĶĶĶĶź¬RandBarStyle’’ĶĶ’’’’ĶĶĶĶxDMsg ’ĶĶ’’’’ĶĶĶĶė¬ServerBoxStyleĄĄĄ’ĶĶ’’’’ĶĶĶĶžIsv  ’ĶĶ’’’’ĶĶĶĶģ¬WhiteBackStyle’’’?’ĶĶ’’’’ĶĶĶĶ|F SetUp { y ’ĶĶ’’’’ĶĶĶĶķ¬DiskFillStyleü€’ĶĶ’’’’ĶĶĶĶū=$Disk Switch Model  2 „ €g'  ²  Ł Ś Ū Ü Ż Ž Version 1.0 Ų ’ĶĶ’’’’ĶĶĶĶī¬DiskFullStyleü€É3€?’ĶĶ’’’’ĶĶĶĶzImsg ’ĶĶ’’’’ĶĶĶĶļ¬DataStyleõ¹IĶĢL?€€€’ĶĶ’’’’ĶĶĶĶ£FEnsureComplete ¢ ” üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüŖ”yLs•¾’ĶĶ’’’’ĶĶĶĶš¬AppStyle °’ĶĢL?€€€’ĶĶ’’’’ĶĶĶĶ>MConfigurations ~ ’ĶĶ’’’’ĶĶĶĶń¬&ChannelStripeStyleٳ’€?’ĶĶ’’’’ĶĶĶĶQ?Application€' R  S  T  Ä ’ĶĶ’’’’ĶĶĶĶņ¬$ChannelPointStyle€€?’ĶĶ’’’’ĶĶĶĶ?ConfigStripe€4' €   © ‚ ’ĶĶ’’’’ĶĶĶĶó¬"ChannelConnStyle€€?’ĶĶ’’’’ĶĶĶͤ?Command€ ' „  ¦  §  Ō ’ĶĶ’’’’ĶĶĶĶō¬*InterSwitchConnStyle€?’ĶĶ’’’’ĶĶĶ̓DTopStripe 6 ’ĶĶ’’’’ĶĶĶĶõ¬*NetworkTableBoxStyle€€?’ĶĶ’’’’ĶĶĶĶ%D DevelopmentApps Ę DevelopmentOn’ĶĶ’’’’ĶĶĶĶö¬ CommandPtrStyleĘ333?’ĶĶ’’’’ĶĶĶĶ„DBotStripe I’ĶĶ’’’’ĶĶĶĶ÷¬"AccessPointStyle–––’€?’ĶĶ’’’’ĶĶĶĶ©DElapsedTime Ø ’ĶĶ’’’’ĶĶĶĶų¬NetworkStyle–––@’ĶĶ’’’’ĶĶĶĶ…D*ChannelSwitchStripes × ’ĶĶ’’’’ĶĶĶĶł¬"OfflineDataStyleČČ’dd’€?’ĶĶ’’’’ĶĶĶĶUDProductionOn ¶ ’ĶĶ’’’’ĶĶĶĶś¬"ElapsedTimeStyle’ddd€?’ĶĶ’’’’ĶĶĶ͆DNwTable & ’ĶĶ’’’’ĶĶĶĶŽ^’ĶĶ’’’’ĶĶĶĶŻJ’ĶĶ’’’’ĶĶĶĶÜQ’ĶĶ’’’’ĶĶĶĶŪO’ĶĶ’’’’ĶĶĶĶŚH’ĶĶ’’’’ĶĶĶĶŁbß ą į ā ć ä å ę ē č é ź ė ģ ķ ī ļ š ń ņ ó ō õ ö ÷ ų ł ś ’ĶĶ’’’’ĶĶĶĶÖ@× ’ĶĶ’’’’ĶĶĶĶŌ@Õ ’ĶĶ’’’’ĶĶĶĶŅ@Ó ’ĶĶ’’’’ĶĶĶĶŠ@Ń ’ĶĶ’’’’ĶĶĶĶĪ@Ļ ’ĶĶ’’’’ĶĶĶĶĢ@Ķ ’ĶĶ’’’’ĶĶĶĶŹ@Ė ’ĶĶ’’’’ĶĶĶĶĒ@Č É ’ĶĶ’’’’ĶĶĶĶÄ@Å Ę ’ĶĶ’’’’ĶĶĶĶĀ@Ć ’ĶĶ’’’’ĶĶĶĶĄ@Į ’ĶĶ’’’’ĶĶĶͽ@¾ æ ’ĶĶ’’’’ĶĶĶĶŗ@» ¼ ’ĶĶ’’’’ĶĶĶĶø@¹ ’ĶĶ’’’’ĶĶĶ͵@¶ · ’ĶĶ’’’’ĶĶĶͲA³ “ ’ĶĶ’’’’ĶĶĶĶ®E’ĶĶ’’’’ĶĶĶĶ«E’ĶĶ’’’’ĶĶĶĶŖD’ĶĶ’’’’ĶĶĶĶ©C­ ° ’ĶĶ’’’’ĶĶĶĶØB`’ĶĶ’’’’ĶĶĶͦ@§ ’ĶĶ’’’’ĶĶĶĶ„G± ’ĶĶ’’’’ĶĶĶĶ E” ’ĶĶ’’’’ĶĶĶĶD’ĶĶ’’’’ĶĶĶ͜Cž Ÿ £ ’ĶĶ’’’’ĶĶĶĶ›BH’ĶĶ’’’’ĶĶĶĶ™BI’ĶĶ’’’’ĶĶĶĶ•E’ĶĶ’’’’ĶĶĶĶ”D’ĶĶ’’’’ĶĶĶĶ“C— ’ĶĶ’’’’ĶĶĶĶ’BH’ĶĶ’’’’ĶĶĶ͐BN’ĶĶ’’’’ĶĶĶ͌E’ĶĶ’’’’ĶĶĶ͉E’ĶĶ’’’’ĶĶĶĶ„E… † ’ĶĶ’’’’ĶĶĶĶD’ĶĶ’’’’ĶĶĶĶ~C€  ‚ ƒ ˆ ‹ Ž ’ĶĶ’’’’ĶĶĶĶ}BH’ĶĶ’’’’ĶĶĶĶyE’ĶĶ’’’’ĶĶĶĶuEv ’ĶĶ’’’’ĶĶĶĶqD’ĶĶ’’’’ĶĶĶĶpCr s t x { ’ĶĶ’’’’ĶĶĶĶoBI’ĶĶ’’’’ĶĶĶĶkE’ĶĶ’’’’ĶĶĶĶjD’ĶĶ’’’’ĶĶĶĶiCm ’ĶĶ’’’’ĶĶĶĶhB@ ’ĶĶ’’’’ĶĶĶĶdE’ĶĶ’’’’ĶĶĶĶbD’ĶĶ’’’’ĶĶĶĶaCc f üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüɆ&̃&ö ’ĶĶ’’’’ĶĶĶĶ`B@ ’ĶĶ’’’’ĶĶĶĶ\E’ĶĶ’’’’ĶĶĶĶYE’ĶĶ’’’’ĶĶĶĶTEU V ’ĶĶ’’’’ĶĶĶĶOEP Q ’ĶĶ’’’’ĶĶĶĶLE’ĶĶ’’’’ĶĶĶĶCD’ĶĶ’’’’ĶĶĶĶBC D F G H J K N S X [ ^ ’ĶĶ’’’’ĶĶĶĶABD’ĶĶ’’’’ĶĶĶĶ?@ @ _ g n |  ‘ ˜ š ’ĶĶ’’’’ĶĶĶĶ:E; ’ĶĶ’’’’ĶĶĶĶ6D’ĶĶ’’’’ĶĶĶĶ5C7 8 9 = ’ĶĶ’’’’ĶĶĶĶ4BH’ĶĶ’’’’ĶĶĶĶ/E0 ’ĶĶ’’’’ĶĶĶĶ+E, ’ĶĶ’’’’ĶĶĶĶ)D’ĶĶ’’’’ĶĶĶĶ(C* . 2 ’ĶĶ’’’’ĶĶĶĶ'BI’ĶĶ’’’’ĶĶĶĶ%BO’ĶĶ’’’’ĶĶĶĶ#BH’ĶĶ’’’’ĶĶĶĶE ’ĶĶ’’’’ĶĶĶĶD’ĶĶ’’’’ĶĶĶĶC ! ’ĶĶ’’’’ĶĶĶĶBN’ĶĶ’’’’ĶĶĶĶBN’ĶĶ’’’’ĶĶĶĶE ’ĶĶ’’’’ĶĶĶĶD’ĶĶ’’’’ĶĶĶĶC  ’ĶĶ’’’’ĶĶĶĶBH’ĶĶ’’’’ĶĶĶĶ BI’ĶĶ’’’’ĶĶĶĶE  ’ĶĶ’’’’ĶĶĶĶE ’ĶĶ’’’’ĶĶĶĶ’D’ĶĶ’’’’ĶĶĶĶžC     ’ĶĶ’’’’ĶĶĶĶżBI’ĶĶ’’’’ĶĶĶĶöE÷ ų ł ’ĶĶ’’’’ĶĶĶĶńEņ ó ’ĶĶ’’’’ĶĶĶĶķD’ĶĶ’’’’ĶĶĶĶģCī ļ š õ ū ’ĶĶ’’’’ĶĶĶĶėBI’ĶĶ’’’’ĶĶĶĶęEē ’ĶĶ’’’’ĶĶĶĶäD’ĶĶ’’’’ĶĶĶĶćCå é ’ĶĶ’’’’ĶĶĶĶāB¬ ’ĶĶ’’’’ĶĶĶĶÜEŻ Ž ’ĶĶ’’’’ĶĶĶĶŚD’ĶĶ’’’’ĶĶĶĶŁCŪ ą ’ĶĶ’’’’ĶĶĶĶŲBH’ĶĶ’’’’ĶĶĶĶŅEÓ Ō ’ĶĶ’’’’ĶĶĶĶŠD’ĶĶ’’’’ĶĶĶĶĻCŃ Ö ’ĶĶ’’’’ĶĶĶĶĪBH’ĶĶ’’’’ĶĶĶĶČEÉ Ź ’ĶĶ’’’’ĶĶĶĶĒD’ĶĶ’’’’ĶĶĶĶĘCĢ ’ĶĶ’’’’ĶĶĶĶÅBH’ĶĶ’’’’ĶĶĶĶĆBI’ĶĶ’’’’ĶĶĶ;Fæ Ą Į ’ĶĶ’’’’ĶĶĶĶøE¹ ŗ ’ĶĶ’’’’ĶĶĶĶ“Eµ ’ĶĶ’’’’ĶĶĶĶÆD’ĶĶ’’’’ĶĶĶĶ®C± ² ³ · ¼ ’ĶĶ’’’’ĶĶĶĶ­BJ’ĶĶ’’’’ĶĶĶĶ«BI’ĶĶ’’’’ĶĶĶͦE§ ’ĶĶ’’’’ĶĶĶͤD’ĶĶ’’’’ĶĶĶĶ£C„ © ’ĶĶ’’’’ĶĶĶĶ¢BH’ĶĶ’’’’ĶĶĶĶEž ’ĶĶ’’’’ĶĶĶ͘E™ š ’ĶĶ’’’’ĶĶĶĶ”D’ĶĶ’’’’ĶĶĶĶ“C• – — œ   ’ĶĶ’’’’ĶĶĶĶ’B¬ ’ĶĶ’’’’ĶĶĶĶEŽ ’ĶĶ’’’’ĶĶĶ͉EŠ ’ĶĶ’’’’ĶĶĶĶ‚D’ĶĶ’’’’ĶĶĶ́Cƒ „ … † ‡ ˆ Œ  ’ĶĶ’’’’ĶĶĶĶ€BI’ĶĶ’’’’ĶĶĶĶ~@ ‘ ” Ŗ ¬ ½ Ā Ä Ķ × į ź ü     " $ & 3 ’ĶĶ’’’’ĶĶĶĶyEz ’ĶĶ’’’’ĶĶĶĶwD’ĶĶ’’’’ĶĶĶĶvCx | ’ĶĶ’’’’ĶĶĶĶuBO ’ĶĶ’’’’ĶĶĶĶpEq ’ĶĶ’’’’ĶĶĶĶmD’ĶĶ’’’’ĶĶĶĶlCn o s ’ĶĶ’’’’ĶĶĶĶkBO ’ĶĶ’’’’ĶĶĶĶfEg ’ĶĶ’’’’ĶĶĶĶcD’ĶĶ’’’’ĶĶĶĶbCd e i ’ĶĶ’’’’ĶĶĶĶaBO üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüĒžįōūķ™” ’ĶĶ’’’’ĶĶĶĶ_BO ’ĶĶ’’’’ĶĶĶĶZE[ ’ĶĶ’’’’ĶĶĶĶXD’ĶĶ’’’’ĶĶĶĶWCY ] ’ĶĶ’’’’ĶĶĶĶVBO ’ĶĶ’’’’ĶĶĶĶRD’ĶĶ’’’’ĶĶĶĶQCT ’ĶĶ’’’’ĶĶĶĶPBH’ĶĶ’’’’ĶĶĶĶKEL ’ĶĶ’’’’ĶĶĶĶJD’ĶĶ’’’’ĶĶĶĶICN ’ĶĶ’’’’ĶĶĶĶHBI’ĶĶ’’’’ĶĶĶĶCED ’ĶĶ’’’’ĶĶĶĶ?E@ ’ĶĶ’’’’ĶĶĶĶ=D’ĶĶ’’’’ĶĶĶĶ<C> B F ’ĶĶ’’’’ĶĶĶĶ;BH’ĶĶ’’’’ĶĶĶĶ9BI’ĶĶ’’’’ĶĶĶĶ7BI’ĶĶ’’’’ĶĶĶĶ5BI’ĶĶ’’’’ĶĶĶĶ3@ 4 6 8 : G O U ^ ` j t ’ĶĶ’’’’ĶĶĶĶ2G} > ¤ ’ĶĶ’’’’ĶĶĶĶ.E’ĶĶ’’’’ĶĶĶĶ*E+ ’ĶĶ’’’’ĶĶĶĶ'E’ĶĶ’’’’ĶĶĶĶ%D’ĶĶ’’’’ĶĶĶĶ$C& ) - 0 ’ĶĶ’’’’ĶĶĶĶ#B¤ ’ĶĶ’’’’ĶĶĶĶE’ĶĶ’’’’ĶĶĶĶE ’ĶĶ’’’’ĶĶĶĶE’ĶĶ’’’’ĶĶĶĶD’ĶĶ’’’’ĶĶĶĶC    ! ’ĶĶ’’’’ĶĶĶĶB¤ ’ĶĶ’’’’ĶĶĶĶE’ĶĶ’’’’ĶĶĶĶ E  ’ĶĶ’’’’ĶĶĶĶE’ĶĶ’’’’ĶĶĶĶD’ĶĶ’’’’ĶĶĶĶC     ’ĶĶ’’’’ĶĶĶĶB¤ ’ĶĶ’’’’ĶĶĶĶ’E’ĶĶ’’’’ĶĶĶĶūEü ’ĶĶ’’’’ĶĶĶĶųE’ĶĶ’’’’ĶĶĶĶōD’ĶĶ’’’’ĶĶĶĶóCõ ö ÷ ś ž  ’ĶĶ’’’’ĶĶĶĶņB¤ ’ĶĶ’’’’ĶĶĶĶīE’ĶĶ’’’’ĶĶĶĶźEė ’ĶĶ’’’’ĶĶĶĶēE’ĶĶ’’’’ĶĶĶĶäD’ĶĶ’’’’ĶĶĶĶćCå ę é ķ š ’ĶĶ’’’’ĶĶĶĶāB¤ ’ĶĶ’’’’ĶĶĶĶŽE’ĶĶ’’’’ĶĶĶĶŚEŪ ’ĶĶ’’’’ĶĶĶĶ×E’ĶĶ’’’’ĶĶĶĶŌD’ĶĶ’’’’ĶĶĶĶÓCÕ Ö Ł Ż ą ’ĶĶ’’’’ĶĶĶĶŅB¤ ’ĶĶ’’’’ĶĶĶĶĪE’ĶĶ’’’’ĶĶĶĶŹEĖ ’ĶĶ’’’’ĶĶĶĶĒE’ĶĶ’’’’ĶĶĶĶÄD’ĶĶ’’’’ĶĶĶĶĆCÅ Ę É Ķ Š ’ĶĶ’’’’ĶĶĶĶĀB¤ ’ĶĶ’’’’ĶĶĶ;E’ĶĶ’’’’ĶĶĶĶŗE» ’ĶĶ’’’’ĶĶĶĶ·E’ĶĶ’’’’ĶĶĶĶ“D’ĶĶ’’’’ĶĶĶͳCµ ¶ ¹ ½ Ą ’ĶĶ’’’’ĶĶĶͲB¤ ’ĶĶ’’’’ĶĶĶĶÆE’ĶĶ’’’’ĶĶĶͬE­ ’ĶĶ’’’’ĶĶĶĶŖE’ĶĶ’’’’ĶĶĶͧD’ĶĶ’’’’ĶĶĶͦC© « ® ° ’ĶĶ’’’’ĶĶĶĶ„B ’ĶĶ’’’’ĶĶĶĶ”E’ĶĶ’’’’ĶĶĶĶEž ’ĶĶ’’’’ĶĶĶĶ”D’ĶĶ’’’’ĶĶĶĶ“C • – — ˜ ™ š › œ   £ ’ĶĶ’’’’ĶĶĶĶ’B ’ĶĶ’’’’ĶĶĶ͐@ ‘ ¤ ± Į Ń į ń   " ’ĶĶ’’’’ĶĶĶĶ‹FŒ  Ž ’ĶĶ’’’’ĶĶĶĶ‚D’ĶĶ’’’’ĶĶĶ́Cƒ „ † ˆ ‰ ’ĶĶ’’’’ĶĶĶĶyD’ĶĶ’’’’ĶĶĶĶxC{ | } ~  ’ĶĶ’’’’ĶĶĶĶuD’ĶĶ’’’’ĶĶĶĶtCv ’ĶĶ’’’’ĶĶĶĶsB ’ĶĶ’’’’ĶĶĶĶmD’ĶĶ’’’’ĶĶĶĶlCn p q ’ĶĶ’’’’ĶĶĶĶkB ’ĶĶ’’’’ĶĶĶĶi@j r w € Š ’ĶĶ’’’’ĶĶĶĶcD’ĶĶ’’’’ĶĶĶĶbCd e f g üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüźŠOT·ā.; ’ĶĶ’’’’ĶĶĶĶaB ’ĶĶ’’’’ĶĶĶĶ]E’ĶĶ’’’’ĶĶĶĶZE’ĶĶ’’’’ĶĶĶĶTD’ĶĶ’’’’ĶĶĶĶSCU V W X Y \ _ ’ĶĶ’’’’ĶĶĶĶRB ’ĶĶ’’’’ĶĶĶĶP@Q ` ’ĶĶ’’’’ĶĶĶĶLD’ĶĶ’’’’ĶĶĶĶKCM N ’ĶĶ’’’’ĶĶĶĶGD’ĶĶ’’’’ĶĶĶĶFCH I ’ĶĶ’’’’ĶĶĶĶEB 1 ’ĶĶ’’’’ĶĶĶĶAD’ĶĶ’’’’ĶĶĶĶ@CB C ’ĶĶ’’’’ĶĶĶĶ?B ’ĶĶ’’’’ĶĶĶĶ8D’ĶĶ’’’’ĶĶĶĶ7C: ; < = ’ĶĶ’’’’ĶĶĶĶ6B 1 ’ĶĶ’’’’ĶĶĶĶ3D’ĶĶ’’’’ĶĶĶĶ2C4 ’ĶĶ’’’’ĶĶĶĶ(E’ĶĶ’’’’ĶĶĶĶ D, . 0 ’ĶĶ’’’’ĶĶĶĶC" # $ % & ' * ’ĶĶ’’’’ĶĶĶĶB ’ĶĶ’’’’ĶĶĶĶ@ 1 5 > D J ’ĶĶ’’’’ĶĶĶĶE ’ĶĶ’’’’ĶĶĶĶE’ĶĶ’’’’ĶĶĶĶD’ĶĶ’’’’ĶĶĶĶC   ’ĶĶ’’’’ĶĶĶĶBA’ĶĶ’’’’ĶĶĶĶD’ĶĶ’’’’ĶĶĶĶC           ’ĶĶ’’’’ĶĶĶĶ@  ’ĶĶ’’’’ĶĶĶĶG O h  1 ’ĶĶ’’’’ĶĶĶĶŲ8Model design is copyright (c) 2009, Polyphony IT Ltd, UK’ĶĶ’’’’ĶĶĶĶÆ¦locals rsr _ReportSectionList; do for sc := model.Tasks do locals s := new _ReportSection; do s.Heading := sc.Name; s.Text := "<p>" & sc.Description & "</p>" & "<p>To see the Availability Analysis <cmd availdiagsel>click here</cmd>.</p>" s.SelectedObj := sc; rsr append s; endlocals; endfor; return rsr; endlocals; ’ĶĶ’’’’ĶĶĶͬ¤locals rsr _ReportSectionList; do for sc := model.Scenarios do locals s := new _ReportSection; do s.Heading := sc.Name; s.Text := "<p>" & sc.Description & "</p>" & "<p>To see the scenario diagram <cmd scendiagsel>click here</cmd>.</p>" s.SelectedObj := sc; rsr append s; endlocals; endfor; return rsr; endlocals; ’ĶĶ’’’’ĶĶĶĶ¢ Wid := em * 2; Et := floor(em); ’ĶĶ’’’’ĶĶĶĶ–mdelete context.Scenario; context.Scenario := null; context.CurrentCommand := null; context.ElapsedMins := 0; ’ĶĶ’’’’ĶĶĶĶMaster.Hit(); ’ĶĶ’’’’ĶĶĶĶü€for ob := DataObject.ListObjects() do locals x := search_dataobject(context.Shapes, ob); ptr := new CommandPointeü^}āVŲųw ’ĶĶ’’’’ĶĶĶĶż”r; do if notnull x and x is _ConnectableShape -> cs then ptr.StartBox := this; ptr.EndBox := cs; context.Shapes append ptr; else display "An object used by this command is not shown in the diagram"; endif; endlocals; endfor; locals di := DrawItems << "msg" >>; do di.SetStyle("CommandLineUnderline"); endlocals; ’ĶĶ’’’’ĶĶĶ͊€ü ”ż ’ĶĶ’’’’ĶĶĶ͇øMsg := cmd.Name; DataObject := cmd; Master := mst; if cmd is CmdCopyData -> cd then if cd.Data notin mst.DataObject.Datas then display "Data not cloned"; endif; endif; ’ĶĶ’’’’ĶĶĶĶzČif context.Finished then display "No more commands"; else if isnull Current then Current := FirstCommand; else Current := Current.Next; endif; if isnull Current then context.Finished := true; context.CurrentCommand := null; display "No more commands"; else context.CurrentCommand := Current.DataObject; Current.DataObject.Doit(); iterate_set(Timer); endif; endif; ’ĶĶ’’’’ĶĶĶĶwEDataObject := sc; locals lst CommandLine; do for c := sc.Commands do locals cl := new CommandLine call SetUp(c, this); do Shapes append cl; if isnull FirstCommand then FirstCommand := cl; else lst.Next := cl; endif; lst := cl; if notnull context.CurrentCommand and c = context.CurrentCommand then cl.SetCurrent(); Current := cl; endif; endlocals; endfor; Shapes append new RefreshLine; endlocals; ’ĶĶ’’’’ĶĶĶĶlrif isnull Scenario then selected.EnsureComplete(); Scenario := clone selected; endif; BuildDisplayBase(); ’ĶĶ’’’’ĶĶĶĶž½if isnull Scenario then if empty(OrigScenarioList) then stop "No scenarios selected"; endif; locals orig := OrigScenarioList[first]; do orig.EnsureComplete()üÓųŁ?b0‹ ’ĶĶ’’’’ĶĶĶĶ’L; Scenario := clone orig; endlocals; endif; BuildDisplayBase(); ’ĶĶ’’’’ĶĶĶĶe½ž L’ ’ĶĶ’’’’ĶĶĶĶ]Äif CountDown <= 0 then iterate_set(NoTimer); return NoRedraw; endif; CountDown := CountDown - 1; ElapsedMins := ElapsedMins + 1; TimerBox.SetElapsed(ElapsedMins); return RedisplayShapes; ’ĶĶ’’’’ĶĶĶĶZRiterate_set_timer(100); CountDown := CurrentCommand.ElapsedTime; return NoRedraw; ’ĶĶ’’’’ĶĶĶĶWfor a := sv.ProductionApps do ss.AddApp(new ApplicationBox call SetUp(a, eProd)); endfor; for a := sv.BackupApps do ss.AddApp(new ApplicationBox call SetUp(a, eBackup)); endfor; for a := sv.DevelopmentApps do ss.AddApp(new ApplicationBox call SetUp(a, eDev)); endfor; ’ĶĶ’’’’ĶĶĶĶRBlocals ss := cs.AddServer(sv); do AddApps(ss, sv); endlocals; ’ĶĶ’’’’ĶĶĶĶM!locals mh := new MainHorzStripe; cmd := new CommandStripe; cs := new ConfigStripe; mv := new MainVertStripe; do TimerBox := new TimerBox; TimerBox.SetElapsed(ElapsedMins); Shapes append TimerBox; Shapes append mh; cs.SetUp(Scenario); mh.Top := 100.0; mh.Left := 50.0; mh.Spacing := 100.0; mh.BoxAlignment := LeftOrTop; mv.Shapes append cmd; mh.Shapes append mv; mh.Shapes append cs; for sv := Scenario.Servers do AddServer(sv, cs); endfor; locals cb := new CopyBox; do for db := Scenario.OfflineDatas do cb.Shapes append new DataBox call SetUp(db, eProd); endfor; mv.Shapes append cb; endlocals; Shapes appendlist cs.ConnList; cmd.SetUp(Scenario); endlocals; ’ĶĶ’’’’ĶĶĶĶI0’ĶĶ’’’’ĶĶĶĶEfalse’ĶĶ’’’’ĶĶĶĶ<“DataObject := nw; NwName := nw.NetworkName; if notnull nw.Server then SvName := nw.Server.Name; else SvName := "<<< no server >>>"; endif; ’ĶĶ’’’’ĶĶĶĶ1ƒfor nl := DataObject.NetworkTable where nl.Server.Name = sv.Name do Shapes append new NetworkTableLine call SetUp(nl); endfor; ’ĶĶ’’’’ĶĶĶĶ-DataObject := sc; üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüĪ”ĻŪ’ĶĶ’’’’ĶĶĶĶ DataObject := s; ’ĶĶ’’’’ĶĶĶĶDataObject := s; ’ĶĶ’’’’ĶĶĶĶ rlocals ptserver := new ChannelPoint call SetUp(s); ptdisk := new ChannelPoint call SetUp(s); intconn := new InternalConn call SetUp(s.Server); do TopStripe.Shapes append ptserver; BotStripe.Shapes append ptdisk; intconn.StartBox := ptserver; intconn.EndBox := ptdisk; configstripe.ConnList append intconn; return ptdisk; endlocals; ’ĶĶ’’’’ĶĶĶĶŒDataObject := cs; TopStripe := new ChannelHorzStripe; BotStripe := new ChannelHorzStripe; Shapes append TopStripe; Shapes append BotStripe; ’ĶĶ’’’’ĶĶĶĶśļfor pt := Box.TopStripe.Shapes where pt.DataObject = css do locals con := new ChannelConn; do con.StartBox := svs; con.EndBox := pt; configstripe.ConnList append con; return; endlocals; endfor; ’ĶĶ’’’’ĶĶĶĶōūDataObject := cs; Box := new ChannelBox call SetUp(cs); Shapes append Box; BotStripe := new _StripeShape; BotStripe.IsVertical := false; BotStripe.Spacing := 30; Shapes append BotStripe; if empty(cs.SomeDisksOrder) then for st := cs.Settings where notnull st.SomeDisks do cs.SomeDisksOrder append st.SomeDisks; endfor; endif; for sd := cs.SomeDisksOrder do BotStripe.Shapes append new SomeDisksBox call SetUp(sd); endfor; for s := cs.Settings do if isnull s.SomeDisks then Box.AddSetting(s, configstripe); else locals spt := Box.AddSetting(s, configstripe); con := new ChannelConn; notfnd := true; do for db := BotStripe.Shapes where db is SomeDisksBox -> sdb and sdb.DataObject = s.SomeDisks do notfnd := false; con.EndBox := db; endfor; con.StartBox := spt; configstripe.ConnList append con; endlocals; endif; endfor; ’ĶĶ’’’’ĶĶĶĶč DataObject := sd; AddDisks(sd); ’ĶĶ’’’’ĶĶĶĶß.DataObject := a; DisplayControl := flag(knd); üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüh ŽiÄ!’ĶĶ’’’’ĶĶĶĶÕ.DataObject := d; DisplayControl := flag(knd); ’ĶĶ’’’’ĶĶĶĶĖLeft := lf; Top := tp; ’ĶĶ’’’’ĶĶĶĶ»žif isnull DataStripe then DataStripe := new DataHorzStripe; Shapes append DataStripe; endif; DataStripe.Shapes append new DataBox call SetUp(d, knd); ’ĶĶ’’’’ĶĶĶͶ0CentreHorizontally := true; if sd.Number > 0 then locals num := sd.Number; lf := if num = 1 then 0.0 elseif num = 2 then -2.5 else -5 endif; botmsg := new TextInfoTextLine; do repeat min(num, 3) do Shapes append new DiskBox call SetUp(lf, StartTop); lf := lf + 5; StartTop := StartTop + 5; endrepeat; if num > 2 then Shapes append botmsg; botmsg.Top := StartTop; botmsg.Left := 20; botmsg.SetUp(str(num) & " disks"); endif; endlocals; endif; for dp := sd.ProductionDatas do AddData(dp, eProd); endfor; for dp := sd.BackupDatas do AddData(dp, eBackup); endfor; for dp := sd.DevelopmentDatas do AddData(dp, eDev); endfor; ’ĶĶ’’’’ĶĶĶͰ0’ĶĶ’’’’ĶĶĶĶØDataObject := sv; ’ĶĶ’’’’ĶĶĶ͟}if isnull AppStripe then AppStripe := new AppHorzStripe; Shapes append AppStripe; endif; AppStripe.Shapes append ab; ’ĶĶ’’’’ĶĶĶĶįBox := new ServerBox call SetUp(sv); Shapes append Box; for c := sv.Channels do if c is SomeDisks -> sd then locals con := new ChannelConn; db := new SomeDisksBox call SetUp(sd); do DisksList append db; con.StartBox := Box; con.EndBox := db; configstripe.ConnList append con; endlocals; elseif c is ChannelSwitchSetting -> cs then locals found := false; do for x := configstripe.ChannelSwitchStripes do if x.DataObject = cs.ChannelSwitch then x.AddConn(this, cs, configstripe); found := true; endif; endfor; JóĒGė°’’ĶĶ’’’’ĶĶĶĶŹ if not found then locals css := new ChannelSwitchStripe call SetUp(cs.ChannelSwitch, configstripe); do DisksList append css; configstripe.ChannelSwitchStripes append css; css.AddConn(this, cs, configstripe); endlocals; endif; endlocals; endif; endfor; if notnull sv.InbuiltDisks then StartTop := 90.0; AddDisks(sv.InbuiltDisks); locals di := Box.DrawItems << "backbox" >>; do if di is _Rect -> r then r.Height := 120; endif; endlocals; if notnull DataStripe then DataStripe.Top := 120; endif; endif; ’ĶĶ’’’’ĶĶĶĶ›į Ź ’ĶĶ’’’’ĶĶĶĶ*locals svstripe := new ServerContainer call SetUp(sv, this); do if notnull NwTable then NwTable.AddNwMapping(sv); endif; TopStripe.Shapes append svstripe; BotStripe.Shapes appendlist svstripe.DisksList; NwRake.ProngBoxes append svstripe; return svstripe; endlocals; ’ĶĶ’’’’ĶĶĶĶ‹©TopStripe := new MainHorzStripe; TopStripe.BoxAlignment := LeftOrTop; BotStripe := new _StripeShape; BotStripe.IsVertical := false; BotStripe.Spacing := 30; BotStripe.BoxAlignment := LeftOrTop; locals toppoint := new AccessPointBox; topstripe := new SmallHorzStripe; do Shapes append topstripe; NwRake := new NetworkRake; topstripe.Shapes append toppoint; NwRake.HeadBox := toppoint; if notempty(sc.NetworkTable) then topstripe.LeftMargin := 100; NwTable := new NetworkTableStripe call SetUp(sc); topstripe.Shapes append NwTable; endif; ConnList append NwRake; endlocals; Shapes append TopStripe; Shapes append BotStripe; ’ĶĶ’’’’ĶĶĶĶ{ Msg := msg; ’ĶĶ’’’’ĶĶĶĶrMsg := msg; Val := 0; ’ĶĶ’’’’ĶĶĶĶhMsg := msg; Val := 0; ’ĶĶ’’’’ĶĶĶĶ\ Msg := msg; ’ĶĶ’’’’ĶĶĶĶS5.0’ĶĶ’’’’ĶĶĶĶMShapes append itl; ’ĶĶ’’’’ĶĶĶĶE*Names := NewText; return RedisplayShapes; üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüü½½­jjÄ>0’ĶĶ’’’’ĶĶĶĶA Names := pr; ’ĶĶ’’’’ĶĶĶĶ/ return []; ’ĶĶ’’’’ĶĶĶĶ,=for c := Commands do c.EnsureComplete(scenario); endfor; ’ĶĶ’’’’ĶĶĶĶ(dfor c := Commands do if not c.Doit() then return false; endif; endfor; return true; ’ĶĶ’’’’ĶĶĶĶ return [Server]; ’ĶĶ’’’’ĶĶĶͦif App notin scenario.Applications then scenario.Applications append App; endif; if Server notin scenario.Servers then scenario.Servers append Server; endif; ’ĶĶ’’’’ĶĶĶĶif App in Server.ProductionApps then Server.ProductionApps remove App; elseif App in Server.BackupApps then Server.BackupApps remove App; elseif App in Server.DevelopmentApps then Server.DevelopmentApps remove App; else return false; endif; return true; ’ĶĶ’’’’ĶĶĶĶreturn [App] & [Server]; ’ĶĶ’’’’ĶĶĶĶ ¦if App notin scenario.Applications then scenario.Applications append App; endif; if Server notin scenario.Servers then scenario.Servers append Server; endif; ’ĶĶ’’’’ĶĶĶĶ -App.ProductionOn append Server; return true; ’ĶĶ’’’’ĶĶĶĶreturn [Data] & [SomeDisks]; ’ĶĶ’’’’ĶĶĶĶżŻif isnull Scenario then Scenario := scenario; endif; if Data notin scenario.Datas then scenario.Datas append Data; endif; if SomeDisks notin scenario.SomeDisks then scenario.SomeDisks append SomeDisks; endif; ’ĶĶ’’’’ĶĶĶĶłvif Data notin Scenario.OfflineDatas then return false; endif; SomeDisks.ProductionDatas append Data; return true; ’ĶĶ’’’’ĶĶĶĶļreturn [Data] & [SomeDisks]; ’ĶĶ’’’’ĶĶĶĶģ¤if Data notin scenario.Datas then scenario.Datas append Data; endif; if SomeDisks notin scenario.SomeDisks then scenario.SomeDisks append SomeDisks; endif; ’ĶĶ’’’’ĶĶĶĶč.if Data in SomeDisks.ProductionDatas then SomeDisks.ProductionDatas remove Data; elseif Data in SomeDisks.BackupDatas then SomeDisks.BackupDatas remove Data; elseif Data in SomeDisks.DevelopmentDatas then SomeDisks.DevelopmentDatas remove Data; else return false; endif; return true; üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüürą"’(ų’ĶĶ’’’’ĶĶĶĶßreturn [Data]; ’ĶĶ’’’’ĶĶĶĶÜ‚if isnull Scenario then Scenario := scenario; endif; if Data notin scenario.Datas then scenario.Datas append Data; endif; ’ĶĶ’’’’ĶĶĶĶŲ0Scenario.OfflineDatas append Data; return true; ’ĶĶ’’’’ĶĶĶĶĻ+return [NetworkNameMapping] & [NewServer]; ’ĶĶ’’’’ĶĶĶĶĢĪif NetworkNameMapping.Server notin scenario.Servers then scenario.Servers append NetworkNameMapping.Server; endif; if NewServer notin scenario.Servers then scenario.Servers append NewServer; endif; ’ĶĶ’’’’ĶĶĶĶČ5NetworkNameMapping.Server := NewServer; return true; ’ĶĶ’’’’ĶĶĶĶæ#return [Setting] & [NewSomeDisks]; ’ĶĶ’’’’ĶĶĶͼßif Setting.ChannelSwitch notin scenario.ChannelSwitches then scenario.ChannelSwitches append Setting.ChannelSwitch; endif; if NewSomeDisks notin scenario.SomeDisks then scenario.SomeDisks append NewSomeDisks endif; ’ĶĶ’’’’ĶĶĶĶø/if notnull NewSomeDisks or notnull Setting then locals cs := Setting.ChannelSwitch; do for s := cs.Settings where notnull s.SomeDisks and s.SomeDisks = NewSomeDisks do s.SomeDisks := null; endfor; endlocals; endif; Setting.SomeDisks := NewSomeDisks; return true; ’ĶĶ’’’’ĶĶĶĶØ5.0’ĶĶ’’’’ĶĶĶĶ¢kfor c := Commands do c.EnsureComplete(this); endfor; for sv := Servers do CheckServer(sv); endfor; ’ĶĶ’’’’ĶĶĶ͟for c := sv.Channels do if c is SomeDisks -> sd and sd notin SomeDisks then SomeDisks append sd; elseif c is ChannelSwitch -> cs and cs notin ChannelSwitches then ChannelSwitches append cs; endif; endfor; for a := sv.ProductionApps & sv.BackupApps & sv.DevelopmentApps do if a notin Applications then Applications append a; endif; endfor; ’ĶĶ’’’’ĶĶĶ͇eDepend’ĶĶ’’’’ĶĶĶĶ…false’ĶĶ’’’’ĶĶĶĶz+if isnull App then " " else App.Name endif ’ĶĶ’’’’ĶĶĶĶotrue’ĶĶ’’’’ĶĶĶĶ^_return for ac := Actions; af := ac.Calls where af.Async do af.To.App endfor; ’ĶĶ’’’’ĶĶĶĶLreturn for ac := Actions; af := ac.Calls where not af.Async ff&²l~’ĶĶ’’’’ĶĶĶĶ do af.To.App endfor; ’ĶĶ’’’’ĶĶĶĶ[L  ’ĶĶ’’’’ĶĶĶĶ91’ĶĶ’’’’ĶĶĶĶ/call a := DevelopmentApps; d := a.Datas; sd := d.DevelopmentOn with sd in AllDisks() endall ’ĶĶ’’’’ĶĶĶĶ-Yall b := BackupApps; d := b.Datas; sd := d.BackupOn with sd in AllDisks() endall ’ĶĶ’’’’ĶĶĶĶ+aall p := ProductionApps; d := p.Datas; sd := d.ProductionOn with sd in AllDisks() endall ’ĶĶ’’’’ĶĶĶĶ)Plocals dk list SomeDisks; do if notnull InbuiltDisks then dk append InbuiltDisks; endif; for c := Channels do if c is SomeDisks -> sd then dk append sd; elseif c is ChannelSwitchSetting -> css then dk append css.SomeDisks; endif; endfor; return dk; endlocals; ’ĶĶ’’’’ĶĶĶĶ!1’ĶĶ’’’’ĶĶĶĶ Name := n; ’ĶĶ’’’’ĶĶĶĶ return Name; ž’ĶĶį?SomeDisksBox€>' ā  ć  ä  ' ’ĶĶŻį?CmdRemoveData€$' ā  ć  ä   ’ĶĶ ź?(ChannelSwitchStripe€?' ė  ģ Ņ ķ  Ö ’ĶĶŽ 1? ChannelEndPoint€'   2  3  ø ’ĶĶü?ChannelBox€@' ż  ž Ģ ’  ( ’ĶĶń?CmdLoadData€%' ņ  ó  ō   ’ĶĶ% ?$ChannelHorzStripe€A'   G Ź H  ) ’ĶĶ·?ChannelPoint€B'    Ė   * ’ĶĶ›w?AppAction€'   x  y  Ī ’ĶĶŗ?ChannelConn€C'   I Ų J  + ’ĶĶS?InternalConn€D'    Ł   , ’ĶĶ!?CmdInstallApp€&'        ’ĶĶD "?AccessPointBox€E' #  K Ś L  - ’ĶĶÉ $?NetworkRake€F' %  M Ō N  . ’ĶĶC &?&NetworkTableStripe€G' '  ( Ó )  / ’ĶĶ 3?"NetworkTableLine€H' 4  5 Ū 6  0 ’ĶĶŹ? CmdUninstallApp€''        ’ĶĶĮ@?(ReconfigDiagramBase€I' A  B  C  1 ’ĶĶŠ€?ActionFlow€'     ‚  Š ’ĶĶŚ"?CmdRunScript€(' #  $  %   ’Ķ͹_? ReconfigDiagram€J' `  a Ż b  2 ’Ķ͐ g?"ReconfigSelected€K' h  i Ž j  ‘ 3 üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüy’Åz3ć’ĶĶÖ n?CommandStripe€L' o  p ą q @  4 ’ĶĶ| 4?MainVertStripe€)' 5  ; Ą <   ’ĶĶr6?MainHorzStripe€*' 7  = Į >   ’ĶĶ9|?CommandLine€M' }  ~ ß  @  5 ’ĶĶ8? SmallHorzStripe€+' 9  ? Ā @   ’ĶĶą:?TitleBox€,' ;  < Ć =   ’ĶĶ2?CommandPointer€N'   O į P  6 ’ĶĶŃ‘?RefreshLine€O' ’  “ ā ” @  7 ’ĶĶĶ˜?CopyBox€P' ™  Q ć R  8 ’ĶĶPš?TimerBox€Q' ›  œ Ü   9 ’ĶͦG?InfoTextBox€-' H  I Ä J   ’ĶĶ! §? Guide€R' Ø  ©  Ŗ  : ’ĶĶh O?InfoTextLine€.' P  Q  R   ’ĶĶÉ ³R(Reconfigure Example Ż ’ĶĶH “R*Reconfigure Selected Ž ‘ ’ĶĶœ U? HeadingTextLine€/' V  W Å X   ’ĶĶ%J?&NetworkNameMapping€'   K  L  Ā ’ĶĶk^?BlankTextLine€0' _  A Ę B   ’ĶĶš`? IntInfoTextLine€1' a  b Ē c   ’ĶĶŽj?$FloatInfoTextLine€2' k  l Č m   ’ĶĶž t?"TextInfoTextLine€3' u  v É w   ’ĶĶö ū=$Disk Switch Model  2 „ €g'  ² S Ł Ś Ū Ü Ż Ž Version 1.0 Ų ’ĶĶƒ?ConfigStripe€4' €   Õ ‚   ’ĶĶ’’’’ĶĶĶĶTZ"CommandStripeHitHit n ’ĶĶ’’’’ĶĶĶĶUZCommandLineHitHit | ’ĶĶ’’’’ĶĶĶĶVZRefreshLineHitHit ‘ ’ĶĶ’’’’ĶĶĶĶWX–C A B AOK’ĶĶ’’’’ĶĶĶĶXX–CHB B ACancel’ĶĶ’’’’ĶĶĶĶYV A AČBCHC Select Scenario"OrigScenarioList’ĶĶ’’’’ĶĶĶĶĄ)'HB’ĶĶ’’’’ĶĶĶĶĮ*'HB’ĶĶ’’’’ĶĶĶĶĀ+' A’ĶĶ’’’’ĶĶĶĶĆ,' Z ’ĶĶ’’’’ĶĶĶĶ[ƒHC B’ĶĶ’’’’ĶĶĶĶ] į  A \ ’ĶĶ’’’’ĶĶĶĶÄ-'’ĶĶ’’’’ĶĶĶĶÅ/' ^ ’ĶĶ*‘? ServerContainer€5' ’  “ Ń ”   ’ĶĶ’’’’ĶĶĶĶa é _  A ` ’ĶĶ’’’’ĶĶĶĶĘ0' b ’ĶĶ’’’’ĶĶĶĶcƒČB A’ĶĶų±?"CmdSwitchChannel€!' ²  ³  “   ’ĶĶ’’’’ĶĶĶĶĒ1' d ’ĶĶ’’’’ĶĶĶĶg ā e  A f ’ĶĶ’’’’ĶĶĶĶČ2' h ’ĶĶ’’’’ĶĶĶĶk ā i  A j ’ĶĶ’’’’ĶĶĶĶÉ3' l ’ĶĶ’’’’ĶĶĶĶo ā m  A n üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüü5’GŃ“¹’ĶĶ’’’’ĶĶĶĶŹA' A’ĶĶ’’’’ĶĶĶĶĖB'$Channel connector p ’ĶĶ’’’’ĶĶĶĶq‡ ņ  @ @ @’ĶĶ’’’’ĶĶĶĶĢ@'Channel Switch r  A A @’ĶĶ’’’’ĶĶĶĶu† ń  s t  @ @’ĶĶ’’’’ĶĶĶĶĶ:' v  A @ @ @ @’ĶĶ’’’’ĶĶĶĶy† ģ  w x ’ĶĶ’’’’ĶĶĶĶĪ6'Server z ’ĶĶ’’’’ĶĶĶĶ| ß  BpA { ’ĶĶP”?ServerBox€6' ¢  £ Ī ¤   ’ĶĶ’’’’ĶĶĶĶ}†backbox ė pA B B’ĶĶ’’’’ĶĶĶĶ~† @ A€@ B’ĶĶ’’’’ĶĶĶ͆`A A€@ B’ĶĶ’’’’ĶĶĶĶ€†øA A€@ B’ĶĶ’’’’ĶĶĶ́†B A€@ B’ĶĶ’’’’ĶĶĶĶ‚…@‚BB‚B’ĶĶ’’’’ĶĶĶĶĻ7' ƒ  B @ @ @ @’ĶĶ’’’’ĶĶĶ͆† ģ  „ … ’ĶĶQ Ŗ?AppHorzStripe€7' «  C Ļ D  ! ’ĶĶ’’’’ĶĶĶĶŠ='Application ‡ ’ĶĶ’’’’ĶĶĶ͈† š  BšA’ĶĶī ¬?DiskHolder€8' ­  ®  Æ  " ’ĶĶ’’’’ĶĶĶ͊ ‰  ę  A@šApABackup’ĶĶ’’’’ĶĶĶ͌ ‹  ę  A@ ApADev’ĶĶ’’’’ĶĶĶĶŽ ß @@BŠA  ’ĶĶĆ Į?8CmdChangeNetworkNameMapping€"' Ā  Ć  Ä   ’ĶĶ’’’’ĶĶĶĶŃ5'’ĶĶ’’’’ĶĶĶĶŅ?'šA’ĶĶ’’’’ĶĶĶĶÓG'*Network lookup table   A’ĶĶ’’’’ĶĶĶ͐ č ČB ANetwork Table’ĶĶ’’’’ĶĶĶĶ“† õ  ‘ ’ ’ĶĶ’’’’ĶĶĶĶŌF'(Network Connections ų ČA’ĶĶ~ ?System€'        ’ĶĶ’’’’ĶĶĶĶÕ4'šA’ĶĶ’’’’ĶĶĶĶÖ;'Disk Box ” ’ĶĶ’’’’ĶĶĶĶ•ˆ ī  AšA A @’ĶĶ’’’’ĶĶĶĶ–† ķ  @ AČA’ĶĶ’’’’ĶĶĶĶ—ˆ ī  A @ A @’ĶĶ’’’’ĶĶĶ͘… ī  @šA’ĶĶ’’’’ĶĶĶĶ™… ī  A @ AšA’ĶĶ’’’’ĶĶĶĶ×<'Data element š šA’ĶĶ’’’’ĶĶĶĶ›† ļ  BšA’ĶĶ’’’’ĶĶĶĶ œ  ę  A@šApABackup’ĶĶ’’’’ĶĶĶ͟ ž  ę  A@ ApADev’ĶĶ’’’’ĶĶĶĶ” ß @@BŠA   ’ĶĶ’’’’ĶĶĶĶŲC'&Channel connection ó ’ĶĶ’’’’ĶĶĶĶŁD' ō ’ĶĶ’’’’ĶĶĶĶŚE'6Access to external network ¢ ’ĶĶ’’’’ĶĶĶĶ£† ÷  A A’Ķ͉?NamedObj€'        ’ĶĶ’’’’ĶĶĶĶŪH' ¤ ’ĶĶÖĀ?DataHorzStripe€:' Ć  E Ķ F  # ’ĶĶ’’’’ĶĶĶͦ ā  @ŒB A „ ’ĶĶ’’’’ĶĶĶĶØ ā –B\B A § ’ĶĶuÄ?DiskBox€;' Å  Ę Ö Ē  $ ’ĶĶ’’’’ĶĶĶĶÜQ'Elapsed Time © HBHB’ĶĶ’’’’ĶĶĶĶŖ ć €æpAElapsed Time’ĶĶ’’’’ĶĶĶͬ† ś  B «  A’ĶĶTŃ?CmdCopyData€#' Ņ  Ó  Ō   üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüü‡ŠOśčDH’ĶĶ’’’’ĶĶĶĶÆ ć ­ €æpA ® ’ĶĶ’’’’ĶĶĶĶŻJ'0Reconfiguration Example ° ’ĶĶ’’’’ĶĶĶĶŽK'0Reconfiguration Example’ĶĶ’’’’ĶĶĶĶßM' U  ± ’ĶĶ’’’’ĶĶĶͲƒÜBpA’ĶĶVĶ?DataBox€<' Ī  Ļ × Š  % ’ĶĶ’’’’ĶĶĶĶ“msg ć  A€æpA ³ ’ĶĶ’’’’ĶĶĶĶąL' T  µ  A’ĶĶ’’’’ĶĶĶͶƒČB A’ĶĶ’’’’ĶĶĶĶ· ä €æšA8Commands (click to process)’ĶĶ’’’’ĶĶĶĶįN' ö ’ĶĶ’’’’ĶĶĶĶāO' V  ø ’ĶĶ’’’’ĶĶĶ͹ ē  CpA8Show Original Configuration’ĶĶ’’’’ĶĶĶĶćP'Offline Data ŗ  AšAšA A A’ĶĶ’’’’ĶĶĶĶ»ƒČBpB’ĶĶ’’’’ĶĶĶ;† ł  A ¼ ½ @@’Ķͽ×?ApplicationBox€=' Ų  Ł Š Ś  & ’ĶĶ’’’’ĶĶĶĶæ č  A€æpAOffline Data’ĶĶ’’’’ĶĶĶĶŗU» ¾ æ ’ĶĶ’’’’ĶĶĶĶøU¹ ’ĶĶ’’’’ĶĶĶ͵U¶ · ’ĶĶ’’’’ĶĶĶͱU² “ ’ĶĶ’’’’ĶĶĶͰRY W X ’ĶĶ’’’’ĶĶĶĶ©UŖ ¬ Æ ’ĶĶ’’’’ĶĶĶͤU¦ Ø ’ĶĶ’’’’ĶĶĶĶ¢U£ ’ĶĶ’’’’ĶĶĶ͚U›  Ÿ ” ’ĶĶ’’’’ĶĶĶĶ”U• – — ˜ ™ ’ĶĶ’’’’ĶĶĶĶU “ ’ĶĶ’’’’ĶĶĶ͇Uˆ Š Œ Ž ’ĶĶ’’’’ĶĶĶ̓U† ’ĶĶ’’’’ĶĶĶĶzU| } ~  €  ‚ ’ĶĶ’’’’ĶĶĶĶvUy ’ĶĶ’’’’ĶĶĶĶrUu ’ĶĶ’’’’ĶĶĶĶpUq ’ĶĶ’’’’ĶĶĶĶlUo ’ĶĶ’’’’ĶĶĶĶhUk ’ĶĶ’’’’ĶĶĶĶdUg ’ĶĶ’’’’ĶĶĶĶbUc ’ĶĶ’’’’ĶĶĶĶ^Ua ’ĶĶ’’’’ĶĶĶĶZU[ ] ’ĶĶ’’’’ĶĶĶĶSA’ĶĶ’’’’ĶĶĶĶRD’ĶĶ’’’’ĶĶĶĶQC’ĶĶ’’’’ĶĶĶĶPD’ĶĶ’’’’ĶĶĶĶOC’ĶĶ’’’’ĶĶĶĶND’ĶĶ’’’’ĶĶĶĶMC’ĶĶ’’’’ĶĶĶĶLD’ĶĶ’’’’ĶĶĶĶKC’ĶĶ’’’’ĶĶĶĶJD’ĶĶ’’’’ĶĶĶĶIC’ĶĶ’’’’ĶĶĶĶHD’ĶĶ’’’’ĶĶĶĶGC’ĶĶ’’’’ĶĶĶĶFD’ĶĶ’’’’ĶĶĶĶEC’ĶĶ’’’’ĶĶĶĶDD’ĶĶ’’’’ĶĶĶĶCC’ĶĶ’’’’ĶĶĶĶBD’ĶĶ’’’’ĶĶĶĶAC’ĶĶ’’’’ĶĶĶĶ@D’ĶĶ’’’’ĶĶĶĶ?C’ĶĶ’’’’ĶĶĶĶ>D’ĶĶ’’’’ĶĶĶĶ=C’ĶĶ’’’’ĶĶĶĶ<D’ĶĶ’’’’ĶĶĶĶ;C’ĶĶ’’’’ĶĶĶĶ:@’ĶĶ’’’’ĶĶĶĶ9@’ĶĶ’’’’ĶĶĶĶ8@’ĶĶ’’’’ĶĶĶĶ7@’ĶĶ’’’’ĶĶĶĶ6@’ĶĶ’’’’ĶĶĶĶ5@’ĶĶ’’’’ĶĶĶĶ4@’ĶĶ’’’’ĶĶĶĶ3@’ĶĶ’’’’ĶĶĶĶ2@’ĶĶ’’’’ĶĶĶĶ1@’ĶĶ’’’’ĶĶĶĶ0@’ĶĶ’’’’ĶĶĶĶ/@’ĶĶ’’’’ĶĶĶĶ.@’ĶĶ’’’’ĶĶĶĶ-@’ĶĶ’’’’ĶĶĶĶ,@’ĶĶ’’’’ĶĶĶĶ+@’ĶĶ’’’’ĶĶĶĶ*@’ĶĶ’’’’ĶĶĶĶ)@’ĶĶ’’’’ĶĶĶĶ(@’ĶĶ’’’’ĶĶĶĶ'@’ĶĶ’’’’ĶĶĶĶ&@’ĶĶ’’’’ĶĶĶĶ%@’ĶĶ’’’’ĶĶĶĶ$@’ĶĶ’’’’ĶĶĶĶ#@’ĶĶ’’’’ĶĶĶĶ"@’ĶĶ’’’’ĶĶĶĶ!@’ĶĶ’’’’ĶĶĶĶ @’ĶĶ’’’’ĶĶĶĶ@’ĶĶ’’’’ĶĶĶĶ@’ĶĶ’’’’ĶĶĶĶ@üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüükj×ĶyŌ±’ĶĶ’’’’ĶĶĶĶ@’ĶĶ’’’’ĶĶĶĶ@’ĶĶ’’’’ĶĶĶĶ@’ĶĶ’’’’ĶĶĶĶ@’ĶĶ’’’’ĶĶĶĶ@’ĶĶ’’’’ĶĶĶĶ@’ĶĶ’’’’ĶĶĶĶ@’ĶĶ’’’’ĶĶĶĶ@’ĶĶ’’’’ĶĶĶĶ@’ĶĶ’’’’ĶĶĶĶ@’ĶĶ’’’’ĶĶĶĶ@’ĶĶ’’’’ĶĶĶĶ@’ĶĶ’’’’ĶĶĶĶ@’ĶĶ’’’’ĶĶĶĶ@’ĶĶ’’’’ĶĶĶĶ@’ĶĶ’’’’ĶĶĶĶ @’ĶĶ’’’’ĶĶĶĶ @’ĶĶ’’’’ĶĶĶĶ @’ĶĶ’’’’ĶĶĶĶ B’ĶĶ’’’’ĶĶĶĶ B’ĶĶ’’’’ĶĶĶĶB’ĶĶ’’’’ĶĶĶĶB’ĶĶ’’’’ĶĶĶĶ@’ĶĶ’’’’ĶĶĶĶ@’ĶĶ’’’’ĶĶĶĶB’Ķ͇ÜQW X Y ’ĶͤŪOT U V ’ĶĶ’’’’ĶĶĶͽ= shape.GetHeight() - 10’ĶĶ’’’’ĶĶĶͼ= shape.GetWidth()’ĶĶ’’’’ĶĶĶͳ = shape.Msg’ĶĶ’’’’ĶĶĶĶ®= str(shape.Et) & " mins"’ĶĶ’’’’ĶĶĶĶ­= 90 + shape.Wid’ĶĶ’’’’ĶĶĶĶ« = shape.Wid’ĶĶ’’’’ĶĶĶͧ= shape.SvName’ĶĶ’’’’ĶĶĶĶ„= shape.NwName’ĶĶ’’’’ĶĶĶĶ = shape.DataObject.Name’ĶĶ’’’’ĶĶĶĶž = flag(eDev)’ĶĶ’’’’ĶĶĶ͜= flag(eBackup)’ĶĶ’’’’ĶĶĶĶ’= shape.GetHeight()’ĶĶ’’’’ĶĶĶĶ‘= shape.GetWidth()’ĶĶ’’’’ĶĶĶĶ= shape.DataObject.Name’ĶĶ’’’’ĶĶĶĶ‹ = flag(eDev)’ĶĶ’’’’ĶĶĶ͉= flag(eBackup)’ĶĶ’’’’ĶĶĶĶ…= shape.GetHeight()’ĶĶ’’’’ĶĶĶĶ„= shape.GetWidth()’ĶĶ’’’’ĶĶĶĶ{= shape.DataObject.Name’ĶĶ’’’’ĶĶĶĶx= shape.GetHeight()’ĶĶ’’’’ĶĶĶĶw= shape.GetWidth()’ĶĶ’’’’ĶĶĶĶt= shape.GetHeight() ’ĶĶ’’’’ĶĶĶĶs= shape.GetWidth() ’ĶĶ’’’’ĶĶĶĶn =shape.Msg’ĶĶ’’’’ĶĶĶĶm =shape.Margin’ĶĶ’’’’ĶĶĶĶj= shape.Msg & str(shape.Val)’ĶĶ’’’’ĶĶĶĶi= shape.Margin’ĶĶ’’’’ĶĶĶĶf= shape.Msg & str(shape.Val)’ĶĶ’’’’ĶĶĶĶe= shape.Margin’ĶĶ’’’’ĶĶĶĶ` = shape.Msg’ĶĶ’’’’ĶĶĶĶ_= shape.Margin’ĶĶ’’’’ĶĶĶĶ\ =shape.NamesžżŁ”ÓÖ,ImportĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢ’ĶĶœū=$Disk Switch Model  2 „ €g'  ² S Ł Ś Ū Ü Ż Ž Version 1.0 ä Ų ’ĶĶ’’’’ö äž’ĶĶ<«F Doit å Ŗ ’ĶĶ®FEnsureComplete ę ¬ ’ĶĶć°EListObjects q ē Æ ’ĶĶ’’’’ĶĶĶĶē’ĶĶ’’’’ĶĶĶĶę’ĶĶ’’’’ĶĶĶĶåžüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüü"‡ś„³é•Ä,ĶĶĶ\ ’’’’ĶĶĶĶ’’’’ĶĶĶĶ»m’ĶĶ’’’’ĶĶĶĶ*'$eg.com/serviceone  ’ĶĶ’’’’ĶĶĶĶ' Four  ’ĶĶ’’’’ĶĶĶĶ+'$eg.com/servicetwo  ’ĶĶ’’’’ĶĶĶĶ'LonDiskF    ’ĶĶ’’’’ĶĶĶĶ,'eg.com/devone  ’ĶĶ’’’’ĶĶĶĶ'One a   ’ĶĶ’’’’ĶĶĶĶ=' . 0Manual Move Application / 0  1 2 3  4 ’ĶĶ’’’’ĶĶĶĶ' CandD  ’ĶĶ’’’’ĶĶĶĶ6'' 5 Stop App One€?   ’ĶĶ’’’’ĶĶĶĶ 'WinDevA b ’ĶĶ’’’’ĶĶĶĶ7#'.Make copy App One CodešA = % ’ĶĶ’’’’ĶĶĶĶ'Three E    ’ĶĶ’’’’ĶĶĶĶ8#'"Make copy DB OnešA = & ’ĶĶ’’’’ĶĶĶĶ9%'.Load App One Code on CšA = %  ’ĶĶ’’’’ĶĶĶĶ'Three F    ’ĶĶ’’’’ĶĶĶĶ:%'"Load DB One on DšA = &  ’ĶĶ’’’’ĶĶĶĶ 'LonDiskA    ’ĶĶ’’’’ĶĶĶĶ;&' Install App One @   ’ĶĶ’’’’ĶĶĶĶ'Four A   ’ĶĶ’’’’ĶĶĶĶ<"'6Switch network for App One @ *  ’ĶĶ’’’’ĶĶĶĶ'Two  h ’ĶĶ’’’’ĶĶĶĶK' > &Switch Application ? @ A B C D  E ’ĶĶ’’’’ĶĶĶĶ'Four B   ’ĶĶ’’’’ĶĶĶĶF''Stop App Two€? "  ’ĶĶ’’’’ĶĶĶĶ'LonDiskB    ’ĶĶ’’’’ĶĶĶĶG!'Switch Disk E @   ’ĶĶ’’’’ĶĶĶĶ'App One     ’ĶĶ’’’’ĶĶĶĶH!'Switch Disk F @   ’ĶĶ’’’’ĶĶĶĶ\'     $  ) - ’ĶĶ’’’’ĶĶĶĶI&' Install App Two @ "  ’ĶĶ’’’’ĶĶĶĶ"'App Two !  # ’ĶĶ’’’’ĶĶĶĶJ"'Switch Network @ +  ’ĶĶ’’’’ĶĶĶĶ'LonDiskC  ’ĶĶ’’’’ĶĶĶĶ[' L Process Script M N O P Q R  S ’ĶĶ’’’’ĶĶĶĶ%'App One Code ]  c ’ĶĶ’’’’ĶĶĶĶZ('.Script to Move App Two @ T ’ĶĶ’’’’ĶĶĶĶ' Three e   ’ĶĶ’’’’ĶĶĶĶU''Stop App TwoĶĢĢ= "  ’ĶĶ’’’’ĶĶĶĶ&'DB One ^  d ’ĶĶ’’’’ĶĶĶĶV!'Switch Disk EĶĢĢ=   ’ĶĶ’’’’ĶĶĶĶ'LonDiskD  ’ĶĶ’’’’ĶĶĶĶW!'Switch Disk FĶĢĢ=   ’ĶĶ’’’’ĶĶĶĶ''App Two Code _  f ’ĶĶ’’’’ĶĶĶĶX&' Install App TwoĶĢĢ= "  ’ĶĶ’’’’ĶĶĶĶY"'Switch NetworkĶĢL> +  ’ĶĶ’’’’ĶĶĶĶ('DB Two `  g ’ĶĶ’’’’ĶĶĶĶh'WinTwoDisk’ĶĶ’’’’ĶĶĶĶ'LonDiskE    ’ĶĶ’’’’ĶĶĶĶg\'" ’ĶĶ’’’’ĶĶĶĶf\'" ’ĶĶ’’’’ĶĶĶĶe]'" ’ĶĶ’’’’ĶĶĶĶd\' ’ĶĶ’’’’ĶĶĶĶc\' ’ĶĶ’’’’ĶĶĶĶb]' ’ĶĶ’’’’ĶĶĶĶa]' ’ĶĶ’’’’ĶĶĶĶ`W' ’ĶĶ’’’’ĶĶĶĶ_W' üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüü½āĻq#’ĶĶ’’’’ĶĶĶĶ^W' ’ĶĶ’’’’ĶĶĶĶ]W'  ’ĶĶ’’’’ĶĶĶĶTe'U V W X Y ’ĶĶ’’’’ĶĶĶĶSe'Z ’ĶĶ’’’’ĶĶĶĶR['+ ’ĶĶ’’’’ĶĶĶĶQ_'' ( ’ĶĶ’’’’ĶĶĶĶP]'" ’ĶĶ’’’’ĶĶĶĶOY' ’ĶĶ’’’’ĶĶĶĶNW'  ’ĶĶ’’’’ĶĶĶĶMT'  ’ĶĶ’’’’ĶĶĶĶEe'F G H I J ’ĶĶ’’’’ĶĶĶĶD['+ ’ĶĶ’’’’ĶĶĶĶC_'' ( ’ĶĶ’’’’ĶĶĶĶB]'" ’ĶĶ’’’’ĶĶĶĶAY' ’ĶĶ’’’’ĶĶĶĶ@W'  ’ĶĶ’’’’ĶĶĶĶ?T'  ’ĶĶ’’’’ĶĶĶĶ4e'6 7 8 9 : ; < ’ĶĶ’’’’ĶĶĶĶ3['* + ’ĶĶ’’’’ĶĶĶĶ2_'% & ' ( ’ĶĶ’’’’ĶĶĶĶ1]' ’ĶĶ’’’’ĶĶĶĶ0W'     ’ĶĶ’’’’ĶĶĶĶ/T'  ’ĶĶ’’’’ĶĶĶĶ-d'= K [ ’ĶĶ’’’’ĶĶĶĶ)['* + , ’ĶĶ’’’’ĶĶĶĶ$^'% & ' ( ’ĶĶ’’’’ĶĶĶĶ#^'' ( ’ĶĶ’’’’ĶĶĶĶ!S' ’ĶĶ’’’’ĶĶĶĶ ^'% & ’ĶĶ’’’’ĶĶĶĶS'  ’ĶĶ’’’’ĶĶĶĶS' ’ĶĶ’’’’ĶĶĶĶ\' " ’ĶĶ’’’’ĶĶĶĶZ'    ’ĶĶ’’’’ĶĶĶĶX' ’ĶĶ’’’’ĶĶĶĶ_'( ’ĶĶ’’’’ĶĶĶĶ_'' ’ĶĶ’’’’ĶĶĶĶ _'& ’ĶĶ’’’’ĶĶĶĶ _'% ’ĶĶ’’’’ĶĶĶĶ V'       ’ĶĶ’’’’ĶĶĶĶU'  ’ĶĶ’’’’ĶĶĶĶU'  ’ĶĶ’’’’ĶĶĶĶU'  ’ĶĶ’’’’ĶĶĶĶU'     ’ĶĶ’’’’ĶĶĶĶS'     ’ĶĶ’’’’ĶĶĶĶLDThis also illustrates moving and application from one server to another. It uses disk channel switches to move the data, in other words the disks are reassigned to the other server. If differs from the previous example in that all the commands are captured in a pre-written script which is processed by one operator command.’ĶĶ’’’’ĶĶĶĶ>µThis also illustrates moving and application from one server to another. It uses disk channel switches to move the data, in other words the disks are reassigned to the other server.’ĶĶ’’’’ĶĶĶĶ5’ĶĶ’’’’ĶĶĶĶ.ŖThis illustrates switching an application from one server to another using manual commands. The data is unloaded (to tape for instance) and reloaded on the other machine.žżŁ”a-ImportĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢ’ĶĶn'One a j k  ’ĶĶ'Two l m n  h ’ĶĶĪ h'WinTwoDisk o p q ’ĶĶ’’’’ĶĶĶĶq_'’ĶĶ’’’’ĶĶĶĶp_'’ĶĶ’’’’ĶĶĶĶo_'üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüēEюyp,ĶĶĶ5  ’’’’ĶĶĶĶ’’’’ĶĶĶĶ»m’ĶĶ’’’’ĶĶĶĶ Ć<The Benefits of Disk Switches     <For WeaverBird version 2008v2JCopyright (c) 2008, Polyphony IT Ltd’ĶĶ’’’’ĶĶĶĶR'’ĶĶ’’’’ĶĶĶĶÅscendiagsel*Reconfigure SelectedExample One’ĶĶ’’’’ĶĶĶĶÅscendiagall(Reconfigure ExampleExample One’ĶĶ’’’’ĶĶĶĶÅbrowseExample One’ĶĶ’’’’ĶĶĶͶ IntroIntroduction  ’ĶĶ’’’’ĶĶĶĶ ¶ScenariosScenarios   ’ĶĶ’’’’ĶĶĶĶ ·ScenarioListExample One’ĶĶ’’’’ĶĶĶĶ h  ’ĶĶ’’’’ĶĶĶĶh  ’ĶĶ’’’’ĶĶĶĶm   ’ĶĶ’’’’ĶĶĶĶ^<p>This section shows an number of examples illustrating various techniques for changing configurations.</p> <p>To process the commands just click on the command list. You don't have to click on the exactly the next command. Clicking on any command should process the next command.</p> <p>At the top of the diagram is a bar that represents the elapsed time of the commands processed to date. When you click on a command this slowly grows to give the impression of time passing. While the bar is growing you cannot click another command.</p> <p>These elapsed times are of course, guesses. The elapse time for copying disk to tape is particularly variable. Also remember that in real life, an operator may take some time to do a command because they first have to work out exactly what to do. If they get it wrong of course they can create considerable chaos.</p> ’ĶĶ’’’’ĶĶĶĶ ‘<p>This model has been written to illustrate the concept of an electronic brochure or white paper.</p> <p>The example is for a disk switch product and the diagrams illustrate the time difference for reconfiguring the hardware when a disk switch it used compared to when a disk switch isn't used. But this is only an example: <b>WeaverBird</b> models can be very different as you can see if you look at the other models on the web page (at <href "www.weaverbird.org">www.weaverbird.org</href>.)</p> <p>We developed this model with the thought that it will be used for three purposes.</p> <ol> <li>As reference material for the sales force. Something for themüĢ@Į»iĪ’ĶĶ’’’’ĶĶĶĶn]'’ĶĶ’’’’ĶĶĶĶm]'’ĶĶ’’’’ĶĶĶĶl]'’ĶĶ’’’’ĶĶĶĶk]'’ĶĶ’’’’ĶĶĶĶj]'’ĶĶŁ0W'       ž’ĶĶ ' Three e s t  ’ĶĶ' Four u v w  ’ĶĶ’’’’ĶĶĶĶw]'’ĶĶ’’’’ĶĶĶĶv]'’ĶĶ’’’’ĶĶĶĶu]'’ĶĶ’’’’ĶĶĶĶt]'’ĶĶ’’’’ĶĶĶĶs]'žüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüü¢Ī÷ā±›G’ĶĶ’’’’ĶĶĶĶ( to read and explore in their own time.</li> <li>As marketing collateral. It is something different from yet-another-brochure or yet-another-white-paper.</li> <li>As a document to discuss with customers. Dynamic diagrams are a good discussion point. Furthermore the model data can be changed to reflect the customer's situation.</li> </ol> <p><b>WeaverBird</b> models are different from most other modelling programs in that everything is encapsulated in a single file, like an office program. <b>WeaverBird</b> differs from most office program in that the diagrams are generated from model data. A <b>WeaverBird</b> model is not only a document you can read but also a data store like a mini database.</p> <p>In this example, this is used to show the effects of processing operational commands. When you ask it to process the next command, the command is processed in a copy of the model data, and the diagram is redrawn.</p?<p> If you are in the business of selling products that are used for controlling and reconfiguring to IT systems, this model may be a useful starting point for developing marketing collateral of your own using <b>WeaverBird</b>. You will want to:</p> <ul> <li>Change the the text to reflect your marketing programs.</li> <li>Change the model data to reflect your examples.</li> <li>And maybe change the model logic to bring our different points.</li> </ul> <p>The next section describes the scenarios. For each scenario there is a diagram. You can see the diagram by going to the appropriate section for the scenario. The text describes the scenario. Alternatively if you want to see a diagram directly without bothering about the text, <cmd scendiagall>click here</cmd>.</p> <p>The text for each of these scenarios is generated from the model data. To see the model data <cmd browse>click here</cmd>.</p> ’ĶĶ’’’’ĶĶĶĶ‘  ( žżŁ”!Å-ImportĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢĢ’ĶĶ< Ć<The Benefits of Disk Switches     <For WeaverBird version 2008v2JCopyright (c) 2008, Polyphony IT Ltd  üŸ§FōFźåG’ĶĶz¶ IntroIntroduction   ’ĶĶ ·ScenarioListExample One   ’ĶĶ’’’’ĶĶĶĶh’ĶĶ’’’’ĶĶĶĶh’ĶĶ’’’’ĶĶĶĶ’ĶĶ’’’’ĶĶĶĶžüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüü