(************** Content-type: application/mathematica ************** Mathematica-Compatible Notebook This notebook can be used with any Mathematica-compatible application, such as Mathematica, MathReader or Publicon. The data for the notebook starts with the line containing stars above. To get the notebook into a Mathematica-compatible application, do one of the following: * Save the data starting with the line of stars above into a file with a name ending in .nb, then open the file inside the application; * Copy the data starting with the line of stars above to the clipboard, then use the Paste menu command inside the application. Data for notebooks contains only printable 7-bit ASCII and can be sent directly in email or through ftp in text mode. Newlines can be CR, LF or CRLF (Unix, Macintosh or MS-DOS style). NOTE: If you modify the data for this notebook not in a Mathematica- compatible application, you must delete the line below containing the word CacheID, otherwise Mathematica-compatible applications may try to use invalid cache data. For more information on notebooks and Mathematica-compatible applications, contact Wolfram Research: web: http://www.wolfram.com email: info@wolfram.com phone: +1-217-398-0700 (U.S.) Notebook reader applications are available free of charge from Wolfram Research. *******************************************************************) (*CacheID: 232*) (*NotebookFileLineBreakTest NotebookFileLineBreakTest*) (*NotebookOptionsPosition[ 224871, 4942]*) (*NotebookOutlinePosition[ 256666, 6105]*) (* CellTagsIndexPosition[ 256585, 6099]*) (*WindowFrame->Normal*) Notebook[{ Cell["\<\ \:4e26\:5217\:8a08\:7b97\:30c4\:30fc\:30eb\:30ad\:30c3\:30c8 The Parallel Computing Toolkit\ \>", "Title", FontFamily->"Utopia"], Cell[TextData[{ "\:7570\:6a5f\:7a2e\:9593", "\:30cd\:30c3\:30c8\:30ef\:30fc\:30af\:4e0a\:3067", StyleBox["Mathematica ", FontSlant->"Italic"], "\:3092\:4f7f\:3063\:3066\:554f\:984c\:3092\:4e26\:5217\:51e6\:7406\n\ Solving problems with ", StyleBox["Mathematica", FontSlant->"Italic"], " in parallel on a heterogeneous network" }], "Subtitle"], Cell[TextData[{ Cell[GraphicsData["Bitmap", "\<\ CF5dJ6E]HGAYHf4PAg9QL6QYHg00PdC00F5X405aN201XJ Q`050?ooo`0400007@01<4X00C1:004^AWd0oooo001e0?ooo`0600TgC`08 =Dd05AF001HFP@0H68@05QJ20`3oool200007@04004aB`01<4X002e5000G 97`0oooo001d0?ooo`0300XiD`09=e0023A<00<05QJ100<05AEo018BN`3o ool00`0001d2004aBP03004Z@00062D0oooo07/0oooo001d0?ooo`0300Xi D`08=Dh023E=00805aN200@051Ao01@DOP0D57h05AEo0`0001d01@01@0062H00100Lb B@08=4`023E=00PcBP0G5h<05AEo01LGPP0E5H004Q9l014ANP0A4G/04Q9k 00800C1900<00Bi6000L:`004ad00`004aei0?ooo`00L@3oool01`09>540 23E=00LcBP09=Th023A<00LbB@0F5X800P0D57h02`0C4g`04Q9k01@DO`0G 5h<05AF0018BN`01;dP00BY0000L:P004ad0018L008001540 2CI>00LcB`0200PcB`0@00PdC00F5X8051An014AN`0B4W`04Q9k01HFP@0I 6HH05aN2018BN`0F5X000BHj000D80004ad0018L000C7@80018L00<001J00=cNN0?ooo`130?ooo`00L03oool04`09 =Tl02SQA00ThD007c^S03/kY00i>J40>c^SA03oool00700oooo00<02CI?00ThD009=dl0 0P09=Th200PdC00<01XJQP0G5h<04a=m01@DOP0F5X4061R401HFP@0H68@0 5QJ101@DO`0G5h@061R31@004Q`00`004A/0018L0?ooo`0[0?ooo`0603Ph W`0f=Yd0>CVP03XjXP0i>J00>c^RA03oool006l0oooo01D02CQ@00TfC`08 =Dd02CI>00XhD@09=dl023=;00TeC@0I6HD05aN301DEP00D57l05QJ001TI Q@0F5X805AF101@DP00D57l04a=n01DEP00G5h801@004Q`2000B6bT0oooo 00P0>c^S0410ZP11@J/0?3bU03`lY00l?:D0=cNM03DeVd@0oooo001_0?oo o`0800ThD@08=Dd023A;00TfC`0:>54023E=00TfC`0:>54201LGPP0<01DE O`0D57h04a=m01DEO`0E5H0051An01DEP00D57l04a=n01DEP00F5X405AF0 0P004Q/01@004Q`0014J000A6`004A/0018K02H0oooo00X0>CVP03PhW`0i >J00@T:]04E5/00o?jP0?SjW03loZ00g=ih0HA03oool006h0oooo00l0 2CI>00XhD@09=e002CI>00XhD@09=dl02CI>00/kE@0;>U<05aN201TIQ@0F 5X4051Ao01j<0?3bT0080@T:/00D0?CfV03hnZ012@Z`0?3bT03TiX014 0?ooo`00KP3oool06@0:>5402SYC00XiD`09=Tl02CM@00TfCP09=dl033aF 00/jD`0G5h806QZ601PHQ00E5H004a=m01DEP00E5H404a=l01DEP00C4g`0 4a=m01XJQP0I6HH04a=n01j<0?3bU03loZ@0l?:@0>CVP03/kY080@42Z 00<0?cnX0?ooo`3oool0@P3oool006d0oooo00`02CM@00XhD@0:>5402CQA 00PeC@09=Th023E=00TfC`0:>5402SUB01HFP@0F5X8201HFP@0501CVP03/kX`0o?jP0>c^S03PhW`0j>Z<0 ?cnX0492Z`11@JY40?ooo`00K@3oool05008=Dd02CM?00XiDP0;>e@02SUB 00PeC@09=Dh02CM?00TfCP0:=e0051Am018BN`0C4gd05aN301DEO`0F5X40 6AV501@DO@0D57h04a=m0P0E5Gl01P0F5X406AV601LGQ00D57l05AF0000@ 6080010I00<0010H000@6@004AX07@3oool04@12@Z`0@d>^03loZ00k>j@0 ?CfV03dmY@0k>j<0>SZR03XjX@0l?:D0?SjW03dmY@0l?:D0?CfU03hnY`10 @:T0@d>/04@0oooo001/0?ooo`8023E=01<02CI?00/kE@0] 03hnY`0j>Z80>c^T0410Z@11@JX0?CfU03`lY00o?jT0?CfU03`lX`0o?jL0 ?SjW03`lY@0l?:@0@D6Z04@0oooo001[0?ooo`0400/kE009=e0023I>00Tf C`802cYD01402CI?00PeC009=Tl02CI>00PeCP09=Dd06AV501LGP`0D57l0 61R401DEP00A4GT04a=m01DEO`0D57h05QJ101PHQ00201LGQ00901TIQP0E 5H404a=l014ANP0A4G/04Q9l000?5`0041P000lH0080010H00<000lH0?oo o`3oool05@3oool02@004A/0=cNM03TiX00m?JD0@T:/04=3[@10@:X0?CfV 03hnYP020410Z@0303`lX`0i>J00?3bU0080?3bT00D0?CfU03/kY00k>j<0 >SZR03dmYP140?ooo`00J`3oool02@0;>eD02CM@00PeCP08=Dd02SQA00Tg C`08=4`02CE=00TfC`0200TfCP0800PeC@0K6hP06a^801@DOP0G5h805QJ1 01j<0@D6Z04E5/013@jd0?SjW03/kX`0203XjXP0703PhWP0f=Y`0>3RO 03hnYP10@:T0?3bU03PhW`0203TiX00303/kX`3oool0oooo0480oooo001Z 0?ooo`0900XjE00:>E802CM@00TfCP08=Dd02CM?00PeC@08=4`02CE=00<0 2CM@00X02CM?01/KR00L78T04a=m01@DO`0F5X405AF001HFP@0B4W`05QJ1 0P0E5H0301LGP`0701PHQ@0A4GX0411i014AO00@47T04A5j01Z80400i >J00>c^R0451ZP16A[00A4B^03hnY`0j>Z80>3RP03PhW`0h>9h0>CVP03/k X`10@:T0@T:[03dmYP0j>Z4203/kX`0303`lY@3oool0oooo0480oooo001Z 0?ooo`0A00XjE00:>E<02SUB00XhD@09=e002SQA00TgC`09=Th02CM@00Xh D009=e002SUB00/jD`0J6XH06a^901DEP@0E5H000P0G5h800`0F5X404A5i 01DEP00201DEP00501PHQ00H68D05QJ201PHQ@0C4gh00P0B4W`0100A4G/0 4Q9k019l0?cnW04M7/P12@Z`0>SZS03/kX`0m?JH0?SjV03loZ00n?ZL0?3bT 03hnY`11@J/0?cnX03`lY@0m?JH0>c^S03XjXP0o?jL0A4B^0492[00o?jP0 ?cnY03/kY00i>J00A03oool006T0oooo00L02SUB00/kE@0;>eD02SUB00Xi D`0;>eD02cYC00<02SUB00h02CI?00PeC@0:>5402cYD01LGP`0J6XH05aN3 01TIQ@0H68@05QJ201@DOP0?3gH04A5j01HFP@8061R400L05aN301DEP00E 5H4051An01DEP@0D58004Q9l00804a=m00<0411j01@DO`003QH00P003aL0 0`003aP0010I0?ooo`0;0?ooo`0;000A6P004A/0?SjV03XjX@0i>Il0?SjV 04M7/P14A:l0?3bU03dmY@0n?ZL00P0o?jP0400k>j<0=cNN03`lX`13@jd0 @D6Z03hnY`11@JX0?SjV03XjX@0m?J@0@d>]04A4[`10@:T0?SjV03XjXP0h >9m40?ooo`00J@3oool200/jE00C00XiDP09=e002SUB00`lEP0;>U@02cYC 00XiD`09>54023E=00PcBP09=dl02cYC01HFP00H68@05aN201PHQ00H68<0 51Ao018BO002010@N00:01DEP@0H68D04a=n018BO00D57h05AEo01Z40>3RO03`lY012@Z/0?cnX03XjX@0k>j<0 >c^R03/kX`0n?ZH0?3bT03XjX@0j>Z80?cnX0P10@:T02P12@Z`0@D6Z03hn YP0m?JD0@42Y0492[010@:P0?SjV03hnY`11@JU40?ooo`00J03oool05009 =dl02cYD00XiDP09=Th023A<00TgC`0;>U<02c]E00/jE009=e002CI?00Te C@085P003aL000lH000?5`080?ooo`06000A 6`0j>Z40@42Y04=3[010@:T0?CfV0P0j>Z80600n?ZH0@T:[03dmYP0j>Z40 ?3bT03/kX`0k>j80?CfU03loY`0o?jP0?SjV0410Z@11@JX0@42Y0492Z`11 @JX0@42Y03hnY`0o?jP0@T:[0492[012@Z/0@T:/04I6/D@0oooo001X0?oo o`0=00TgD00:>E802SQA00PeC@07E<02SUB00TfCP08 =Dd02CE=00TeCP0200XiDP0701LGPP0F5X805AEo01DEO`0G5h805QJ101PH Q00201TIQ@0A01HFPP0D58004a=n01@DO`0D57h04Q9l01@DOP0A4GX04Q9l 01SZQ03XjXP10@:T0@D6Z0P0m?JD0 2`0n?ZL0?cnX0451Z`12@Z`0?cnX0410Z@12@Z/0?SjW03`lY00n?ZH0?cnX 0080@D6Z00H0@T:/0451ZP0k>j<0?CfU0492Z`13@j`203loZ0050492Z`13 @j`0@T:[03loZ010@:X0A03oool006L0oooo01/02SYC00XhD@09>5402SUB 00TfCP075002SM@00PeC@08=4`02CE=00XhD00:>E80 2CI>01PHQ@0F5X404a=m01HFP@0G5h805AEn01LGP@0G5h<061R301LGPP0E 5Gl00`0D57h0300B4W/04Q9l014ANP0C4gd04A5k018BO00E5H4061R401@D OP0A4G/04Q9l018BO@<000lG02H000lH000@603oool0oooo000A6P0n?ZH0 >c^R03hnYP0l?:@0>SZR03hnY`10@:T0?3bT03dmY012@Z/0A4B]0451ZP0l ?:<0>c^S0492[014A:h0?SjV03/kX`0l?:<0?3bT03loZ013@jd0ATJa04A4 [P0j>Z40>CVO0410Z011@JX0@42Y0492Z`13@jd0A4B^0451Z`80?CfVA03o ool004d0oooo00<0000O0000800002005`3oool01@0:>E<02CM@00PfCP0: >5802CQ@008023E=00`02CI>00TgD009=e002CI>00PeC008=4/02CI>00Xg D00:=dl06QZ701LGP`0D57h201XJQP@05QJ000<05aN201HFP@0E5H000P0D 57h02`0C4gd04a=k01@DO@0G5h8051An018BN`0D57l05QJ201DEP00C4g`0 51Ao00805AF10`003aL09`003aP0010H000A6P17Ak80@T:[03XjX@0k>j80 >SZQ03PhW`0l?:@0@D6[0410Z@0o?jL0@d>/04A4[@0n?ZL0=cNM03XjX014 A:h0ADF_03loY`0m?J@0?CfU03dmYP10@:X0@d>]04I6/016A[40?SjV03Ti X00l?:<0>c^S03loZ@16A[40ADF`04=3[@10@:X0?cnX0451ZP140?ooo`00 C@3oool300007`04000080010B00000O00007a80oooo00H01c=;00TfC`08 =Dd023A<00TgD009>54200TgC`0D00TfC`09=e002CQ@00TgD009=Th023A< 00TfCP0:=e002CI>01XJQ`0H68@05AF001TIQ@0K6hP06AV501LGPP0E5Gl0 51An01LGP@0H68@301HFP@0501@DOP0C4g`051An01TIQP0H68D00P0D57l0 1`0E5H005QJ201LGPP0E5H005aN301HFPP0B4W`00P003aL01P004A/0?cnW 0410Z@12@Z/0@D6Z03`lY080>SZQ00l0>CVP03/kX`10@:T0A4B^0492Z`0o ?jP0@42Y03`lY00h>9l0?SjV04I6/015AJh0@D6Y0492Z`13@j`00`12@Z/0 3@14A:h0@d>]03hnY`0n?ZH0>c^R03HfW00k>j80ADF^04A4[P10@:T0?SjV 03hnY`13@j`0A03oool004d0oooo0`00020500007`800@4P00<0000P0?oo o`3oool0303oool07008=4`02CM?00PeC@08=Dd02CM@00ThD009=e002SQA 00XiDP0:>E<02CM@00TfCP08=Dd02CI>00XiDP0:>50023=:01LGP`0I6HD0 5aN201HFP00I6HH06a^801HFP@0C4gd04Q9k01HFP00I6HD201DEP00601TI Q@0F5X4051An01/0492Z`0n?ZD0?cnX0P0o?jL05P13@j`0 A4B]0492ZP12@ZX0ATJ`04M7/@14A:d0@D6Z0492Z`17Ak00@42Y03/kX`11 @JX0?cnW03LgW@0j>Z00@d>/0492Z`0l?:<0>CVP03PhX00k>j=40?ooo`00 C@3oool200007`<00@4P00D0000O004180010B00000P00007`05004180T0 oooo00D023E=00TgD008=Dh023A<00TgC`0200XhD@0500XhDP0:>5402SYC 00XiDP08=Dd00P08=4/03P09=Th02SQA00TgC`08=4/05QJ001PHQ00J6XH0 5aN201PHQ00K6hP05AEo01HFP@0D57h04Q9l0P0E5H001`0E5H406AV601TI Q@0F5X004a=l018BO00D57l00P0B4W`05P0D57l05QJ201LGP`0D57l05AF1 01HFP@0C4gd051Ao0410Z@15AJl0ATJ`03loY`0m?J@0@42X0451Z@10@:P0 ?cnX03dmY00m?JD0@T:[04I6/013@jd203loY`0903loZ011@JX0A4B]04A4 [P13@j`0A4B^04M7/@18B;80AdNa0080A4B]00d0BDVc04=3Z`0k>j80@42Y 0451ZP0l?:<0?CfU04=3[011@JT0>3RO03HfW00e=I`0=cNM04@0oooo001= 0?ooo`<00@4P0P00020200418080000P1`010B0010000200000O00418001 0B030?ooo`0600DJ9@07;T<02CI?00LcBP08=4`02CI?0P09=e003@09>500 2CM?00XhD009=e002CE>00PeC@08=4/02CE=00XgD00:>5002CM?01HFO`0E 5H000P0J6XH05@0I6HD071b901HFP@0I6HH061R4018BO00D57h05AF001DE P@0I6HD061R501HFP@0E5Gl051An01DEO`0B4Wd051Ao01HFP@0G5h8061R4 01DEP@0201SZQ03/kXP0n?ZL0 ?SjU03dmY@0o?jL0>SZQ03XjX013@jd0AdNb04=3[@0n?ZH0?3bS03/kX`0n ?ZL0@T:/04E5[`80ATJ`00h0ADF`04I6/017Ak40A4B]04=3[019BK@0ADF_ 03dmY@10@:T0A4B^04A4[@13@j`0@D6Z03dmY@80>CVP0P0k>j=40?ooo`00 C03oool01@0001l00@4P004180010B00000O00@00@4P00@0000P00418001 0B00000O10010B00100001l00@4P0041800002030041800@00DJ9@056bH0 1RDe00PdB`09=Th02CI?00LcB`07SZQ03Xj X011@JT0A4B]0451ZP10@:P0?SjV03dmY@0o?jL0@D6Y04=3[014A:d0A4B^ 04=3[@14A:d0A4B^0410Z@11@JT0AdNb04A4[P0m?J@0@42X04M7/@19BK<0 B4Rb04A4[P10@:T0?SjW0410Z@12@Z/0@D6ZA03oool004`0oooo2@010B00 0`0002000@4P0041800;004180801AXV01801A/V00HK9`067BT02CM@00Tf C`07E<02SQA00TfCP09=dl02CE>00PeC@0:=e002SUB 00XhD00:=dl201DEP00`01LGPP0H68@061R401`LR00K6hL06AV501PHQ00E 5H405aN301HFPP0B4W/05AF001Z00?SjV0492Z`11@JX0@T:[0492ZP11@JX0 A4B]04E5/015AJl0@D6Y03loY`12@Z/0@d>/1014A:d03`0o?jL0?3bT0410 ZP11@JT0>SZP03/kX`13@j`0A4B_04M7/@1:B[H0B4Rc0492[011@JX0ADF^ 04A4[P140?ooo`00C03oool00`010B00000P00007`060041800300007`01 0B000@4P00H00@4P00<00@4Q004180010B000P010B000`056bH01AXV00DK 9P0300HK9`0K00TfC`08=4`023E=00TgD00:>5402CM@00TfCP09=Dd023A; 00PeC@09=dl02SM?00TeC@09=dl05aN201HFP@0G5h8061R301XJQP0L78P0 6QZ601TIQ00F5X0051Ao01LGPP0I6HH051An008061R301005QJ101HFPP0I 6HH05aN201j80@D6Z04I6/015AJh0 @d>[0492Z`10@:P0@D6Z04A4[P16A[40@T:[03loZ013@jd0A4B^0080ADF^ 0140ADF_04A4[P0o?jL0>CVQ03`lY011@JT0?SjV03dmY@10@:X0@D6Z04A4 [P1/0451Z`140?ooo`00C03oool01@010B00 000P00007`0001l0000P00X00@4P00<0000P004180010B0010010B001@07 72L01Q/V00DK9P056bH01Q/W00801Q/V00X01Q/W00TfCP08=Dd02CI>00Tf C`09=dl02SQA00TfCP08]0451ZP0n?ZH0 ?cnW04=3[018B;80AdNa0P13@j`0200o?jP0>SZP03/kXP0o?jL0?SjV0451 Z@14A:l0ADF_1017Ak400`14A:d0?cnX0451ZP0204M7/@0404=3[010@:P0 ?cnW0492Z`80AdNa00@0@d>[0492ZP12@Z/0?cnWA03oool00300oooo00@0 0S5:008`B@02<4T00S19603oool00`010B00000P00007`02000080T00@4P 00<0000O004180010B001@010B000`066bL01A/V00DK9P0200DK9P0<00DJ 9P056bH01Q/W00HK9`08<4H023A<00TfCP0:=e002cYC00XhD008=4`023A; 0P09=Th05`0:=dl02SQA01XJQP0L78T05aN101HFP@0H68@06QZ701PHP`0E 5Gh05QJ101LGPP0C4g`05AEo01XJQP0I6HD05aN201DEP@0F5X005AEo018B N`0A4GX05QJ1008051Ao00P04A5j01/03/kX@0l?:80?CfT03loYP13@jd0A4B^04=3[@19BKD0C4bh04Y: ]@19BK@0B4Rc0P15AJl0301:B[D0B4Rc0492Z`0l?:<0>c^R03hnY@11@JT0 @42Y03loY`11@JT0@D6Z0410Z4@0oooo000`0?ooo`08028RS00Q8H/00S19 008_A`02<4T00c9<00@dCP03E<02SUB00TfCP08=4`200Tf C`0700XhD00;>E8071b901hNS00I6HD061R401PHP`0201LGP`<061R400@0 5AEo01/0492 Z`80ADF_00X0@D6Y03hnYP0n?ZH0@42Y0492Z`11@JT0?SjV0451Z@11@JX0 ?CfUA03oool00300oooo00@08b>=024QRP0M7HD07an80P0300D00c9<008aB`3oool0oooo00007`0<00418003 0000800001l00@4P00H00@4P00D01Q`W00DK9P056RH01A/V00DJ9P0200DJ 9@0700HK9`0772P01Q`W00HK9`066bH01bHf00XhD00200XhD@0n00TgC`09 =Th02SM@00XgC`0:>5402SQ@01`LR@0N7X`06a^801/KQ`0I6H@06AV501PH Q00I6HH06a^701TIQ@0G5h8051An01DEP00G5h<05AEo01@DO`0E5H005aN2 01HFPP0E5H405AF001@DOP0E5H004A5k01/04A4[@11 @JT0@D6Z0492Z`11@JX0@T:[0410Z@0o?jH0?cnW03hnY@0n?ZH0ADF_04Y: ]01;BkH0BDVd04A4[P11@JX20410Z@0;0492Z`13@j`0ADF^04=3[011@JT0 @T:[0451ZP11@JT0A4B]04=3[00m?JD0A03oool00300oooo00`08R:;024Q R`0P88T08b><02HVT@0S8hd00c9<00U<02SUB00XhD@0:>E402SQ@ 00XgC`0:>5002CI>01TIQ@0201/KR00B01`LR00H68@071b901XJQP0G5h<0 61R501XJQP0H68@05QJ201LGP`0H68@05QJ101DEP@0F5X8061R301LGPP0E 5H0051An0`0C4gd02@0E5Gl05QJ101@DO`0F5X406QZ703`lY010@:P0A4B] 04=3Z`0203loY`0503loYP0l?:<0?SjU04=3Z`13@j`00`10@:P01@0n?ZD0 ?SjV0451Z@11@JT0?cnV0080?CfT01<0@D6Y04A4[016A[00ADF_0451ZP11 @JT0@42Y03loY`11@JX0ADF_04U9/`15AJl0@42X03loZ011@JT0ADF^04Y: ]@19BK<0@D6Y04@0oooo000a0?ooo`0A020PR@0Q8H/08b>=02HVT@0T98l0 7an8008_A`02<4T00c9<00E402SM@ 0P09=Th06P08=4`061R401TIQ@0I6HD06QZ601LGP@0K6hL06QZ601LGPP0F 5X406AV501LGP`0E5H0061R301XJQ`0G5h805QJ201HFP@0F5X005AF001HF P@0E5Gl051An01/04=3[@16 A[00BTZe04Q8/@11@JU40?ooo`00<@3oool04@0P88T08B6;01lOR00P88T0 9BF@02020PR@0N7XH07an802@TS`03[0410Z012@ZX304E5[P03 04A4[@13@j`0A4B]0080AdNa@`3oool00340oooo01/09BF@028RS00M7HD0 6a^301hNR00S8hd092B>024QRP0O7hL092B?02LWT`03/04E5 [P13@j/0ATJ_04a<^01=CKT0BDVd0P18B;801P19BK<0Bd^f04M7/015AJl0 ATJ`0492ZP80@D6Z00/0@d>/04A4[@12@ZX0@T:[04=3[017Ak00B4Rb04=3 Z`0o?jD0?SjT0410Y`0304=3[00504A4[@15AJh0A4B]04E5[P15AJl0@`3o ool00340oooo01d09RJA02@TSP0M7HD071b301lOR@0T98l09BFA028RS00M 7HD08B6;02DUT@0S8hd082280000/04E5[P0n?ZD0>c^P0410Y`15AJh0 AdN`04I6[`80A4B]00@0ADF^04=3[014A:d0ADF_@`3oool00340oooo00l0 8b>>02DUT00O7hP06a^201dMQ@0S8hh09BF@024QR`0M7HD07Qj7028RR`0Q 8HX08b>=02DUT00T98h00P0301PHQ00L78T06a^701DEO`0G5h405QJ001PHP`0H 68@05AF001Z00@42X0080ATJ_00L0ADF^ 04I6[`18B;40B4Rb04M7/@18B;<0BDVc04<0oooo000b0?ooo`0702HVT@0Q 8H/071b301dMQ@0R8Xd09BF@02@0151l0 01@N008001>02LWTP0V9Y4092B>020PR@02<4T00S590000[0451Z@14A:h0AdNa04E5[P13@j`0ADF^04Q8/@1:B[<0BDVc 04Q8/P17Ak001016AZl00`15AJh0ATJ_04E5[@0304=3Z`0<04A4[015AJh0 A4B]04E5[P14A:d0@T:[04=3[017Ak00BTZe04a<]`1]04A4[@17Ak80AdNa04E5 [P16A[00BTZd04];]@19BK80AdN`04U9/P1;BkD0B4Rb04I6[`14A:`0@d>[ 04M7/@1;BkD0AdNa0451Z@0o?jH0A4B/04I6/00204=3[080ADF^00T0AdN` 04U9/`1;BkH0C4bg04U9/P18B;40BTZd04Q8/P15AJl0@`3oool00380oooo 01D0822:01lOR00L78D06a^301dMQP0O7hP07Af501`LP`0K6h<071b401lO Q`0N7XL07Af6020PR@0R8X`08R:;020PR@0Q8HT08R:<024QR`0R8X/00P03 <024QRP0O7hP08229028RS00P88X07Qj7020PR@0R8XX00S1800[04A4[@13@j`0A4B]04E5[`13@j`0@T:Z04A4 [@80ATJ`00<0A4B]0451Z@12@ZX00P12@ZX01@17Ak00AdNa04E5[P12@Z/0 A4B/0080AdNa00T0BDVc04a<]`18B;40@42X0492ZP16AZh0ADF]0492ZP14 A:d00`17Ak000`19BK<0AdN`04=3Z`03000>5P03000B7001;4<00B]203d0 oooo000N0?ooo`0300@`B00001X0000J00<0000J3P3oool07`0P88X07an9 01hNQP0L78D07Qj7020PRP0P88T07an8020PR@0Q8H/08b>=02@TSP0S8hd0 8R:;020PRP0O7hP07Af501`LQ00M7HH07Af501XJPP0L78@07an7024QRP03 E`010B800`0001/06`010B802@U300h>F`0>3V0051Aj0451Z@10@:L0 @42X0410Y`12@ZX0@d>[04A4[@15AJl0AdNa04E5[@12@ZX0ATJ_04a<]P1; BkH0ATJ`0492ZP13@j`0ADF]04=3Z`16AZl0B4Rb04M7/00204A4[@0<04Q8 /@18B;80AdN`04U9/`18B;40@d>[04A4[@13@j/0?SjU03dmX`13@j/0ATJ` 0P17Ak400`18B;40ADF]0410Z004000>5P03000M;@01:d400Ba300800Ba3 00L00Bm8004_A`01;TH00C1:004^AP01;dL00Bm803<0oooo000N0?ooo`05 00@`A`04;dH012m600@`B005020PR@0201hN Q`0F01dMQ@0L78<071b401dMQ@0L78@07Qj6020PR@0S8hd0822901hNQP04 =4h00c==00C[T0CDfh04Y:]017Ak40BTZd 0080D52k00L0B4Ra0451Z@10@:P0@D6Y03loYP10@:P0@d>[0080A4B]0180 ATJ_04M7/016AZl0ATJ_04Q8/P17Ak40ATJ`04Q8/P17Ak00@T:Z04A4[019 BK<0BTZe04M7/@16AZl0B4Ra04E5[@10@:L4000>5P0G000?5`01;D@00BY0 004/@`01:d800Be5004_B002<4T00S9<008aBP01;dP00Bi6004_B001C[T0C4bf04U9/P17Ak00 C4bg055A_01?CkX0D52k04m?^P1:B[D0C4bf04i>^@16AZl0?cnW03hnY@11 @JP0?cnV0410Y`12@ZX0@D6Y04A4[018B;40AdN`04I6[`1:B[@0C4bf04U9 /`18B;40Bd^e04a<]`1:B[D0C4bf0080CTji00H0B4Rb04A4[@18B;80ADF^ 00419`020RT3000>5P08000?5`005b<00Bi6004[@P01;D@00Be5004^AP01 ;dP2008`B@04008aB`01<4T00Bi7004]A@800Bm801000C1:008cC@02`036bP2 00>024QS00P88X08R:<02@TSP0S 8hh08b>=028RR`0O7hL07an8020PR@0P88P0822902@TS@0S8h/00c9;00@c C@04=4h00c9;00i<0ATJ[04Y:]018B;40Bd^e04e=^01; BkD00P1?CkX02@19BK<0B4Rb04Y:]015AJd0@42X04=3Z`16AZl0@d>[0492 ZP0204A4[00J04I6[`19BK80AdN`04Q8/@1=CKL0Cdnj04e=]`102DUS`0R8X`08B6;0200P0001/02`0001/01P092BT02@TZ00T9:@0^ ;WL0ADFZ04M7/080Bd^e00<0AdNa04Y:]01;BkD00P16AZl01P17Ak40ADF^ 04M7[`1:B[@0BDVb04E5[@<0@d>[00@0ADF]04M7/018B;40BDVc0P1:B[@0 601^@18B;40ADF^04U9]01;BkD0BDVc04M7/0010BH00@4W 00419P010BL00P8Z0082:@020RH00P8X0082:@020R`00P8b0082;`020RL0 0Ba4004]A0800S1900T00S1:004^AP01;TL00C19004_B001;dL00C1:004` B@01;TL00P01<4T02P01<4X00C5:004_B001;dL00Bm8004aBP02=01408B6:028RR`0S8hd08R:<02=024QRP0U9I00 :BVD02HVT@0T98h08b>=02@TS@02<4T00c5:00=00<092B>02CVD04E5[P14A:d0A4B/04M7/019BK<204];]@0C04]; ]P1?CkX0CTjj04Y:]019BK<0B4Rb04M7/016AZl0AdN`04];]01=CKL0CTji 04e=^01@@0000J00<0000K00006P0001/01P0001/2000C7@0>000B 70004ad02PXZ00X::`092BT02@TZ00T9:@0:2RX05AE3030`OP17Ak00ATJ_ 04M7/01:B[@204i>^@80C4bf00@0BDVc04E5[P17Ak00BTZd0P1;BkD01P1= CKL0Cdnj04m?^P1>C[T0Cdnj0082:P800P8/0P020RT00`020RP00P8Y0082 :P030082:`0:0082;@020RX00@4U00829`020Rd00`<_0082;0020RT00P8X 0082:@800P8/0P020RT010020R/00P8/0082:`020R/20082:P800P8X00T0 0P8Z0082:0020R/00P8_0082:`02> 024QR`80822900T08R:<02PXT`0Z:YH0:RZF02TYU@0W9i<092B>024QRP03 <`0^;WL0B4Ra04E5[@16AZl0BDVc 0080BDVb00T0B4Ra0492ZP10@:L0@d>Z04M7/01;BkD0C4bf04e=^01@D;/0 0P1>C[P20082;`090082<0020Rl00P8`0082;@010BL00P8Z0082:`020Rd0 0P8^00800P8]00d00P8Z0082:0020RP00P8/0082;P020RX00P8X0082:P02 0R/00P8/0082:`020RX00P8Y00800P8V00H00P8W0082:@020R`00P8]0082 :@020RX20082:`040082;`030c000P8^0082:P<00P8[00<00P8^0?ooo`3o ool08P3oool002<0oooo00<00aPS0000T08R:<020PR@0O7hP07an8 01lOQ`0N7XH07Qj501lOR00Q8HT00P0P88P0200N7XH07an7020PR@0O7hL0 822902@TS`0U9I0092B?0P0V9Y402@0W9i40:2RB02PXT`0X:9<09bNB02@T SP0P88P08B6:00=02@TSP0S8hd0:2RC02TYU00T 98h08R:;02=028RS00P 88T08R:<0202@TS@0R8X/09BF>02HV S`0202=0P0U9I000`0T98h0822:020PR@03028RS00302<02@TS`0V9Y80:2RD02HVT@0202DUS`07024Q R@0R8XX08b><028RRP0Q8HX08b>=0000<0030000:`0W0000;00002T0000Z 0000;@0002X0000X0000:P0002P0000Y0000;P0002`0000]0000:P0002/0 000V0000<01caO40MLKb07?4l01``^h0L/?_07C5l@1ea_80M/Oc07O9m01f ao<0L/C`0731k@000380000]0000>01<08B6: 020PR@0R8Xd092B@02DUT@0T98l07an901hNQ`0M7HH07an802@TSP0V9Y00 9bNB02DUS`0Q8H/08b>=02@TS@0S8h/092B=00808b>=01L092B=0000;`00 02`0000Y0000:`0002`0000[0000:00002h0000/00009P0002P0000U0000 9P0002T0000/0000:`0002X0000/0000:@000340M>0202PXTP0002l0000/0000:@<0000[00D0000X0000;000 02h0000X00009`0200009P0:0000:00002X0000Z0000;00002d0000[0000 ;`0002`0LL?_07;3k`80LlGa01<0LlC`0732kP1]_n/0L<;^07G6lP1eao80 M/Sc07O8m01fao<0000]0000;`0002h0000`0000;@000380000]0000= 00L08R:;01hNQ`0O7hL08R:;02@TSP0W9i409RJA008092B>00X0:BVD02PX T`0T98d09BF?02LWTP0Y:I@0000Z0000;P0002`0000Y0P0002X00`0002/0 000]0000:@030000:@80000/00h0000]0000;`0002d0000/0000:@0002d0 L/?_07;4k`1caO40LlC`07;4k`1``Nd0K;kZ06o1k@80LlGa0180M00@09BF@024Q RP0N7XL092B>0`0X:9<01@0V9Y408b>=02DUT00X:9<09BF?00809RJ@00X0 9BF@0000:@0002h0000]0000:00002/0000Y0000:P0002/0000W0P0002`0 3@0002d0000_0000;`0002l0000`0000;@0002L0000V0000;@1caO00LlC` 07;4l01``^h00P1``Nd0301^_n/0Kl3/07;3k`1b`nl0LL;^07;3k`1ba?00 LL?_0772kP0002d0000`0000;`80000`00@0000c000002DUT00T98l08b>=02LWTP0X:9@09bNB02PXT`0Y:I@09RJA028R S00R8X/092B=02LWTP0V9Y008R:;00009P0002P0000^00009`0002/0000X 0000:@0002`0000X0000:P0002/0000]0000;P020000;`080000;@0002/0 000V0000900002/0MLKb07C6lP1ca?0206o1k@0=07;4l01``^h0K/3/0773 k`1ca?00L/C_07C5l@1ba>l0K/3/06o1k@1a`^h0000`0000;`020000<080 000^00<0000a0000<00001L00`0001L00`004AX0014K000A6`04000B7003 000C7@004Q`001=02@TSP0R8X`07an901lOR00N 7XH07Qj701lOR@0R8X`092B>02@TS@0T98h09BFA02DUS`0T98l09RJA02PX U00Z:YL0:RZE02LWT@0S8hd08R:<02@TS@0W9i809RJ@024QRP0002@0000Y 0000;@80000X0200000]00009@0002h0000[0000:00002T0000/0000;`00 02/0000^0000;00002P0000[00009@0002P0M/0L/?_ 07?5l@80000`00@0000^0000<00002`0000/0P00038200005`0300005P00 01L0014J0080014K0`004Q`01@004a`0018L000B70004ad0018L00<001dh00N0?ooo`00:@3oool400028RS00O7hT08R:<028RS@0S8hl08R:=0`0P 88X0100S8hd08R:=01lOR@0Q8H/2024QRP0M028RR`0Q8HX08229028RS00V 9Y40:BVD02LWTP0T98d08b><02@TS`0U9Hl09BF>02@TSP0R8X/0000V0000 ;00002h0000/0000:@0002l0000S0000:`0002h0000W0000:`0002`0000` 0000:@0002/00P0002`0100002l0000/0000:01a`^h207G6lP0507?5l@1d a_40M/Oc07G6lP1daO400P1eao<01@1ea_80LlGa0731k@1^_n/0L<;^0080 M<02<02@TSP0002L0000]0000;`0002d0000Z0000;00002P0000Z 0000;P0002T0000]0000;00002d0000^0000:P0002/0000^0000;`0003<0 000X0731k@1daO40MLKb07C5l@1ea_80MLOb07?4l01daO40MlSd07S9m@1e a_80LlGa07;3k`1_`Nd0LL;^07G7lP1ea_80L<7]06bmj@0003020000;`04 0000l0M`0000^0000<00002l0000b0000;`0003001@0001L3000A6`03000B 6`004Q`0018K0080018L00<001@0J;WU06FghP1R/ml0 0P1Q/]h01@1P/Md0G:kI05FVdP1DYM40FjcH0200oooo000[0?ooo`0500@I 9@046B@011TT00@I9@046B@00P0362@01@036B@011TU00@I90046B@011TU 00807Af600D07Af701lOR@0N7XL07an9020PRP0201lOR@0>01lORP0N7XP0 6a^301`LQ00O7hX07Qj701dMQP0S8hd09bNC02LWTP0T98d0822901hNQ`0O 7hP2024QR`0:02@TS`0U9I008B6<02@TS`0U9I007an801dMQ@0R8X/09RJ@ 02@TSP<08B6900d0000X0000;P0002`0000[0000;00002H0000W0000:`00 02H0000X0000:`0002h0000[00<0000^00X0000[0000;00002d0000Y06k0 k01_`>`0L<7]06o0k01_`Nd0LlC`0P1eao801`1daO40LlC`07;3k`1caO40 L/C`06o1k@1^`>`00P1_`>`02P1``Nd0LL;^06o1k@1]_n/0000_0000<`00 02l0000b0000<@0002l400005`80014J00D0018K000A6`004Q`0018K000B 7008000C7@@0010082:`02 0R`00P8[0082:P020R/00P8]0082;0020RP00P8U0082:P020R/00P8W0082 9P020R/200<3;`0=00<3;P020Rd00P8Z0082:@020RX00`<^00<3<@030bh0 0P8Y00829@020RP00P8/0082:`030082;0800P8^00h0GZoK05^]f01O/=`0 IkST06Nii01U]^80I;GQ06:cg`1O/=`0GJoJ05^]f01EY]40EZSC05f^fR00 oooo000/0?ooo`8011TT00@011TU00@0HkCP062a g@1O/M`0G:gI05^/f01M[]X0Gk3L05j`f`1P/MdQ0?ooo`00;03oool400@I 908011TU0`0362@200@I900B01hNR00P88X0822;020PRP0N7XH07Af5020P R@0O7hT07Qj801hNQP0M7HH07Qj8020PR`0N7XP07Qj601lOR00P88T08B6: 0P0S8hd0200O7hP071b401dMQ@0O7hP08b>=028RS@0Q8HX08R:<0P0T98h0 4P0Q8H/08B6:02/0JkgX0080000`00<0000^0000<@0002h01@00 01L00`004AX0014K000B7002000B7005000B6`004ad0018L000C7@004Q`0 0`004ah2000D7P8001dh01L[MT0GZoK05Z/e`1HZMD0GJkJ05j_f`1N /=/0HK;N0280oooo000]0?ooo`0300>02DUS`0Q8H`0822;01`LQ@0J6X806a^301dMQP0O7hT07Qj8 01lOR00N7XH071b401`LQ@0M7HH07Af501dMQP0P88T08R:<02<028RR`0O7hL07Qj5024QRP0S8h`08R:;024QRP0O7hP08B6;02PXT`0X :9@092B>0000:`0002L0000Z00009`0002X0000]0000:@0002H0000[0000 <00002X200009`050000:00002D0000/0000;00002P00P0002/0101eao80 LlC`0732kP1a`^h207;3k`050732k@1_`Nd0LL?_07?4l01a`nl0101a`^h0 401_`>`0JkgY06fnjP1``Nd0LL?_06k0j`1]_n/0LlC`07G6lP1a`nl0000] 0000<@0002H0000G00005P0001L200005P<0000H00L0014K000B70004Q`0 018L000C7@004ah00100I[OS06FghP1S]N00H[CO06:cg`80Gk3L 00@0GZoK05VZeP1K[MP0G[3K0P1K[MPS0?ooo`00;P3oool010036B@011TT 00@I90046B@200>01hNR00M7HL06a^401TIP@0K6h@07Qj701lOR@0P88X07Qj6 01dMQ@0N7XL00P0M7HH0100L78@07Qj6028RS00R8X`201lOR004024QRP0R 8X`08b><020PR080822900L07Qj5024QRP0T98h08b>=020PP@0P87d06AUW 00<0000[00<0000W0000:P0002l00P0002T0:00002/0000/0000;00002X0 000[0000:@0002L0000Y0000;`0002T0000Z0000;01fao<0LlC`0772kP1b `nl0LlG`07C5l@1b`nl0LL;^07?4l01b`nl0K/3/06o0k01a`nl0LlC`0732 kP1]_^X0JK_W06o1k@1daO40L/?_06foj`1^_n/0L/C_07G6lP1ca?00Kl7] 0000<@00030300005`0300005P0001P0000H00@0000I00<0000J00006@00 01X02@0001X600828P0300828@020R800P8R00P00P8R00P00P8U00<3<003 0c000`[04Q8/P1=CKP071b501XJP`0201dMQP0B01`L QP0K6h@071b401/KQ00J6X407Af5024QR`0P88X08b>=024QR`0O7hL0822: 024QRP0P88X07an701hNQP0Q8H/08R:<0P0M7H802`0J6WH07an501`LM00N 7W/05aMU00h>B@0;2d402`/m00P8<@092CL01@DY00800``0L/C_07G6lP1ca?00KKkZ06Zki`000340 000H0`0001L200006@050000600001T0000I00006P0001T03P0001X00`02 0R800P8Q00828P0<00828P0>00<38`0413400`<_00<3;@030bl00``0K;kY06o1k@1b`nl0L/C_0772kP1_`>`0L<;]07C5l@1c a?00KKoZ06bnjP1^_n/0000a0P0001L0100001P0000I00006@0001TF0000 6P@00P8R00<00`00IkST066cgP80Gk3L00L0HK;N05n`g01P/Md0 I[OS06FfhP1Q/]h0H[?O0080IkST00<0HkGP066bgP1R/ml00P1R/mlU0?oo o`00<03oool080046BD0014K000A6`11@JT0@D6X04=3[014A:`0@T:Z04=3 [015AJh0ATJ_04Q8/@0R8X`0822:01hNQ`0N7XP07Qj301XJM`0J6WH05aM^ 01@DIP0F5V`05QIX00d=B00>3TT03`m:00H6:P092CL01@DY00P8=@051BT0 0`/200005`030000600001T0000J01X0000J00<00P8R00<38`02 0R8020020R800`030b`00`<[00<3:`0200<3:`0<0082;0020RT00P8X0082 :P030bd00`<_06:cg`1O/=`0H[?O06:dg`1R/ml0HkCP101Q/]h02@1O/=`0 HK;N06:cg`1O/Md0HK;N06FfhP1X^^D0IkST06Beh@02062ag@03066bgP1P /Md0oooo02@0oooo000`0?ooo`0;000A6`1:B[D0ADF^0492Z`12@ZT0A4B] 04E5[P12@ZT0@T:Z0451Z@12@ZT00P17Ak002@13@j/07Qj8020PR`0Q8H`0 6AU`00``0LlGa 07S9m@1eao80L/?_0731k@1_`>`0K[o[0731k@1b`nl0Kl7]06VkiP1W^ND0 KKkZ0731k@1_`>`0L<7]07?4l01daO40L<7]06fnjP0001PQ00006PP00P8R 00X00P8Z0082:`020R`00P8/0082:`020RP00P8U00829`030b/0I;KQ0P1Q /]h206>eh00B06:cg`1Q/mh0G[3K066bgP1Q/mh0H;7M06:cg`1S]>00Gk3L 05f_fP1O/M`0H[?O066bgP1P/Md0GZoK05f^f@1O/=`0HK;N9P3oool002h0 oooo01H0014K04I6[`1BP0:2S`0 1PH_2@030b8300<38`L00`009`3oool002`0oooo00L0014K04Q8 /P1:B[@0ADF^04M7/01;BkH0B4Rb0080ATJ_0180ADF^04I6[`17Ak00B4Ra 04M7/014A:`0@T:Y0451Z@12@ZX0B4Rb04a<]`16AZ/03Pi900/;?P082340 0``0K/3[06fnjP1[_>P0J[cX06jo j`1``Nd0L/C`07G6lP1daO40Kl7]06bnjP1]_n/0LL;^0773kP020731k@06 00dkD`0=>U803C]C00hmEP0>?5D03CYB900001X200828P0A00828@020R@0 0P8W00<3;01Q/]h0IKKR06:cg`1P/Md0HkCP06Nii01V]n<0I;GQ06FfhP1S ]>00Gk7L062bg@1R]=l00P1P/]d02`1T]N40HkGP05j_f`1K[MP0Gk3L05j_ f`1L[]T0G:gI05f^fP1P/Md0HkCP02L0oooo000Z0?ooo`0:000A6P004A/0 @42X04I6[`18B;80ATJ_04Q8/P1U<03SeF00lnE`0>?5D043mI00lnF00=>e@U00006P0406>dh01J ZmL0GZoK066cgP80HK;N00P0H;;N06>dh01V]n<0IkST06Beh@1Q/]h0H;;M 06:cg`80HkCP00L0H[CP06>eh01U]^40IKKR06:cg`1O/=`0FjgH0080G:gI 00<0G:kI05f^fP3oool09`3oool002T0oooo00@0014K04A4[@10@:P0?cnW 0P11@JP02012@ZX0AdN`04Y:]017Ak00ADF^04M7/@19BK<0B4Ra0P16AZl0 3013@j/0@D6X0492Z@13@j/0A4B/04I6[`15AJd0@D6Y03HfS00Y:Fd06QY= 00`<;@800`?5D02@0=?5D03cmI0151F`0@?eT03ciG00djD`0<>E403CYB00dk D`0200hkE0h0000J00<0000K00006P0001X0400001X03`1S/=X0H;7L066b gP1R]>00I;GQ062bg@1O/Md0H[?O06Jgh`1T]N40H[?O06:dg`1S]>00H[?O 066cgP0206>dh00606:dg`1U]n80I[OS06Beh@1O/M`0Gk3L0P1R/ml00`1P /Md0oooo0?ooo`0W0?ooo`009`3oool010004A/0ADF^04E5[P13@j`20451 Z00903loYP0l?:80?cnU04A4[018B;80BDVc04Q8/@19BK<0BTZd0080BDVb 00d0BTZc04E5[@14A:`0B4Ra04M7/014A:/0AdN`04U9/P16AZh0>c^F03Ph S`0C4cd0410e008030`]00@00`?EH03SiG00hm EP0>?UL04D5K0110FP0>?EH033Q@00djDP0200hlE0<03SaE00<03SaD00dj DP0001X07@0001X06P1W]Mh0IK?M06BcgP1T]N00H;7M05b^fP1O/Md0I;GQ 06Bfh@1P/Md0I;KQ06VjiP1W^>@0H[?O06>eh@1V]n<0HK?N06:cg`1U]^80 IkST06FfhP1P/Md0HK;N06Jgh`1S]N00Gk7M:@3oool002D0oooo00T0014J 04=3Z`14A:d0ATJ_04E5[`14A:d0@T:Z04=3Z`14A:`00P11@JP05014A:`0 BDVc04];]P1:B[@0B4Ra04M7/017Ak40BTZd04];]@18B;80Bd^e04i>^@19 BK<0@d>[04I6[P18B;40ATJ^03dmV00j>Y406a]=100<32d00`030b800P8R 00828P0400828P@00``0LL?^06fojP1X^^H0J[cX06fnjP1``Nd0LL;^0731k@1^`>`0K;gY 06Vki`1/_NT0Kl7]07;3k`1``Nd0KKo[06Vki`1X^^D0IkST06FfhP0>?EL0 3SiG00hmE`0>?UL03SaE00dkD`0??eP04D9L00loF@0=>e<03S]D00hlE@0> >e<03CYB00hkD`0??EH0441J00lnF00>?5D03ciG00lmEP0=>E40200001X0 0`0001/0000J00006P0?00006P0I06Ndg@1W]=h0I[CN06Bdg`1N[]T0G:gH 05n`f`1T]N00H[CO066cgP1X^ND0JK[V06>eh01P/Md0HkGP06:cg`1K[MP0 Gk7L06Jgh`1W^N@0I;GQ05nag@1R]=l0IKKR05j`f`0Z0?ooo`00903oool0 8@13@j/0@D6Y0492ZP16AZl0ATJ`04E5[P13@j`0@42X04E5[P1C[T0B4Ra04I6[`14A:`0@T:Y04I6[`0j>Y808R9N01HFA005 00`<;@0600828P030b800``01@1^_n/0KKo[06bnjP1[_NT0K;kY 0080KKkZ00/0KKo[0772kP1b`nl0Kl7]06joj`1/_^T0JkcX06VjiP0>?5D0 3SeF00dlE@0200dkE0803S]D00L03ceF0151F`0@?eT03SaE00hkD`0=>U80 3S]C00803CYB00X03ceF0151F`0@@5X03ciG00lnF00@?UL03SYB00diD@0? ?EH04D5J5`0001X0501S/=X0I[CM06RegP1T/]`0GZgH05f/e`1N[mX0HK;M 066bgP1R/ml0I[OS06FfhP1S]>00H;;N05nag01L[MP0FZcH06:cg`1V^><0 H[?O0P1N/=/00`1Q/mh0H[?O0?ooo`0Z0?ooo`008P3oool08`004A/0AdNa 04I6[`15AJh0AdN`04Q8/@16AZl0ADF^04I6[`14A:d0AdNa04a<]`1:B[@0 ATJ^04=3Z`15AJh0B4Rb04M7/@15AJh0AdN`04a<]P1@D;/0CTjh04E5[P14 A:`0BTZd04i>^@1;BkD0B4Ra04E5[@13@jX0A4B/04M7[`0R8Ud05aM500L0 30`]00D00``03@1``Nd0KKo[06Zki`1Y^^H0 3ciH00dkE00<>E8033UA00`hD00=>e<03ciG00lmEP0@?eP00P0??EH01P0> ?5D03SaD00lmE@0>?5@03CYB00hkE0803ciG00X03SeF00lnE`0@?eP03ceF 00lmE@0??EH03ciF010nE`0??EH03ceE500001X0501O[=H0I;7K06Jcg@1R /=X0GJ_E05ZYd`1L[=L0GjoJ066bg@1R/mh0I;GP06Beh@1Q/]d0GZoK05f^ fP1M[mX0H[?O06FfhP1Q/ml0G:gI101N[m/[0?ooo`00803oool00`004A/0 ADF^04U9]00204i>^@0804Y:]@1:B[@0BDVd04Q8/P19BK<0CDfg04a<]`1; BkD204a<]`0F04U9/P16AZl0A4B/04E5[@16AZl0AdN`04M7/@1:B[@0CDfh 04a<]P15AJh0ADF]04U9/`1;BkD0BDVb04Q8/@19BK80BTZd04U9/`12@Z80 :b]`01/KCP@030`]00D030`/00`<;@0<32d030`]00<38P0200828@H00`?5D03cmI00dkD`0200`iD@0<00`hD00=>e<03ciG00lmE`0??UP03SaE 00hmEP0@@5T04D1J0110F@0??EH03SYB0P0=>E403@0<>5003CUA00hlE00? ?UL04D1J0151F`0@?UL03ceE0150F@0@?eP03ceF00lnE`0??ED00P0??5@@ 00006P0806:_f@1S/=X0Hk7J06:`fP1P[]P0G:[D05f/eP1Q/=/206:bg@0= 06>cgP1Q/]d0G:gH05n`f`1U]^40IkST06Jhh`1S]N00GZoK062ag01S]>00 G[3K05f^fP0/0?ooo`007P3oool02@004A/0@T:Z04I6[`17Ak00BTZd04m? ^`1ADKd0C4bg04Y:]@0204U9/`0?04];]@1^019BJh0=SJ501`LC`04 00`<;@0300`<;00<32d030`]00<030`]00<00P8R00<38P030b800P030b80 1`056RH01A/V00HK9`056bH01AXV00DK9P066bH01`066bL200007@030000 7P0001d0000M00<0000N00@0000M00007P0001h0000Y0P0002/06`0002T0 000]0000:P1/_^X0L<;^0732k@1^_n/0KKo[06bnjP1[_NT0K[o[0731k@1^ _n/0KKkZ06k0k01^`>/0KKkZ06^mj@1]_n/0K/3/06fnjP1/_^X0KKkZ06jo j`1^`>/0KKkZ06^lj00200hmEP0;00djD`0<>50033Q@00`iDP0=?5D03ciH 0110F@0@@5X03SaE00hkE00@?eP00P0@@5T03`0@?UL03SYC00diD@0=>E00 33M>00diD00>>e<03S]D010nF00A@5X043mH014oF00B@E/04CmI00lmEP02 010nE`<03ceE00<043iF010nE`0001X0300001X05`1T/M/0Hk7J06:_f@1Q []P0GZcE05^Yd`1O[MP0H:oJ066`fP1R/M`0Hk?N06:ag@1P/Md0I;GP06Nh h`1V]n80IKKQ062bgP1M[]X0H;7M06:cg`1P/Md0Gk3L02`0oooo000M0?oo o`0B04U9]015AJh0AdNa04U9]017Ak40B4Rb04e=^01>C[X0C4bg04Y:]@19 BK<0BTZe04e=^01`0101a `^h0L<;]06fnjP1]_n/20772kP0K06joj`1[_>P0K;kZ06k0k01_`N`0L<7] 06fnjP1/_NT0JkcX06VjiP0=?5D03SaE00dkE00=>U802cQ?00`iD@0=?5D0 3SeG00lnE`0@@5X0445K00hmEP0>>e@03SaE00lmEP0??UL03ciF00<03S]C 01D03CYB00hkD`0>>e<03SYB00lmEP0@?eP04D5J0191F`0A@5T043iG010o F00@@5T043mH010nE`0@?UH043eF010nE`0A@5X04dAN01A4G`0A?eP02P00 01X05P0003d0I;;K066_f01LZM<0EZC=05ZXdP1P[]P0HJoJ06:ag01U]=h0 IKGP06>cgP1P/=/0HK7L062ag01Q/]d0H[;N05j_f`1M[]T0HkCP06FghP1P /Md]0?ooo`006`3oool01P00>5H0Bd^f04];]P17Ak40Bd^f04a<]`80AdN` 00l0Bd^e04a<]P1;BkH0BTZd04Q8/P1/04A4[@19BK800P1>C[T01@1/0L<;^0772kP1_`>`0KKkZ06foj`1_`>`00P1b`nl0101_`>`0K;gY 06Rii@0<>U<300dkE00:00djD`0<>E803SeF00lnF00>?EH03CYB00hlE00? ?UP03ceG00hmEP803SaE00/03S]D00hkD`0=>U<03S]C00hlE@0??UL03ceE 00djDP0>>e<043iG0150F@020192G00:010oF00??EH04D1I0150FP0@?UH0 43iG014oF00@?UL043mH0191F`8054AO00D04D1I010nEP0A@5T04T1I01=2 F`0600006P0E0000>`1U/]/0Hk3J05j[e@1IYm40H:kH06Fcg@1T/M/0H:kI 06:af`1R/]`0GJgH05VYe01K[=L0G:cH05b]f01M[MT0FjcG05j_fP1T]N40 HK;N02h0oooo000I0?ooo`0;000A6`10@:P0@42W04I6/018B;80ADF^04U9 /`1:B[D0ADF^04I6[`1;BkD00P1[04I6[`17Ak00Bd^e04m?^P1>C[P0CDfh04m?^P1> C[P0Bd^e04m?^P1ADKd0C4bf04Q8/@18B;000P19BK801`1 ^@1=CKL0C4bf03@dP`0M7E001P0<32d200`<;08030`]00@030`/00HK9P05 6bH01A/V0`056RH00`066bH01Q/W00HK9`0300DK9P0400HK9P066bL01Q`W 00HL9`801Q/V00@01Q/W00007@0001d0000M0P0001h00`0001d0000N0000 7P0400007P0>0000:`0002`0000^0000:`1]_^X0L/C_07C6l@1a`^h0K[o[ 06k0j`1``Nd0K/3[06fnjP1_`>`207?4l0030773kP1_`Nd0K/3[0080K[o[ 00H0K/3[06o0k01^_n/0JkgY00dkD`0=?5D200dkE00]00`jDP0=>e<03ciH 00lnE`0=>U<033M>00`hC`0>>e@03SeF00lmEP0??UL03ceF00hkE00>>e<0 3SYC00djDP0??5D043mI00lnE`0>>e<03caD010nE`0A@5T04T9L01=3GP0A @5X043iF014oF@0@?eP03caE00lmEP0A?eP04D1I0191FP0B@E/04T9K01=3 G00B@EX04CmH0190F@0B@E/054=M01A4GP0B@E/04d9K00@0000J00`0Hk3J 066^f01R[mT0H[3I06>`fP1P[]P0G:[D05f[e@1O[ML0GJcF05NVd@1FYM02 05b/e`0605^/e`1N[]X0H;3L062ag01O/=/0FZ_F;P3oool001L0oooo00d0 014K0451Z@16AZl0A4B/0410Y`12@ZX0@T:[0451Z@13@j/0ATJ`04M7/@19 BK<0Bd^e0080CDfh00/0Bd^e04E5[P14A:`0B4Rb04];]@17Ak00ATJ_04M7 /016AZl0B4Rb04U9/`0204];]@80BDVc00L0C4bf04e=^01=CKL0CTji04a< ]P19BK80BTZd0080C4bf00P0Bd^e04e=]`1=CKP0BTZd04U9/P1;Bk@0>3R; 01dMD0L030`]00D030`/00`<;@0<32d030`]00DK9P0200DJ9P<01AXU0P05 6RH300DK9P0900DJ9P066bH01Q/W00HL9`066bL01AXV00DK9P0672L01Q/W 0080000M0`0001h200007@D0000N00P0000]0000;P0002X0KKo[0731k@1_ `Nd0K;gY06^lj080KKkZ00l0JkcX06foj`1ba>l0MU800P0=>e@02`0>?EH0 3CYC00dkE00>?5D03C]D00djDP0<>E0033UA00dkD`0>>e@03SaE00803ciG 0P0??EH0300>?5D03S]C00lnE`0B@U`04D1J00lnE`0??EH03caD00hlE00@ ?eP04T=M0191F`8043iG02@03ceF00llE00??5D043mH0191F`0B@U`04D1I 014oF00B@5X04T5K0150F00A?UL04CmH0191F`0C@e`054=M01A5G`0EAf40 5DEO01=2G00001X0GjcF05j/eP1R/=X0Hk3J05n/eP1HY/l0FJOA066_f@1P [mT0GjgH05^Ze@1M[ML0GjoI05ZZe@1M[MT206Beh004066ag01N[]X03Pie 010@Mbd0oooo000F0?ooo`0U0451Z@0n?ZD0@T:Z04Q8/P19BK<0ADF^04A4 [@13@j`0@d>[0451Z@14A:d0BTZd04];]@18B;80Bd^e04];]P18B;80ATJ_ 04I6[P19BK<0CDfg04a<]P1;BkD0AdN`04E5[@18B;40B4Rb04U9/P18B;40 ADF]04A4[017Ajl0BTZd04];]@19BK<0AdN_04Y:/`02051@^`0904e=]`1< C;H0CDfg04];]017Ajl0ADF]04Q8/010@9`0;Beb00/030`]01801A/V00DJ 9P056bH01AXU00@J9@046BD01AXU00DJ9P056bH01Q/V00DK9P056RH01Q/V 00DK9P066bH01Q/W00DJ9P056bH200HK9`0300007@0001h0000N0080000M 0P0001h00`0001d0000N00007P0300007P80000]00D0K[o[06o1k01[_NT0 J;[V06VkiP0206^lj00;06Zlj01^_n/0Kl7]06o0k01^_n/0K/3[06fnjP1[ _NT0KKkZ06joj`1/_^T00P1/_NT02P0;=dh033Q@00`iDP0=>e@03cmH00hn E`0>?5D03CYB00`hD00=>U<200hmEP0300`jDP0<>5003C]C00<03ciG00d0 3ciH00lnE`0>?5D0441I01=4G`0A@U`043mH00lmEP0>>e<03CUA00llE@0A @5X04D1I008043mH0P0@?UL02@0A?eP04D1I0192F`0B@U`04CmH010mE@0A ?UL04T5J014oF002010nEP05014oF00B@EX04d9L01=3G@0EAV000P092GP0 2@092GL0GjcF05j[e@1N[=H0GZ_E05bZe01JZ=80GJ_E05n]e`0205j/eP08 062_fP1S/]`0GJgG05JVd@1N[]T0I[GP06:bg@1P/=`2014AN003014AM`3o ool0oooo02/0oooo000D0?ooo`0c04Y:]@18B;80A4B]0410Y`0o?jL0A4B] 04Q8/P17Ak40ADF_04A4[@13@j/0@D6X04A4[017Ak40ATJ_04A4[017Ak00 B4Rb04I6[`15AJh0B4Rb04a<]`1?CkX0CDfh04];]P17Ak00ATJ^04U9/`1; BkD0BTZd04Q8/@14A:`0@d>[04I6[`1:B[<0C4bf04];]019BK<0CDfg055A _01>C[T0BTZc04Y:]01U802cQ@00/gC`0<>E403SeF0110 FP0@?eT03ciG00`iD@0;=Th033UA00803ciG00H033YB00/gC`0=>e<03ceE 00llE@0>?5D200lmEP0M00hlE00??UP04T=M010oF00??5@03caE00llE00> >U<03ceF0110F@0@?eP04D1I0150FP0A@5T04D5J0192F`0B@E/04D5J0150 F@0@?UL043eF010nEP0B@5T04D1I010mEP0@?5D04CmH0191F`0B@5X00P06 1W406@0827D02PYh00X:N@1N[=H0G:WC05f[e@1LZM<0GZ_E066^f01O[ML0 FZSB05^Yd`1P[]P0Hk7L066`fP1LZmD0G:cF06>bg@1Q/=/0FZWD05f]f00@ 47D03`me010@M@0@47H0;03oool00180oooo00l0014K04e=^01:B[D0ATJ` 04I6[`13@j/0?cnV0492ZP16A[00ADF^04A4[@13@j`0@D6X0410Y`12@ZX0 0P13@j/03@14A:d0ADF^04I6[`14A:`0@d>/04Q8/P15801SUD00DeD005=Dl01cUD00HhDP05=Dl013A=0P1Y^nL0 6P1Y^^H0JkcX0731k@1ca?00L/C_06o0k00=>e@03SaE00dlE00<>E4033YB 00hmE`0??UP03SeF00lnE`0=>U802cM?00`iD@0>?5D03ceF00dkE00=>U<0 3SaE00llE@0>?5D03ceF0P0??UL0300>>e<03CYB00lmE@0>?5@03SYB00ll E00??EH03SaD00llE@0??UL043iG010oF@804D1I0P0A@5X04P0A?eP03ceF 00llE00@?UH04D1I0190FP0C@U/04T5K010nEP0??ED04T5J00T9N00827H0 1`Mc00P8M0092GH02@Ug00/;N@80GJ[D01D0H:kG05n]eP1T/MX0Hk3I05n/ eP1JZ=80H:kH06Rfh01V/md0GjgH05j]e`1S/M/0IKCO066`fP1KZ]D051Ak 014AM`0?3gD04A5h00h>L`0>3W@0:`3oool00140oooo0180BTZd04];]P1; BkH0B4Ra04A4[@15AJh0@d>/0410Z013@j`0ATJ_04=3[014A:d0AdNa04E5 [P12@ZX0@D6Y0492Z@14A:d204Q8/P0B04M7/015AJh0@d>[04M7/01:B[@0 ATJ_0492ZP14A:`0ATJ_04E5[@16AZl0BTZd04];]@18B;40ATJ^04M7[`19 BK80BTZc0P1^00g=hH071a?00`<;@0=3Bd700`<;@0;00`<;005 6bH01A/V00DJ9@056RH01Q/V00HK9`056RH01AXU00DJ9P066bL010066bH2 00DK9P0700HK9`066bH01A/V00HK9P066bL01a`X00007P0200007@030000 7P0001d0000M00L0000N00H01SQB00DeC`05=Dh01CIA00DeC`0400DgD@05=e400P05=U404P05=U0013=<00U<033UA00hlE00=?5@033UA00dkD`0=>e@033UB00djDP0> >e@03ceF00lnE`803ciH01403ciG010oF00@@5T04CmI010oF00>?5D03CUA 00djD@0>>e<03SYB00llE@0@?UH03caD00hkE00??ED043iG0150F@020150 FP0;010oF00@?UH03ceE00hkD`0>>U8043iF0192F`0C@U`04d=M01=2G009 2GL00P092GH03@0827H020Qe00T9MP0827H01PIb00H6L@0827@0G:WC05j/ e@1R/=T0I[CM06Jcg@1Q[]P00P1O[=H03@1T/]/0J;GO06Baf`1N[ML0H:oI 06>bg01V]=l0IKCN00l?M00C4gT04Q9h018BN@0C4gX00P0?3gD00`0@47L0 oooo0?ooo`0X0?ooo`003`3oool03P16AZl0BTZe04i>^@19BK<0A4B]04A4 [013@j`0A4B]0451Z@10@:L0ADF^04Q8/P16AZh0ATJ_0P19BK<04P16AZl0 @d>[04=3[016AZh0B4Rb04M7/@16AZl0AdNa04Q8/@19BK80BDVc04M7/017 Ajl0AdN`04U9/P19BK<0AdN_04I6[P80AdN`0P16AZh04P18B;40BTZc04a< ]@1=CKL0D52k04m?^@1;BkD0C4bf04m?^P1=CKL0Bd^d04Y:/`1;Bk@0C4bf 04Y:]01:B[<0B4R/02DUH@X030`]0`056bH00`056RH01A/V00DK9P0200DJ 9@0600DK9P0672L01Q`W00HK9P056bH01Q/V0P056bH200HK9`801Q/V00<0 1Q/W00HL9`0672L0300001h01@06=e801CIA00DfD005=U001CA>008013=< 00H0139<00@cC@05=Dh01CA>00@eCP05=Dl200@dCP0800@dC@04?EH03cmH00dkE00<>E4200djDP0400`hD00=>U803SaE00dkE080 3CYC01@03SaE00lnF00??eP03cmI0151F`0B@ed04D1J010nE`0@?eP03ciG 00hlE00>>e<03caE00hkD`0??5D043iG00llE@0??5@03ciG0110F@804D5K 00T04D5J010oF00??EH043eF00llE@0??5@04CiG0190F@0B@EX00P0827H0 1`092GH020Qe00L7L`071g@02@Ug00X:N@092GL00P071g@020092GH0GZcE 05j[e@1R[mT0I;7K062^e`1P[ML0HJoH0P1U/]`0401R[mT0GjgH06:_f@1S /M/0GjkH06:`f`1U]=h051Ak01C[T0Bd^e04U9/P1=CKL0BDVb04A4[0<0ADF]00/0AdN`04e=]`1> C[P0C4bf04m?^@1ADK`0CDfg04U9/P1C[T0Cdni0080Bd^d00<09BER010@=P0<32d0200<32d00`056RH01A/V 00HK9P0300DJ9P0500@J9@056RH01Q/W00LL:00672L00P056bH200HK9P03 00DK9P066bL01Q/W00<01Q/W00<01Q`W00007P0001h02`0001h01005=Dh0 1CE?00DeC`05=Dl200DdCP0800DeC`04?EH03C]D00`iD@0<>U803CYC00`i D@0=>e<03SeF00hlE@0200dkD`0F00hlE@0??EL03SeG00lnF00A@E/04T9L 010nF00>?5@03ceF010oF00??EH03SaD00lmE@0??5D03ceF00lnE`0??EH0 43iG0151F`0B@U`04T9K0150F@8043mH02D03ceE010nF00@?eP043iF00X: N@092GH01`Mc00L7M00827D020Qf00T9MP0827D01`Md00T9M`0:2WT02@Ug 00T9MP0:2WP02@Ug00<`B002;TD00Re4008]@`02;4<00Re400<^A@02;D@0 0Ra300<^AP1P[]P0I;;L066_f@1LZmD0GZcG014AM`0E5Gh051Al00804A5g 00<04A5h00h>MP0>3WH00P0B4WX00`0E5Gd0oooo0?ooo`0V0?ooo`003P3o ool02@00<4X0?cnW03hnY@13@j/0@d>/0492ZP13@j`0A4B]04E5[P0204=3 Z`0?04I6/016AZl0@d>[04=3Z`14A:`0A4B]04M7/019BK<0BDVb04Q8/P1: B[@0BDVc04U9/P1^@1>C[P0 BDVb04I6[P1:B[<0D52k055A^`1>C[P0CTji0080CDff00D0CTji04i>^01> C[P0?SjF01dMD00900`<;@0500DJ9P056bH01Q/V00DJ9P056bH00`056RH0 0`056bH01Q/W00HK9`0200HK9P801Q/W00<01A/V00HK9`0672L00P066bH0 0`0772L01a`X00007P0;00007P0A00 00HgD@06>5801CE?00@cC005=4h01CIA00DgD@05=U401CE?00DeCP04=4d0 0P04e@033YC00djD`0=>U8033UA00djDP02 00hlE@0300hmEP0??EL03ciG00803SeF01803ceF00lnE`0@?UP03ceF00hk D`0>?5D03ciG00hlE00=>U<03ciG0150F@0@?UP03ceG00lnE`0A@E/04dAO 01=4GP0B@U`20150F@0;010nE`0??5D043mH00L7L`0827D01`Md00H6LP07 1g<020Qe00P8MP092GL00P0827H00`092GH02PYh00X:N@0200T9M`802PYi 00<00c1900<_A`02;4<00P02:T000`02;4800bi500<_AP02008/@`0600<_ AP03;dL0135:00[04E5 [P0204I6[`0304I6/017Ak40ADF^0080@D6Y01/0@d>[04I6/01;BkD0BDVc 04E5[P17Ak00C4bg04e=]`1C[P0C4bf04Q8/@16AZh0 ADF^04I6[`18B;40AdN`04U9/P1>C[T0CDfg04Y:]019BK80B4R`04M7[`19 BK4010100HgD@06>5<01SMA00DdCP8013=<00D013A=00DfD006 =U401CE>00@cC00300@bB`0C00@cC@05=Dl03C]D00`jD`0=>U<03CYB00`i D@0<>U803CYC00hlE00??UL043mH00lnE`0>?5@03SaE00hmEP0>?5D03ceE 00lmEP0200hlE00600lmEP0>?5@03S]C010oF00A@EX043mH0P0??UL01@0A @E/04dAO01=3G@0B@EX04CmI008043mH02l01`Md00P8M@0827H020Qf00T9 M`0:2WT02`]k00X:N00827H020Qe00L7M00827@01`Md00P8M@0827H020Qe 00T9N00;2gX02PYi00<`A`03<4P00Re4008[@@01:T000Ra200<^A@03<4P0 0Ri5008/@P02;TD00Ri600<`B@03C[X0DE6m04i>^@1; BkD0BDVb04Y:/`19BK80AdN`04Q8/@15AJh0AdN`04e=^01>C[T0C4bf04Y: ]018B;4204M7[`80B4Ra0140BTZd04];]01:B[<0CDfg04i>^01=CKL0Cdnj 04m?^@1C[P0C4bf04i>]`1?CkT0CDfc03LgQP0200`< ;@0300`<;00<32d030`]008030`]0P0<32`200HK9`0600DK9P056RH01A/V 00DK9P066bH01Q/W0P056bH00`066bL01Q/V00HK9P0200HK9P0600DK9P06 6bL01Q/W00DK9P056RH01Q/W3@0001h01005=U001SIA00HgD@05=U0200@d CP0;00@eCP05=Dl01SMB00HgD@04U<03CYC00dkD`<03CYC00D03SaE 010oF00@?UP03ceF00hlE@0200hmEP0C00hlE@0??EH03ceF00hkD`0=>E40 3S]D00lnE`0??EH03ciG010oF00A@5T043mH00lmE@0@?UL04T9K0151FP0@ ?UL02@Uf00T9M`0200X:N00600T9M`0827H020Qf00P8MP092GH020Qe1@07 1g@00`0827D01`Md00L7L`0200P8M@0400L7M0071g<00bm700<`B0<00bi5 00P00Ra3008]A003;dL00bm6008^A@03;dL00c1800<_A`<00c1800d00c5: 018BN@0@47L03`me00h>M@0>3W@04A5h00h>M00A4GP03Pid010@MP0A4GP0 3`me02D0oooo000B0?ooo`03000_B000;DH0@d>[0080@d>[00d0A4B/04E5 [P17Ak00C4bf04m?^P1=CKP0BDVc04Q8/@16AZl0AdN`04M7/@17Ak00BDVc 0080CTji00D0CDfg04Y:/`1;BkD0Bd^e04M7[`0204M7/00804I6[`19BK80 C4bg04i>^01^01>C[T0CDfg0080 CTjh00d0C4bf04e=]`1;Bk@0BDVb04a<]P1ADK/0Cdnj04a<]P15<01SMA00801CI@0P05=Dh06005 =4h0139;00@bB`05=4d01SMB00HhDP05=Dl013=<00DdCP06=e401SQB00Hg D@06=U001CI@00DfD@0>?5D03SaD00dkD`0<>U803CYB00hlE00@@5X04D1J 010oF08043mI0P0??UL01@0@?UP03SeF00diDP0<=dl03SYB008043mH01P0 43iG010oF00A@5T043mH00llE00>>e@043mH00P8M@0827@01`Mc00P8M@09 2GP020Qf00L7M0071g<020Qf00T9M`0827@01`Mc00P8M@092GH020Qe00L7 L`061W<200H6LP0300P8M@092GL020Qf008020Qd00`00Re400<`B003;TD0 0be500<^AP02;D@00R]2008]@`03;TD00bi600<`B0033W@00`0@47H0411g014AN00201[0451Z@12 @ZX0AdN`0P1;BkH02@15AJd0@D6X04A4[017Ak00B4Ra04Q8/P18B;40BTZc 04e=^00204m?^P0E04];]@1^@1>C[P0Bd^d04];]@1@D;X0D52k04i>^@1@D;/0D52j04i>^01; BkD0BTZc0080C4be00/0BDVb04U9/@1;Bk@0CDfg04Y:/`18B;00BDVa04Q8 /01>C[P0ADFS01hND@0200`<;08030`]00H03@d]00`<;@0<32d030`]00DJ 9P056bH400DJ9P<01A/V10066bL010066bH01Q/W00HK9P056bH300HK9`h0 000N00<01CI@00HgD@05=U000P05=U003P06=U001SMA00HgD@06=U401CE? 00@cC004E@01SI@00@cC0045<01P05 =U001CA>00DdCP0=?5@03C]D00dkD`803CYC00@03S]D0110FP0A@E/043mH 0P0@@5X04@0@?eT0441I0110FP0??EH03CYB00diD00>>U803ceF00lnE`0@ @5T043mH010nE`0??EH03S]C00L7M0071g<020Qe00@020Qf00D020Qe00P8 MP0:2WT02PYi00P8MP0200L7L`0700P8M0071g@020Qf00X:N@092GL020Qf 00P8M@0300L7M00@00H6L`0827H00R]1008]A003;TD00be400<_AP04<4P0 0bm6008/@`03;D@00bi500<_A`03<4P00Rm6008]A0800bm700l00Rm700Dd CP0@47H04A5h00h>M00B4WX04Q9i010@M`0@47H04a=k01@DO00A4GT04Q9j 00h>M@0=3G808`3oool001D0oooo00X002m9000^A`13@j/0@d>/04M7/01; BkD0Bd^f04M7[`14A:d0B4Rb0P1;BkD02`1^01=CKP0CDfg 04e=^01>C[P0D52k04m?^@1:B[<0BTZd0080CTjh0P1;BkD06P1>C[P0CDfg 04];]01;BkD0D52j051@^`1>C[P0CDfg04a<]P1=CKL0C4be04Y:/P19BK80 BDVa04Q8/@1:B[80C4be04e=]P1:B[<0B4R`04M7[`16AZd0Bd^d04m?^@0I 6DL030`]0P0<32`500`<;@H01AXV0`056bH500HK9`0300HK9P056bH01Q/V 00801Q/W3`0001h03P06=e401CI@00@cC@0400DdCP05=Dl01CI@ 00HhDP06>5<01SMA00DeCP05=4h01CE?0P05=U002@05=Dl013A=00@cC005 =U001CMA00DeC`05=4h01CA=00@dC@0400dkE00500djDP0??UL0445J00lo F00@?eP00P0A@5X02P0A@E/04D5J00lnE`0>?5D03SaD00hkE00>>U803caE 010oF00??ED200H6LP0800H6L@061W801`Md00P8M@092GH02PYh00X:N@08 27H200L7L`0400L7M@0827H020Qe00P8MP802PYi0`092GL00`071g@01`Mc 00L7M@0200P8M@801`Mc00X01`Md008/@P02;4<00bi600<^A@03;TH00bm7 00<^AP02;D@00bm60P03;dL200<`B@03008^A@02;TH00c5900800c1800P0 0c5:014AN00>3WD04Q9j01DEOP0B4WX03Pic018BNP80411g00<04A5i010@ N00>3W@08`3oool001H0oooo00H002m9000^AP00;TH0ATJ_04U9/`1^P1?Ck/0CDfh04m?^`1@D;`0CDfh04Y:]01;BkD0CDfg0080 Cdnj0200CDfg04a<]`1;BkD0Bd^d04e=]`1>C[T0CDfh04a<]@19BK40AdN` 04U9/P1^@1;BkD0BTZc04];]01:B[<0BDVa04U9/P18B;00 AdN_04Q8/@19BK40BTZc04];]01:B[80ADF]04E5[01;Bk@0Cdni02HVHP<0 30`]00<030`/00`<;@0<32d00P0<32d300DJ9P801Q/V00<01AXV00DK9P06 6bH00P066bL200HK9P801Q/W0P056RH00`066bH01Q/W00007P0?00007P0D 00DfD@06=e4013=<00@cC005=Dl01CI@00HfD@05=Dl01CA>00DfD006>580 1cQC00HgD@05=4d013=<00DdC@05=Dl013A=00@bC004 00h01CA>00dkE00=>U803C]C00djD`0<>5003SaE0110F@0??UL03ceF010o F@0@@5X04D5K0110FP803ciG00h043mH00lmEP0=>E403SaD00L7L`061W<0 1`Mc00P8M@0827H02@Ug00T9N0092GL020Qe00H6L`801PIb00D01`Me00P8 MP071gD01`Md00P8M@0200P8MP<01`Md00<01`Mc00H6L`061W<00`061W82 00H6L`0600L7L`02;D@00Re400<`A`03;dH00Re30P02;4<06@02:d800bm6 00@aB@03M00? 3gD08P3oool001P0oooo00@002m9000_B000;dP0BTZd0P19BK808@1>C[T0 D52k04i>^01?Ck/0CTji04U9/`19BK80CDfg04i>^@1?CkT0Bd^e04Y:]01= CKP0Bd^e04U9/P100@cC@05 =U001SMB00HhD`07>5<01SI@00DeCP05=Dl01SI@00HgD@05=Dl013=<00Dd CP06=U001CE?0`0400@eCP05=4h01CE>00dkD`0>>e@0 3C]C00`iD@0>?5@03ceF00803SaD00`03ciG010oF00@@5X043mH00lnE`0@ ?eP043mI00L7M0071g<01`Me00L7M0071g<300P8M@0E00T9M`092GP02@Uf 00T9MP092GP020Qf00H6L`071g<01`Md00L7L`071g@02@Ug00X:N@0827H0 1PIb00H6L@061W8020Qe00P8M`092GP02@Ug008020Qe00<01`Me00H6L`08 27D00`03<4P01P03;dL00bi5008/@P02;D@00Ri500<_A`80135900P00bm7 00@aBP04^@1 ^01=CKL0Bd^d04M7[`15AJ`0AdN_04U9/P1:B[@0BDVa04E5[014A:/0ATJ] 04M7[`1:B[80CDff0080C4be00/0CTjh04m?^@1>C[P0CDfg04a<]P1]`1=CKL0C4ba01hND@0200`<;@8030`/0`0<32d00`056RH01A/V 00DJ9P0200HK9P801AXV00H01A/V00HK9`066bL01Q/V00DK9P066bH200DJ 9P0300DK9P066bL0000N00l0000N00@0001700HgD@07>5801SMB0P06=e40 0`06>5<01SQB00HgD@0200HfD0801CE?00H01CI@00DeCP05=4h01CA>00De CP05=4h200@bB`8013=<00<01CE?00DfD004=4d00P04e<03SaE 00hmEP0>?EH03SaE00lmEP803ciG01X03ceF00hmE@0>>e@03SaE00P8MP08 27D01`Md00L7L`071g@020Qf00T9N00827D01`Md00P8M@071gD01PIb00H6 L@071g@02@Ug00X:N@0827H01`Mc00H6L`071g@020Qe00L7M0801PIc00L0 1`Md00L7M@071g@01PIb00L7L`0827D02@Ug00802@Uh00h020Qe00L7M@09 2GL00bi600<`B003;dL00bi500<]A002;D<00bi500<^AP02;D@00bm700^@1=CKL0BTZc04U9/P19BK<0BDVb 04];]@1=CKP0BDVb04A4Z`16AZh0CDfg04m?^@1=CKP0CDff04];]017Ajl0 A4B[04I6[P0204a<]@0904Q8/@17Ajl0ATJ]04M7[P1:B[<0CDff04];]018 B;00CDff0080E5C000T0D52j04e=]`1;Bk@0Bd^c04a<]@1;Bk@0C4be04I6 Y`0N7U401@0<32`200`<;@0500828P056RH01AXV00DJ9@056RH00P056RD2 00DJ9P<01Q/V00D01Q/W00DK9P056bH01A/V00HK9`0@00007P0:00@bBP05 =4h01SQB00LiE@07>UD01SQB00HgD@05=U001CA>00DeCP801SMA00<01CE? 00DfD005=U000P05=U002@05=4d00c5:00?EL03cmH00lnF00@@5X04T9L0150FP0? ?UL03ceF00hkE0051G401PIa0`061W<010061W801`Mc00P8M@0827D200P8 MP801`Md01@020Qf00T9M`0827H02@Ug00X:N@0827H01PIb00L7M00:2WT0 2PYj00T9M`071g@01PIc00L7L`0827H02PYh00T9M`071g<01`Md00P8MP80 2@Ug0P0827H00`0827D00bm700<_AP02008^A@0400<^AP03;D@00Re3008^ A@800Re400L00bm700<`B@033W@03`me00d=LP0T 0?ooo`00703oool02@00;TL002e6000`B@00;TL0C4bf04i>^01=CKL0BTZd 04Q8/@0204I6[`0=04e=]`1@D;/0Bd^d04E5[@18B;00Cdnj059B_@1@D;/0 CTjh04a<]@18B;00ADF]04Q8/@0204e=]`80Bd^d00h0BDVb04Q8/01;Bk@0 CDfg04e=]P1;Bk@0D52j05IF`P1EEL40DE6l04m?^@1=CKH0C4be04e=]P80 Bd^d00@0C4be02DUH@0<32d030`]0`0<32`600<38`0300DJ9P056RD01AXV 00801AXV00L01A/V00HK9P066bL01Q/W00HK9P066bL01Q/V0140000N0P04 580 1CE?00DdC@04=4h01CE?00DfD005=Dl013=<00@bC004=4h013A=00@cC005 =4d200@cC@0400@dC@05=4h01CI@00hmE`803ciH00<04D5L01=4G`0A@E/0 0P0827D01@071g@01`Mc00P8M@092GP02@Ug00801`Md00`01`Me00P8MP08 27D020Qe00L7M00827D020Qf00L7M0061W401@E`00H6LP071g@200L7L`04 00P8M@0:2WT02PYi00T9MP801`Md0P061W<00`0827D020Qf00L7M@0200L7 M00400L7M@092GP02PYi00T9M`800be401`00bi500<^AP03;dL00bm700@a B@043W@0 4Q9j9@3oool001d0oooo00<002m9000`BP00;TL00P00;dP03P1Z04];]01=CKL0Bd^d04a<]P1=CKL0Cdnj051@^`1?CkT0 Bd^e0`19BK804`1;Bk@0C4be04];]01=CKH0CTjh04];]01:B[80BTZc04e= ]P1ADK`0DU:m05=C_P1EEL40E5C0059B_@1ADK`0D52j04e=]P1:B[<00P19 BK400`19BK00>CV>00d=;@0200`<;@800`00@cC005=4d01SI@00HgD@06=U001CA=0P0400HhDP06>5<0 1CE?00DcC0045800P05=Dl0100>?EH03SaD00lnE`07 1gD200H6L`<01PIb00T01PIc00H6LP051G001@E`00H6LP071g@01`Mc00H6 L`071g<00`071g@020071gD020Qf00L7M@071g<01PIc00L7M@092GL020Qf 0P071gD300L7M0801PIb0P071g@010061W801@Ea00H6LP0827H200T9M`05 00L7M003;D@00ba200<]@`04<4P00P0400DfD@04C[P304a<]P0304];]01:B[@0C4bf0080CTjh00/0Bd^e04U9/@1< C;H0Cdni04a<]@1;Bk@0C4be04e=]`1DE<00EeO3059B_@0204m?^@0:04m? ^01@D;X0DE6k04e=]P1:B[80BTZc04];/`1;Bk@0@42L01`LCPD00P8R0P03 0b<800828P0600DK9P066bL01Q/W00HK9P056bH01Q/W4P0001h02006=U40 1SI@00DeC`06=U001cQB00LgDP06=U001CE>0P05=4d01006=U001cQB00Lh DP06=e4200HfD00700DeC`04C[L0CTjh04m?^01@D;X00`<[00829@@00P8R1@030b<600828P<00`00HgD@08>E@01cQB0P06=U0400HgD@0300HfD005=4h01CA> 00801CA>00<013A=00DeC`05=U000P06=U000`05=Dh013=<00@cC00200@b B`0400DdCP05=Dl01@Eb00D5L`801`Md0P0827H200P8M@0400L7L`061W80 1`Md00P8MP802@Uf00<020Qf00P8M@0827D00`092GL02P0827D01PIb00L7 L`0827H02@Ug00P8M@061W401@Ea00H6L`071g<200P8M@0300P8MP092GL0 2@Uf00<020Qf00H020Qg00P8M@051G401@E_00H6LP061W<200H6LP0B00<^ A@04C[L0C4bf04i>^01BD[d00P1CDkl2059B_@0304e=]P17 Ajh0B4R`0080CDff00<0BTZc04];/`1>C[P0101ADK/010030b`00P8Y00<3 :0030bD200<38`0400828P030b<00`5<01cQB00HgD@06=U001CE?00801CE>0P05=Dl200DeCP0300DdCP04 =4d01CA>00801CE?00D01CI@00HfD@06>5801SMA00DdCP0200@bB`0900@c C00417801@Ec00H6M@0827@01`Md00H6LP061W<01`Md00801`Mc0P0827D2 00H6LP0400L7M@0827H020Qe00P8MP802@Uh00D020Qf00L7M@071g@01PIc 00H6L@0200D5K`0500H6L@061W801PIc00L7M0071gD00P0827H01P071gD0 1PIc00H6LP071g<01`Md00L7L`801PIc00d020Qe00P8MP071gD0=3BQ030` V`0`<9X0=3BO00DeC`04=4h013=<00@dCP05=U4013=<00800c5:00/00c9; 00n04m?^@1UD01cUD00DfD0045<01CI@00@cC@03 00800c=<00D013E@ 00DgDP04=Dl013E?00@dCP0200000_B000<4T002m8000_B000;dT002m804Q8/@17Ak00B4Ra04a< ]P1?CkT0CTjh04a<]P1:B[<304U9/@0704Q8/019BK40C4be04m?^01^01?CkT0DU:m00<3:`03 0bd200<3<00600<3;P030b/00P8X00<3:`030bL00P8R1`030b<00`030b@0 0`00HfD005=4h0139;00@aB@0400Hf D006=U400P06=e400`06>5<01cUC00HfD@0200DdC@0400HfD007>5<01cQC 00@4L@@01PIe00`01PId00P8M@071g801PIa00H6L`0827D02@Ug00L7M@07 1g@020Qe00L7M0061W8200D5L00400H6LP061W<01`Mc00L7L`<01`Md0P07 1gD010061W801@Ea00P8M@0827H400L7M00F00L7M@071g@01`Md00P8M@07 1g@01PIb00H6L`0cED01SQC00@bC0800c5:00L00c9<00@cC@04=E00 1CIA00@dCP0300DeC`04 =Dl00c=<00@dCP04^@80E5C001D0DE6l04];]@18B;00BDVa04Y:/P1: B[<0BTZb04e=]P1@D;X0CDff04a<]@1@D;/0De>n05EE`01EEL40DU:l04m? ^@1?CkP00P8Z0082:@030b/00P030bh01`030b`00`<]00<3:`020RP00`5802`07>5<023YF00PjE@05=U0013=<00Dc C005=Dh010Ab00D5LP071gL01@Ec00801PId00@01@Ec00D5K`051Fl01PIa 0P0827D200L7M00800L7M@061W<01PIc00L7M00827H020Qe00H6LP061W43 00H6LP0<00H6L`051G401@Ea00H6L`071gD020Qf00P8M@061W<01PIa00L7 M00827D01`Md0P071g<02`071g@020Qe00L7M@0`<9`0;bnJ02d]V00^;YT0 O0080=cNS00/0=CFP038bW@0b008013A>9P3o ool002L0oooo0P0041T03000;TL0031:000_B000;TL0031;059B_@1DE;l0 De>n051@^`1@D;X0Cdni04i>^080CDfg00/0DE6k05=C_@1;Bk<0AdN^04a< ]@1BD[`0EEG005=C_P1?CkT0CDff00<3;@0200<3:`0400<3;P030b`00P8Y 00<3:P800`00@cB`0400LhDP06=e401SIA00DeC`0200DdC@0=00HeC`07 >5801SMA00HeC`06=e401cYE00HhDP05=Dl01CA=00D5L`051G801@Ec00D5 LP0300D5L`0300H6M0061WD01PIa008020Qd01D01`Mc00P8M@092GL020Qf 00L7M0061W<01PIb00H6L`071g@01PIa00D5L0061W801`Me00T9M`0827H0 1PIc00L7M@0827H020Qe00P8MP071gD00P0827H200L7M00L00H6L`071g@0 20Qf02h^V00[:iD0:2RA02LWT00Y:I80:RZC02/[U@0];IP0;bnK030`W00d =:00=cNT03PhY@0f=Z80N030`V`0_;iX0<32K03DeX@0i>JH0=cNS00@c C@05=U0013A>00DeC`801CMB00H013A=00]`1>C[P0D52k04];]016AZd0BDVa04i>^01@D;/0D52j00<3:`80 0`<_0P030b`00`030bd00`00@aBP04E@023UD00LgDP05=4h01CA=00HfD0801SQB0P061WD00`051G801@Ec00D5 L`0200D5LP0300D5M0051G<010A`008020Qd0P061W4200L7L`0P00H6L@05 1G401PIb00L7M0071gD020Qe00P8MP092GL020Qf00H6L`051Fl01@E`00L7 L`0827D020Qf00H6L`061W401PIb00H6L`061W802@Uh00X:NP092GP000@eC`05=E001CI@ 00@dC@04=Dl01CE?00@eC`03]`0204e=]P800`<[0P030bh01`030b/0 0`00HeC`07=e800P08>UD00`07 >5<01SMA00LiE00200PkEP0600LiD`05=Dl01CA>00H6M0051G@020Qh0P06 1W@02@0417401PId00D5L`051G801PId00@4L@0417801@E`00D5K`0200H6 L00:00H6L@051G001PIb00P8MP092GL020Qe00L7M0061W<01PIb00H6L`80 1`Md00@020Qf00L7M@061W<01PIb0P071g@030061W<01PIb00@4K`051G00 ;2bF02h^V@0_;iX0;bnK034aW00_;iX0:b^E02h^V080O00@00P04]`1;Bk@0Cdni0P1CDkh01@030c400`5801cQB 0P06=Dl01007>5801SI@00DcC005=Dh200LhDP0500HfD005=4d01SE>00H6 M0051G@00`061WD020051G801PIe00H6M0061W@01PIe00D5L`0417401@Ed 0P061W@01@051Fl01`Mb00P8M0071g801PIa00801PIb00X01`Mc00H6LP05 1G001@E`00H6LP051Fl010A^00H6LP0827H01`Me0P0827H020071gD0;BfG 02d]U`0bSZW03Lg X`0a00@eC`8013A>00<013=<0?ooo`3oool08@3oool0 02h0oooo0P0041X2000@6@80014J00@0010J000@6@19BK40Bd^d0P030bd0 2@030c400`<^00<3:@030bT00`<]00<3;P030bd00`<_00<3;00200<3:P80 0`<[0P030bT02@030b/00`<_00<3;P030bh00`<_00<3;P0413000`<]0082 8P0800<38`800`580 1cMB00LhD`07>E<01SMA00DfD006>5<023YE00LhDP06=U001cQB00HfD004 5<01SMA00L7M`071gH01PId00L7MP061WD02@Ui00D5 L`061WD01@Eb00L7MP061W@01PIe00@4LP801PIe0P051G<0100827<01`Mb 00P8M00827@200H6LP0300L7LP071g@01`Mc00801@Ea01P01PIa00D5L@05 1G401@Ea00D5LP061W<0;BfI02l_W00bCVV03De X@03008013E?8P3oool002l0oooo00H0010I000@6P0041T0 010I000A6P0041T2000A6P0500<3;@030bl00`00DdC@06=Dl00P07>5<02007=e801cMA00HgD@05=Dl01CA>00HfD006 =e401@Ed0P071gH200H6M00400L7M`061WD01PIe00D5L`801PId00L020Qg 00H6M00417801@Ed00H6M0051G<0IkGO0080I;?M00D0Hk;L06:af`1W]^40 I[GP06BdgP0206Jfh@0E06>cg`1Q/Md0H;7M05n`g01P/Md0HK?N06:cg`1S ]>00;2bH030`W@0cCVV03/kZ00d=:00;2bG02`/UP0^;YP0;bnJ030` V`0aO0080:D0=cNT 034aW00/;9H0;bnI034aW00cCVV03LgX`0b5801SE?00De CP05=4h01SE>00HfD007>5801cMA00801SMA00L01SI@00HeCP051G<01PId 00L7MP051G<01@Eb00801PId02T01`Mf00L7M@0417401PIe00D5M0061W@0 1`Mf00D5LP051G@01@Ec00@4L@1S/M`0I;;L06Fcg@1Q/=X0H;3K06Ngh@1U ]=l0H[7L06NghP1V]^40H[?N05f^f@1O/=/0HkCO06>eh01S]=l0Gk7M05b] f@0/;9P0ZL0=SJR 02l_VP0^;YT0<32L038bWP0a00@cC@04U@01SMA00HfD007>5<023UD00Lh DP06=e401SE?00DcC005=4h200HgD@0i00HfC`06=U001SE?00H6M0041780 1`Me00D5M00417401@Eb00P8M`051G801PIe00@4L@061WD01@Eb00D5L`07 1gL01PId00D5L`0417801@Ec06:`fP1T/]`0IkKP06Fcg@1P[mX0HK3K06>b g@1O[mX0H[;M06Bdg`1S/mh0H[?N05j^fP1P/Md0H[?O05nag01M[]X0F:WE 05VZeP0^;Y/0<32K02h^V@0/;9H0;RjH02h^V@0];IP0;2bG02/[UP0[:iD0 :BVC02/[UP0_;iX0;BfG02TYTP0X:980:b^F0080;RjI00L0;BfH034aWP0f =Z<0=CFQ030`V`0/;9H0;BfG0080M00T0=CFP 03HfXP0e=J8013E?00@dCP030200oooo000^0?ooo`0300@I9@046B@011TT00<0 11TT00@011TU00@I90030b/00`<]0P030b/01P030b`00`<]00<3;@030bT0 0`E@02P07>E<01SI@00DcC00500H[?N06Ffh@1R/mh2 05j_f`0;05j`f`1R/ml0;RjJ02l_VP0];IL0:b^D02XZU00Z:YD0;2bG030` W00_;iX00P0/;9L08P0aSZV03M03@dW`0g=j<203XjY`0:03TiYP0e=J800c9<00@cC005=Dh013A= 00@bC00300@cC@3oool07P3oool002d0 oooo0P046B@00`0362@00aTT00@I900200@I900500@I9@046B@00`<]00<3 ;P030bl00`0413001`030bh00P8W00<3:0030b/00`5801cQB00LhD`8023YE02T023UC00HfD005=4d01CA= 00HgD007=e801`Mg00T9N0071gH01PIe00L7MP0827P01`Mf00H6M0071gH0 10Aa00H6M@061W@01PIe00D5L`0417801@Ed00D5L`061W@01@Eb00@4L@1R /M/0HJoI05n^f01N[ML0GjkH06:bg01P[mX0G:cG05b/eP1JZ]D0G:gH06>c gP1W^><0H[;M066bg@0306:cg`0B06Bfh@1V]n<0:b^E02XZU00/;9H0;RjH 02/[UP0Y:I<0:RZE02h^VP0cP030`W@0`<9`0O038bWP0_;iX0 ;RjI0P0a:@0>CVU03PhY@0i>JD0=CFQ034aW00a M00@cC@04=4h00P0400@dC`04=E0013E?00@c CAl0oooo000]0?ooo`<00aPT00<00aTT00@I90046BD00P046BD020046RD0 0`<^00<3;P04134010@b00<3;P030b`00`5<023YE00PjE@08>E@023]F00PjE@07=e801SE?00Dd CP06=Dl01cMB00D5M00827L010071gH030061WD01PId00L7MP051G<01PIe 00H6MP071gH01@Ec00D5LP051G@01@Ec00L7MP801@Ec00T0Hk7K06Bcg@1Q [mT0G:_E05^Ye01L[=H0H[7L05j^f@1KZ]D00P1N[]T09@1N[]X0Hk?N06:c gP1JZmH0Fj_G06:bgP1Q/]h0H;7M06Beh@1R/ml0:RZD02HVS`0W9i40:BVD 02PXTP0V9Y009bNB02PXT`0[:iD0;BfH02/[UP0Z:Y@0;RjI02l_VP0Z:Y@0 :2RB02/[U@0^;YP0;RjI02`/U`0[:iH0;bnJ038bWP0_;i/0;bnJ03@dX@0c P02h^V@0[:i@0;RjH03:<0>SZU03LgXP04eH023UC0P07>5801006=Tl0 1CA=00HfC`07>58200H6M00400D5L`0827L01PIe00L7M@801PId00D01PIe 00H6M0051G@01PId00H6M@0200D5L`0600H6M@0417801`Mf00L7M@051G80 10Aa0P1R/=X00`1P[mX0GZgH05f/e`0205f/eP0H05^Ze@1N[]T0H;3L05j^ f@1KZmH0GZkJ05j_fP1M[]X0Gk3L062ag01N[mX0GJoJ05f^fP1JZmL0;2bG 02/[U@0Z:YH0:BVD02LWT@0X:940:b^E02XZU00W9hl09RJ?0P0W9i404`0Z :Y@0;RjH02XZU00W9i00:BVC02/[U@0/;9L0;BfH02l_V`0d=:00=SJS030` W00/;9L0:@02`0f=Z80N00@cC@03eD0 23UC0P07=e401@06=U001CA=00L7M`061W@01`Mf00801@Ec00L020Qh00H6 M@061W@01PIe00@4L@051G<01PIe00801@Ec02@01@Ed00@4LP061WD01@Ec 00D5LP061W@010Aa00D5LP1U/md0Hk7K06>bg01Q/=X0GZcG05f/eP1L[=H0 FZWD05b/e`1O[mX0GZkI05f]f@1M[MP0Gk3K066bg@1P/Md0G:gI062ag01Q /]d0FjcH05RYe@1JZmL0;BfH02`/U`0[:iH0:2RB02LWT00Z:Y@202d]V00; 02d]U`0^;YT0;BfH02`/U`0];IP0;2bG02/[UP0Z:Y@0:BVC02XZU00];IT0 0P0^;YX01@0cP02l_VP0Z:Y@0;2bE0080jT0>CVV03HfX`0cZH203TiY@0903LgX`0b:D01CI@00DfD@05=e801CIA008013E?00<013A>0054023UC00PiD`07=e401cM@00HfD007 1gH200H6M00=00L7M@051G<01PIe00H6M0051G<01PIe00@4L@0417001PIe 00H6M00417401`Mf00@4LP0200H6M@0400D5LP071gL01PId00D5L`80I;;L 01`0I[CN06>bg01JZM@0EZK@05b[eP1P/=X0GZkH05j^f@1P/=/0Hk?N06:b g@1O/=/0H;7L05j_fP1JZ]H0FjcG06Beh@1S]=l0H;7M05n`f`1P/Md0;bnK 02h^VP0/;9L0:RZD02PXT@0X:980;2bH0`0^;YT00`0[:iL0;2bG02l_VP02 02d]V@0a02h^VP0[:iH0:RZE030`W00bO03HfY00f=Z<0=CFS 03@dX@0`<9`0;bnK034aW@0b3RS03/kY`0j>ZH0>CVV03LgX`0aCVW03@dX006 >5<01CMB00@dCP033RT03O 03@dX00c3RU03Hf X`0b008aBP02;dP00c5901/0oooo000Z0?oo o`0500HdC006=4d01S9:00D`A`0362@010046B@01P036B@011TT00<3;P03 0bh010@a00@4;`800`<[01D00`<]00@4<00413<00`<_00<3;0030bh010@_ 00<3;P030bX00`dg`1R/]d0Hk?N066bg@1M[]T0H;3L05n` g01M[]X0G:kI062bg@1S]N00:RZD02`/U`0202XZU@0302d]V00/;9P0:BVE 0080:2RD01`0:RZF02XZU00Y:I<0:b^F02d]V00[:iL0;2bG02h^V@0_;i/0 ;bnJ02`/UP0/;9L0N01<0<32J02l_V@0d=9l0=3BO030`V@0b3RT03TiY@0g=j<0=CFQ03@dW`0e=J80=cNS03DeX@05=e4013A>0058023UC00TjE@<01PIe00P01@Ec00H6L`071gH01@Ec00H6M0061WD0 1`Mf00H6M@801@Ec01H01PId00H6M@04174010Ab00D5L`051G@01PIe00@4 LP051G<010Ab00H6M0051G80I[CN06>af`1V]Ml0I;CN05j]f01M[=L0FZ[D 05j^f@1Q/M`0H[;M0P1V]^401@1S/ml0I[OR06Ffh@1T]=l0I;CP0080H[?N 00L0H;;M05f_fP1P/M`0IKOR06Jgh`0Z:YD0:b^G0080:BVC00@0;BfI02l_ V`0];IT0:RZF0P0V9Y003P0X:980:BVD02d]V@0`<9`0;BfI02XZU@0Y:I80 :RZD02h^VP0aO03@d X00d=9l0O034aW00^;YP0;bnI038bW@0bN02h^V00a c^X03dmZP0k>jP0>SZW03/kY`0m?JX0?Cf[03PhY@0e=J00>3RT00@d CP0200@cCAX0oooo000Y0?ooo`0700HcB`06 00HdC@0200@I900900dg`1Q/]h0HK;M062ag01R/ml0HkGP0080HkCP 01<0:b^G02PXT`0W9i409RJ@02PXTP0[:iH0;2bG02XZU@0Y:I<0:RZE02`/ V00^;YX0<32L02h^VP0Z:YH0:RZE02`/U`0^;YT0<32L0080:D0>c^X03DeX@0bZL0?CfZ03dmZ`0k>jP0=CFP034aV`0b00HcC007 =Dh011TT00dg`1Q/]d0H[?N06Beh01R/ml0I[OR05n`g01M[m/0H;7M 02TYU00U9Hh09BF=02HVS`0W9i40:2RB02XZU00Z:YH202XZU00;02`/V00_ ;i`0;bnL02`/V00[:iH0;2bG030`V`0d=:00O038bW`0cO03ZL0?CfZ03DeX@0aJD0>c^X03XjZ00f=Z80;bnJ02h^V00a02TYT`0Z:Y@0:BVC02PXTP0X:9<0:b^G02`/V00Z :YD0:b^F02d]U`0/;9L0;bnJ02h^V@0_;iX3038bWP08034aW@0cO033RT03@d W`0bbg01O[]T0GJgG 062_fP1S/]d0IKCO06Bdg`1P/=/0GZkI05^[eP1JZ]H0FjcG05b]f01JZ]D0 GJkI062ag@1K[=P0G:gI0080Gk3L00@0HK;N05mOb@1PH3RT6@3oool002L0oooo00P01S=;00Hd C@05O03DeX@0bJH0=cNS03LgY00203TiYQ`0oooo000V0?ooo`0700HdC@06 00/010@b00@4;`03 0bd00`<]00@4;P04134010@`00<3;@030b/00`@0JK[V06Rii@1V^><0I;KR008002m800@0039=000aB`00;TL002i70P00 ;dP01000>024QR`0P88T07an805f/e`1P[mX0HK7K06:af`1O[]T0 GJgH05n^f@1Q/M`0HK;M066ag01N[]X0FJWD05RYe01M[]X00P1M[]T0=`1N [m/0GJgI05b]f@1NG/P0GUk905mObP1PH:D0=CFR034aW@0_;i/00P0cN03@dX00_;iX0;2bG030`V`0f=Z40>3RT03LgX`0g=j80=CFP 03DeXAh0oooo000V0?ooo`0600HcC005@0 IKOR06Fgh`00<4X0039=000_B@02000`BP06000_B@00;TL002i8000^AP00 c gP1L[=P0EjSC05b]f01O/=/0H;7M062ag01L[MP0IFGA061Pb`1MGLL0GUk9 0P1PHP 034aWP0_;i/0;bnJ02d]V00Z:Y@0;BfH038bWP0c/0KKkZ06bnjP1X^ND0HkGP066cgP1T]^82000`BP08 000_B@00<4T0031:000^B000;dT002m8000^A`0001hNR00M7HP0I;?N05j]f01LZmH0GJcG 0P1O[mX03@1P/=/0GJgI05ZZe@1L[MP0H;7L06:bgP1V]^40FEW2065Qc01S Hlh0H63:05eMa`1PHP030`W00a00HcC006dh01V]n<0IkWU06Vk iP1Y^^H0J;[U06VkiP1/_NT0K[o[06fnjP1Z^nL0HkCP0P1L[MT00`1T]N40 IkST000_B@02000`BP09000_B000<4X0031;000`BP00<4T002m8000^A`00 N0?ooo`0V0?ooo`00903oool05005<4P0 1C9:00HdC@06=4`01S=;00DbBP0500Gk3L 066bgP1T]N40H[?O05n`g01P/Md002i8000`BP00;TL00P00;dT01@003RU03Lg X`0b@0HkCP06Beh@1V ^>@0J[_W0080JkcX00h0J[_W06FghP1S]N40I[OS06Nhi01X^ND0IkST06Ff hP1S]N40HK?N062ag@1O/=`0H;7M06:cg`<002m90280035<000`BP00?01lOR@0M7HP07Af7024QS00R8Xl0Hk;M05j^fP1JZ]H0H;3K05QH_P1F E[d0E5Bk05IF_@1JF/80FU[305UI`P80FU[300L0G5c505mOb@1MGLP0FEW3 05MG_`1EEKd0FEW20080GUk80P1LG5801SA=00801S=;00d01cE> 00LfC`030bP00`<[00@4;P0412l010@]00<3;00412l010@a00@4<00412l0 0`<[008010@/0P030bP200<3:`0300@4;@04130010@`00<010@_00`010@[ 00<39@030b<0IkST06Jgh`1W^>@0J;[V06Fgh`1R]>00I;GQ06Nhi01Y^^H2 06Rji@0H06Rii@1S]N00H;7M06Beh@1X^ND0JK[V06Zki`1W^>@0I;KQ06:d g`1P/Md0Gk7L066cgP1R/ml0Gk3L000`BP0006MWd`0Z:YD0:b^E02TYU00[:iH0:b^G0080:RZE00L0;2bH02h^VP0Z :Y@09bN@02TYTP0[:i@0;RjH0080N01@0=SJS03TiY@0f=Z80=3BQ03De X@0b0206FfhP0K066bgP1P /]h0I;KQ06Zli`1/_NT0J;[U06FfhP1T]N40H;;N06BfhP1[_NT0JkgX06Ni i@1W^>@0I[OS06FghP1T]N40HkGQ06Bfh@1U]^80HkGP06:cg`1Q/mh0I;KQ 000aB`00;TH0031;008002m900<002i7000aC00006ATc`1PH@0J[_W06bnj@1Y ^nH0I[OS06FfhP1S]>00J;WU06bmj@1W^>@0HK?O06:cg`1Q/ml0HK;N06:c g`1W^>@0IkWT06Bfh@1U]n80IkST06FfhP0706IVd`1XJ=H0IfOD06AT d@1RH/h0HF7;05mOb@80GUk702l0G5c505eMa`1PHQb`1GY0000<@000380000`0000<@0U0?ooo`008@3oool200Hd C@80131800T01cE>00LfC`06eh00;06Nhi01W^ND0JK[V06Zki`1Z_>L0I[OS06:d h01V^>@0IkST06FfhP1V]n<00P1Y^^H05@1W^>@0HkCP06>eh@1U]^80HK;N 062bg@1T]N40HkGQ066bgP1Q/ml0IKOR06>eh01P/Md0IKKR06Zki`1V^><0 23=;00TfCP0;>E402cUB00/hD@02000^A`0;000_B@00<4X002i7000_B@00 =02=0206MWe01WIm<0IVKA069Rc@1LGO030`W00W9i408B6:02@TS@0/ ;9L0<32L038bWP0_;iX0:b^F02d]V01CXL/0DIo8056Nb01KZ=80FZSB05FS c01EX/`0DZ3:05BRb`80DIo900X0DZ3:05JTcP1GYLl0EjG?05:PbP1?WLL0 000c0000<00003@0000_903oool00240oooo00X01C=;00HcB`04@0I[SS06VjiP1V ]n<0HK?O06>eh@0206Nii@1206Fgh`1Q/ml0H;7M066bgP1P/M`0HK;N06Be h@1S]N00HK;N062bg@1R/ml0H;7M05n`g01S]>00IKOR00TeC009=Th02cQA 00`jD`0<>e@02cYB00XgC`0:>50033]D000`BP00;TL002m9000^A`00=02LWTP0T99008b>?02DUT@0P88X08B6;020PR`0Q8Hd0822<020080HF7<01@0HF7;061Pb`1OGlT0Geo805]Ka01I FL40FU[305iNb01SHlh0J6SE06QXe01WIm<0I6C@061PbP1MGLH0GUk8065Q c01TI=00;RjJ02/[UP80;2bF00`0:RZE02XZU00Z:YD0;RjI030`W00_;i/0 EjG?05VVd01EXl`0DZ39052Nb01?WLL205BRb`0=05NUc`1HYLl0FJOA05RV d01EX/`0Dj7;05FSc@1HY]00EJ?=05:Qb`1=W@0IKOS06Bfh@1T]N40IKKR06:d g`1N/=`0Gk3L06:dg`1T]N40IKOS06Beh@1P/Md0Gk3L062bg@1R]=l0HkGP 0P1U]^804`1S]N00H;;M062bgP1R]=l0H;7M00`kE@0:>E402SM@00XhD00; >E8033]D00`kE@0:>5002cQA00`kE00>?EL033]E000`B`00;dP00P00;dT0 1@051G@01@Ec00H6M@051G<010Ab00808R:<01H08228028RS00S8hh08b>= 01hNR00Q8H`08b>=02A020PS00N7XX07Af80P0R8Xh0101HF<00FEW105UI `@1LG 05FRc01CX052Nb@1AWlX0EJC>05FSc@1BXL/0C9[504bKa@1dh009 06:cg`1P/]h0HkCP06FfhP1T]^80HkCP06:dh01S]N00H;;N0080G:gI01T0 H;7M06Fgh`1[_>P0JK[V06:cg`1N[m/0HK;N06Beh@1V]n<0IkWU06Nhi01T ]^80H[?O06>eh01V]n<0HkGQ00/kE00;>U<02SQA00XgC`0:>5002SQA00`k E@0:>5002cQ@008033YC00@02cUB00XhD00<>eD0039=0P00<4X030051G<0 1PId028RR`0R8X/0822;02PXU00S8hd0822;01hNR00O7hX071b601hNR080 8R:<01L0822<02@TT00U9I407an;024QS@0V9Y809bND02 028RS`0P88`08B6=01lORP0Q8Hh0822<05aLaP1IFL00EEFl05UI`@1NG/P0 Geo905iNb00205aLa@0;065Qb`1SHll0Geo905mOb@1RH/d0H63:05mOb@1S Hlh0IfOC06UYeP1XJ=@00P1VI]803@1RH/d0H63:065Qb`1QHL/0H63:06=S c`1YJMH0JV[G06IVdP1TIQc01@WlT0Cik805>Qb`1FYLl0EjG@05BSc@1?W/P0 D9k905FTcP0205RWd@0805BTcP1?W/T0C9_5052Ob@1GY]40000^0000<@00 030R0?ooo`007`3oool03@0400HdC@04<4L01C=;00DbBP06eh@1T]N40IKKR06:cg`1O/Md0 H[?O06FfhP1W^>@0J[_W06Rji@1R]=l0Gk3L05nag@1P/Md0HK;N06>dh01T ]^40HkCP06:cg`1T]^40I[ST00`kE00:>5402SQ@00/iDP0:>5402CM?00Xg C`0;>U<02SQ@00/hD@0;>E400P0;>5406`0:>50033YD00hnE`0=?5D033YC 00D5M@0Z:YD092B@024QR`0P88/0:2RD0202@TS`0U9I408b>?028RSP0T99408R:>0200HK;N062ag@1N[m/0H;7M 06>eh@1U]^80J;WU06VjiP1T]N40HK;N06BfhP1W^>@00P1Q/ml04@1U]n<0 I;GQ06:dg`1U]^80IkST06Bfh@1Q/]h0H[CO062bg@1O/=`0HK;N066cg`1O /M`0GZoK06:dh01T]^403CeF00802SM?00h02cYB00XgD009=4`02SI>00/i DP0;>U<02cUA00XhD00<>U<02cUB00XgC`0;>U<03SeG00dlEP8033YC01D0 ;2bK02HVU00Q8H`08B6<0202@TT00V9Y808B6>01hNR`0P88d00P0V9Y@0 300N7XX06QZ601/KQ@0L78H07an;024QS@1NG/P0FEW005YJ``1LGQb`80E:7;00<0EZ?=05FRc01FY04nNb01>WLL0D9o:056Pb`1CXL`00P1DXld0401>W/T0Cik905JU d01DXlh0D9o:056Pb`1GY]40FZWD05NVd@1FYM00E:?>05FUd01DY000P1W^>@03`1X^ND0J;[U06Beh@1O/Md0H[?O06>eh@1O /M`0H;;M06>dh01Q/ml0H;7M06Beh@1W^ND0IKOS06>dh00206Jgh`0n06>d h01O/=`0Gk3L062ag@1Q/]h0I;GQ00`lEP0=?EH02cYC00/iDP0;>5402CE= 00TdB`0;>54033aE00`lEP0;>U<02cQA00dlE@0<>e@02SM@00/jD`0=?EL0 3SeF00`kE00;>E80:2RF02HVT`0S8hl092B@028RSP0Y:IH0:b^J02HVT`0W 9i@08b>@02@TT00V9Y@0:BVG02DUTP0M7HT08B6>02@TT@0V9Y<0822<01hN R`0P88d09BFB02@TT@0L78L06AV301hNR@0N7XX07an:024QS@1OGlP0GUk7 05mOb@1PH06=Sc@1OGlP205iNb00505mOb@1RH/d0I6C?06=ScP1R H/`00P1MGLL01`1QHL`0I6C?06ATd01VI]40IfOC06IVdP1SHld00P1RH/d0 4`1PHScP1>W/T0BY[604bMb00002h0000`0200oooo000N0?ooo`0300HeCP05 @0I;GQ06>eh01S]N40HkCP066bgP1Q /ml0IKOS06Nhi01T]N40HK?N0080H[?O00<0HK;N06>dh01T]N400P1S]>00 0`1V^><0J;WU06Jgh`0206BfhP0L06>eh@1R]>00HK?N05j`f`1Q/]h0I[SS 06Nhi01S]>00H;;N06Beh@1V]n<0HkCP05n`g01S]N00I[OS06FfhP1S]>00 2cYC00`lEP0E8033YC00`jDP0;>E802cQA02@TT0808b>@0140 9BFC02HVT`0Z:YP0:RZH02@TT@0S8i008B6>0202DUTP0R8Y007Qj:01lOR`0202@TT@04024QS@0I6H@061R2024Q SP808B6=00<0822<028RS`1SHlh00P1UIM00>P1WIm80Hf?>05iNb01MGLH0 Fe_405YJ``1MGLL0Geo:061Pb`1PHW/T0D:7<05>ScP1?WlX0CYk904nObP100HkGP06FfhP1S]N00H[?O06>eh@1T]N40H[CO0`1S]>005`1R ]=l0H[?O062bg@1P/]d0H;;N06>dh01X^ND0J[_W06Nhi01V^>@0IkST06Jg h`1R/ml0G:gI066bgP1T]N40H;;M05n`g01P/]h0I;GQ06>eh@1R]>00HkCP 0080IKKR0100HkCP00TgC`0<>eD033aF00/jD`09=Tl02CE=00/hD@0<>e@0 3CaF00`kE@05009`0:=dl02cQ@00/i DP0;>5008R:>024QS@0R8Xl09BFC02TYU`0Z:YP0:2RF02@TT@0R8Xh08R:? 02@TTP0U9I<092BB028RS`0R8Xd08R:>02@TTP0P88d07Qj;024QS`0V9Y@0 8b>@024QS@0K6hH06AV3024QSP0R8Xl092BA020PS00P88d0IVKB06UYe@1Y JMH0IVKB05mOb@0205]Ka00:05YJ``1LG0P1CXL/08@1GYLh0F:G?05FSc@1AWlT0CI_504nN b01=VlD0Cik804nNb@1AX05BTc`1BX/h0EJG@056Qc019V/D0CYk905BTd01AXLd0 E:G@04jObP1;VlH0CIg80000;P0O0?ooo`007@3oool02`05@0H[?O066c g`1R]>00HK?O0P1Q/]h00`1R]=l0I;GQ06>dh00206:cg`0>062bgP1P/Md0 HkCP06Bfh@1S]>00I;KQ06Beh@1U]^80HkCP066bgP1U]^80HkCP05j`f`1O /M`206:cg`07066bgP1T]N40I[ST06Nhi01T]N402CI>00XhD@0200`kE007 00/iD`0:>5002SUA00`lE@0=?5D033YC00/iDP0200`kE00B00/iDP0:=Th0 2SE<00XgC`0;>E402cQA00`jD`0=?5D033YB020PS00O7h/08B6>020P0S8i008@0S8i4092BA02@TT@0S8i008R:? 02A02DUT`0V9Y@08R:?01lORP0O7h/07Qj:024QSP0R8Y00 92BA024QSP0N7XX0IfOC06UYe@1WIm<0Hf?>05]Ka01FE[d0FEW105aLaP1P H05mOb01P H00T0F:K@05FSc@1@W/P0DZ3:05:Qb`1BXSc@1FY]40 0P1EYM003@1BX/h0CYk904fMb@1?X00IKKR00<0I;GQ00/0H;;N 062ag@1P/Md0H[CP06Nhi01U]n80HK?O06>dh01T]^80HkCP06>eh@0206Ff hP<0I;GQ03P0IKKR06Beh@1T]N40I[OS06Rii@1V]n<0H[CO05j`g01O/=`0 HK;N066cgP1P/]d0Gk3L062ag@1T]N40H[?O05^/f01M[]X0IKKR06Rii@1V ]n<0H[?O00XgD009=Th02SM?00XhD00;>E8033]E00`lEP0E802cYC00/iDP0;>E4033UB00/hD@0;>E8033]D00/iD@0<>U<03CaE 00`kE00R8Xh08B6>0201007Af906=ScP1QHL`0HF7< 069Rc01LG<@0EEFl05UI`@1OGlT0Hf?>061PbP1OGlP0Hf?=06EUd01VI]80 IfOC0P1VI]803P1UIM40Hf?>065Qb`1RH/`0HV;=065Qb`1RH/d0Hf?>065Q b`1RH/`0IVKB06QXe@1TIRc01DYScP1EY05>Tc`1DYM00DjC@05BTd01CXll0DjC?04nPb`1=W/X0Cj3; 04fNbP1=W/T0DZ?>05>Tc`1@XL`0BIW504RIa00M0?ooo`00;`3oool03P04 12l010@]00@4:`0412`010@^06Nhi01R/ml0HkCP06BfhP1O/Md0GZoK062b g@1Q/ml0HkGQ0P1U]^80201T]N40Gk7M05nag@1T]N40IKKR06:cg`1T]N40 IkST0P1U]^805@1V]n<0IKKR06Beh@1R]=l0H[?O06Nhi01[_>P0I[SS05na g@1J[=L0F:[F05b]f@1M[]X0FjcH05b]f@1S]>00J;WU06>dh01L[MT0Gk3L 06:cg`02066bgP0;00XiD`0:>5402CI>00TfCP09=dl02SQA00dlEP0U<00P0;>E402`0:>5002SM?00`jD`0<>e@03CaE00dkE@0: =dl02SQ@00/jD`0<>U<0:RZH00809bND0P0Z:YP202TYU`0502PXU@0S8hl0 822;01hNRP0R8Xl00P0S8i42024QSP0702024QSP0R8Y008B6>020PS@0O7h`0H63:05aLa@1L G<@0HF7;061Pb`1LG@0H;;M05n`g00206>eh@0?05j_f`1L[]X0Gk3L06>eh01V]n<0 IKOS06FfhP1R]>00Gk3L066bgP1T]^80H[CO05nag@1S]N40IkST0080I[OS 01P0I;KQ06:cg`1P/]h0HK;N062bgP1Q/ml0H[?O066bgP1O/Md0GJkJ05Z[ e`1M[]X0HK;N05nag01O/=`0HkGP06Jgh`1S]>00HK;N062bgP1J[=P0EjWE 05f^fP0:=e0200XhD00>00XiDP0:>5402CI>00/iD@0;>U@02SUC00/iD@0: >5002SM@00/iDP0;>5402SM?00/iDP0<>U@200`kE00:00/gC`0;>E402cYB 00`jDP0^;Yh0:BVG02PXUP0Z:YT09bNE02DUT`809bND020092BA024QS@0O 7h/08R:?02B02@TTP0S8i009BFB02PXUP0V9Y@08B6?01lO S00M7HT08b>A028RS`0O7h`09BFC02@TTP0P88`08B6>065Qc01NG/P0Fe_4 05iNb01RH/`0Hf?>06ATd01TI06ATc`80IFG@00@0IVKA06IVdP1R H/`0H63:0P1QHL/00`1SHll0IfOC06MWdP0206MWd`0<06ATc`1UIM00IfOC 06IVdP1XJ=@0Jf_H06IVdP1RH/`0Geo9065Qb`1TI@05`1V]n<0IKKR06Fgh`1U]^80HkCP06FfhP1W^ND0J;WU06Jg h`1T]N40HK?O05n`g01R/ml0HkCP066cgP1S]N00IKOS06>dh01O/Md0G:kJ 05j_f`1R]=l0I;GQ0080IKKR00`0HkCP06:cg`1P/]h0GJkJ05NXd`1JZmL0 2SQ@00TdC009=Th02SQA00/kE@0;>U@200TfCP0500XhD@0:=e002SQA00/i DP0:=e000P0;>E805P0:=Th02SM?00XhD00;=dl02cQA00/hD00<>U<033YB 00/hD00_;ih09bND02DUT`0X:9H09BFB02HVT`0Y:IL09bND02@TT@0Q8Hd0 8B6>02@TTP0R8Xl202DUU00502HVU00T99409RJD02HVU00S8i000P0Q8Hl0 8@0N7X/09RJE02@TTP0M7HP08b>@02HVU00P88`07Af806=ScP1QHL/0GEg6 05aLaP1OGlT0HV;<06ATc`1SHlh0HV;=06ATd01UIM40I6C?06EUd01UIM40 Geo905mOb01SHlh0I6C@06IVdP1XJ=D0IfOC06IVdP1UIM00I6C>06IVd@02 06QXe00>06UYe@1[JmP0IfOC06=ScP1OGlP0H63906ATc`1XJ=@0J6SC06MW dP1YJMD0IfOB06IVd@1YJME20?ooo`00;P3oool05P0412`0Gk7M05^/f01I ZmH0FZcG05f^fP1O/=`0Gk7M066cg`1U]^80IKOR06>dh01V]n<0JkcX06Ni i01U]^80I[OS06Nii01U]n<0H[?O06Beh@1U]^830?ooo`0o01DEO00C4gL0 4A5f018BN00E5G`06AV001PHOP0F5W/051Ah01DEM`0H67h06AUm01LGNP0H 67`05AEg01DEMP0G5gT051Af018BL`0D57@05AEf01U<02c]D00XhD@09=dl02SQA00XgD00;>E802c]D 00XhD00;>5002cUB00XfCP0:=dl02SM@00XfC@0:=Th02cM?00`jDP0<>E80 2cQ@02/[V@0T99408R:>02HVT`0U9I809RJC02TYU`0U9I808R:?01lOR`0S 8i009BFC024QS@0S8i4092BB00809RJD00<09bNE02HVU00S8i000P0Q8Hl0 400N7XX09RJD02LWU@0N7XX0822<02DUT`0N7X/061R206=ScP1RH/`0HF7< 069Rc@1RH/`0HF7;06ATc`1UIM0306ATc`0706EUd@1XJ=@0IfOB05mOb01M GLH0HF7;06ATc`0206=ScP0>06ATc`1RH/d0H63:065QbP1SHlh0IVKB06QX e@1WIm80IfOC06QXe01VI]40HF7;05mOb01SHld206QXe00506IVd@1UIM00 IFG@06IVd@1VI]80@P3oool004L0oooo00T05AEm01HFO@0E5GX05AEl01LG OP0J6X806a^201LGO00E5G/00P0F5W/0700E5GL05QIi01TIO@0H67`05QIi 01TIO@0G5gT05AEf01HFMP0F5WL05AEg01DEMP0F5WT06QYn00ThD009=e00 2CM?00XhD@0;>U@02SQA00TgC`0:>E802SQA00/jD`0<>e@02SQ@00XgC`0: =e0300XgC`0J00XfC@0:=Th02cQ@00`jD`0;>U802cUB02LWU@0T99408R:? 02DUTP0W9i@092BA02DUTP0R8Xh0822<01lOR`0S8i0092BB028RS`0Q8Hh0 8R:?02LWU@0Y:IP09bNE02HVU00S8i42020PS00D01dMR00R8Xl0:2RG02069Rc01SHlh206MWd`0D061PbP1MGLH0Geo8069Rc@1Q HL/0H63:06=Sc@1RH/`0H63:061Pb@1PHE8200XhD@0500/kE009>5402CM? 00/jD`0;>E800P0;>U<04`0;>E402cUB00XhD@0:=e002CM?00XgC`0;=dl0 2cM@00`kE00=?EH033YD00`jD`0V9Y809RJC02LWU00W9i<0:2RE02DUTP0S 8i000P0P88`0200R8Xl08B6?028RSP0S8hl08B6>024QS`0V9YD0:BVH0P0V 9Y@04`0R8Xl07an;020PS00L78L07Af802DUT`0T99407Af901`LR00M7HP0 7Af906=ScP1TI05mOb01QHL/00P1TI061PbP1RH/`00P1UIM005P1UILl0IVKA06ATc`1S Hld0HV;<061PbP1QHL/0IVKB06QXd`1VI]40IVKB06MWdP1WIm<0IVKA06AT c`1SHld0HV;<061PbP1QHL/0IFG@06UYe@1VI]920?ooo`00B03oool02P0B 4WT05AEl01HFO@0F5Wd061Qo01HFN`0C4gL04Q9g01E<02cUB00XhD00;>U<00P0:>5400`0;>U<02cUB00/iDP02 00XhD@0900/jE00;>U<02cUB00XhD@0;>E4033]D00`jD`0=?5D03CaF0080 33]D00<0:2RE02PXUP0Z:YP00P0X:9D06P0U9I408b>?01lOS00P88`08R:@ 024QSP0P88`08R:>0201lOR`0P88`0 822=01dMR@0J6X@07an<01lOR`0K6hL07Af:020PS00O7h`0Hf?>0P1VI]80 0`1TIU@02cYC 00TfCP09=Dd02SM?00TfC`0:>5402SM?0P09=Dd04`09=Th02cUB00/jD`0< >e@03CeF00hnE`0=?EL03CaF00dkE00<>U<03C]D00hmEP0Z:YP09bND02HV U00W9i@0:BVF02@TT00Q8Hd00P0P88`05P0S8hl092BA028RS`0U9I809RJC 02@TT00S8hl09RJD02@TT@0O7h`0822=024QSP0O7h`0822=01dMR@0O7h/0 7Af901`LR00Q8Hh08R:@020PS@1RH/d206QXe00506=Sc@1SHlh0IVKA06AT c`1SHlh00P1RH/`07`1UIM00IfOC06MWdP1ZJ]H0K6cJ06YZe`1YJMD0JV[F 06UYe@1UIM00Hf?>06ATcP1UILl0IVKA06ATc`1PHU<02CI>00TdC009 =D`023A<00TgC`09=Th02CA<00802CE=04d02SM?00XhD00;>E803SiG00hn F00;>U<033YC00`jDP0<>E403CaE00hnF00X:9L09BFA02@TT@0V9Y@0:BVG 02@TT00Q8H`08B6>024QS00T99409bNE02DUT`0W9iH09RJD02DUTP0T9900 9BFC028RS`0Q8Hh08b>A028RS`0O7h/08R:@02E802SQA00/iDP0:=e002CI>00Tg C`09=Th02SM?00XhD00:=e002SQ@00XgD00:>50033]D00dlE@0:=e002cQA 00`jD`0<>E803CaE00hnF00W9iD09RJC02HVU00X:9H0:2RE02DUTP02028R SP0S028RS`0T99409RJD02HVU00V9YD09BFC02TYU`0W9iD092BB024QSP0R 8Y0092BB024QSP0P88d092BA02DUU00O7h`07Qj:01dMR@0K6hL071b9028R T@1SHld0IFGA06UYeP1ZJ]L0IVKA06EUd01XJ=@0JFWE06IVdP1QHL/0H63: 06=ScP1UIM000P1VI]406P1UIM00IVKA06ATcP1QHLX0Hf?=06MWdP1ZJ]H0 JFWF06QXe01WIm80IVKA06=Sc@1NG/H0H63906IVd@1TI06ATc`1WIm<0J6SD@P3oool004P0oooo0280 4Q9i01DEN`0I6H<05QIo01@DNP0E5G`061Qo01PHOP0D57P05AEi01XJPP0I 6H005aMn01PHO@0D57X051Ah01DEN00I6Gh071b201XJPP0J6X006QYo01/K P00I6Gh05QIk018BM@0C4gL02CM@00`kE@0;>U<02SQA00XgD009=Th02cUB 0P0;>U<08`0<>e@02cYC00/iDP0<>e@033aE00XgC`0:>5403CaF00dkE00= ?5D03SeF02TYU`0W9i@0:2RG02LWU@0V9Y@0:2RF028RS`0S8i409bNE02A069Rc@1TIE<02cUB00XhD00:>E802SM@00/jE00<>eD033]D00dlE@0=?5H03CeG 00hoF@0>?UP02SM@00XhD@0>?UL03CaE00`jD`0<>e<0:BVF02DUT`0Y:IL0 9bND02DUTP0W9iD08R:@02LWU@0[:i/09BFC008092BA00T08B6=02@TT@0X :9H08b>@024QSP0P88d0822>028RS`0R8Y000P0T9980<00V9YD08R:>024Q SP0T99807Qj:01dMR@0W9iD0H639061PbP1TI06IVdP1ZJ]H0JFWD06QXd`1WIm<0I6C>069Rc@1RH/`0I6C?06IVdP1T IE800P0;>E801@0V9Y<092BA02PXU`0W9iD09BFA00808b>?00l0:RZI 02/[V`0T99408R:>02@TT00Q8H`092BA02HVT`0R8Xh092BB02@TT@0S8i00 92BC020080IVKA00L0 IFG@06ATc`1WIm80JFWE06QXe01[JmL0KVkK0480oooo00190?ooo`04014A N00B4WT05QIo01PHP08051Aj00`05aMn01LGO`0D57/051Ak015402cYC0`0<>e@07@0=>e@0 33YC00/iDP0:=e002SI>00XgC`0:>5002SM?00XgD00<>U<02cQA02@TT@0S 8i009BFC02HVT`0W9i@08b>@02HVTP0[:iT09bNF024QS@0O7h/08b>@024Q S@0T9940:BVG02@TTP0W9iH09bND008092BB00@08B6?020PS@0S8i408B6> 0P0O7h/01@0R8Y007an=01hNR`0Q8Hl0HV;<0080IfOC02H0IfOB06EUd01R H/`0HF7:069Rc01SHlh0I6C?06IVd@1WIm80IFGA06MWdP1WIm<0IFG?06=S c@1UILl0IVKA06UYe@1ZJ]H0I6C>065QbP1SHld0IFG?06IVd@1UIM00IVKA 06QXd`1UILl0I6C>06IVd01UIM00Hf?=06=ScP1UIM00J6SC06UYe@1ZJ]H0 K6cI06e]fT80oooo00190?ooo`0601@DO00C4gX05QIm01PHO`0E5Gd05AEl 0P0G5gh0300B4WL04a=i014AM@0C4gL051Aj01eD02cYC0P0;>E802P0:=dl02CA<00PbB@09 =Td02cQ@00XfCP0;>5403SiG00`jD`0V9Y@202@TT00U02DUTP0Z:YP0:2RF 02XZU`0Z:YP09RJC02020PS@0R8Y008b>A01hNS00M 7HX071b906IVd@1[JmL0J6SD06IVd@1XJ=@0IVKA069Rc01TI00H0IfOB06UYe01YJMD0Jf_G06][f01ZJ]I20?ooo`00B@3oool02`0G 5h405aN001LGO`0F5Wl051Ak0154033eG00`kE@0;>E802cYC00Xh D009=Dd02CA;00TeC@0:=dl02SI>00XhD00=?5H033YC02TYV00302PXU@07 02TYU`0Y:IP0:b^J02LWT`0T9940:2RF02LWU00302DUTP0>020PS@0T9940 :BVG02PXU@0S8hl08R:>028RS`0W9i@09BFC028RT00P88h08B6>01lOS00M 7HX201hNR`0C06QXe01[JmP0JFWE06UYe@1/K=T0JV[F06QXe01YJMD0IVKB 06ATc`1VI]40IfOB06MWd`1UIM00H63:05mOb01QHL/0HV;<06ATcP0206MW d`0<06=Sc@1RH//0I6C>06MWd`1YJMD0IVKA06EUc`1VI]00I6C?06IVd@1Y JM@0J6SD0P1VI]401P1WIm80J6SC06QXd`1YJM@0IfOB06IVdD80oooo001: 0?ooo`0901PHP00J6XD061R201DEO@0C4g/051Ak01TIPP0L78H06QZ10080 51Aj02/05AEk01LGO`0H680061R001TIO`0J6X405QIm01LGO@0D57T05AEj 01XJP@0G5gd061Qn01XJPP0H67h05QIl01PHO`09=Th023A<00TeC@0:=e00 3CeG00`kE@0;>E4033]E00`jE00;>E4033YC00/iDP0:=dl02CI>00XgC`0; >E802cUA02`/VP0/;9T0;BfK02XZU`0U9I809BFC02PXUP0R8Xh08R:?0080 9RJD01P0:2RE02XZV@0X:9D08B6>02@TT00V9Y@09bND02024QS`0P88d07Qj901dMRP0O7h`08R:@06QXe01VI]80 IFG@06YZeP1]KMX306][e`0F06IVd@1SHld0IFG?06UYe@1XJ=<0Hf?>061P b@1NG/L0Geo8065Qb`1SHld0HV;<061Pb@1NG/L0Geo8069Rc01UIM00IVKA 06ATcP1SHld0HV;;069Rc080IFG?00T0IFG@06QXd`1XJ=<0IfOA06QXd`1Y JMD0J6SC06ATcP1TIE<02cQ@00`kE@0?UP02cYC00XgD00:>5002cUB00`iD@0/;9/0;2bJ02/[VP0X:9D08b>@ 0200XiDP0;>E802cUA 0P0;>E8200`kE@0P00`kE00=?EH03d1J00dnF00<>eD033aE00`jD`0;>500 :2RG02PXU@0X:9L09bNF02DUT`0T99408b>@02@TT00R8Xh08b>@02PXUP0[ :iX0:2RG02PXUP0R8Xl07Qj901lOR`0U9I809bND02E8033YC00`kE@0<>e@200`jD`0B00dm E`0=?UP03CeH00hoF@0<>e@02SI>02@TTP0U9I<09bNF02TYV00Y:IL09bNE 02HVT`0W9i@08b>?02@TT@0W9iD0:BVH0P0W9iD07`0S8hl07an;024QS@0U 9I8092BA02069Rc01UIM00JFWD06MWdP1RH//0HF7:06IVd01X J=<0IVK@0080Hf?=00D0IfOB06a/f@1[JmL0IfOB06YZeP120?ooo`00BP3o ool00`0@47L05aN001PHPP0201@DN`0601HFO`0H68405aN001PHP@0K6hD0 6AV20P0D57`08@0D57X05AEl01DEO00H68005QIn01DEO00I6H806AV101LG OP0E5G/04a=h01LGOP0I6H405aMn01TIPP0H67l05aMo01HFOP0;>E<02cUB 00/jD`0;>E8033YC00`kE@0=>eD02cUB00`jD`0@02DUT`02 02PXUP809BFB00l08b>?020PS00S8i009BFB020PS@0Q8Hh08R:?02PbP00;TL00P00;DH0:000;TL002m8000` BP00<4X002m906][f01ZJ]H0IfOB06MWd`1XJ=<0IVKA06UYe@1]KMX0Jf_G 06QXe01UIM00IFG?06=Sc@1TIU8200`kE00900/h D@0;=dl02cUA00/iDP0:>50033YC00dlEP0U9I<09RJD008092BA01l0:2RF 02XZU`0V9Y808b>?02DUTP0W9iH0:RZI02LWUP0T99808b>@024QS@0O7hX0 8R:?02000/A000;DD002i7000]AP00;dP002m90080031901D0IVKA06=S c@1RH/`0I6C>06IVd@1XJ=@0JV[E06IVd@1RH/`0H63905mOb01OGlL0HV;< 06MWdP1ZJ]H0Jf_G06QXd`1WIm80J6SD06QXd`1TIU<02cYB00/hD@0:=dl200/hD@0G00XfCP0;>E803SmI02@TT@0V 9Y<09BFB02@TT00V9Y@0:2RF02HVTP0U9I409RJC02LWU@0Y:IL0:2RF02DU T`0T99808R:?01lOR`0R8Xl08R:>020PS00P88d00P0Q8Hh202@TTP0G04nM aP1AWlT0E:;;05NUcP1JZ=40G:[C000]AP00;TL002e6000]A@00;TP0035; 000_B000eD02cUB00/jD`0; >U@00P0;>E804`0<>e@033]E00`kE@0;>U8033YC00hnF00S8i009BFB02LW U00U9I409BFB02HVU00U9I<09BFB02@05:Ob@1GYeD033aE0P0;>U<03`0>?UP03SmI 00dmE`0<>eD033YC00dlEP0R8Xh08b>@02PXU@0U9I008b>@02HVU00U9I80 9RJC02@TT00202LWU00702DUTP0Q8Hd09bNF02TYU`0T99409bNE02PXUP02 0205VWd01G YE803CeG00m0FP0E808R:>02@TT@0W9i@092B?02@02DUT`0V9Y@0:2RG02LWUP0R8Xl08b>A 02eD03SiI00dlE@0;>U8200/iDP0S00`lE@0:>5402CE<00TeC@0;>500 92BA02LWU@0U9I<08b>@02DUT`0[:i/0:b^J02/[V@0Z:YP09bNE02HVTP0Y :IH09bND028RSP0U9I80:BVH02PXUP0U9I<08R:>02@TT@1IYm00FJK@05FR c01@WLL0CYc504jKa@1BWlT0EJ?<05RVc`1LZM<0203oool02@00;dT0031; 000_B000<4/002m8000`BP00U<02cUB00/jD`0:>5402cUB00Xg C`09=4/02CE<00/iDP0W9iD0:BVH02DUT`809RJC01P0:BVG02XZV@0Z:YT0 ;2bK02PXU@0V9Y<0:b^H02TYUP0T99409RJC02PXU`0U9I<08R:?02DUTP1D XL/0DIk805BRc01AW/P0CI_4052Nb01BXE8033]E0P0;>E801P0;>5002SE=00XeC@0<>E80:2RF 02TYU`809RJD00D092BA02HVT`0Y:IL0:b^I02d]W00202TYU`0302d]W00Z :YP092BA00809BFC00d08R:?01lOR`1HYLl0Dj7:05FRc01HYLl0EJ;<05>P bP1FXld0E:7;04nMa`1AW/P0EjG?00h0oooo00T0031;000^B000;DH0039= 000_B@00E8033aF00/iDP0:=dl02SI>00XeC@0:=Td02cUA02XZV00W9i@0 92B@02@TT@0U9I409RJC02/[V@0Y:IL0:RZG02PXUP0Y:IP0;2bL02LWU@0T 99009RJC02@TTP0Q8Hh0F:K?05ZWd@1IY]00EjG>05VVd01HY/l0EJ?<05FS c@1CXLX0D9k805:Ob@0A0?ooo`09000aB`00<4X0031:000aC000<4T002m8 06ATcP1UILl0IVKA0080JFWD0P1/K=P03@1ZJ]H0KFgI06e]fP1[JmP0Jf_G 06YZeP1ZJ]D0JFWD06UYe@1[JmL0K6cH06a/e`1/K=P0@P3oool004`0oooo 00<04A5j00h>M@0A4GP07`3oool0100;>U<02cQA00/jD`0:=dl200XfC@0E 00XeC@0;>50033UB02h^W@0W9i@08b>?02@TT@0W9i@09RJD02/[V@0X:9D0 9bND02DUT`0V9Y@09bNE02@TT@0S8i009RJC02@TT@1IY]00EjC>0080EZ?= 00L0EZC=05FRc01CXL/0D9k704nMaP1@W/P0DIo901@0oooo01400319000` BP00<4X002m8000aC000;TP0IFG?06][eP1/K=P0KVkK06e]fP1/K=T0KfoL 06i^f`1YJM@0IVK@06QXdP0206UYe00506YZe@1]KMT0KVkJ06][eP1ZJ]D0 @P3oool006l0oooo00@02SQ@00XhD@0:=Th02SI>0P0;>E401@0<>U<03CYC 02l_W`0Y:IL09BFB00809RJD00D092BA02HVU00U9I809RJB028RSP0202QbP1AW/P0DIo804nLaP1B XW06MWdP1XJ=<0IfOA 06QXd`1]KMT0K6cH06IVd01UILi20?ooo`00K`3oool07P0:>5402SQ@00Xg C`0:=e003CaE00hnE`0=?5D033YC02/[VP0X:9H09BFB02HVT`0S8i008R:> 028RS`0U9I809bND02PbP1;VL<0CY_5052Ma`80D9k800<0DZ3905NTcP3oool06@3oool0 4@00;dT0035<000^B000<4X0L73M06a/f01]KMP0Jf_G06MWd@1TIE403CaF00lnF00=>e@02SM@02HVT`0U9I<08b>@02@TT@0R 8Xl08b>?02?02DUTP1DX/d0CYc6052N b01BXe@03CaE00dkE00;>E402CE=02@TTP809BFB00D0 9RJD02@TT@0W9i@0:2RF02LWU@0202/[V@0?02PXU@1FYLl0G:[D05RWd@1@ WlT0Cig705>Qb`1HY]00EJ?<052Nb01AWlT0C9[404ZH`P1=VlD0Dj7:01l0 oooo00P002m9000_B000<4X0031:071`g@1/K=P0JV[F06UYd`80IVK@00D0 JV[E06e]f@1]KMP0Jf_F06a/f0120?ooo`00L@3oool04`0;>U<03CaF00dk E00;>E402SM?00TdC00W9i@0:2RF02XZV00[:iT09bND02XZU`0[:iX09bND 02XZV00[:iT0Dj;=05BSc@1CX/`00P1DXld02@1EXld0F:K@05ZXdP1HY]00 DIo904fKa@1?WQbP0S0?ooo`80031:00H0KVkK06m_f`1/K=L0 IVK@06EUcP1ZJ]H2071`g@80KFgI@P3oool00740oooo01/02cYC00`kE@0< >U<02cQA00/hD00:=Th0:b^H02/[V@0/;9X0;2bK02PXUP0Z:YP0:b^J02HV T`0W9iD0EjKA05:Qc01=WWU<0:b^H02`/VP0X:9D202TYU`0B02XZV00Z:YT09bND05RXdP1DY05:Qc01IZ=80FZWC052Nb01 04fLa`1CX/d0EJ?=04fKa@1@W/L0Dj;<0P1FY00XhD00;>U<03CaF 02XZU`0Z:YP08R:>02HVT`0Z:YT0:b^J00009`0002X0CYk90080D:3;0P1G Y]402@1@WlX0Cik905>Rc01=WU<0:b^H02/[V@0W9iD0:2RF02d]W00002/0000Z0000:01=WLP0C9g804bL a`1CXlh0E:C?04jMb01=W50033UB02TY U`0[:iX0:BVH02PXUP0002/20000:P0=0000:`1;WWLMe 0?ooo`00M@3oool05@0:=D`02SI=02/[VP0Y:IL0000X0000:P0002d0000/ 0000:@0002/0BI[504jNbP1?WlX0CYk904nPb`1=WLP0CYk904nObP1AXL`0 D:3;04fLaP1f0?ooo`00MP3oool01`0:=Dd0;BfL0?ooo`0002X0000X0000 ;@0002P00P0002/02P1W/X0C9c704jNb@1@X<`0DJ3; 05:Qc01@X<]g0?ooo`00MP3oool01@0;>E40oooo0?ooo`0002d0000Z0080 000V00`0000Z0000:`1@XL`0DjC@05BUd01CY 05FUc`1AXLag0?ooo`00NP3oool01@0002h0000Y0000;00002L0000Y0080 DJ;>00L0E:C?05NWd`1>W/X0Bic7052Pc01HYm80FJWD07P0oooo001j0?oo o`030000:@0002X0000_0080000Y00@0EJKA056RcP1@XLd0DJ;=0P1=W/T0 0`1AXL`0E:G@0?ooo`1h0?ooo`00N`3oool01@0002P0000[0000;`0002X0 000Y0080D:7=00D0DjC@05BUd01IZ]D0FJWD05FUd01i0?ooo`00O03oool0 100002L0000_0000;@0002`204fNbP0404fNb@1@X<`0F:WD05JVdGX0oooo 001l0?ooo`0900009P0002L0000]0000;01@XLd0DJ;=052Qc01=W/T0Cio; 07/0oooo001m0?ooo`080000:P0002P0000X056RcP1DYM40DjC@04fNb@19 V/Ek0?ooo`00O@3oool01`0002`0000[0000:@1?X<`0D:7=052Rc@1>Wl/0 O03oool007h0oooo0P0002T0101@XLd0BI[604RIa@1BXlml0?ooo`00OP3o ool01@0002P0000[05:Tc`107h0oooo001o0?ooo`030000:@1FYm<0E:KA07h0oooo00200?oo o`0304nQc03oool0oooo07d0oooo003o0?ooo`40oooo003o0?ooo`40oooo 003o0?ooo`40oooo003o0?ooo`40oooo003o0?ooo`40oooo003o0?ooo`40 oooo003o0?ooo`40oooo003o0?ooo`40oooo003o0?ooo`40oooo003o0?oo o`40oooo003o0?ooo`40oooo003o0?ooo`40oooo0000\ \>"], "Graphics", CellFrame->False, CellBaseline->Top, ImageSize->{256, 256}, ImageMargins->{{1, 0}, {0, -1}}, ImageRegion->{{0, 1}, {0, 1}}], Cell[TextData[{ StyleBox[ "\n\nRoman E. Maeder\n\nMathConsult Dr. R. M\[ADoubleDot]der\n\ Samstagernstra\[SZ]e 58a\n8832 Wollerau\nSwitzerland", FontSlant->"Italic"], "\n", ButtonBox["http://www.mathconsult.ch", ButtonData:>{ URL[ "http://www.mathconsult.ch/"], None}, ButtonStyle->"Hyperlink"] }], "Author"] }], "Text", CellMargins->{{Inherited, -27}, {Inherited, Inherited}}], Cell[TextData[{ StyleBox["MathLink", FontSlant->"Italic"], " \:901a\:4fe1\:30d7\:30ed\:30c8\:30b3\:30eb\:306f\:ff0c\:8907\:6570\:306e",\ StyleBox["Mathematica ", FontSlant->"Italic"], "\:30ab\:30fc\:30cd\:30eb\:30d7\:30ed\:30bb\:30b9\:3092", StyleBox["Mathematica ", FontSlant->"Italic"], "\:5185\:90e8", "\:304b\:3089\:5236\:5fa1\:3059\:308b\:306e\:306b\:7528\:3044\:308b\:3053\ \:3068\:304c\:3067\:304d\:307e\:3059\:ff0e\:3053\:306e\:6a5f\:80fd\:306b\:3088\ \:308a\:ff0c\:4e26\:5217\:30d7\:30ed\:30b0\:30e9\:30df\:30f3\:30b0\:306e\:305f\ \:3081\:306e\:5206\:6563\:30e1\:30e2\:30ea\:74b0\:5883\:306e\:5b9f\:88c5\:304c\ \:53ef\:80fd\:306b\:306a\:308a\:307e\:3059\:ff0e\:4e26\:5217\:8a08\:7b97\:7528\ \:306eMap\:7b49\:306e\:4e26\:5217\:8a00\:8a9e\:7528\:306e\:547d\:4ee4\:306f\ \:ff0c\:3053\:308c\:3089\:306e\:57fa\:672c\:7684\:306a\:6a5f\:80fd\:4e0a\:306b\ \:7c21\:5358\:306b\:5b9f\:73fe\:3067\:304d\:307e\:3059\:ff0e" }], "Text"], Cell["\<\ The MathLink communication protocol can be used to control several \ Mathematica kernel processes from within Mathematica. This feature allows the \ implementation of a distributed-memory environment for parallel programming. \ Parallel language constructs, such as a parallel version of Map, can easily \ be implemented on top of these primitive operations.\ \>", "Text"], Cell[TextData[{ "\:3053\:3053\:3067\:306f\:ff0c", StyleBox["Mathematica", FontSlant->"Italic"], " \:306b\:304a\:3051\:308b\:4e26\:5217\:30d7\:30ed\:30b0\:30e9\:30df\:30f3\ \:30b0\:306e\:30e9\:30a4\:30d6\:30e9\:30ea\:306b\:3064\:3044\:3066\:8ff0\:3079\ \:ff0c", "\:4eee\:60f3", "\:5171\:6709\:30e1\:30e2\:30ea\:3084\:540c\:671f\:65b9\:6cd5\:3092\:542b\ \:3080\:ff0c\:3044\:304f\:3064\:304b\:306e\:4f7f\:7528\:4f8b\:3092\:793a\:3057\ \:307e\:3059\:ff0e" }], "Text", Evaluatable->False, AspectRatioFixed->True], Cell["\<\ We describe a library for parallel programming in Mathematica and \ give several examples of its use, including virtual shared memory and \ synchronization methods.\ \>", "Text", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[{ "\:30e9\:30a4\:30d6\:30e9\:30ea\:306f\:5b8c\:5168\:306b", StyleBox["Mathematica ", FontSlant->"Italic"], "\:3067\:66f8\:304b\:308c\:3066\:3044\:308b\:305f\:3081\:ff0c\:30de\:30b7\ \:30f3\:975e\:4f9d\:5b58\:3067\:3059\:ff0e\:307e\:305f\:ff0c\:5171\:901a\:306e\ \:30d5\:30a1\:30a4\:30eb\:30b7\:30b9\:30c6\:30e0\:3092\:4f7f\:308f\:305a\:306b\ \:ff0c\:7570\:6a5f\:7a2e\:9593\:30cd\:30c3\:30c8\:30ef\:30fc\:30af\:3067\:3082\ \:4f7f\:3046\:3053\:3068\:304c\:3067\:304d\:307e\:3059\:ff0e\:3059\:3079\:3066\ \:306e\:30e9\:30a4\:30d6\:30e9\:30ea\:3068\:30a2\:30d7\:30ea\:30b1\:30fc\:30b7\ \:30e7\:30f3\:30b3\:30fc\:30c9\:306f\:ff0c", StyleBox["MathLink", FontSlant->"Italic"], " \:3092\:901a\:3057\:3066\:5206\:6563\:3055\:308c\:307e\:3059\:ff0e" }], "Text", Evaluatable->False, AspectRatioFixed->True], Cell["\<\ The library is written completely in Mathematica and is, therefore, \ machine-independent, allowing its use in heterogeneous networks and without \ common file systems. All library and application code is distributed through \ MathLink.\ \>", "Text", Evaluatable->False, AspectRatioFixed->True], Cell["\[Copyright] 2001 MathConsult Dr. R. M\[ADoubleDot]der. All rights \ reserved.", "SmallText"], Cell[CellGroupData[{ Cell["\<\ \:306f\:3058\:3081\:306b Introduction\ \>", "Section"], Cell[CellGroupData[{ Cell["\<\ \:4e26\:5217\:8a08\:7b97\:ff08\:30b7\:30b9\:30c6\:30e0\:30d7\:30ed\ \:30b0\:30e9\:30de\:306e\:8996\:70b9\:ff09 Parallel computing ( a system programmer's view)\ \>", "Subsection"], Cell["\<\ \:30d7\:30ed\:30bb\:30b9\:306e\:958b\:59cb\:ff0c\:30d7\:30ed\:30bb\ \:30b9\:7d42\:4e86\:307e\:3067\:306e\:5f85\:6a5f starting processes, waiting for processes to finish.\ \>", "Bullet"], Cell["\<\ \:4f7f\:7528\:53ef\:80fd\:30d7\:30ed\:30bb\:30c3\:30b5\:306e\:30d7\ \:30ed\:30bb\:30b9\:306e\:30b9\:30b1\:30b8\:30e5\:30fc\:30ea\:30f3\:30b0 scheduling processes on available processors.\ \>", "Bullet"], Cell["\<\ \:30d7\:30ed\:30bb\:30b9\:9593\:306e\:30c7\:30fc\:30bf\:4ea4\:63db\ \:ff0c\:5171\:6709\:30ea\:30bd\:30fc\:30b9\:3078\:306e\:540c\:671f\:30a2\:30af\ \:30bb\:30b9 exchanging data between processes, synchronizing access to common resources\ \ \>", "Bullet"] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:3053\:306e\:30b3\:30f3\:30c6\:30ad\:30b9\:30c8\:3067\:306f In this context\ \>", "Subsection"], Cell[TextData[{ "\:300c\:30d7\:30ed\:30bb\:30c3\:30b5\:300d\:3068\:306f\:ff0c\:5b9f\:884c\ \:4e2d\:306e", StyleBox["Mathematica", FontSlant->"Italic"], " \:30ab\:30fc\:30cd\:30eb\:3067\:3059\:ff0e\na ", StyleBox["processor", FontSlant->"Italic"], " is a running ", StyleBox["Mathematica", FontSlant->"Italic"], " kernel." }], "Bullet"], Cell[TextData[{ "\:300c\:30b8\:30e7\:30d6\:300d\:3084\:300c\:30d7\:30ed\:30bb\:30b9\:300d\ \:3068\:306f\:ff0c\:8a55\:4fa1\:3055\:308c\:308b\:5f0f\:3067\:3059\:ff0e\na \ ", StyleBox["job", FontSlant->"Italic"], " or ", StyleBox["process", FontSlant->"Italic"], " is an expression to be evaluated." }], "Bullet"] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:4e26\:5217\:8a08\:7b97\:30c4\:30fc\:30eb\:30ad\:30c3\:30c8\:306e\ \:6a5f\:80fd Features of the Parallel Computing Toolkit\ \>", "Subsection"], Cell["\<\ \:5206\:6563\:30e1\:30e2\:30ea\:ff0c\:30de\:30b9\:30bf\:30fc\:30fb\ \:30b9\:30ec\:30fc\:30d6\:4e26\:5217\:6027 distributed memory, master/slave parallelism\ \>", "Bullet"], Cell[TextData[{ "\:30de\:30b7\:30f3\:975e\:4f9d\:5b58\:ff0c\:3059\:3079\:3066", StyleBox["Mathematica ", FontSlant->"Italic"], "\:3067\:8a18\:8ff0\n\ Unix\:ff0cLinux\:ff0cWindows\:ff0cMacintosh\:3067\:30c6\:30b9\:30c8\:6e08\ \:307f\nmachine independent, all written in ", StyleBox["Mathematica", FontSlant->"Italic"], " .\nTested on Unix/Linux/Windows/Macintosh" }], "Bullet"], Cell[TextData[{ "\:30ea\:30e2\:30fc\:30c8\:30ab\:30fc\:30cd\:30eb\:3068\:306e\:901a\:4fe1\ \:306b", StyleBox["MathLink", FontSlant->"Italic"], " \:3092\:4f7f\:7528", "\nuses ", StyleBox["MathLink", FontSlant->"Italic"], " to communicate with remote kernels" }], "Bullet"], Cell["\<\ \:6570\:5024\:3084\:914d\:5217\:4ee5\:5916\:306b\:3082\:ff0c\:8a18\ \:53f7\:5f0f\:3084\:30d7\:30ed\:30b0\:30e9\:30e0\:3092\:9001\:4fe1\:53ef\:80fd\ not only numbers and arrays. Can send symbolic expressions and \ programs.\ \>", "Bullet"], Cell["\<\ \:7570\:6a5f\:7a2e\:9593\:30cd\:30c3\:30c8\:30ef\:30fc\:30af\:ff0c\ \:30de\:30eb\:30c1\:30d7\:30ed\:30bb\:30c3\:30b5\:30de\:30b7\:30f3\:3084LAN\ \:ff0cWAN\:3067\:3082\:52d5\:4f5c works on heterogeneous networks, multi-processor machines, LAN and WAN\ \>", \ "Bullet"], Cell["\<\ \:4eee\:60f3\:30d7\:30ed\:30bb\:30b9\:306e\:30b9\:30b1\:30b8\:30e5\ \:30fc\:30ea\:30f3\:30b0\:3084\:ff0c\:4f7f\:7528\:53ef\:80fd\:306a\:30d7\:30ed\ \:30bb\:30c3\:30b5\:3078\:306e\:660e\:793a\:7684\:306a\:5206\:6563 scheduling of virtual processes, or explicit distribution to available \ processors\ \>", "Bullet"], Cell["\<\ \:4eee\:60f3\:5171\:6709\:30e1\:30e2\:30ea\:ff0c\:540c\:671f\:ff0c\ \:30ed\:30c3\:30ad\:30f3\:30b0 virtual shared memory, synchronization, locking\ \>", "Bullet"], Cell["\<\ \:30ec\:30a4\:30c6\:30f3\:30b7\:96a0\:853d latency hiding\ \>", "Bullet"], Cell["\<\ \:969c\:5bb3\:691c\:77e5\:30fb\:56de\:5fa9\:6a5f\:80fd\:ff0c\:505c\ \:6ede\:30d7\:30ed\:30bb\:30b9\:306f\:81ea\:52d5\:7684\:306b\:518d\:8a2d\:5b9a\ failure recovery, stranded processes are automatically reassigned\ \>", \ "Bullet"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[StyleBox["MathLink", FontSlant->"Italic"]], "Section"], Cell[CellGroupData[{ Cell["\<\ \:30ab\:30fc\:30cd\:30eb\:306e\:5236\:5fa1 Controlling Kernels\ \>", "Subsection"], Cell["\:3053\:3053\:3067\:306f\:521d\:671f\:8a2d\:5b9a\:3092\:8a55\:4fa1\:3057\ \:306a\:3044\:3067\:304f\:3060\:3055\:3044\:ff0e", "SmallText"], Cell["\<\ Don't evaluate initialization at this point\ \>", "SmallText"], Cell["\<\ \:5225\:306e\:30ed\:30fc\:30ab\:30eb\:30ab\:30fc\:30cd\:30eb\:3092\ \:8d77\:52d5\:3057\:3066\:304f\:3060\:3055\:3044\:ff08\:3053\:308c\:3092\:884c\ \:3046\:30b3\:30de\:30f3\:30c9\:306f\:ff0c\:30aa\:30da\:30ec\:30fc\:30c6\:30a3\ \:30f3\:30b0\:30b7\:30b9\:30c6\:30e0\:306b\:3088\:3063\:3066\:7570\:306a\:308b\ \:3053\:3068\:304c\:3042\:308a\:307e\:3059\:ff09\:ff0e\ \>", "Text"], Cell["\<\ Start another local kernel (the command to do so may depend on the \ operating system):\ \>", "Text"], Cell[BoxData[ \(local = LinkLaunch["\"]\)], "Input"], Cell["rsh\:304bssh\:3067\:30ea\:30e2\:30fc\:30c8\:30ab\:30fc\:30cd\:30eb\:3092\ \:8d77\:52d5\:3057\:3066\:304f\:3060\:3055\:3044\:ff0e", "Text"], Cell["Start a remote kernel with rsh or ssh:", "Text"], Cell["\<\ remote=LinkLaunch[\"ssh1 vger.wolfram.com /home/rd2/scripts/math30 \ -mathlink -noinit\"]\ \>", "Input"], Cell[TextData[{ StyleBox["math -mathlink -linkcreate\:3092\:9078\:629e\:3057\:305f\:5f8c\ \:ff0c\:7d50\:679c\:3068\:3057\:3066\:8868\:793a\:3055\:308c\:308b\:30dd\:30fc\ \:30c8\:306b", FontFamily->"Courier"], StyleBox["LinkConnect", FontFamily->"Courier", FontWeight->"Bold"], StyleBox["\:3067\:63a5\:7d9a\:3059\:308b\:3053\:3068\:3067\:ff0c\:30ea\:30e2\ \:30fc\:30c8\:30ab\:30fc\:30cd\:30eb\:3092\:624b\:52d5\:3067\:958b\:59cb\:3059\ \:308b\:3053\:3068\:3082\:3067\:304d\:307e\:3059\:ff0e", FontFamily->"Courier"] }], "Text"], Cell[TextData[{ "You can also start the remote kernel manually with ", StyleBox["math -mathlink -linkcreate", FontFamily->"Courier"], " and then connect to the resulting port using ", StyleBox["LinkConnect", "Input"], "." }], "Text"], Cell["\:521d\:671f\:884c\:756a\:53f7\:30d1\:30b1\:30c3\:30c8\:3092\:53d6\:308a\ \:51fa\:3057\:307e\:3059\:ff0e", "Text"], Cell["Swallowing initial line-number packet.", "Text"], Cell[BoxData[ \(LinkRead[local]\)], "Input"], Cell[BoxData[ \(LinkRead[remote]\)], "Input"], Cell["\:30d6\:30ed\:30c3\:30ad\:30f3\:30b0\:3092\:9632\:304e\:307e\:3059\:ff0e\ ", "Text"], Cell["Avoid blocking:", "Text"], Cell[BoxData[ \(LinkReadyQ[local]\)], "Input"], Cell["\:8a55\:4fa1\:3059\:308b\:5f0f\:3092\:9001\:4fe1\:3057\:307e\:3059\:ff0e\ ", "Text"], Cell["Sending expressions for evaluation:", "Text"], Cell[BoxData[ \(LinkWrite[local, Unevaluated[EvaluatePacket[1 + 2]]]\)], "Input"], Cell["\:7d50\:679c\:3092\:30dd\:30fc\:30ea\:30f3\:30b0\:3057\:307e\:3059\:ff0e\ ", "Text"], Cell["Polling for result", "Text"], Cell[BoxData[ \(If[LinkReadyQ[local], LinkRead[local], Null]\)], "Input"], Cell["\:4ed6\:306e\:30d1\:30b1\:30c3\:30c8\:3068\:5171\:306b\:51e6\:7406\:3057\ \:307e\:3059\:ff0e", "Text"], Cell["Dealing with other packets", "Text"], Cell[BoxData[ \(LinkWrite[remote, Unevaluated[EvaluatePacket[1/0]]]\)], "Input"], Cell[BoxData[ \(If[LinkReadyQ[remote], LinkRead[remote], Null]\)], "Input"], Cell["\:30bb\:30c3\:30b7\:30e7\:30f3\:3092\:7d42\:4e86\:3057\:307e\:3059\:ff0e\ ", "Text"], Cell["Ending session", "Text"], Cell[BoxData[ \(LinkClose /@ {local, remote}\)], "Input"] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:914d\:7f6e\:30eb\:30fc\:30c1\:30f3 Lining up Workers\ \>", "Subsection"], Cell[TextData[{ StyleBox["MathLink", FontSlant->"Italic"], " \:3068\:306e\:63a5\:7d9a\:306e\:958b\:59cb\:30fb\:7d42\:4e86\:306e\:9ad8\ \:30ec\:30d9\:30eb\:30eb\:30fc\:30c1\:30f3\:ff08OS\:306b\:4f9d\:5b58\:ff09\ \:3067\:3059\:ff0e" }], "Text"], Cell[TextData[{ "Higher-level routines for starting/closing ", StyleBox["MathLink", FontSlant->"Italic"], " connections (OS dependent)." }], "Text"], Cell[TextData[{ "LaunchSlave[\"", StyleBox["host", FontSlant->"Italic"], "\", \"", StyleBox["cmdTemplate", FontSlant->"Italic"], "\", ", StyleBox["options", FontSlant->"Italic"], "\[Ellipsis]]" }], "Input", Evaluatable->False], Cell[TextData[{ "ConnectSlave[\"", StyleBox["port@host", FontSlant->"Italic"], "\", ", StyleBox["options", FontSlant->"Italic"], "\[Ellipsis]]" }], "Input", Evaluatable->False], Cell[TextData[{ StyleBox["cmdTemplate", "Input", FontFamily->"Courier New", FontSlant->"Italic"], StyleBox[" ", "Input", FontFamily->"Times New Roman", FontSlant->"Italic"], StyleBox["\:306fStringForm\:3067\:7528\:3044\:3089\:308c\:308b\:6587\:5b57\ \:5217\:3067\:ff0c", "Input", FontFamily->"Times New Roman", FontWeight->"Plain", FontVariations->{"CompatibilityType"->0}], StyleBox["`1`", "Input", FontFamily->"Courier New", FontVariations->{"CompatibilityType"->0}], StyleBox["\:304c\:30db\:30b9\:30c8\:540d\:3067\:7f6e\:304d\:63db\:3048\:3089\ \:308c\:307e\:3059\:ff0e2\:756a\:76ee\:306e\:5f62\:5f0f\:306f\:5f85\:6a5f\ \:4e2d\:306e\:30ab\:30fc\:30cd\:30eb\:306b\:63a5\:7d9a\:3057\:307e\:3059\:ff0e\ \:3053\:306e\:5f62\:5f0f\:306f\:ff0c\:30bb\:30ad\:30e5\:30ea\:30c6\:30a3\:306e\ \:305f\:3081\:306b\:76f4\:63a5\:30ea\:30e2\:30fc\:30c8\:30b3\:30de\:30f3\:30c9\ \:3092\:5b9f\:884c\:3059\:308b\:3053\:3068\:304c\:3067\:304d\:306a\:3044\:3068\ \:304d\:306b\:7528\:3044\:308b\:3053\:3068\:304c\:3067\:304d\:307e\:3059\:ff0e\ ", "Input", FontFamily->"Times New Roman", FontWeight->"Plain", FontVariations->{"CompatibilityType"->0}] }], "Text"], Cell[TextData[{ StyleBox["cmdTemplate", "Input", FontSlant->"Italic"], " is a string used in StringForm, ", StyleBox["`1`", "Input"], " will be replaced by the hostname. The second form connects to a waiting \ kernel; this form can be used if security prevents you from executing a \ remote command directly." }], "Text"], Cell["\:30ed\:30fc\:30ab\:30eb\:30ab\:30fc\:30cd\:30eb\:3092\:8d77\:52d5\:3057\ \:307e\:3059\:ff0e", "Text"], Cell["Start local kernel:", "Text"], Cell["LaunchSlave[\"localhost\", \"math -mathlink\"]", "Input", Evaluatable->False], Cell["\:4f7f\:7528\:53ef\:80fd\:306a\:30ea\:30e2\:30fc\:30c8\:30ab\:30fc\:30cd\ \:30eb\:306e\:30ea\:30b9\:30c8\:3067\:3059\:ff0e", "Text"], Cell["List of all available remote kernels", "Text"], Cell[BoxData[ StyleBox["$Slaves", "Input"]], "Input"] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:5f0f\:306e\:9001\:53d7\:4fe1 Sending and Receiving Expressions\ \>", "Subsection"], Cell["\:57fa\:672c\:7684\:306a\:30ea\:30e2\:30fc\:30c8\:8a55\:4fa1\:ff08\:30d6\ \:30ed\:30c3\:30ad\:30f3\:30b0\:ff09\:3067\:3059\:ff0e", "Text"], Cell["Basic remote evaluation (blocking):", "Text"], Cell["SetAttributes[RemoteEvaluate, HoldRest]", "Input", Evaluatable->False, FormatType->StandardForm], Cell[TextData[{ StyleBox["RemoteEvaluate[expr_, link_LinkObject]:=", FontColor->RGBColor[0, 0, 1]], "\n Module[{},\n ", StyleBox["Send[link, expr];\n Receive[link]", FontColor->RGBColor[0, 0, 1]], "\n ]" }], "Input"], Cell[TextData[{ StyleBox["RemoteEvaluate[", "Input", FontFamily->"Courier New", FontVariations->{"CompatibilityType"->0}], StyleBox["cmd", "Input", FontFamily->"Courier New", FontSlant->"Italic", FontVariations->{"CompatibilityType"->0}], StyleBox["]", "Input", FontFamily->"Courier New", FontVariations->{"CompatibilityType"->0}], StyleBox["\:306f\:3053\:308c\:3092\:3059\:3079\:3066\:306e\:30ab\:30fc\:30cd\ \:30eb\:306b\:9001\:308a\:ff0c\:3059\:3079\:3066\:306e\:7d50\:679c\:3092\:4e0e\ \:3048\:307e\:3059\:ff0e", "Input", FontFamily->"Times New Roman", FontWeight->"Plain", FontVariations->{"CompatibilityType"->0}] }], "Text"], Cell[TextData[{ StyleBox["RemoteEvaluate[", "Input"], StyleBox["cmd", "Input", FontSlant->"Italic"], StyleBox["]", "Input"], " sends it to all kernels, gives list of all results." }], "Text"], Cell[TextData[ButtonBox["\:3053\:3053\:3067\:30ab\:30fc\:30cd\:30eb\:3092\ \:3044\:304f\:3064\:304b\:8d77\:52d5\:3057\:3066\:307f\:307e\:3059\:ff0e", ButtonData:>{"SshInit.nb", None}, ButtonStyle->"Hyperlink"]], "Text"], Cell[TextData[{ ButtonBox["Start a few kernels now", ButtonData:>{"SshInit.nb", None}, ButtonStyle->"Hyperlink"], "..." }], "Text"], Cell[BoxData[ RowBox[{"TableForm", "[", RowBox[{ RowBox[{ StyleBox["RemoteEvaluate", FontColor->RGBColor[0, 0, 1]], "[", StyleBox[\({$MachineName, $SystemID, $ProcessID, $Version}\), FontColor->RGBColor[1, 0, 1]], "]"}], ",", \(TableHeadings -> { Automatic, {"\", "\", "\", "\"}}\)}], "]"}]], "Input"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:30d7\:30ed\:30bb\:30b9\:306e\:30ad\:30e5\:30fc\:ff08\:5f85\:3061\ \:884c\:5217\:ff09\:3068\:4e26\:884c\:6027 Process Queues and Concurrency\ \>", "Section"], Cell["\<\ \:30b8\:30e7\:30d6\:3092\:30ad\:30e5\:30fc\:306b\:8ffd\:52a0\:ff0c\ \:ff08\:3044\:304f\:3064\:304b\:304c\:ff09\:7d42\:4e86\:3059\:308b\:307e\:3067\ \:306e\:5f85\:6a5f\:ff0c\:7d50\:679c\:306e\:53d6\:5f97\ \>", "Text"], Cell["Queue jobs, wait for (some of) them to finish, get results.", "Text"], Cell[CellGroupData[{ Cell["\<\ \:30b8\:30e7\:30d6\:ff08\:30d7\:30ed\:30bb\:30b9\:ff09\:306e\:958b\ \:59cb\:3068\:7d50\:679c\:5f85\:3061 Starting Jobs (Processes), Waiting for Results\ \>", "Subsection"], Cell[TextData[{ "Queue[", StyleBox["cmd", FontSlant->"Italic"], "]" }], "Input", Evaluatable->False], Cell["\<\ \:4e0e\:3048\:3089\:308c\:305f\:5f0f\:3092\:30ad\:30e5\:30fc\:306b\ \:5165\:308c\:ff0c\:30d7\:30ed\:30bb\:30b9ID(cookie)\:3092\:8fd4\:3057\:307e\ \:3059\:ff0e\ \>", "Text"], Cell["\<\ Enters the given expression into queue, returns a process id \ (cookie).\ \>", "Text"], Cell[TextData[{ "WaitOne[", StyleBox["pid_list", FontSlant->"Italic"], "]" }], "Input", Evaluatable->False], Cell[TextData[{ "\:4e0e\:3048\:3089\:308c\:305f\:30d7\:30ed\:30bb\:30b9\:306e1\:3064\:306e\ \:7d42\:4e86\:3092\:5f85\:3061\:ff0c ", StyleBox["{", "Input"], StyleBox["result", "Input", FontSlant->"Italic"], StyleBox[",", "Input"], StyleBox["pid", "Input", FontSlant->"Italic"], StyleBox[",", "Input"], StyleBox["remaining_ids", "Input", FontSlant->"Italic"], StyleBox["}", "Input"], "\:3092\:8fd4\:3057\:307e\:3059\:ff0e" }], "Text"], Cell[TextData[{ "Waits for one of the given processes to finish and returns ", StyleBox["{", "Input"], StyleBox["result", "Input", FontSlant->"Italic"], StyleBox[",", "Input"], StyleBox["pid", "Input", FontSlant->"Italic"], StyleBox[",", "Input"], StyleBox["remaining_ids", "Input", FontSlant->"Italic"], StyleBox["}", "Input"], "." }], "Text"], Cell[TextData[{ "Wait[", StyleBox["pid_list", FontSlant->"Italic"], "], Wait[", StyleBox["pid", FontSlant->"Italic"], "]" }], "Input", Evaluatable->False], Cell["\<\ \:3059\:3079\:3066\:ff0c\:3042\:308b\:3044\:306f1\:3064\:306e\:30d7\ \:30ed\:30bb\:30b9\:3092\:5f85\:3061\:ff0c\:305d\:308c\:305e\:308c\:305d\:306e\ \:7d50\:679c\:ff08\:306e\:30ea\:30b9\:30c8\:ff09\:3092\:8fd4\:3057\:307e\:3059\ \:ff0e\ \>", "Text"], Cell["\<\ Wait for all processes or a single process, return list of results \ and single result, respectively.\ \>", "Text"], Cell["\<\ \:9023\:60f3\:914d\:5217\:306f\:ff0c\:69d8\:3005\:306a\:72b6\:614b\ \:306b\:304a\:3051\:308b\:3059\:3079\:3066\:306e\:30d7\:30ed\:30bb\:30b9\:306e\ \:72b6\:614b\:3092\:76e3\:8996\:3057\:307e\:3059\:ff0e\:307e\:305a\:ff0c\:30d7\ \:30ed\:30bb\:30b9\:304c\:30ad\:30e5\:30fc\:306b\:5165\:308a\:ff0c\:305d\:308c\ \:304b\:3089\:7279\:5b9a\:306e\:30ea\:30f3\:30af\:3067\:5b9f\:884c\:3055\:308c\ \:307e\:3059\:ff0e\:3055\:3089\:306b\:ff0c\:7d42\:4e86\:3057\:ff0c\:7d50\:679c\ \:306e\:56de\:53ce\:3092\:5f85\:3061\:307e\:3059\:ff0e\ \>", "Text"], Cell["\<\ Anassociative array keeps track of the state of all processes in \ the various states; first, a process is queued, then it is running on a \ certain link, then it is finished and waits for collection of result.\ \>", \ "Text"], Cell[TextData[{ "queued, ", StyleBox["link", FontSlant->"Italic"], ", finished[", StyleBox["result", FontSlant->"Italic"], "]" }], "Input", Evaluatable->False, FormatType->StandardForm], Cell["\:30b8\:30e7\:30d6\:3092\:30ad\:30e5\:30fc\:306b\:5165\:308c\:307e\:3059\ \:ff0e", "Text"], Cell["Enter a job into queue", "Text"], Cell["SetAttributes[Queue, HoldAll]", "Input", Evaluatable->False, FormatType->StandardForm], Cell[TextData[{ StyleBox["Queue[cmd_] :=", FontColor->RGBColor[0, 0, 1]], "\n ", StyleBox["Module[{pid},", FontColor->RGBColor[0, 0, 1]], "\n AbortProtect[\n ", StyleBox["AppendTo[$Queue, ", FontColor->RGBColor[0, 0, 1]], StyleBox["Hold[cmd, pid]", FontColor->RGBColor[1, 0, 0]], StyleBox["];\n qstate[pid] = queued ];", FontColor->RGBColor[0, 0, 1]], "\n trace[1, pid, \" queued (\", Length[$Queue], \")\"];\n ", StyleBox["QueueRun[]", FontColor->RGBColor[1, 0, 0]], "\n ", StyleBox["pid\n ]", FontColor->RGBColor[0, 0, 1]] }], "Input", Evaluatable->False, FormatType->StandardForm] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:30ad\:30e5\:30fc\:306e\:7ba1\:7406\:3068\:30b8\:30e7\:30d6\:306e\ \:30c7\:30a3\:30b9\:30d1\:30c3\:30c1 Managing the Queue, Dispatching Jobs\ \>", "Subsection"], Cell["\<\ \:30ea\:30f3\:30af\:304c\:4f7f\:7528\:53ef\:80fd\:306b\:306a\:308b\ \:3068\:ff0c\:30ad\:30e5\:30fc\:306e\:30d7\:30ed\:30bb\:30b9\:3092\:958b\:59cb\ \:3057\:307e\:3059\:ff0e \:7d50\:679c\:304c\:5f85\:6a5f\:3057\:3066\:3044\:308b\:3068\:ff0c\:305d\:308c\ \:3092\:4fdd\:7ba1\:3057\:ff0c\:4f7f\:7528\:4e2d\:3067\:306a\:3044\:30ea\:30f3\ \:30af\:306e\:30d7\:30fc\:30eb\:3078\:30ea\:30f3\:30af\:3092\:623b\:3057\:307e\ \:3059\:ff0e\ \>", "Text"], Cell["\<\ When link becomes available, start a queued process. When result is waiting, store it and put link back on pool of idle \ links.\ \>", "Text"] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:4f8b Examples\ \>", "Subsection"], Cell["\<\ \:30ea\:30e2\:30fc\:30c8\:30db\:30b9\:30c8\:304c\:4f7f\:7528\:4e0d\ \:80fd\:3067\:3042\:308c\:3070\:ff0c\:30ed\:30fc\:30ab\:30eb\:30db\:30b9\:30c8\ \:306b2\:3064\:306e\:30b9\:30ec\:30fc\:30d6\:3092\:4f5c\:308a\:307e\:3059\ \:ff0e\ \>", "Text"], Cell["\<\ Create two slaves on local host if remote ones are not available.\ \ \>", "Text"], Cell[BoxData[ \(slaves = Table[LaunchSlave["\", "\"], {2}]\)], \ "Input"], Cell["\:30b8\:30e7\:30d6\:3092\:30ad\:30e5\:30fc\:306b\:5165\:308c\:ff0c\:7d42\ \:4e86\:3092\:5f85\:3061\:307e\:3059\:ff0e", "Text"], Cell["Queue a job and wait for it to finish.", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(j1 = Queue[Unevaluated[1 + 1]]\)], "Input"], Cell[BoxData[ \(pid$67\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(Wait[j1]\)], "Input"], Cell[BoxData[ \(2\)], "Output"] }, Open ]], Cell["\:3044\:304f\:3064\:304b\:306e\:30b8\:30e7\:30d6\:3092\:30ad\:30e5\:30fc\ \:306b\:5165\:308c\:307e\:3059\:ff0e", "Text"], Cell["Queue several jobs", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(Queue/@Hold[1 + 1, 2 + 2, 3 + 3]\)], "Input"], Cell[BoxData[ \(Hold[Queue[1 + 1], Queue[2 + 2], Queue[3 + 3]]\)], "Output"] }, Open ]], Cell["\:3053\:308c\:3089\:3092\:89e3\:653e\:3057\:307e\:3059\:ff0e", "Text"], Cell["Let them loose.", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(pids = List@@%\)], "Input"], Cell[BoxData[ \({pid$73, pid$77, pid$82}\)], "Output"] }, Open ]], Cell["\<\ \:975e\:6c7a\:5b9a\:7684\:306a\:30b8\:30e7\:30d6\:5f85\:3061\:3068\ \:ff0c\:30ad\:30e5\:30fc\:3092\:5f90\:3005\:306b\:7a7a\:306b\:3059\:308b\:305f\ \:3081\:306e\:623b\:308a\:5024\:306e\:4fbf\:5229\:306a\:4f7f\:7528\:6cd5\:3067\ \:3059\:ff0e\ \>", "Text"], Cell["\<\ Nondeterministic waiting for a job and a convenient use of the \ return value to drain queue:\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \({res, pid, pids} = WaitOne[pids]\)], "Input"], Cell[BoxData[ \({4, pid$77, {pid$82}}\)], "Output"] }, Open ]], Cell["\:30af\:30ea\:30fc\:30f3\:30a2\:30c3\:30d7\:3057\:307e\:3059\:ff0e", \ "Text"], Cell["Cleanup:", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(Wait[pids]\)], "Input"], Cell[BoxData[ \({6}\)], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:30ec\:30a4\:30c6\:30f3\:30b7\:96a0\:853d Latency Hiding\ \>", "Subsection"], Cell["\<\ \:30ec\:30a4\:30c6\:30f3\:30b7\:ff1a\:901a\:4fe1\:306e\:30aa\:30fc\ \:30d0\:30fc\:30d8\:30c3\:30c9\:ff0c\:8981\:6c42\:306e\:51e6\:7406\:306e\:7d42\ \:4e86\:70b9\:3068\:65b0\:3057\:3044\:8981\:6c42\:306e\:958b\:59cb\:70b9\:306e\ \:9593\:306e\:5f85\:3061\:6642\:9593\:ff0e\ \>", "Text"], Cell["\<\ Latency: communication overhead, the wait between end of servicing \ a request and start of servicing new one.\ \>", "Text"], Cell[TextData[{ StyleBox["MathLink ", FontSlant->"Italic"], "\:306f\:30d0\:30c3\:30d5\:30a1\:4ed8\:304d\:306e\:30b9\:30c8\:30ea\:30fc\ \:30e0\:3067\:3059\:ff0e\:3053\:308c\:306f\:3059\:3079\:3066\:306e\:672a\:51e6\ \:7406\:306e\:7d50\:679c\:3092\:53d7\:3051\:53d6\:308b\:524d\:306b\:ff0c\:8ffd\ \:52a0\:306e\:8981\:6c42\:3092\:9001\:308b\:3053\:3068\:304c\:3067\:304d\:307e\ \:3059\:ff0e\:5e38\:306b\:30d0\:30c3\:30d5\:30a1\:3092\:5b8c\:5168\:306b\:6e80\ \:305f\:3057\:3066\:304a\:304d\:307e\:3059\:ff0e\:305d\:306e\:305f\:3081\:9045\ \:5ef6\:304c\:3042\:308a\:307e\:305b\:3093\:ff0e" }], "Text"], Cell[TextData[{ StyleBox["MathLink", FontSlant->"Italic"], " is a buffered stream. Can send additional requests before receiving all \ outstanding results.\nKeep buffers full at all times: no latency." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:660e\:793a\:7684\:306a\:30b9\:30b1\:30b8\:30e5\:30fc\:30ea\:30f3\ \:30b0 Explicit Scheduling\ \>", "Subsection"], Cell["1\:3064\:306e\:30d7\:30ed\:30bb\:30c3\:30b5\:306b\:3064\:304d\:ff0c1\ \:3064\:306e\:30b8\:30e7\:30d6\:3092\:4e0e\:3048\:307e\:3059\:ff0e", "Text"], Cell["One job per processor...", "Text"], Cell[BoxData[ \(RemoteEvaluate[driver[]]\)], "Input"], Cell["\:5404\:30d7\:30ed\:30bb\:30c3\:30b5\:306b\:30d7\:30ed\:30bb\:30c3\:30b5\ \:756a\:53f7\:3092\:4e0e\:3048\:307e\:3059\:ff0e", "Text"], Cell["Tell them their processor #.", "Text"], Cell[BoxData[ \(ParallelMap[Queue[driver[#]]&, Range[Length[$Slaves]]]\)], "Input"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:4e26\:5217\:8a55\:4fa1 Parallel Evaluation\ \>", "Section"], Cell[CellGroupData[{ Cell["\<\ \:5f0f\:306e\:8981\:7d20\:306e\:4e26\:5217\:8a55\:4fa1 Evaluating Elements of an Expression in Parallel\ \>", "Subsection"], Cell[BoxData[ \(ParallelEvaluate[h[e\_1, e\_2, \[Ellipsis], e\_n]]\)], "Input", Evaluatable->False, SingleLetterItalics->True], Cell[TextData[{ Cell[BoxData[ \(TraditionalForm\`e\_i\)]], "\:3092\:4f7f\:7528\:53ef\:80fd\:306a\:30ea\:30f3\:30af\:306b\:9001\:308a\ \:ff0c\:7d50\:679c\:3092\:56de\:53ce\:3057\:307e\:3059\:ff0e" }], "Text"], Cell[TextData[{ "Sends the ", Cell[BoxData[ \(TraditionalForm\`e\_i\)]], " to available links, then collects results." }], "Text"], Cell["\:524d\:306e\:4f8b\:306e\:57fa\:672c\:7684\:306a\:8003\:3048\:65b9\:3092\ \:767a\:5c55\:3055\:305b\:307e\:3057\:305f\:ff0e", "Text"], Cell["We developed the basic idea in a previous example.", "Text"], Cell["SetAttributes[ParallelEvaluate, HoldAll]", "Input", Evaluatable->False], Cell[TextData[{ StyleBox["ParallelEvaluate[", FontColor->RGBColor[0, 0, 1]], StyleBox["h", FontColor->RGBColor[1, 0, 0]], StyleBox["_[exprs___]] :=\n ", FontColor->RGBColor[0, 0, 1]], StyleBox["h", FontColor->RGBColor[1, 0, 0]], StyleBox[" @@ Wait[ ", FontColor->RGBColor[0, 0, 1]], StyleBox["List ", FontColor->RGBColor[1, 0, 0]], StyleBox["@@ Queue /@ ", FontColor->RGBColor[0, 0, 1]], StyleBox["Hold", FontColor->RGBColor[1, 0, 0]], StyleBox["[exprs] ]", FontColor->RGBColor[0, 0, 1]] }], "Input", Evaluatable->False] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:4e26\:5217\:30de\:30c3\:30d4\:30f3\:30b0 Parallel Mapping\ \>", "Subsection"], Cell[BoxData[ \(ParallelMap[f, h[e\_1, e\_2, \[Ellipsis], e\_n]]\)], "Input", Evaluatable->False, SingleLetterItalics->True], Cell[TextData[{ " ", Cell[BoxData[ \(Map[f, h[e\_1, e\_2, \[Ellipsis], e\_n]]\)], "Input", SingleLetterItalics->True], "\:3092\:4e26\:5217\:3067\:8a55\:4fa1\:3057\:307e\:3059\:ff0e" }], "Text"], Cell[TextData[{ "Evaluates ", Cell[BoxData[ \(Map[f, h[e\_1, e\_2, \[Ellipsis], e\_n]]\)], "Input", SingleLetterItalics->True], " in parallel." }], "Text"], Cell[TextData[{ "\:3053\:308c\:3092", StyleBox["ParallelEvaluate", FontFamily->"Courier New", FontWeight->"Bold"], "\:306b\:5909\:3048\:308b\:3053\:3068\:3082\:3067\:304d\:307e\:3059\:304c\ \:ff0c\:76f4\:63a5\:8868\:73fe\:3059\:308b\:306e\:306f\:975e\:5e38\:306b\:7c21\ \:5358\:3067\:3059\:ff0e" }], "Text"], Cell[TextData[{ "We could reduce it to ", StyleBox["ParallelEvaluate", "Input"], ", but it's so simple to express directly:" }], "Text"], Cell[TextData[{ StyleBox["ParallelMap[f_, h_[exprs___]] :=\n h @@ Wait[ \ Composition[Queue,", FontColor->RGBColor[0, 0, 1]], StyleBox["f", FontColor->RGBColor[1, 0, 0]], StyleBox["] /@ {exprs} ]", FontColor->RGBColor[0, 0, 1]] }], "Input", Evaluatable->False] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:4e26\:5217\:8868 Parallel Tables\ \>", "Subsection"], Cell["\<\ \:53cd\:5fa9\:5b50\:5909\:6570\:306e\:52d5\:7684\:6709\:52b9\:7bc4\ \:56f2\:3092\:7dad\:6301\:3057\:3066\:ff0c\:6700\:3082\:5916\:5074\:306e\:6b21\ \:5143\:3092\:4e26\:5217\:5316\:3057\:307e\:3059\:ff0e\ \>", "Text"], Cell["\<\ Parallelizing the outermost dimension, preserving dynamic scoping \ of the iterator variable\ \>", "Text"], Cell[TextData[{ StyleBox["ParallelTable[e_, {i_Symbol, range__}, rest___List] :=\n \ ParallelMap[ ", FontColor->RGBColor[0, 0, 1]], StyleBox["Block", FontColor->RGBColor[1, 0, 0]], StyleBox["[{i=#}, ", FontColor->RGBColor[0, 0, 1]], StyleBox["Table", FontColor->RGBColor[1, 0, 0]], StyleBox["[e, rest]]&, ", FontColor->RGBColor[0, 0, 1]], StyleBox["Range", FontColor->RGBColor[1, 0, 0]], StyleBox["[range] ]", FontColor->RGBColor[0, 0, 1]] }], "Input", Evaluatable->False] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:4f8b\:3068\:30c8\:30ec\:30fc\:30b9 Example and Traces\ \>", "Subsection"], Cell[CellGroupData[{ Cell[BoxData[ \(ParallelMap[Function[i, i\^2], {1, 2, 3, 4}]\)], "Input"], Cell[BoxData[ \({1, 4, 9, 16}\)], "Output"] }, Open ]], Cell[BoxData[ \(\($TraceLevel = 1; \)\)], "Input"], Cell[BoxData[ \(\($TraceLevel = 0; \)\)], "Input"] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:30ea\:30e2\:30fc\:30c8\:30ab\:30fc\:30cd\:30eb\:306e\:521d\:671f\ \:5316 Initializing Remote Kernels\ \>", "Subsection"], Cell["\:30b0\:30ed\:30fc\:30d0\:30eb\:95a2\:6570\:3068\:5909\:6570\:306e\:5b9a\ \:7fa9\:3092\:30b9\:30ec\:30fc\:30d6\:306b\:79fb\:52d5\:3057\:307e\:3059\:ff0e\ ", "Text"], Cell["\<\ Move definitions of global functions and variables to the slaves:\ \ \>", "Text"], Cell["\<\ \:5b9a\:7fa9\:3092\:56de\:53ce\:3057\:ff08downvalues\:7b49\:ff09\ \:ff0c\:305d\:308c\:3092\:4fdd\:7559\:306e\:30d7\:30ed\:30b0\:30e9\:30e0\:306b\ \:5909\:3048\:307e\:3059\:ff0e Collect definitions (downvalues, etc.) and turn them into held programs\ \>", \ "Bullet"], Cell["\<\ \:305d\:308c\:3092\:8a55\:4fa1\:3059\:308b\:305f\:3081\:306b\:3059\ \:3079\:3066\:306e\:30b9\:30ec\:30fc\:30d6\:306b\:9001\:308a\:307e\:3059\:ff0e\ send them to all slaves for evaluation\ \>", "Bullet"], Cell[BoxData[ \(ExportEnvironment[{f\_1, f\_2, \[Ellipsis], f\_n}]\)], "Input", Evaluatable->False, SingleLetterItalics->True], Cell[TextData[{ "ExportEnvironment[\"", StyleBox["context", FontSlant->"Italic"], "`\"]" }], "Input", Evaluatable->False, SingleLetterItalics->True], Cell[TextData[{ StyleBox["Mathematica ", FontSlant->"Italic"], "\:30b3\:30fc\:30c9\:306f\:30dd\:30fc\:30bf\:30d6\:30eb\:3067\:3059\:ff0e\ \:30b9\:30ec\:30fc\:30d6\:306b\:30de\:30b7\:30f3\:56fa\:6709\:30b3\:30fc\:30c9\ \:3092\:3082\:3064\:5fc5\:8981\:304c\:3042\:308a\:307e\:305b\:3093\:ff0e\n\ \:30b3\:30fc\:30c9\:3092\:8ee2\:9001\:3059\:308b\:306e\:306b\:ff0c\:65e2\:5b58\ \:306e", StyleBox["MathLink", FontSlant->"Italic"], " \:63a5\:7d9a\:3092\:4f7f\:3044\:307e\:3059\:ff0e\:5206\:6563\:306e\:554f\ \:984c\:3084\:5171\:901aFS\:306e\:5fc5\:8981\:306f\:3042\:308a\:307e\:305b\ \:3093\:ff0e\:30c4\:30fc\:30eb\:30ad\:30c3\:30c8\:81ea\:4f53\:306e\:30af\:30e9\ \:30a4\:30a2\:30f3\:30c8\:30b3\:30fc\:30c9\:3082\:ff0c\:3053\:306e\:30ea\:30f3\ \:30af\:3092\:4ecb\:3057\:3066\:8ee2\:9001\:3055\:308c\:307e\:3059\:ff0e" }], "Text"], Cell[TextData[{ StyleBox["Mathematica", FontSlant->"Italic"], " code is portable: no need to have machine-specific code on slaves!\nUse \ existing ", StyleBox["MathLink", FontSlant->"Italic"], " connection to transport code: no distribution problems, no common FS \ needed. Even the client code for the toolkit itself is transported over this \ link." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:4f8b\:ff1a\:884c\:5217\:306e\:56fa\:6709\:5024 Example: Eigenvalues of Matrices\ \>", "Subsection"], Cell[CellGroupData[{ Cell["\<\ \:30d1\:30e9\:30e1\:30fc\:30bf\:30682\:3064\:306e\:95a2\:6570 A parameter and two functions.\ \>", "Subsubsection"], Cell[BoxData[ \(\(prec = 18; \)\)], "Input"], Cell[BoxData[ \(mat[n_] := Table[Random[Real, {\(-1\), 1}, prec], {n}, {n}]\)], "Input"], Cell[BoxData[ \(tf[n_] := \(Timing[Eigenvalues[mat[n]]]\)[\([1]\)]\)], "Input"] }, Open ]], Cell[CellGroupData[{ Cell["\<\ \:3059\:3079\:3066\:306e\:30b9\:30ec\:30fc\:30d6\:306b\:77e5\:3089\ \:305b\:308b Make them known to all slaves.\ \>", "Subsubsection"], Cell[BoxData[ \(\(ExportEnvironment[{prec, tf, mat}]; \)\)], "Input"], Cell["\:78ba\:8a8d\:3057\:307e\:3059\:ff0e", "Text"], Cell["Check:", "Text"], Cell[BoxData[ \(\(Clear[prec];\)\)], "Input"], Cell[CellGroupData[{ Cell[BoxData[ \(RemoteEvaluate[prec]\)], "Input"], Cell[BoxData[ \({18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18}\)], "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["\<\ \:8a66\:884c A sample run\ \>", "Subsubsection"], Cell[CellGroupData[{ Cell[BoxData[ \(ParallelMap[tf, {5, 10, 15, 20, 25}]\)], "Input"], Cell[BoxData[ \({0.160000000000000035`\ Second, 0.65`\ Second, 1.54000000000000003`\ Second, 2.47999999999999998`\ Second, 6.78000000000000024`\ Second}\)], "Output"] }, Open ]] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:4f8b\:ff1a\:7121\:9650\:5927\:306e\:8a08\:7b97 Example: an Infinite Calculation\ \>", "Subsection", CellTags->"PolyFactoring"], Cell["\:3053\:308c\:3089\:306e\:591a\:9805\:5f0f\:306f\:7d04\:5206\:3067\:304d\ \:306a\:3044\:3068\:601d\:308f\:308c\:307e\:3059\:ff0e", "Text"], Cell["These polynomials are conjectured to be irreducible.", "Text"], Cell[BoxData[ \(poly[n_, x_] := \[Sum]\+\(i = 1\)\%\(n + 1\)i\ x\^\(i - 1\)\)], "Input"], Cell[BoxData[ \(\(ExportEnvironment[{poly}];\)\)], "Input"], Cell[BoxData[ \(\($LoadFactor = 2; \)\)], "Input"], Cell["\<\ \:660e\:793a\:7684\:306b\:30b9\:30b1\:30b8\:30e5\:30fc\:30ea\:30f3\ \:30b0\:3057\:307e\:3059\:ff0e\:3059\:3079\:3066\:306e\:30d7\:30ed\:30bb\:30c3\ \:30b5\:304c\:4f7f\:7528\:4e2d\:306b\:306a\:308b\:3088\:3046\:306b\:3057\:307e\ \:3059\:ff0e\:3057\:304b\:3057\:ff0c\:9577\:3044\:5165\:529b\:30ad\:30e5\:30fc\ \:306f\:907f\:3051\:307e\:3059\:ff0e\ \>", "Text"], Cell["\<\ Explicit scheduling; try to keep all processors busy, but avoid \ long input queues.\ \>", "Text"], Cell[BoxData[ RowBox[{\(d = 150\), ";", " ", \(ids = {}\), ";", "\[IndentingNewLine]", RowBox[{"While", "[", RowBox[{"True", ",", "\[IndentingNewLine]", RowBox[{ StyleBox[\(While[$QueueLength \[Equal] 0, \[IndentingNewLine]\t With[{d = d}, AppendTo[ids, Queue[{d, Length[ FactorList[ poly[d, x]]]}]]\[IndentingNewLine]]; \ \[IndentingNewLine]\(d++\)\[IndentingNewLine]]\), FontColor->RGBColor[0, 0, 1]], StyleBox[";", FontColor->RGBColor[0, 0, 1]], "\[IndentingNewLine]", StyleBox[\(If[ Length[ids] > 0, \[IndentingNewLine]{res, id, ids} = WaitOne[ids]; \[IndentingNewLine]Print[ res]\[IndentingNewLine]]\), FontColor->RGBColor[1, 0, 0]], StyleBox[";", FontColor->RGBColor[1, 0, 0]]}]}], "\n", "\t", "]"}]}]], "Input"], Cell["\:5272\:8fbc\:307f\:306e\:5f8c\:306f\:30aa\:30fc\:30d5\:30a1\:30f3\:3092\ \:56de\:53ce\:3057\:307e\:3059\:ff0e", "Text"], Cell["Collect orphans after an interrupt:", "Text"], Cell[BoxData[ \(Wait[ids]\)], "Input"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:4eee\:60f3\:5171\:6709\:30e1\:30e2\:30ea Virtual Shared Memory\ \>", "Section"], Cell["\:30d7\:30ed\:30bb\:30b9\:306f\:4e92\:3044\:306b\:3069\:306e\:3088\:3046\ \:306b\:901a\:4fe1\:3059\:308b\:306e\:3067\:3057\:3087\:3046\:304b\:ff0e", \ "Text"], Cell["How can processes communicate with each other?", "Text"], Cell["\<\ \:30e1\:30c3\:30bb\:30fc\:30b8\:306e\:53d7\:6e21\:3057 Message Passing\ \>", "Bullet"], Cell["\<\ \:5171\:6709\:30e1\:30e2\:30ea Shared Memory\ \>", "Bullet"], Cell["\:4eee\:60f3\:5171\:6709\:30e1\:30e2\:30ea\:ff1a\:5206\:6563\:30e1\:30e2\ \:30ea\:30de\:30b7\:30f3\:306b\:64ec\:4f3c\:7684\:306b\:4f5c\:6210\:ff0e", \ "Text"], Cell["\<\ Virtual Shared Memory: faking it on distributed memory \ machines.\ \>", "Text"], Cell["\<\ \:30d7\:30ed\:30bb\:30b9\:304c\:30b0\:30ed\:30fc\:30d0\:30eb\:ff08\ \:5171\:6709\:ff09\:5909\:6570\:306e\:5024\:3092\:5fc5\:8981\:3068\:3057\:305f\ \:308a\:ff0c\:5024\:3092\:4ee3\:5165\:3057\:305f\:308a\:3059\:308b\:5834\:5408\ \:ff0c\:30d7\:30ed\:30bb\:30b9\:306f\:30b9\:30b1\:30b8\:30e5\:30fc\:30e9\:306b\ \:8981\:6c42\:3092\:9001\:308a\:8fd4\:3057\:307e\:3059\:ff0e\:30b9\:30b1\:30b8\ \:30e5\:30fc\:30e9\:306f\:5909\:6570\:3092\:7ba1\:7406\:3057\:ff0c\:5024\:3092\ \:66f4\:65b0\:3057\:ff0c\:8981\:6c42\:3055\:308c\:305f\:5024\:3092\:9001\:308a\ \:8fd4\:3057\:307e\:3059\:ff0e\ \>", "Text"], Cell["\<\ When a process needs the value of a global (shared) variable or \ wants to set its value, it sends a request back to the scheduler. The \ scheduler maintains the variables, udpates their values, and sends back the \ requested values.\ \>", "Text"], Cell[CellGroupData[{ Cell["\<\ \:5171\:6709\:5909\:6570\:30fb\:95a2\:6570\:306e\:5ba3\:8a00 Declaring Shared Variables/Functions\ \>", "Subsection"], Cell["\<\ \:5ba3\:8a00\:306b\:3088\:308a\:ff0c\:30b9\:30ec\:30fc\:30d6\:5074\ \:306e\:5b9a\:7fa9\:304c\:8a2d\:5b9a\:3055\:308c\:ff0c\:3059\:3079\:3066\:306e\ \:30b9\:30ec\:30fc\:30d6\:306b\:8ee2\:9001\:3055\:308c\:307e\:3059\:ff0e\:5f93\ \:3063\:3066\:ff0c\:5225\:306e\:521d\:671f\:5316\:30b3\:30fc\:30c9\:306f\:5fc5\ \:8981\:3042\:308a\:307e\:305b\:3093\:ff0e\ \>", "Text"], Cell["\<\ A declaration sets up the slave-side definitions and transports \ them to all slaves, which, therefore, need no separate init code.\ \>", "Text"], Cell[BoxData[ \(\(SharedVariables[{v\_1, v\_2, \[Ellipsis], v\_n}]\ (*\ is\ HoldAll\ *) \)\)], "Input", Evaluatable->False, SingleLetterItalics->True], Cell[BoxData[ \(SharedDownValues[{f\_1, f\_2, \[Ellipsis], f\_n}]\)], "Input", Evaluatable->False, SingleLetterItalics->True] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:4f8b Examples\ \>", "Subsection"], Cell["\:3053\:3053\:3067\:30ab\:30fc\:30cd\:30eb\:3092\:518d\:3073\:521d\:671f\ \:5316\:3057\:307e\:3059\:ff0e", "SmallText"], Cell["Re-init kernel here...", "SmallText"], Cell[BoxData[ \(Needs["\"]\)], "Input"], Cell["\:5171\:6709\:5909\:6570\:3092\:5ba3\:8a00\:3057\:307e\:3059\:ff0e", \ "Text"], Cell["Declare shared variables.", "Text"], Cell[BoxData[ \(SharedVariables[{x, y, z}]\)], "Input"], Cell["\:57fa\:672c\:7684\:306a\:30c6\:30b9\:30c8\:3092\:884c\:3044\:307e\:3059\ \:ff0e", "Text"], Cell["Basic tests.", "Text"], Cell[BoxData[ \(\(x = 0; \)\)], "Input"], Cell[BoxData[ \(Eval[links[\([1]\)], x]\)], "Input"], Cell[BoxData[ \(Eval[links[\([1]\)], x = x + 1]\)], "Input"], Cell[BoxData[ \(x\)], "Input"], Cell["\:539f\:59cb\:7684\:306a\:66f4\:65b0", "Text"], Cell["Atomic update:", "Text"], Cell[BoxData[ \(Eval[links[\([2]\)], \(x++\)]\)], "Input"], Cell[BoxData[ \(x\)], "Input"], Cell["\<\ \:5171\:6709\:5909\:6570\:3092\:4f7f\:3046\:306e\:306b\:ff0c\:7279\ \:5225\:306a\:6587\:6cd5\:306f\:5fc5\:8981\:3042\:308a\:307e\:305b\:3093\:ff0e\ \:901a\:5e38\:306e\:65b9\:6cd5\:3067\:884c\:3044\:307e\:3059\:ff0e\:5909\:6570\ \:304c\:5171\:6709\:3055\:308c\:308b\:3068\:ff0c\:3059\:3079\:3066\:306e\:30a2\ \:30af\:30bb\:30b9\:304c\:30de\:30b9\:30bf\:30fc\:30d7\:30ed\:30bb\:30b9\:306b\ \:900f\:904e\:7684\:306b\:9001\:3089\:308c\:307e\:3059\:ff0e\ \>", "Text"], Cell["\<\ No special syntax is required to use shared variables. Just do \ things the normal way. If a variable is shared, all accesses are \ transparently sent to the master process.\ \>", "Text"], Cell["\<\ \:539f\:578b\:7684\:540c\:671f\:554f\:984c\:ff1a\:8aad\:53d6\:308a\ \:3068\:66f8\:8fbc\:307f\:306e\:9593\:306b\:ff0c\:305d\:306e\:4ed6\:306e\:30d7\ \:30ed\:30bb\:30b9\:304c\:5024\:3092\:5909\:66f4\:3057\:305f\:308a\:ff0c\:53e4\ \:3044\:5024\:3092\:8aad\:3093\:3060\:308a\:3059\:308b\:3053\:3068\:304c\:53ef\ \:80fd\:ff0e\ \>", "Text"], Cell["\<\ The prototypical synchronization problem: between reading and \ writing, another process can change the value or read the obsolete \ value.\ \>", "Text"], Cell[BoxData[ RowBox[{\(y = 0\), ";", "\n", RowBox[{"ParallelMap", "[", RowBox[{ RowBox[{ RowBox[{"(", "\n", "\t\t", RowBox[{ StyleBox[\(Pause[0.1 Random[]]\), FontColor->RGBColor[0, 0, 1]], ";", "\n", "\t\t", RowBox[{"a", "=", StyleBox["y", FontColor->RGBColor[1, 0, 0]]}], ";", "\n", "\t\t", StyleBox[\(Pause[Random[]]\), FontColor->RGBColor[0, 0, 1]], ";", "\n", "\t\t", RowBox[{ StyleBox["y", FontColor->RGBColor[1, 0, 0]], StyleBox["=", FontColor->RGBColor[1, 0, 0]], \(a + 1\)}]}], ")"}], "&"}], ",", "\n", "\t", \(Range[10]\)}], "]"}]}]], "Input"], Cell[BoxData[ \(y\)], "Input"] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:540c\:671f Synchronization\ \>", "Subsection"], Cell["\<\ \:5909\:6570\:3078\:306e\:6392\:4ed6\:7684\:306a\:30a2\:30af\:30bb\ \:30b9\:306f\:65b0\:3057\:3044\:57fa\:672c\:51e6\:7406\:ff0c\:300cconditional \ atomic write\:300d\:3067\:884c\:308f\:308c\:307e\:3059\:ff0e\:6a5f\:68b0\:8a9e\ \:3067\:306f\:ff0c\:300ctest and \ set\:300d\:3042\:308b\:3044\:306f\:300cread-modify-write\:300d\:3068\:547c\ \:3070\:308c\:308b\:3053\:3068\:3082\:3042\:308a\:307e\:3059\:ff0e\ \>", \ "Text"], Cell[TextData[{ "Exclusive access to variables can be achieved with one new primitive \ operation, a ", StyleBox["conditional atomic write", FontSlant->"Italic"], ". In machine code, it is often called ", StyleBox["test and set", FontSlant->"Italic"], " or ", StyleBox["read-modify-write", FontSlant->"Italic"], "." }], "Text"], Cell[BoxData[ \(TestAndSet[s, e]\)], "Input", Evaluatable->False, SingleLetterItalics->True], Cell[TextData[{ "\:73fe\:5728", StyleBox["s", FontFamily->"Courier New", FontWeight->"Bold"], "\:306e\:8a2d\:5b9a\:304c\:4f55\:3082\:306a\:3044\:5834\:5408\:ff0c\:3042\ \:308b\:3044\:306f\:5024\:304c", StyleBox["Null", FontFamily->"Courier New", FontWeight->"Bold"], "\:306e\:5834\:5408\:306e\:307f\:ff0c\:ff08", StyleBox["s=e", FontFamily->"Courier New", FontWeight->"Bold"], "\:306e\:3088\:3046\:306b\:ff09", StyleBox["s", FontFamily->"Courier New", FontWeight->"Bold"], "\:306b", StyleBox["e", FontFamily->"Courier New", FontWeight->"Bold"], "\:3092\:4ee3\:5165\:3057\:307e\:3059\:ff0e", StyleBox["s", FontFamily->"Courier New", FontWeight->"Bold"], "\:306e\:ff08\:65b0\:3057\:3044\:ff0c\:3042\:308b\:3044\:306f\:53e4\:3044\ \:ff09\:5024\:3092\:8fd4\:3057\:307e\:3059\:ff0eread-modify-write\:306f\:539f\ \:59cb\:7684\:3067\:3059\:ff0e" }], "Text"], Cell[TextData[{ "Set ", StyleBox["s", "Input"], " to ", StyleBox["e", "Input"], " (just like ", StyleBox["s=e", "Input"], "), but only if ", StyleBox["s", "Input"], " is currently unset or its value is ", Cell[BoxData[ FormBox[ StyleBox["Null", "Input"], InputForm]]], ". Return the (old or new) value of ", StyleBox["s", "Input"], ". The read-modify-write is atomic." }], "Text"], Cell[BoxData[ \(l1 = $Slaves[\([1]\)]; \ l2 = $Slaves[\([2]\)];\)], "Input"], Cell[BoxData[ \(SharedVariables[{z}]\)], "Input"], Cell[BoxData[ \(Eval[l1, TestAndSet[z, 17]]\)], "Input"], Cell[BoxData[ \(Eval[l2, TestAndSet[z, 18]]\)], "Input"], Cell[BoxData[ \(Eval[l1, z = Null]\)], "Input"], Cell[BoxData[ \(Eval[l2, TestAndSet[z, 18]]\)], "Input"] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:91cd\:8981\:306a\:30bb\:30af\:30b7\:30e7\:30f3 Critical Sections\ \>", "Subsection"], Cell["\<\ \:5909\:6570\:3084\:305d\:306e\:4ed6\:306e\:30ea\:30bd\:30fc\:30b9\ \:3078\:306e\:6392\:4ed6\:7684\:30a2\:30af\:30bb\:30b9\:306f\:300clock\:300d\ \:3067\:5236\:5fa1\:3067\:304d\:307e\:3059\:ff0e\:4ee5\:4e0b\:306b\:ff0c\:5909\ \:6570\:3078\:306e\:975e\:540c\:671f\:30a2\:30af\:30bb\:30b9\:306b\:3064\:3044\ \:3066\:306e\:524d\:306e\:4f8b\:306b\:8ffd\:52a0\:3055\:308c\:308b\:5178\:578b\ \:7684\:306a\:30b3\:30fc\:30c9\:3092\:793a\:3057\:307e\:3059\:ff0e\ \>", \ "Text"], Cell[TextData[{ "Exclusive access to a variable or other resource can be controlled by a ", StyleBox["lock", FontSlant->"Italic"], ". Here is the typical code added to the previous example about \ asynchronous access to a variable." }], "Text"], Cell[BoxData[ \(SharedVariables[{y, lock}]\)], "Input"], Cell[BoxData[ \(\($TraceLevel = 2; \)\)], "Input"], Cell[BoxData[ RowBox[{\(y = 0\), ";", "\n", RowBox[{"ParallelMap", "[", RowBox[{ RowBox[{ RowBox[{"(", "\n", "\t\t", RowBox[{\(Pause[0.2 Random[]]\), ";", "\n", "\t\t", StyleBox[ \(While[TestAndSet[lock, #] =!= #, Pause[0.8 Random[]]]\), FontColor->RGBColor[1, 0, 0]], StyleBox[";", FontColor->RGBColor[1, 0, 0]], "\n", "\t\t", StyleBox[\(a = y\), FontColor->RGBColor[0, 0, 1]], StyleBox[";", FontColor->RGBColor[0, 0, 1]], "\n", "\t\t", StyleBox[\(Pause[Random[]]\), FontColor->RGBColor[0, 0, 1]], StyleBox[";", FontColor->RGBColor[0, 0, 1]], "\n", "\t\t", StyleBox[\(y = a + 1\), FontColor->RGBColor[0, 0, 1]], StyleBox[";", FontColor->RGBColor[0, 0, 1]], "\n", "\t\t", StyleBox[\(lock = Null\), FontColor->RGBColor[1, 0, 0]], StyleBox[";", FontColor->RGBColor[1, 0, 0]], "\n", "\t\t", StyleBox[\(a + 1\), FontColor->RGBColor[0, 0, 1]]}], ")"}], "&"}], ",", "\n", "\t", \(Range[5]\)}], "]"}]}]], "Input"], Cell[BoxData[ \(y\)], "Input"], Cell[BoxData[ \(\($TraceLevel = 0; \)\)], "Input"] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:98df\:4e8b\:3092\:3059\:308b\:54f2\:5b66\:8005 The Dining Philosophers\ \>", "Subsection"], Cell["\<\ \:5171\:6709\:30ea\:30bd\:30fc\:30b9\:3078\:306e\:30a2\:30af\:30bb\ \:30b9\:306e\:53e4\:5178\:7684\:306a\:4f8b\:3068\:3057\:3066\:ff0c\:30c6\:30fc\ \:30d6\:30eb\:306e\:5468\:308a\:306b\:5ea7\:3063\:3066\:3044\:308b\:54f2\:5b66\ \:8005\:305f\:3061\:306e\:9593\:306b\:7f6e\:304b\:308c\:305f\:30d5\:30a9\:30fc\ \:30af\:304c\:6319\:3052\:3089\:308c\:307e\:3059\:ff0e1\:4eba\:306e\:54f2\ \:5b66\:8005\:306b\:3064\:304d\:ff0c\:5de6\:624b\:3068\:53f3\:624b\:3067\:98df\ \:3079\:308b\:305f\:3081\:306b2\:672c\:306e\:30d5\:30a9\:30fc\:30af\:304c\ \:5fc5\:8981\:3067\:3059\:ff0e\ \>", "Text"], Cell["\<\ The classic example for access to shared resources, in this case \ forks placed between philosophers sitting at a round table. A philosopher \ needs the two forks to his left and right to eat.\ \>", "Text"], Cell[TextData[{ "\:5909\:6570", StyleBox["forks[1]", "Input", FontFamily->"Courier New", FontVariations->{"CompatibilityType"->0}], StyleBox[",\[Ellipsis],", FontFamily->"Courier New", FontWeight->"Bold", FontVariations->{"CompatibilityType"->0}], StyleBox["forks[n]", "Input", FontFamily->"Courier New", FontVariations->{"CompatibilityType"->0}], "\:306f\:ff0c\:305d\:308c\:3089\:3092\:6761\:4ef6\:4ed8\:304d\:3067\:56fa\ \:6709\:306e\:5024\:306b\:8a2d\:5b9a\:3059\:308b\:3053\:3068\:3067\:ff0c\:30d5\ \:30a9\:30fc\:30af\:3092\:53d6\:3063\:3066\:304a\:304f\:5f79\:5272\:3092\:679c\ \:305f\:3057\:307e\:3059\:ff0e" }], "Text"], Cell[TextData[{ "The variables ", StyleBox["forks[1]", "Input"], ",\[Ellipsis],", StyleBox["forks[", "Input"], StyleBox["n", "Input", FontSlant->"Italic"], StyleBox["]", "Input"], " serve to reserve forks by conditionally setting them to a unique value." }], "Text"], Cell[BoxData[ \(SharedDownValues[{forks}]\)], "Input"], Cell[BoxData[ \(stop = False; SharedVariables[{stop}]\)], "Input"], Cell["\:305d\:308c\:305e\:308c\:306e\:54f2\:5b66\:8005\:304c1\:3064\:306e\ \:30d7\:30ed\:30bb\:30b9\:3092\:793a\:3057\:307e\:3059\:ff0e", "Text"], Cell["Each dining philosopher is one process.", "Text"], Cell[BoxData[ \(n = Length[$Slaves]\)], "Input"], Cell["\:4ee5\:4e0b\:306b\:54f2\:5b66\:8005\:306e\:8003\:3048\:65b9\:3068\:98df\ \:3079\:65b9\:306b\:95a2\:3059\:308b\:52d5\:4f5c\:3092\:793a\:3057\:307e\:3059\ \:ff0e", "Text"], Cell["\<\ Here's the behaviour of a philosopher: either thinking or eating.\ \ \>", "Text"], Cell[BoxData[ RowBox[{ StyleBox[\(philo[i_]\), FontColor->RGBColor[0, 0, 1]], StyleBox[":=", FontColor->RGBColor[0, 0, 1]], "\[IndentingNewLine]", RowBox[{"With", "[", RowBox[{ \({f1 = i, f2 = Mod[i, n] + 1}\), ",", "\[IndentingNewLine]", RowBox[{ StyleBox["While", FontColor->RGBColor[0, 0, 1]], StyleBox["[", FontColor->RGBColor[0, 0, 1]], RowBox[{ StyleBox[\(! stop\), FontColor->RGBColor[0, 0, 1]], StyleBox[",", FontColor->RGBColor[0, 0, 1]], "\[IndentingNewLine]", RowBox[{ \(Print[i, "\< thinking\>"]\), ";", "\[IndentingNewLine]", \( (*\ think\ *) \), "\[IndentingNewLine]", StyleBox[\(Pause[10 Random[]]\), FontColor->RGBColor[0, 0, 1]], StyleBox[";", FontColor->RGBColor[0, 0, 1]], "\n", "\t \t", \( (*\ grab\ forks\ *) \), "\[IndentingNewLine]", StyleBox[\(Print[i, "\< hungry\>"]\), FontColor->GrayLevel[0]], StyleBox[";", FontColor->GrayLevel[0]], "\n", "\t\t\t", RowBox[{ StyleBox["While", FontColor->RGBColor[1, 0, 0]], StyleBox["[", FontColor->RGBColor[1, 0, 0]], RowBox[{ StyleBox[ \(TestAndSet[forks[f1], i] =!= i || TestAndSet[forks[f2], i] =!= i\), FontColor->RGBColor[1, 0, 0]], StyleBox[",", FontColor->RGBColor[1, 0, 0]], StyleBox["\[IndentingNewLine]", FontColor->RGBColor[1, 0, 0]], RowBox[{ StyleBox[\(Print[i, "\< angry\>"]\), FontColor->GrayLevel[0]], StyleBox[";", FontColor->GrayLevel[0]], StyleBox["\[IndentingNewLine]", FontColor->RGBColor[1, 0, 0]], StyleBox[\(Pause[Random[]]\), FontColor->RGBColor[1, 0, 0]]}]}], StyleBox["]", FontColor->RGBColor[1, 0, 0]]}], StyleBox[";", FontColor->RGBColor[1, 0, 0]], "\[IndentingNewLine]", \( (*\ eat\ *) \), "\[IndentingNewLine]", \(Print[i, "\< eating\>"]\), ";", "\[IndentingNewLine]", StyleBox[\(Pause[2 Random[]]\), FontColor->RGBColor[0, 0, 1]], StyleBox[";", FontColor->RGBColor[0, 0, 1]], "\[IndentingNewLine]", \( (*\ put\ back\ forks\ *) \), "\[IndentingNewLine]", StyleBox[\(forks[f1] = Null\), FontColor->RGBColor[1, 0, 0]], StyleBox[";", FontColor->RGBColor[1, 0, 0]], StyleBox[\(forks[f2] = Null\), FontColor->RGBColor[1, 0, 0]], StyleBox[";", FontColor->RGBColor[1, 0, 0]]}]}], "\[IndentingNewLine]", StyleBox["]", FontColor->RGBColor[0, 0, 1]]}]}], "]"}]}]], "Input"], Cell[BoxData[ \(\(ExportEnvironment[{philo, n}]; \)\)], "Input"], Cell["\<\ \:672c\:8cea\:7684\:306b\:306fParallelMap\:304c\:5fc5\:8981\:3067\ \:3059\:304c\:ff0c\:3053\:308c\:3089\:3092\:624b\:969b\:3088\:304f\:6b62\:3081\ \:308b\:65b9\:6cd5\:304c\:5fc5\:8981\:3067\:3059\:ff0e\ \>", "Text"], Cell["\<\ We want essentially ParallelMap, but need a way to stop them \ cleanly.\ \>", "Text"], Cell[BoxData[ \(ParallelMap[philo, Range[n]]\)], "Input", Evaluatable->False], Cell[BoxData[ \(pids = Composition[Queue, philo] /@ Range[n]; Wait[pids]\)], "Input"], Cell[BoxData[ \(stop = True; Wait[pids]\)], "Input"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:4e26\:5217\:30d7\:30ed\:30b0\:30e9\:30df\:30f3\:30b0 Parallel Programming\ \>", "Section"], Cell["\<\ \:3053\:3053\:3067\:306f\:ff0c\:4e26\:5217For\:30eb\:30fc\:30d7\ \:4ee5\:4e0a\:306e\:3053\:3068\:3092\:53d6\:308a\:4e0a\:3052\:307e\:3059\:ff0e\ \ \>", "Text"], Cell["More than parallel For loops.", "Text"], Cell[CellGroupData[{ Cell["\<\ \:30d7\:30ed\:30bb\:30b9\:751f\:6210\:306e\:95a2\:6570\:30b9\:30bf\ \:30a4\:30eb A Functional Style for Process Generation\ \>", "Subsection"], Cell["\:4f8b\:3048\:3070\:ff0c\:4e00\:822c\:5316\:3055\:308c\:305f\:5185\:7a4d\ \:304c\:5fc5\:8981\:3067\:3042\:308b\:3068\:3057\:307e\:3059\:ff0e", "Text"], Cell["Say, you want a generalized inner product,", "Text"], Cell[BoxData[ \(\((a . b)\)\_\(\(i\_1\) \(i\_2\) \(\[Ellipsis]i\_\(n - 1\)\) \(k\_2\) \(k\_3\) \[Ellipsis]k\_m\) = p[t[a\_\(\(i\_1\) \(i\_2\) \(\[Ellipsis]i\_\(n - 1\)\) 1\), b\_\(1 \( k\_2\) \(k\_3\) \[Ellipsis]k\_m\)], \[Ellipsis], t[a\_\(\(i\_1\) \(i\_2\) \(\[Ellipsis]i\_\(n - 1\)\) d\), b\_\(\(dk\_2\) \(k\_3\) \[Ellipsis]k\_m\)]]\)], "Input"], Cell[TextData[{ "\:3053\:3053\:3067\:ff0c", StyleBox["d", FontFamily->"Courier New", FontWeight->"Bold"], "\:306f", StyleBox["a", FontFamily->"Courier New", FontWeight->"Bold"], "\:306e\:5171\:901a\:306e\:6700\:7d42\:6b21\:5143\:3067\:3042\:308a\:ff0c", StyleBox["b", FontFamily->"Courier New", FontWeight->"Bold"], "\:306e\:6700\:521d\:306e\:6b21\:5143\:3067\:3042\:308b\:3068\:3057\:307e\ \:3059\:ff08", StyleBox["p", FontFamily->"Courier New", FontWeight->"Bold"], "\:3092\:548c\:ff0c", StyleBox["t", FontFamily->"Courier New", FontWeight->"Bold"], "\:3092\:7a4d\:3068\:304a\:8003\:3048\:304f\:3060\:3055\:3044\:ff09\:ff0e" }], "Text"], Cell[TextData[{ "where ", StyleBox["d", "Input"], " is the common last dimension of ", StyleBox["a", "Input"], " and first dimension of ", StyleBox["b", "Input"], ".\n(Think of ", StyleBox["p", "Input"], " as plus and ", StyleBox["t", "Input"], " as times.)" }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(Inner[t, Array[a, {2, 2}], Array[b, {2, 2}], \ p]\)], "Input"], Cell[BoxData[ \({{p[t[a[1, 1], b[1, 1]], t[a[1, 2], b[2, 1]]], p[t[a[1, 1], b[1, 2]], t[a[1, 2], b[2, 2]]]}, {p[t[a[2, 1], b[1, 1]], t[a[2, 2], b[2, 1]]], p[t[a[2, 1], b[1, 2]], t[a[2, 2], b[2, 2]]]}}\)], "Output"] }, Open ]], Cell[TextData[{ "\:4e26\:884c\:5b9f\:884c\:306e\:305f\:3081", StyleBox["p[\[Ellipsis]]", "Input"], "\:306e\:3059\:3079\:3066\:306e\:8a08\:7b97\:3092\:30ad\:30e5\:30fc\:306b\ \:5165\:308c\:308b\:305f\:3081\:306b\:ff0c", StyleBox["p", FontFamily->"Courier New", FontWeight->"Bold"], "\:306e\:4ee3\:308a\:306b", StyleBox["Composition[Queue,p]", FontFamily->"Courier New", FontWeight->"Bold"], "\:3092\:7528\:3044\:308b\:3053\:3068\:3082\:3067\:304d\:307e\:3059\:ff0e\ \:305d\:306e\:7d50\:679c\:ff0c\:30d7\:30ed\:30bb\:30b9ID\:306e\:30c6\:30f3\ \:30bd\:30eb\:304c\:5f97\:3089\:308c\:307e\:3059\:ff0e" }], "Text"], Cell[TextData[{ "You can use ", StyleBox["Composition[Queue,p]", "Input"], " in place of ", StyleBox["p", "Input"], " to cause all calculcations of ", StyleBox["p[\[Ellipsis]]", "Input"], " to be queued for concurrent execution.\nThe result is a tensor of process \ IDs." }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(skel = Inner[t, Array[a, {2, 2}], Array[b, {2, 2}], Composition[Queue, p]]\)], "Input"], Cell[BoxData[ \({{pid$62, pid$65}, {pid$69, pid$74}}\)], "Output"] }, Open ]], Cell["\<\ \:30d7\:30ed\:30bb\:30b9ID\:3092\:30ea\:30b9\:30c8\:306b\:96c6\:3081\ \:ff0c\:3059\:3079\:3066\:306e\:30d7\:30ed\:30bb\:30b9\:304c\:95a2\:9023\:306e\ \:7d50\:679c\:306e\:30ea\:30b9\:30c8\:3092\:8fd4\:3059\:306e\:3092\:5f85\:3061\ \:307e\:3059\:ff0e\ \>", "Text"], Cell["\<\ Collect the pids in a list, and wait for all processes, returning \ the list of corresponding results.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(pids\ = \ Flatten[skel]\)], "Input"], Cell[BoxData[ \({pid$62, pid$65, pid$69, pid$74}\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(ress\ = \ Wait[pids]\)], "Input"], Cell[BoxData[ \({p[t[a[1, 1], b[1, 1]], t[a[1, 2], b[2, 1]]], p[t[a[1, 1], b[1, 2]], t[a[1, 2], b[2, 2]]], p[t[a[2, 1], b[1, 1]], t[a[2, 2], b[2, 1]]], p[t[a[2, 1], b[1, 2]], t[a[2, 2], b[2, 2]]]}\)], "Output"] }, Open ]], Cell["\<\ \:6700\:5f8c\:306b\:ff0c\:7f6e\:63db\:3092\:7528\:3044\:3066\:30c6\ \:30f3\:30bd\:30eb\:306e\:30d7\:30ed\:30bb\:30b9ID\:3092\:7d50\:679c\:3068\ \:7f6e\:304d\:63db\:3048\:307e\:3059\:ff0e\ \>", "Text"], Cell["\<\ Finally, replace the pids in the tensor by the results, using \ substitution.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(skel\ /. \ Thread[pids -> ress]\)], "Input"], Cell[BoxData[ \({{p[t[a[1, 1], b[1, 1]], t[a[1, 2], b[2, 1]]], p[t[a[1, 1], b[1, 2]], t[a[1, 2], b[2, 2]]]}, { p[t[a[2, 1], b[1, 1]], t[a[2, 2], b[2, 1]]], p[t[a[2, 1], b[1, 2]], t[a[2, 2], b[2, 2]]]}}\)], "Output"] }, Open ]], Cell[TextData[{ "\:3053\:306e\:30b9\:30b1\:30b8\:30e5\:30fc\:30ea\:30f3\:30b0\:306f\:ff0c\ \:901a\:4fe1\:306b\:95a2\:3057\:3066\:306f\:6700\:9069\:3067\:306f\:3042\:308a\ \:307e\:305b\:3093\:ff0e\:3088\:308a\:3088\:3044\:53ef\:80fd\:6027\:3068\:3057\ \:3066\:306f\:ff0c", StyleBox["a", FontFamily->"Courier New", FontWeight->"Bold"], "\:306e\:6b21\:5143\:306b\:6cbf\:3063\:3066\:306e\:307f\:4e26\:5217\:5316\ \:3057\:ff0c\:30c6\:30f3\:30bd\:30eb", StyleBox["b", FontFamily->"Courier New", FontWeight->"Bold"], "\:3092\:30b8\:30e7\:30d6\:306e\:30b9\:30b1\:30b8\:30e5\:30fc\:30ea\:30f3\ \:30b0\:306e\:524d\:306b\:5404\:30d7\:30ed\:30bb\:30c3\:30b5\:306b\:9001\:308b\ \:3068\:3044\:3046\:3053\:3068\:304c\:6319\:3052\:3089\:308c\:307e\:3059\:ff0e\ " }], "Text"], Cell[TextData[{ "This scheduling is not optimal in terms of communication. One better \ possibility is to parallelize only along the dimensions of ", StyleBox["a", "Input"], " and send the tensor ", StyleBox["b", "Input"], " once to each ", StyleBox["processor", FontSlant->"Italic"], " before scheduling the jobs." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:660e\:793a\:7684\:306a\:30b9\:30b1\:30b8\:30e5\:30fc\:30ea\:30f3\ \:30b0\:ff1aGaxpy Explicit Scheduling: Gaxpy\ \>", "Subsection"], Cell[TextData[{ "\:300cGolub&van Loan, Matrix Computations, ", Cell[BoxData[ \(TraditionalForm\`3\^rd\)]], "ed., The Johns Hopkins Univ. Press, 1996\:300d\:3088\:308a\:629c\:7c8b\ \:ff0e" }], "Text"], Cell[TextData[{ "Taken verbatim from Golub&van Loan, Matrix Computations, ", Cell[BoxData[ \(TraditionalForm\`3\^rd\)]], "ed., The Johns Hopkins Univ. Press, 1996." }], "Text"], Cell[TextData[ "Y=Y+A.X, A an n\[Cross]n matrix, X, Y, n-vectors"], "DisplayFormula"], Cell[BoxData[ \(Needs["\"]\)], "Input"], Cell["\:30b5\:30f3\:30d7\:30eb\:ff08\:8a18\:53f7\:ff09\:884c\:5217\:3068\:30d9\ \:30af\:30c8\:30eb\:3067\:3059\:ff0e", "Text"], Cell["Sample (symbolic) matrices and vectors.", "Text"], Cell[BoxData[ \(\(n = 4; \)\)], "Input"], Cell[BoxData[{ \(\(A = Array[a, {n, n}];\)\), "\n", \(\(X = Array[x, {n}];\)\), "\n", \(\(Y = Array[y, {n}];\)\)}], "Input"], Cell[BoxData[ \(\(SharedVariables[A, X, Y]; \)\)], "Input"], Cell["\<\ \:30b9\:30b1\:30b8\:30e5\:30fc\:30ea\:30f3\:30b0\:3057\:307e\:3059\ \:ff0en\:306e\:7d04\:6570\:3067\:3042\:308b\:30d7\:30ed\:30bb\:30c3\:30b5\ \:306e\:6570\:3092\:6c42\:3081\:307e\:3059\:ff0e\ \>", "Text"], Cell["\<\ Scheduling. Find a number of processors that is a divisor of \ n.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(p0 = Length[$Slaves]; \n p = Max[Select[Divisors[n], # \[LessEqual] p0&]]\)], "Input"], Cell[BoxData[ \(4\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(r = n/p\)], "Input"], Cell[BoxData[ \(1\)], "Output"] }, Open ]], Cell["\:30af\:30e9\:30a4\:30a2\:30f3\:30c8\:30b3\:30fc\:30c9\:3067\:3059\:ff0e\ ", "Text"], Cell["The client code", "Text"], Cell[BoxData[ \(SetAttributes[gaxpy, HoldAll]; \n gaxpy[\[Mu]_, A_, X_, Y_] := \n\t Module[{Xl, Yl, j, Al}, \n\t\t With[{row = Range[\((\[Mu] - 1)\) r + 1, \[Mu]\ r]}, \n\t\tXl = X; \n \t\tYl = Y\[LeftDoubleBracket]row\[RightDoubleBracket]; \n\t\t Do[\n\t\t\tAl = A\[LeftDoubleBracket]row, j\[RightDoubleBracket]; \n \t\t\t\(Yl = Yl + Al*Xl\[LeftDoubleBracket]j\[RightDoubleBracket]; \)\n \t\t\t, {j, 1, n}]; \n\t\t Y\[LeftDoubleBracket]row\[RightDoubleBracket] = Yl; \n\t\t]]\)], "Input"], Cell["\:30b3\:30fc\:30c9\:ff08\:30c7\:30fc\:30bf\:3067\:306f\:3042\:308a\:307e\ \:305b\:3093\:ff09\:3092\:30a8\:30ad\:30b9\:30dd\:30fc\:30c8\:3057\:307e\:3059\ \:ff0e", "Text"], Cell["Export the code (not the data!).", "Text"], Cell[BoxData[ \(\(ExportEnvironment[p, n, r, gaxpy]; \)\)], "Input"], Cell["\:3059\:3079\:3066\:306e\:30ea\:30e2\:30fc\:30c8\:30d7\:30ed\:30bb\:30b9\ \:3092\:958b\:59cb\:3057\:307e\:3059\:ff0e", "Text"], Cell["Start all remote processes.", "Text"], Cell[BoxData[{ \(\(Wait[\(Queue[gaxpy[#, A, X, Y]] &\) /@ Range[p]];\)\), "\n", \(Y\)}], "Input"], Cell[BoxData[ \(\($TraceLevel = 1; \)\)], "Input"], Cell[BoxData[ \(\($TraceLevel = 0; \)\)], "Input"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:51e6\:7406\:80fd\:529b\:6e2c\:5b9a Performance Measurements\ \>", "Section"], Cell[CellGroupData[{ Cell["\<\ \:30aa\:30fc\:30d0\:30fc\:30d8\:30c3\:30c9 Overhead\ \>", "Subsection"], Cell["\:666e\:901a\:306e1\:30d7\:30ed\:30bb\:30b9\:306e\:51e6\:7406\:6642\ \:9593\:3092\:6c42\:3081\:307e\:3059\:ff0e", "Text"], Cell["Time for servicing one trivial process.", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(With[{n = 200, t = AbsoluteTime[]}, \[IndentingNewLine]ParallelMap[ Identity, Range[n]]; \[IndentingNewLine]\(AbsoluteTime[] - t\)\/n]\)], "Input"], Cell[BoxData[ \(0.025`6.4185\)], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:30b9\:30d4\:30fc\:30c9\:30a2\:30c3\:30d7\:3068\:52b9\:7387 Speedup and Efficiency\ \>", "Subsection"], Cell["\<\ \:30b9\:30d4\:30fc\:30c9\:30a2\:30c3\:30d7\:3068\:306f\:ff0c\:5168\ \:4e26\:5217\:5b9f\:884c\:6642\:9593\:306e\:9806\:6b21\:5b9f\:884c\:6642\:9593\ \:306b\:5bfe\:3059\:308b\:6bd4\:3067\:3059\:ff0e\ \>", "Text"], Cell["\<\ Speedup is the ratio of total parallel execution time to sequential \ time.\ \>", "Text"], Cell["\:52b9\:7387\:3068\:306f\:ff0c\:5b9f\:969b\:306e\:30b9\:30d4\:30fc\:30c9\ \:30a2\:30c3\:30d7\:306e\:30d7\:30ed\:30bb\:30c3\:30b5\:6570\:306b\:5bfe\:3059\ \:308b\:6bd4\:3067\:3059\:ff0e", "Text"], Cell["\<\ Efficiency is the ratio of observed speedup to number of \ processors.\ \>", "Text"], Cell["\<\ \:3053\:306e\:30b3\:30fc\:30c9\:306f\:666e\:901a\:306e\:500b\:3005\ \:306e\:4e26\:5217\:8a08\:7b97\:306e\:30b9\:30d4\:30fc\:30c9\:30a2\:30c3\:30d7\ \:3068\:52b9\:7387\:3092\:6e2c\:5b9a\:3057\:307e\:3059\:ff0e\ \>", "Text"], Cell["\<\ This code measures the speedup and efficiency for a trivial \ independent parallel computation.\ \>", "Text"], Cell[BoxData[ RowBox[{\(Performance[ntry_, d_: 1]\), ":=", "\[IndentingNewLine]", RowBox[{"Module", "[", RowBox[{\({p = Length[$Slaves], t, su}\), ",", "\[IndentingNewLine]", RowBox[{\(t = AbsoluteTime[]\), ";", "\[IndentingNewLine]", RowBox[{"ParallelMap", "[", RowBox[{ StyleBox[\(Pause[d] &\), FontColor->RGBColor[1, 0, 0]], ",", \(Range[ntry]\)}], "]"}], ";", "\[IndentingNewLine]", \(su = \(ntry\ d\)\/\(AbsoluteTime[] - t\)\ \), ";", "\[IndentingNewLine]", \({p, su, su/p}\)}]}], "]"}]}]], "Input"], Cell[CellGroupData[{ Cell[BoxData[ \(Performance[12, 4]\)], "Input"], Cell[BoxData[ \({13, 12.`6.3216, 0.92307692307692308`6.3216}\)], "Output"] }, Open ]] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:30a2\:30d7\:30ea\:30b1\:30fc\:30b7\:30e7\:30f3\:4f8b Application Examples\ \>", "Section"], Cell[TextData[ButtonBox["\:6700\:5c0f\:8868\:9762", ButtonData:>{ FrontEnd`FileName[ {$TopDirectory, "AddOns", "Applications", "Parallel", "Documentation", "English"}, "Surface.nb", CharacterEncoding -> "ISO8859-1"], None}, ButtonStyle->"Hyperlink"]], "Text"], Cell[TextData[ButtonBox["A minimal surface", ButtonData:>{ FrontEnd`FileName[ {$TopDirectory, "AddOns", "Applications", "Parallel", "Documentation", "English"}, "Surface.nb", CharacterEncoding -> "ISO8859-1"], None}, ButtonStyle->"Hyperlink"]], "Text"], Cell[TextData[ButtonBox["\:4e26\:5217\:30a2\:30cb\:30e1\:30fc\:30b7\:30e7\ \:30f3", ButtonData:>{ FrontEnd`FileName[ {$TopDirectory, "AddOns", "Applications", "Parallel", "Documentation", "English"}, "Animation.nb", CharacterEncoding -> "ISO8859-1"], None}, ButtonStyle->"Hyperlink"]], "Text"], Cell[TextData[ButtonBox["A parallel animation", ButtonData:>{ FrontEnd`FileName[ {$TopDirectory, "AddOns", "Applications", "Parallel", "Documentation", "English"}, "Animation.nb", CharacterEncoding -> "ISO8859-1"], None}, ButtonStyle->"Hyperlink"]], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["\<\ \:304a\:308f\:308a\:306b Conclusions\ \>", "Section"], Cell[TextData[{ "\:3053\:308c\:3067\:ff0c", StyleBox["Mathematica", FontSlant->"Italic"], " \:5185\:90e8\:3060\:3051\:3067\:30a4\:30f3\:30bf\:30e9\:30af\:30c6\:30a3\ \:30d6\:306a\:4e26\:5217\:8a18\:53f7\:ff0c\:6570\:5024\:ff0c\:753b\:50cf\:8a08\ \:7b97\:304c\:3067\:304d\:308b\:3088\:3046\:306b\:306a\:308a\:ff0c\:5927\:5909\ \:3046\:308c\:3057\:304f\:601d\:3044\:307e\:3059\:ff0e" }], "Text"], Cell[TextData[{ "I am excited that one can now do interactive parallel symbolic, numeric \ and graphic computation entirely within ", StyleBox["Mathematica", FontSlant->"Italic"], "." }], "Text"], Cell[TextData[{ "\:3053\:306e\:30c4\:30fc\:30eb\:30ad\:30c3\:30c8\:306b\:3088\:308a\:ff0c\ \:5e83\:7bc4\:56f2\:306e\:30ef\:30fc\:30af\:30b0\:30eb\:30fc\:30d7\:ff0c\:7814\ \:7a76\:5ba4\:ff0c\:6559\:5ba4\:3067\:306e\:672c\:683c\:7684\:306a\:4e26\:5217\ \:8a08\:7b97\:306e\:5229\:7528\:304c\:7c21\:5358\:306b\:306a\:308a\:307e\:3059\ \:ff0e\:3053\:308c\:306f\:ff0c\:57fa\:672c\:7684\:306b\:306f\:65e2\:5b58\:306e\ ", StyleBox["Mathematica ", FontSlant->"Italic"], "\:30e6\:30fc\:30b6\:304c\:3059\:3050\:306b\:4f7f\:3048\:308b\:3082\:306e\ \:3067\:3059\:ff0e" }], "Text"], Cell[TextData[{ "This toolkit should make serious parallel computing accessible to a wide \ range of workgroups, labs and classrooms.\" It is basically ready for all \ existing ", StyleBox["Mathematica", FontSlant->"Italic"], " users." }], "Text"] }, Closed]] }, FrontEndVersion->"4.1 for Microsoft Windows", ScreenRectangle->{{0, 991}, {0, 695}}, AutoGeneratedPackage->None, ScreenStyleEnvironment->"Working", WindowToolbars->"EditBar", CellGrouping->Automatic, WindowSize->{545, 671}, WindowMargins->{{Automatic, 0}, {Automatic, 0}}, PrintingOptions->{"PaperSize"->{597.563, 842.375}, "PaperOrientation"->"Portrait", "Magnification"->1}, PrivateNotebookOptions->{"ColorPalette"->{RGBColor, -1}}, RenderingOptions->{"ObjectDithering"->True, "RasterDithering"->False}, StyleDefinitions -> Notebook[{ Cell[CellGroupData[{ Cell["Style Definitions", "Subtitle"], Cell["\<\ Modify the definitions below to change the default appearance of \ all cells in a given style. Make modifications to any definition using \ commands in the Format menu.\ \>", "Text"], Cell[CellGroupData[{ Cell["Style Environment Names", "Section"], Cell[StyleData[All, "Working"], PageWidth->WindowWidth, ScriptMinSize->9], Cell[StyleData[All, "Presentation"], PageWidth->WindowWidth, ScriptMinSize->12, FontSize->18], Cell[StyleData[All, "Condensed"], PageWidth->WindowWidth, CellBracketOptions->{"Margins"->{1, 1}, "Widths"->{0, 5}}, ScriptMinSize->8, FontSize->11], Cell[StyleData[All, "Printout"], ScriptMinSize->7, FontSize->10, PrivateFontOptions->{"FontType"->"Outline"}] }, Closed]], Cell[CellGroupData[{ Cell["Notebook Options", "Section"], Cell["\<\ The options defined for the style below will be used at the \ Notebook level.\ \>", "Text"], Cell[CellGroupData[{ Cell[StyleData["Notebook"], PageHeaders->{{None, None, None}, {None, None, None}}, PageFooters->{{Cell[ TextData[ { CounterBox[ "Page"]}], "PageNumber"], None, Cell[ TextData[ { ValueBox[ "FileName"]}], "Header"]}, {Cell[ TextData[ { ValueBox[ "FileName"]}], "Header"], None, Cell[ TextData[ { CounterBox[ "Page"]}], "PageNumber"]}}, PageHeaderLines->{False, False}, PageFooterLines->{False, False}, PrintingOptions->{"FacingPages"->True, "FirstPageFace"->Right}, CellFrameLabelMargins->6, StyleMenuListing->None, FontFamily->"Utopia"], Cell[StyleData["Notebook", "Presentation"]], Cell[StyleData["Notebook", "Printout"], ShowPageBreaks->True, PageWidth->PaperWidth] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Styles for Headings", "Section"], Cell[CellGroupData[{ Cell[StyleData["Title"], ShowCellBracket->False, CellMargins->{{0, 0}, {0, 0}}, PageBreakBelow->False, LineSpacing->{1, 0}, CounterIncrements->"Title", CounterAssignments->{{"Section", 0}, {"Equation", 0}, {"Figure", 0}, { "Subtitle", 0}, {"Subsubtitle", 0}}, FontSize->34, FontColor->GrayLevel[1], Background->RGBColor[0.571389, 0.19675, 0.570504]], Cell[StyleData["Title", "Presentation"], CellMargins->{{0, 0}, {0, 0}}, LineSpacing->{1, 0}, FontSize->44], Cell[StyleData["Title", "Condensed"], CellMargins->{{0, 0}, {0, 0}}, FontSize->20], Cell[StyleData["Title", "Printout"], CellMargins->{{0, 0}, {0, 0}}, FontSize->24, Background->GrayLevel[0]] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["Subtitle"], ShowCellBracket->False, CellMargins->{{0, 0}, {0, 0}}, PageBreakBelow->False, LineSpacing->{1, 3}, CounterIncrements->"Subtitle", CounterAssignments->{{"Section", 0}, {"Equation", 0}, {"Figure", 0}, { "Subsubtitle", 0}}, FontFamily->"Swiss721bt", FontSize->18, FontColor->GrayLevel[1], Background->RGBColor[0.2, 0.700008, 0.700008]], Cell[StyleData["Subtitle", "Presentation"], CellMargins->{{0, 0}, {0, 0}}, LineSpacing->{1, 6}, FontSize->30], Cell[StyleData["Subtitle", "Condensed"], CellMargins->{{0, 0}, {0, 0}}, FontSize->14], Cell[StyleData["Subtitle", "Printout"], CellMargins->{{0, 0}, {0, 0}}, FontSize->16, Background->GrayLevel[0.6]] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["Subsubtitle"], ShowCellBracket->False, CellMargins->{{10, 4}, {30, 10}}, PageBreakBelow->False, CounterIncrements->"Subsubtitle", CounterAssignments->{{"Section", 0}, {"Equation", 0}, {"Figure", 0}}, FontFamily->"Swiss721bt", FontSize->14, FontSlant->"Italic"], Cell[StyleData["Subsubtitle", "Presentation"], CellMargins->{{18, 10}, {40, 20}}, LineSpacing->{1, 0}, FontSize->24], Cell[StyleData["Subsubtitle", "Condensed"], CellMargins->{{8, 10}, {12, 8}}, FontSize->12], Cell[StyleData["Subsubtitle", "Printout"], CellMargins->{{9, 10}, {50, 10}}, FontSize->14] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["Section"], CellFrame->{{6, 0}, {0, 1}}, CellDingbat->None, CellMargins->{{12, Inherited}, {4, 24}}, CellGroupingRules->{"SectionGrouping", 30}, PageBreakBelow->False, CellFrameMargins->6, CounterIncrements->"Section", CounterAssignments->{{"Subsection", 0}, {"Subsubsection", 0}}, FontFamily->"Swiss721bt", FontSize->16, FontWeight->"Bold", FontColor->RGBColor[0.571389, 0.19675, 0.570504]], Cell[StyleData["Section", "Presentation"], CellMargins->{{18, 10}, {8, 32}}, LineSpacing->{1, 2}, FontSize->24], Cell[StyleData["Section", "Condensed"], CellMargins->{{8, Inherited}, {2, 12}}, FontSize->12], Cell[StyleData["Section", "Printout"], CellMargins->{{9, 0}, {2, 30}}, FontSize->14, FontColor->GrayLevel[0]] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["Subsection"], CellMargins->{{12, Inherited}, {8, 20}}, CellGroupingRules->{"SectionGrouping", 40}, PageBreakBelow->False, CounterIncrements->"Subsection", CounterAssignments->{{"Subsubsection", 0}}, FontFamily->"Swiss721bt", FontSize->13, FontWeight->"Bold"], Cell[StyleData["Subsection", "Presentation"], CellMargins->{{17, 10}, {8, 32}}, LineSpacing->{1, 0}, FontSize->18], Cell[StyleData["Subsection", "Condensed"], CellMargins->{{8, Inherited}, {2, 12}}, FontSize->12], Cell[StyleData["Subsection", "Printout"], CellMargins->{{9, 0}, {4, 18}}, FontSize->12] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["Subsubsection"], CellDingbat->"\[FilledSquare]", CellMargins->{{25, Inherited}, {8, 12}}, CellGroupingRules->{"SectionGrouping", 50}, PageBreakBelow->False, CounterIncrements->"Subsubsection", FontSize->13, FontWeight->"Bold"], Cell[StyleData["Subsubsection", "Presentation"], CellMargins->{{34, 10}, {8, 26}}, LineSpacing->{1, 0}, FontSize->18], Cell[StyleData["Subsubsection", "Condensed"], CellMargins->{{19, Inherited}, {2, 12}}, FontSize->10], Cell[StyleData["Subsubsection", "Printout"], CellMargins->{{21, 0}, {4, 16}}, FontSize->11] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Styles for Body Text", "Section"], Cell[CellGroupData[{ Cell[StyleData["Text"], CellMargins->{{12, 10}, {5, 5}}, LineSpacing->{1, 3}, ParagraphSpacing->{0, 1}, CounterIncrements->"Text"], Cell[StyleData["Text", "Presentation"], CellMargins->{{18, 10}, {8, 8}}, LineSpacing->{1, 5}, ParagraphSpacing->{0, 2}], Cell[StyleData["Text", "Condensed"], CellMargins->{{8, 10}, {4, 4}}, LineSpacing->{1, 1}], Cell[StyleData["Text", "Printout"], CellMargins->{{9, 0}, {4, 4}}] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["SmallText"], CellMargins->{{12, 10}, {5, 5}}, LineSpacing->{1, 3}, ParagraphSpacing->{0, 6}, CounterIncrements->"SmallText", FontFamily->"Swiss721bt", FontSize->9], Cell[StyleData["SmallText", "Presentation"], CellMargins->{{18, 10}, {8, 8}}, LineSpacing->{1, 5}, FontSize->12], Cell[StyleData["SmallText", "Condensed"], CellMargins->{{8, 10}, {2, 2}}, LineSpacing->{1, 2}, FontSize->9], Cell[StyleData["SmallText", "Printout"], CellMargins->{{9, 0}, {4, 4}}, FontSize->7] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Styles for Input/Output", "Section"], Cell["\<\ The cells in this section define styles used for input and output \ to the kernel. Be careful when modifying, renaming, or removing these \ styles, because the front end associates special meanings with these style \ names.\ \>", "Text"], Cell[CellGroupData[{ Cell[StyleData["Input"], CellFrame->{{3, 0}, {0, 0}}, CellMargins->{{52, 10}, {8, 8}}, Evaluatable->True, CellGroupingRules->"InputGrouping", CellHorizontalScrolling->True, PageBreakWithin->False, GroupPageBreakWithin->False, CellLabelMargins->{{5, Inherited}, {Inherited, Inherited}}, DefaultFormatType->DefaultInputFormatType, AutoItalicWords->{}, FormatType->InputForm, ShowStringCharacters->True, NumberMarks->True, CounterIncrements->"Input", FontWeight->"Bold"], Cell[StyleData["Input", "Presentation"], CellMargins->{{72, Inherited}, {10, 10}}, LineSpacing->{1, 0}], Cell[StyleData["Input", "Condensed"], CellMargins->{{40, 10}, {4, 4}}], Cell[StyleData["Input", "Printout"], CellMargins->{{37, 0}, {6, 6}}] }, Closed]], Cell[StyleData["InlineInput"], Evaluatable->True, CellGroupingRules->"InputGrouping", CellHorizontalScrolling->True, PageBreakWithin->False, GroupPageBreakWithin->False, DefaultFormatType->DefaultInputFormatType, AutoItalicWords->{}, FormatType->InputForm, ShowStringCharacters->True, NumberMarks->True, CounterIncrements->"Input", FontWeight->"Bold"], Cell[CellGroupData[{ Cell[StyleData["Output"], CellFrame->{{3, 0}, {0, 0}}, CellMargins->{{52, 10}, {8, 8}}, CellEditDuplicate->True, CellGroupingRules->"OutputGrouping", CellHorizontalScrolling->True, PageBreakWithin->False, GroupPageBreakWithin->False, GeneratedCell->True, CellAutoOverwrite->True, CellLabelMargins->{{5, Inherited}, {Inherited, Inherited}}, DefaultFormatType->DefaultOutputFormatType, AutoItalicWords->{}, FormatType->InputForm, CounterIncrements->"Output", Background->RGBColor[1, 0.900008, 0.900008]], Cell[StyleData["Output", "Presentation"], CellMargins->{{72, Inherited}, {12, 5}}, LineSpacing->{1, 0}], Cell[StyleData["Output", "Condensed"], CellMargins->{{41, Inherited}, {4, 1}}], Cell[StyleData["Output", "Printout"], CellMargins->{{37, 0}, {6, 2}}, Background->GrayLevel[0.900008]] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["Message"], CellMargins->{{52, Inherited}, {Inherited, Inherited}}, CellGroupingRules->"OutputGrouping", PageBreakWithin->False, GroupPageBreakWithin->False, GeneratedCell->True, CellAutoOverwrite->True, ShowCellLabel->False, DefaultFormatType->DefaultOutputFormatType, FormatType->InputForm, CounterIncrements->"Message", StyleMenuListing->None, FontColor->RGBColor[0.900008, 0, 0]], Cell[StyleData["Message", "Presentation"], CellMargins->{{64, Inherited}, {Inherited, Inherited}}, LineSpacing->{1, 0}], Cell[StyleData["Message", "Condensed"], CellMargins->{{41, Inherited}, {Inherited, Inherited}}], Cell[StyleData["Message", "Printout"], CellMargins->{{30, Inherited}, {Inherited, Inherited}}, FontSize->8, FontColor->GrayLevel[0]] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["Print"], CellMargins->{{52, Inherited}, {Inherited, Inherited}}, CellGroupingRules->"OutputGrouping", CellHorizontalScrolling->True, PageBreakWithin->False, GroupPageBreakWithin->False, GeneratedCell->True, CellAutoOverwrite->True, ShowCellLabel->False, DefaultFormatType->DefaultOutputFormatType, FormatType->InputForm, CounterIncrements->"Print", StyleMenuListing->None], Cell[StyleData["Print", "Presentation"], CellMargins->{{64, Inherited}, {Inherited, Inherited}}, LineSpacing->{1, 0}], Cell[StyleData["Print", "Condensed"], CellMargins->{{41, Inherited}, {Inherited, Inherited}}], Cell[StyleData["Print", "Printout"], CellMargins->{{30, Inherited}, {Inherited, Inherited}}, FontSize->8] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["Graphics"], CellMargins->{{4, Inherited}, {Inherited, Inherited}}, CellGroupingRules->"GraphicsGrouping", CellHorizontalScrolling->True, PageBreakWithin->False, GeneratedCell->True, CellAutoOverwrite->True, ShowCellLabel->False, DefaultFormatType->DefaultOutputFormatType, FormatType->InputForm, CounterIncrements->"Graphics", ImageSize->{400, 300}, ImageMargins->{{43, Inherited}, {Inherited, 0}}, StyleMenuListing->None], Cell[StyleData["Graphics", "Presentation"]], Cell[StyleData["Graphics", "Condensed"], ImageMargins->{{38, Inherited}, {Inherited, 0}}, Magnification->0.6], Cell[StyleData["Graphics", "Printout"], ImageMargins->{{28, Inherited}, {Inherited, 0}}, FontSize->9, Magnification->0.8] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["CellLabel"], StyleMenuListing->None, FontFamily->"Swiss721bt", FontSize->11, FontWeight->"Bold", FontColor->RGBColor[0.571389, 0.19675, 0.570504]], Cell[StyleData["CellLabel", "Presentation"], FontSize->12], Cell[StyleData["CellLabel", "Condensed"], FontSize->9], Cell[StyleData["CellLabel", "Printout"], FontFamily->"Courier", FontSize->8, FontSlant->"Italic", FontColor->GrayLevel[0]] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Unique Styles", "Section"], Cell[CellGroupData[{ Cell[StyleData["Bullet"], CellDingbat->"\[FilledCircle]", CellMargins->{{32, 10}, {5, 5}}, LineSpacing->{1, 3}, ParagraphSpacing->{0, 1}, CounterIncrements->"Text"], Cell[StyleData["Bullet", "Presentation"], CellMargins->{{38, 10}, {8, 8}}, LineSpacing->{1, 5}, ParagraphSpacing->{0, 2}], Cell[StyleData["Bullet", "Condensed"], CellMargins->{{24, 10}, {4, 4}}, LineSpacing->{1, 1}], Cell[StyleData["Bullet", "Printout"], CellMargins->{{18, 0}, {4, 4}}] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["Hanging"], CellMargins->{{32, 10}, {5, 5}}, LineSpacing->{1, 3}, ParagraphSpacing->{0, 1}, ParagraphIndent->-20, CounterIncrements->"Text"], Cell[StyleData["Hanging", "Presentation"], CellMargins->{{38, 10}, {8, 8}}, LineSpacing->{1, 5}, ParagraphSpacing->{0, 2}], Cell[StyleData["Hanging", "Condensed"], CellMargins->{{24, 10}, {4, 4}}, LineSpacing->{1, 1}, ParagraphIndent->-16], Cell[StyleData["Hanging", "Printout"], CellMargins->{{18, 0}, {4, 4}}, ParagraphIndent->-9] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["Author"], CellMargins->{{10, 4}, {2, 10}}, FontSize->16, FontSlant->"Italic"], Cell[StyleData["Author", "Presentation"], ShowCellBracket->False, CellMargins->{{18, 10}, {8, 12}}, FontSize->18], Cell[StyleData["Author", "Condensed"], CellMargins->{{8, 10}, {2, 2}}, FontSize->12], Cell[StyleData["Author", "Printout"], CellMargins->{{9, 0}, {4, 12}}, FontSize->14] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["Copyright"], ShowCellBracket->False, CellMargins->{{10, 10}, {40, 2}}, FontFamily->"Swiss721bt", FontSize->9], Cell[StyleData["Copyright", "Presentation"], CellMargins->{{18, 10}, {50, 8}}, LineSpacing->{1, 5}, FontSize->12], Cell[StyleData["Copyright", "Condensed"], CellMargins->{{8, 10}, {12, 2}}, LineSpacing->{1, 2}, FontSize->9], Cell[StyleData["Copyright", "Printout"], CellMargins->{{9, 0}, {72, 4}}, FontSize->7] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["Example"], CellMargins->{{12, 10}, {5, 12}}, LineSpacing->{1, 3}, ParagraphSpacing->{0, 12}, CounterIncrements->"Example", FontWeight->"Bold"], Cell[StyleData["Example", "Presentation"], CellMargins->{{18, 10}, {8, 20}}, LineSpacing->{1, 5}, ParagraphSpacing->{0, 12}], Cell[StyleData["Example", "Condensed"], CellMargins->{{8, 10}, {4, 8}}, LineSpacing->{1, 1}, ParagraphSpacing->{0, 4}], Cell[StyleData["Example", "Printout"], CellMargins->{{9, 0}, {4, 10}}, ParagraphSpacing->{0, 6}] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["DisplayFormula"], CellMargins->{{72, 10}, {5, 5}}, LineSpacing->{1, 3}, ParagraphSpacing->{0, 8}, CounterIncrements->"DisplayFormula"], Cell[StyleData["DisplayFormula", "Presentation"], CellMargins->{{100, 10}, {8, 8}}, LineSpacing->{1, 5}, ParagraphSpacing->{0, 12}], Cell[StyleData["DisplayFormula", "Condensed"], CellMargins->{{60, 10}, {2, 2}}, LineSpacing->{1, 1}, ParagraphSpacing->{0, 4}], Cell[StyleData["DisplayFormula", "Printout"], CellMargins->{{0, 0}, {4, 4}}, TextAlignment->Center, ParagraphSpacing->{0, 6}] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["ExerciseMain"], CellFrame->{{6, 0}, {0, 1}}, CellMargins->{{12, Inherited}, {4, 20}}, CellGroupingRules->{"SectionGrouping", 30}, PageBreakBelow->False, CellFrameColor->RGBColor[0.571389, 0.19675, 0.570504], CounterIncrements->"Subsection", CounterAssignments->{{"Subsubsection", 0}}, FontFamily->"Swiss721bt", FontSize->16, FontWeight->"Bold", FontColor->RGBColor[0.571389, 0.19675, 0.570504]], Cell[StyleData["ExerciseMain", "Presentation"], CellMargins->{{18, 10}, {8, 32}}, LineSpacing->{1, 2}, FontSize->24, FontTracking->"Condensed"], Cell[StyleData["ExerciseMain", "Condensed"], CellMargins->{{8, Inherited}, {2, 12}}, FontSize->12], Cell[StyleData["ExerciseMain", "Printout"], CellMargins->{{9, 0}, {2, 50}}, CellFrameColor->GrayLevel[0.500008], FontSize->14, FontTracking->"Plain", FontColor->GrayLevel[0]] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["Exercise"], CellDingbat->"\[FilledDownTriangle]", CellMargins->{{23, Inherited}, {4, 18}}, CellGroupingRules->{"SectionGrouping", 50}, PageBreakBelow->False, CounterIncrements->"Subsubsection", FontSize->13, FontWeight->"Bold", FontColor->RGBColor[0.571389, 0.19675, 0.570504]], Cell[StyleData["Exercise", "Presentation"], CellMargins->{{33, 10}, {8, 26}}, LineSpacing->{1, 0}, FontSize->18], Cell[StyleData["Exercise", "Condensed"], CellMargins->{{17, Inherited}, {2, 12}}, FontSize->10], Cell[StyleData["Exercise", "Printout"], CellFrame->{{0, 0}, {0.5, 0}}, CellDingbat->None, CellMargins->{{9, 0}, {6, 20}}, FontSize->11, FontColor->GrayLevel[0]] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["ExerciseText"], CellMargins->{{52, 10}, {5, 5}}, LineSpacing->{1, 3}, ParagraphSpacing->{0, 8}, CounterIncrements->"ExcersiceText"], Cell[StyleData["ExerciseText", "Presentation"], CellMargins->{{72, 10}, {8, 8}}, LineSpacing->{1, 5}, ParagraphSpacing->{0, 12}], Cell[StyleData["ExerciseText", "Condensed"], CellMargins->{{40, 10}, {2, 2}}, LineSpacing->{1, 1}, ParagraphSpacing->{0, 4}], Cell[StyleData["ExerciseText", "Printout"], CellMargins->{{37, 0}, {4, 4}}, ParagraphSpacing->{0, 6}] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Styles for Automatic Numbering", "Section"], Cell["\<\ The following styles are useful for numbered equations, figures, \ etc. They automatically give the cell a FrameLabel containing a reference to \ a particular counter, and also increment that counter.\ \>", "Text"], Cell[CellGroupData[{ Cell[StyleData["NumberedEquation"], CellFrameLabels->{{None, Cell[ TextData[ {"(", CounterBox[ "NumberedEquation"], ")"}]]}, {None, None}}, DefaultFormatType->DefaultInputFormatType, TextAlignment->Center, CounterIncrements->"NumberedEquation", FormatTypeAutoConvert->False], Cell[StyleData["NumberedEquation", "Presentation"]], Cell[StyleData["NumberedEquation", "Condensed"]], Cell[StyleData["NumberedEquation", "Printout"]] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["NumberedFigure"], CellMargins->{{4, Inherited}, {Inherited, Inherited}}, CellFrameLabels->{{None, None}, {Cell[ TextData[ {"Figure ", CounterBox[ "NumberedFigure"]}]], None}}, CounterIncrements->"NumberedFigure", ImageMargins->{{43, Inherited}, {Inherited, 0}}, FormatTypeAutoConvert->False], Cell[StyleData["NumberedFigure", "Presentation"]], Cell[StyleData["NumberedFigure", "Condensed"]], Cell[StyleData["NumberedFigure", "Printout"]] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["NumberedTable"], CellMargins->{{44, Inherited}, {Inherited, Inherited}}, CellFrameLabels->{{None, None}, {Cell[ TextData[ {"Table ", CounterBox[ "NumberedTable"]}]], None}}, TextAlignment->Center, CounterIncrements->"NumberedTable", FormatTypeAutoConvert->False], Cell[StyleData["NumberedTable", "Presentation"]], Cell[StyleData["NumberedTable", "Condensed"]], Cell[StyleData["NumberedTable", "Printout"]] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Styles for Headers and Footers", "Section"], Cell[StyleData["Header"], CellMargins->{{0, 0}, {4, 1}}, StyleMenuListing->None, FontFamily->"Swiss721bt", FontSize->9, FontSlant->"Italic"], Cell[StyleData["Footer"], CellMargins->{{0, 0}, {0, 4}}, StyleMenuListing->None, FontFamily->"Swiss721bt", FontSize->6], Cell[StyleData["PageNumber"], CellMargins->{{0, 0}, {4, 1}}, StyleMenuListing->None, FontFamily->"Swiss721bt", FontSize->9, FontWeight->"Bold"] }, Closed]], Cell[CellGroupData[{ Cell["Palette Styles", "Section"], Cell["\<\ The cells below define styles that define standard \ ButtonFunctions, for use in palette buttons.\ \>", "Text"], Cell[StyleData["Paste"], StyleMenuListing->None, ButtonStyleMenuListing->Automatic, ButtonBoxOptions->{ButtonFunction:>(FrontEndExecute[ { FrontEnd`NotebookApply[ FrontEnd`InputNotebook[ ], #, After]}]&)}], Cell[StyleData["Evaluate"], StyleMenuListing->None, ButtonStyleMenuListing->Automatic, ButtonBoxOptions->{ButtonFunction:>(FrontEndExecute[ { FrontEnd`NotebookApply[ FrontEnd`InputNotebook[ ], #, All], SelectionEvaluate[ FrontEnd`InputNotebook[ ], All]}]&)}], Cell[StyleData["EvaluateCell"], StyleMenuListing->None, ButtonStyleMenuListing->Automatic, ButtonBoxOptions->{ButtonFunction:>(FrontEndExecute[ { FrontEnd`NotebookApply[ FrontEnd`InputNotebook[ ], #, All], FrontEnd`SelectionMove[ FrontEnd`InputNotebook[ ], All, Cell, 1], FrontEnd`SelectionEvaluateCreateCell[ FrontEnd`InputNotebook[ ], All]}]&)}], Cell[StyleData["CopyEvaluate"], StyleMenuListing->None, ButtonStyleMenuListing->Automatic, ButtonBoxOptions->{ButtonFunction:>(FrontEndExecute[ { FrontEnd`SelectionCreateCell[ FrontEnd`InputNotebook[ ], All], FrontEnd`NotebookApply[ FrontEnd`InputNotebook[ ], #, All], FrontEnd`SelectionEvaluate[ FrontEnd`InputNotebook[ ], All]}]&)}], Cell[StyleData["CopyEvaluateCell"], StyleMenuListing->None, ButtonStyleMenuListing->Automatic, ButtonBoxOptions->{ButtonFunction:>(FrontEndExecute[ { FrontEnd`SelectionCreateCell[ FrontEnd`InputNotebook[ ], All], FrontEnd`NotebookApply[ FrontEnd`InputNotebook[ ], #, All], FrontEnd`SelectionEvaluateCreateCell[ FrontEnd`InputNotebook[ ], All]}]&)}] }, Closed]], Cell[CellGroupData[{ Cell["Hyperlink Styles", "Section"], Cell["\<\ The cells below define styles useful for making hypertext \ ButtonBoxes. The \"Hyperlink\" style is for links within the same Notebook, \ or between Notebooks.\ \>", "Text"], Cell[CellGroupData[{ Cell[StyleData["Hyperlink"], StyleMenuListing->None, ButtonStyleMenuListing->Automatic, FontColor->RGBColor[0, 0, 1], ButtonBoxOptions->{ButtonFunction:>(FrontEndExecute[ { FrontEnd`NotebookLocate[ #2]}]&), Active->True, ButtonFrame->"None", ButtonNote->ButtonData}], Cell[StyleData["Hyperlink", "Presentation"]], Cell[StyleData["Hyperlink", "Condensed"]], Cell[StyleData["Hyperlink", "Printout"], FontColor->GrayLevel[0]] }, Closed]], Cell["\<\ The following styles are for linking automatically to the on-line \ help system.\ \>", "Text"], Cell[CellGroupData[{ Cell[StyleData["MainBookLink"], StyleMenuListing->None, ButtonStyleMenuListing->Automatic, FontColor->GrayLevel[1], Background->RGBColor[1, 0.4, 0], ButtonBoxOptions->{ButtonFunction:>(FrontEndExecute[ { FrontEnd`HelpBrowserLookup[ "MainBook", #]}]&), Active->True, ButtonFrame->"None"}], Cell[StyleData["MainBookLink", "Presentation"]], Cell[StyleData["MainBookLink", "Condensed"]], Cell[StyleData["MainBookLink", "Printout"], FontColor->GrayLevel[0], Background->GrayLevel[1]] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["AddOnsLink"], StyleMenuListing->None, ButtonStyleMenuListing->Automatic, FontFamily->"Courier", FontColor->GrayLevel[1], Background->RGBColor[1, 0.4, 0], ButtonBoxOptions->{ButtonFunction:>(FrontEndExecute[ { FrontEnd`HelpBrowserLookup[ "AddOns", #]}]&), Active->True, ButtonFrame->"None"}], Cell[StyleData["AddOnsLink", "Presentation"]], Cell[StyleData["AddOnsLink", "Condensed"]], Cell[StyleData["AddOnLink", "Printout"], FontColor->GrayLevel[0], Background->GrayLevel[1]] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["RefGuideLink"], StyleMenuListing->None, ButtonStyleMenuListing->Automatic, FontFamily->"Courier", FontColor->GrayLevel[1], Background->RGBColor[1, 0.4, 0], ButtonBoxOptions->{ButtonFunction:>(FrontEndExecute[ { FrontEnd`HelpBrowserLookup[ "RefGuideLink", #]}]&), Active->True, ButtonFrame->"None"}], Cell[StyleData["RefGuideLink", "Presentation"]], Cell[StyleData["RefGuideLink", "Condensed"]], Cell[StyleData["RefGuideLink", "Printout"], FontColor->GrayLevel[0], Background->GrayLevel[1]] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["GettingStartedLink"], StyleMenuListing->None, ButtonStyleMenuListing->Automatic, FontColor->GrayLevel[1], Background->RGBColor[1, 0.4, 0], ButtonBoxOptions->{ButtonFunction:>(FrontEndExecute[ { FrontEnd`HelpBrowserLookup[ "GettingStarted", #]}]&), Active->True, ButtonFrame->"None"}], Cell[StyleData["GettingStartedLink", "Presentation"]], Cell[StyleData["GettingStartedLink", "Condensed"]], Cell[StyleData["GettingStartedLink", "Printout"], FontColor->GrayLevel[0], Background->GrayLevel[1]] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["OtherInformationLink"], StyleMenuListing->None, ButtonStyleMenuListing->Automatic, FontColor->GrayLevel[1], Background->RGBColor[1, 0.4, 0], ButtonBoxOptions->{ButtonFunction:>(FrontEndExecute[ { FrontEnd`HelpBrowserLookup[ "OtherInformation", #]}]&), Active->True, ButtonFrame->"None"}], Cell[StyleData["OtherInformationLink", "Presentation"]], Cell[StyleData["OtherInformationLink", "Condensed"]], Cell[StyleData["OtherInformationLink", "Printout"], FontColor->GrayLevel[0], Background->GrayLevel[1]] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Placeholder Styles", "Section"], Cell["\<\ The cells below define styles useful for making placeholder \ objects in palette templates.\ \>", "Text"], Cell[CellGroupData[{ Cell[StyleData["Placeholder"], Editable->False, Selectable->False, StyleBoxAutoDelete->True, Placeholder->True, StyleMenuListing->None], Cell[StyleData["Placeholder", "Presentation"]], Cell[StyleData["Placeholder", "Condensed"]], Cell[StyleData["Placeholder", "Printout"]] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["SelectionPlaceholder"], Editable->False, Selectable->False, StyleBoxAutoDelete->True, Placeholder->PrimaryPlaceholder, StyleMenuListing->None, DrawHighlighted->True], Cell[StyleData["SelectionPlaceholder", "Presentation"]], Cell[StyleData["SelectionPlaceholder", "Condensed"]], Cell[StyleData["SelectionPlaceholder", "Printout"]] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["FormatType Styles", "Section"], Cell["\<\ The cells below define styles that are mixed in with the styles \ of most cells. If a cell's FormatType matches the name of one of the styles \ defined below, then that style is applied between the cell's style and its \ own options. This is particularly true of Input and Output.\ \>", "Text"], Cell[StyleData["CellExpression"], PageWidth->Infinity, CellMargins->{{6, Inherited}, {Inherited, Inherited}}, ShowCellLabel->False, ShowSpecialCharacters->False, AllowInlineCells->False, AutoItalicWords->{}, StyleMenuListing->None, FontFamily->"Courier", FontSize->12, Background->GrayLevel[1]], Cell[StyleData["InputForm"], AllowInlineCells->False, StyleMenuListing->None, FontFamily->"Courier"], Cell[StyleData["OutputForm"], PageWidth->Infinity, TextAlignment->Left, LineSpacing->{0.6, 1}, StyleMenuListing->None, FontFamily->"Courier"], Cell[StyleData["StandardForm"], LineSpacing->{1.25, 0}, StyleMenuListing->None, FontFamily->"Courier"], Cell[StyleData["TraditionalForm"], LineSpacing->{1.25, 0}, SingleLetterItalics->True, TraditionalFunctionNotation->True, DelimiterMatching->None, StyleMenuListing->None], Cell["\<\ The style defined below is mixed in to any cell that is in an \ inline cell within another.\ \>", "Text"], Cell[StyleData["InlineCell"], TextAlignment->Left, ScriptLevel->1, StyleMenuListing->None], Cell[CellGroupData[{ Cell[StyleData["InlineCellEditing"], StyleMenuListing->None], Cell[StyleData["InlineCellEditing", "Working"], StyleMenuListing->None, Background->RGBColor[1, 0.749996, 0.8]] }, Open ]] }, Closed]] }, Open ]] }] ] (******************************************************************* Cached data follows. If you edit this Notebook file directly, not using Mathematica, you must remove the line containing CacheID at the top of the file. The cache data will then be recreated when you save this file from within Mathematica. *******************************************************************) (*CellTagsOutline CellTagsIndex->{ "PolyFactoring"->{ Cell[189695, 3819, 140, 4, 48, "Subsection", CellTags->"PolyFactoring"]} } *) (*CellTagsIndex CellTagsIndex->{ {"PolyFactoring", 256476, 6092} } *) (*NotebookFileOutline Notebook[{ Cell[1705, 50, 140, 4, 94, "Title"], Cell[1848, 56, 362, 10, 93, "Subtitle"], Cell[2213, 68, 152575, 2511, 283, "Text"], Cell[154791, 2581, 957, 19, 86, "Text"], Cell[155751, 2602, 382, 6, 86, "Text"], Cell[156136, 2610, 525, 13, 48, "Text", Evaluatable->False], Cell[156664, 2625, 236, 6, 48, "Text", Evaluatable->False], Cell[156903, 2633, 831, 16, 67, "Text", Evaluatable->False], Cell[157737, 2651, 308, 7, 67, "Text", Evaluatable->False], Cell[158048, 2660, 99, 1, 26, "SmallText"], Cell[CellGroupData[{ Cell[158172, 2665, 64, 3, 77, "Section"], Cell[CellGroupData[{ Cell[158261, 2672, 189, 4, 64, "Subsection"], Cell[158453, 2678, 195, 4, 49, "Bullet"], Cell[158651, 2684, 212, 4, 49, "Bullet"], Cell[158866, 2690, 264, 6, 49, "Bullet"] }, Closed]], Cell[CellGroupData[{ Cell[159167, 2701, 106, 3, 48, "Subsection"], Cell[159276, 2706, 361, 12, 49, "Bullet"], Cell[159640, 2720, 328, 10, 49, "Bullet"] }, Closed]], Cell[CellGroupData[{ Cell[160005, 2735, 153, 4, 48, "Subsection"], Cell[160161, 2741, 181, 4, 49, "Bullet"], Cell[160345, 2747, 394, 10, 89, "Bullet"], Cell[160742, 2759, 291, 10, 49, "Bullet"], Cell[161036, 2771, 249, 6, 49, "Bullet"], Cell[161288, 2779, 277, 6, 49, "Bullet"], Cell[161568, 2787, 324, 6, 49, "Bullet"], Cell[161895, 2795, 172, 4, 49, "Bullet"], Cell[162070, 2801, 83, 3, 49, "Bullet"], Cell[162156, 2806, 242, 6, 49, "Bullet"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[162447, 2818, 70, 1, 35, "Section"], Cell[CellGroupData[{ Cell[162542, 2823, 92, 3, 64, "Subsection"], Cell[162637, 2828, 143, 1, 26, "SmallText"], Cell[162783, 2831, 72, 2, 26, "SmallText"], Cell[162858, 2835, 386, 6, 48, "Text"], Cell[163247, 2843, 111, 3, 29, "Text"], Cell[163361, 2848, 81, 1, 34, "Input"], Cell[163445, 2851, 144, 1, 29, "Text"], Cell[163592, 2854, 54, 0, 29, "Text"], Cell[163649, 2856, 114, 3, 52, "Input"], Cell[163766, 2861, 548, 12, 50, "Text"], Cell[164317, 2875, 247, 7, 49, "Text"], Cell[164567, 2884, 120, 1, 29, "Text"], Cell[164690, 2887, 54, 0, 29, "Text"], Cell[164747, 2889, 48, 1, 34, "Input"], Cell[164798, 2892, 49, 1, 34, "Input"], Cell[164850, 2895, 90, 1, 29, "Text"], Cell[164943, 2898, 31, 0, 29, "Text"], Cell[164977, 2900, 50, 1, 34, "Input"], Cell[165030, 2903, 90, 1, 29, "Text"], Cell[165123, 2906, 51, 0, 29, "Text"], Cell[165177, 2908, 85, 1, 34, "Input"], Cell[165265, 2911, 90, 1, 29, "Text"], Cell[165358, 2914, 34, 0, 29, "Text"], Cell[165395, 2916, 77, 1, 34, "Input"], Cell[165475, 2919, 108, 1, 29, "Text"], Cell[165586, 2922, 42, 0, 29, "Text"], Cell[165631, 2924, 84, 1, 34, "Input"], Cell[165718, 2927, 79, 1, 34, "Input"], Cell[165800, 2930, 90, 1, 29, "Text"], Cell[165893, 2933, 30, 0, 29, "Text"], Cell[165926, 2935, 61, 1, 34, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[166024, 2941, 84, 3, 48, "Subsection"], Cell[166111, 2946, 250, 6, 29, "Text"], Cell[166364, 2954, 158, 5, 29, "Text"], Cell[166525, 2961, 254, 12, 34, "Input", Evaluatable->False], Cell[166782, 2975, 196, 9, 34, "Input", Evaluatable->False], Cell[166981, 2986, 1198, 26, 68, "Text"], Cell[168182, 3014, 333, 8, 68, "Text"], Cell[168518, 3024, 108, 1, 29, "Text"], Cell[168629, 3027, 35, 0, 29, "Text"], Cell[168667, 3029, 85, 1, 34, "Input", Evaluatable->False], Cell[168755, 3032, 138, 1, 29, "Text"], Cell[168896, 3035, 52, 0, 29, "Text"], Cell[168951, 3037, 63, 2, 34, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[169051, 3044, 94, 3, 48, "Subsection"], Cell[169148, 3049, 144, 1, 29, "Text"], Cell[169295, 3052, 51, 0, 29, "Text"], Cell[169349, 3054, 106, 2, 34, "Input", Evaluatable->False], Cell[169458, 3058, 252, 7, 106, "Input"], Cell[169713, 3067, 679, 17, 30, "Text"], Cell[170395, 3086, 203, 6, 30, "Text"], Cell[170601, 3094, 223, 3, 29, "Text"], Cell[170827, 3099, 143, 5, 29, "Text"], Cell[170973, 3106, 449, 10, 94, "Input"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[171471, 3122, 168, 4, 57, "Section"], Cell[171642, 3128, 226, 4, 29, "Text"], Cell[171871, 3134, 75, 0, 29, "Text"], Cell[CellGroupData[{ Cell[171971, 3138, 181, 4, 64, "Subsection"], Cell[172155, 3144, 112, 6, 34, "Input", Evaluatable->False], Cell[172270, 3152, 182, 4, 29, "Text"], Cell[172455, 3158, 96, 3, 29, "Text"], Cell[172554, 3163, 119, 6, 34, "Input", Evaluatable->False], Cell[172676, 3171, 462, 14, 30, "Text"], Cell[173141, 3187, 374, 13, 30, "Text"], Cell[173518, 3202, 174, 9, 34, "Input", Evaluatable->False], Cell[173695, 3213, 259, 5, 29, "Text"], Cell[173957, 3220, 125, 3, 29, "Text"], Cell[174085, 3225, 546, 8, 67, "Text"], Cell[174634, 3235, 236, 5, 48, "Text"], Cell[174873, 3242, 207, 10, 34, "Input", Evaluatable->False], Cell[175083, 3254, 96, 1, 29, "Text"], Cell[175182, 3257, 38, 0, 29, "Text"], Cell[175223, 3259, 96, 2, 34, "Input", Evaluatable->False], Cell[175322, 3263, 663, 21, 178, "Input", Evaluatable->False] }, Closed]], Cell[CellGroupData[{ Cell[176022, 3289, 171, 4, 48, "Subsection"], Cell[176196, 3295, 449, 8, 68, "Text"], Cell[176648, 3305, 152, 4, 49, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[176837, 3314, 45, 3, 48, "Subsection"], Cell[176885, 3319, 253, 5, 29, "Text"], Cell[177141, 3326, 91, 3, 29, "Text"], Cell[177235, 3331, 113, 3, 54, "Input"], Cell[177351, 3336, 132, 1, 29, "Text"], Cell[177486, 3339, 54, 0, 29, "Text"], Cell[CellGroupData[{ Cell[177565, 3343, 63, 1, 34, "Input"], Cell[177631, 3346, 40, 1, 49, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[177708, 3352, 41, 1, 34, "Input"], Cell[177752, 3355, 35, 1, 49, "Output"] }, Open ]], Cell[177802, 3359, 126, 1, 29, "Text"], Cell[177931, 3362, 34, 0, 29, "Text"], Cell[CellGroupData[{ Cell[177990, 3366, 65, 1, 34, "Input"], Cell[178058, 3369, 80, 1, 49, "Output"] }, Open ]], Cell[178153, 3373, 76, 0, 29, "Text"], Cell[178232, 3375, 31, 0, 29, "Text"], Cell[CellGroupData[{ Cell[178288, 3379, 47, 1, 34, "Input"], Cell[178338, 3382, 58, 1, 49, "Output"] }, Open ]], Cell[178411, 3386, 264, 5, 29, "Text"], Cell[178678, 3393, 117, 3, 29, "Text"], Cell[CellGroupData[{ Cell[178820, 3400, 65, 1, 34, "Input"], Cell[178888, 3403, 55, 1, 49, "Output"] }, Open ]], Cell[178958, 3407, 84, 1, 29, "Text"], Cell[179045, 3410, 24, 0, 29, "Text"], Cell[CellGroupData[{ Cell[179094, 3414, 43, 1, 34, "Input"], Cell[179140, 3417, 37, 1, 49, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[179226, 3424, 87, 3, 48, "Subsection"], Cell[179316, 3429, 294, 5, 48, "Text"], Cell[179613, 3436, 134, 3, 48, "Text"], Cell[179750, 3441, 604, 10, 67, "Text"], Cell[180357, 3453, 221, 5, 68, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[180615, 3463, 124, 4, 48, "Subsection"], Cell[180742, 3469, 152, 1, 29, "Text"], Cell[180897, 3472, 40, 0, 29, "Text"], Cell[180940, 3474, 57, 1, 34, "Input"], Cell[181000, 3477, 138, 1, 29, "Text"], Cell[181141, 3480, 44, 0, 29, "Text"], Cell[181188, 3482, 87, 1, 34, "Input"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[181324, 3489, 71, 3, 57, "Section"], Cell[CellGroupData[{ Cell[181420, 3496, 134, 4, 82, "Subsection"], Cell[181557, 3502, 134, 3, 34, "Input", Evaluatable->False], Cell[181694, 3507, 217, 5, 29, "Text"], Cell[181914, 3514, 142, 5, 29, "Text"], Cell[182059, 3521, 138, 1, 29, "Text"], Cell[182200, 3524, 66, 0, 29, "Text"], Cell[182269, 3526, 79, 1, 34, "Input", Evaluatable->False], Cell[182351, 3529, 581, 20, 52, "Input", Evaluatable->False] }, Closed]], Cell[CellGroupData[{ Cell[182969, 3554, 89, 3, 48, "Subsection"], Cell[183061, 3559, 132, 3, 34, "Input", Evaluatable->False], Cell[183196, 3564, 209, 6, 29, "Text"], Cell[183408, 3572, 171, 6, 29, "Text"], Cell[183582, 3580, 321, 8, 49, "Text"], Cell[183906, 3590, 142, 4, 30, "Text"], Cell[184051, 3596, 285, 9, 52, "Input", Evaluatable->False] }, Closed]], Cell[CellGroupData[{ Cell[184373, 3610, 64, 3, 48, "Subsection"], Cell[184440, 3615, 226, 4, 29, "Text"], Cell[184669, 3621, 116, 3, 29, "Text"], Cell[184788, 3626, 519, 17, 70, "Input", Evaluatable->False] }, Closed]], Cell[CellGroupData[{ Cell[185344, 3648, 85, 3, 48, "Subsection"], Cell[CellGroupData[{ Cell[185454, 3655, 77, 1, 35, "Input"], Cell[185534, 3658, 47, 1, 49, "Output"] }, Open ]], Cell[185596, 3662, 54, 1, 34, "Input"], Cell[185653, 3665, 54, 1, 34, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[185744, 3671, 132, 4, 48, "Subsection"], Cell[185879, 3677, 170, 2, 29, "Text"], Cell[186052, 3681, 91, 3, 29, "Text"], Cell[186146, 3686, 276, 6, 49, "Bullet"], Cell[186425, 3694, 213, 5, 49, "Bullet"], Cell[186641, 3701, 134, 3, 34, "Input", Evaluatable->False], Cell[186778, 3706, 162, 7, 34, "Input", Evaluatable->False], Cell[186943, 3715, 839, 15, 106, "Text"], Cell[187785, 3732, 379, 10, 68, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[188201, 3747, 111, 3, 48, "Subsection"], Cell[CellGroupData[{ Cell[188337, 3754, 125, 3, 54, "Subsubsection"], Cell[188465, 3759, 48, 1, 34, "Input"], Cell[188516, 3762, 92, 1, 34, "Input"], Cell[188611, 3765, 83, 1, 34, "Input"] }, Open ]], Cell[CellGroupData[{ Cell[188731, 3771, 144, 4, 54, "Subsubsection"], Cell[188878, 3777, 73, 1, 34, "Input"], Cell[188954, 3780, 52, 0, 29, "Text"], Cell[189009, 3782, 22, 0, 29, "Text"], Cell[189034, 3784, 49, 1, 34, "Input"], Cell[CellGroupData[{ Cell[189108, 3789, 53, 1, 34, "Input"], Cell[189164, 3792, 82, 1, 49, "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[189295, 3799, 58, 3, 54, "Subsubsection"], Cell[CellGroupData[{ Cell[189378, 3806, 69, 1, 34, "Input"], Cell[189450, 3809, 184, 3, 68, "Output"] }, Open ]] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[189695, 3819, 140, 4, 48, "Subsection", CellTags->"PolyFactoring"], Cell[189838, 3825, 144, 1, 29, "Text"], Cell[189985, 3828, 68, 0, 29, "Text"], Cell[190056, 3830, 92, 1, 55, "Input"], Cell[190151, 3833, 63, 1, 34, "Input"], Cell[190217, 3836, 54, 1, 34, "Input"], Cell[190274, 3839, 368, 6, 48, "Text"], Cell[190645, 3847, 108, 3, 29, "Text"], Cell[190756, 3852, 1101, 25, 274, "Input"], Cell[191860, 3879, 126, 1, 29, "Text"], Cell[191989, 3882, 51, 0, 29, "Text"], Cell[192043, 3884, 42, 1, 34, "Input"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[192134, 3891, 91, 3, 57, "Section"], Cell[192228, 3896, 164, 2, 29, "Text"], Cell[192395, 3900, 62, 0, 29, "Text"], Cell[192460, 3902, 96, 3, 49, "Bullet"], Cell[192559, 3907, 70, 3, 49, "Bullet"], Cell[192632, 3912, 164, 2, 29, "Text"], Cell[192799, 3916, 90, 3, 29, "Text"], Cell[192892, 3921, 602, 9, 67, "Text"], Cell[193497, 3932, 257, 5, 67, "Text"], Cell[CellGroupData[{ Cell[193779, 3941, 127, 3, 64, "Subsection"], Cell[193909, 3946, 374, 6, 48, "Text"], Cell[194286, 3954, 155, 3, 48, "Text"], Cell[194444, 3959, 166, 4, 34, "Input", Evaluatable->False], Cell[194613, 3965, 133, 3, 34, "Input", Evaluatable->False] }, Closed]], Cell[CellGroupData[{ Cell[194783, 3973, 45, 3, 48, "Subsection"], Cell[194831, 3978, 125, 1, 26, "SmallText"], Cell[194959, 3981, 43, 0, 26, "SmallText"], Cell[195005, 3983, 69, 1, 34, "Input"], Cell[195077, 3986, 84, 1, 29, "Text"], Cell[195164, 3989, 41, 0, 29, "Text"], Cell[195208, 3991, 59, 1, 34, "Input"], Cell[195270, 3994, 96, 1, 29, "Text"], Cell[195369, 3997, 28, 0, 29, "Text"], Cell[195400, 3999, 44, 1, 34, "Input"], Cell[195447, 4002, 56, 1, 34, "Input"], Cell[195506, 4005, 64, 1, 34, "Input"], Cell[195573, 4008, 34, 1, 34, "Input"], Cell[195610, 4011, 52, 0, 29, "Text"], Cell[195665, 4013, 30, 0, 29, "Text"], Cell[195698, 4015, 62, 1, 34, "Input"], Cell[195763, 4018, 34, 1, 34, "Input"], Cell[195800, 4021, 472, 7, 48, "Text"], Cell[196275, 4030, 197, 4, 48, "Text"], Cell[196475, 4036, 344, 6, 48, "Text"], Cell[196822, 4044, 163, 4, 48, "Text"], Cell[196988, 4050, 843, 19, 154, "Input"], Cell[197834, 4071, 34, 1, 34, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[197905, 4077, 58, 3, 48, "Subsection"], Cell[197966, 4082, 431, 8, 48, "Text"], Cell[198400, 4092, 353, 12, 48, "Text"], Cell[198756, 4106, 100, 3, 34, "Input", Evaluatable->False], Cell[198859, 4111, 924, 29, 50, "Text"], Cell[199786, 4142, 430, 17, 50, "Text"], Cell[200219, 4161, 80, 1, 34, "Input"], Cell[200302, 4164, 53, 1, 34, "Input"], Cell[200358, 4167, 60, 1, 34, "Input"], Cell[200421, 4170, 60, 1, 34, "Input"], Cell[200484, 4173, 51, 1, 34, "Input"], Cell[200538, 4176, 60, 1, 34, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[200635, 4182, 96, 3, 48, "Subsection"], Cell[200734, 4187, 478, 8, 48, "Text"], Cell[201215, 4197, 254, 6, 48, "Text"], Cell[201472, 4205, 59, 1, 34, "Input"], Cell[201534, 4208, 54, 1, 34, "Input"], Cell[201591, 4211, 1395, 31, 234, "Input"], Cell[202989, 4244, 34, 1, 34, "Input"], Cell[203026, 4247, 54, 1, 34, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[203117, 4253, 102, 3, 48, "Subsection"], Cell[203222, 4258, 592, 9, 67, "Text"], Cell[203817, 4269, 216, 4, 48, "Text"], Cell[204036, 4275, 664, 16, 49, "Text"], Cell[204703, 4293, 284, 9, 49, "Text"], Cell[204990, 4304, 58, 1, 34, "Input"], Cell[205051, 4307, 70, 1, 34, "Input"], Cell[205124, 4310, 145, 1, 29, "Text"], Cell[205272, 4313, 55, 0, 29, "Text"], Cell[205330, 4315, 52, 1, 34, "Input"], Cell[205385, 4318, 176, 2, 29, "Text"], Cell[205564, 4322, 91, 3, 29, "Text"], Cell[205658, 4327, 3433, 75, 374, "Input"], Cell[209094, 4404, 68, 1, 34, "Input"], Cell[209165, 4407, 225, 4, 29, "Text"], Cell[209393, 4413, 95, 3, 29, "Text"], Cell[209491, 4418, 83, 2, 34, "Input", Evaluatable->False], Cell[209577, 4422, 89, 1, 34, "Input"], Cell[209669, 4425, 56, 1, 34, "Input"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[209774, 4432, 102, 3, 57, "Section"], Cell[209879, 4437, 169, 4, 29, "Text"], Cell[210051, 4443, 45, 0, 29, "Text"], Cell[CellGroupData[{ Cell[210121, 4447, 152, 4, 64, "Subsection"], Cell[210276, 4453, 156, 1, 29, "Text"], Cell[210435, 4456, 58, 0, 29, "Text"], Cell[210496, 4458, 401, 6, 57, "Input"], Cell[210900, 4466, 700, 23, 49, "Text"], Cell[211603, 4491, 292, 12, 51, "Text"], Cell[CellGroupData[{ Cell[211920, 4507, 82, 1, 34, "Input"], Cell[212005, 4510, 247, 4, 106, "Output"] }, Open ]], Cell[212267, 4517, 638, 15, 69, "Text"], Cell[212908, 4534, 297, 9, 69, "Text"], Cell[CellGroupData[{ Cell[213230, 4547, 117, 3, 54, "Input"], Cell[213350, 4552, 70, 1, 49, "Output"] }, Open ]], Cell[213435, 4556, 272, 5, 48, "Text"], Cell[213710, 4563, 126, 3, 29, "Text"], Cell[CellGroupData[{ Cell[213861, 4570, 57, 1, 34, "Input"], Cell[213921, 4573, 66, 1, 49, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[214024, 4579, 54, 1, 34, "Input"], Cell[214081, 4582, 235, 4, 106, "Output"] }, Open ]], Cell[214331, 4589, 210, 4, 29, "Text"], Cell[214544, 4595, 101, 3, 29, "Text"], Cell[CellGroupData[{ Cell[214670, 4602, 65, 1, 34, "Input"], Cell[214738, 4605, 245, 4, 106, "Output"] }, Open ]], Cell[214998, 4612, 784, 17, 68, "Text"], Cell[215785, 4631, 345, 10, 68, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[216167, 4646, 142, 4, 48, "Subsection"], Cell[216312, 4652, 211, 6, 48, "Text"], Cell[216526, 4660, 188, 5, 48, "Text"], Cell[216717, 4667, 85, 1, 29, "DisplayFormula"], Cell[216805, 4670, 69, 1, 34, "Input"], Cell[216877, 4673, 126, 1, 29, "Text"], Cell[217006, 4676, 55, 0, 29, "Text"], Cell[217064, 4678, 44, 1, 34, "Input"], Cell[217111, 4681, 138, 3, 74, "Input"], Cell[217252, 4686, 63, 1, 34, "Input"], Cell[217318, 4689, 215, 4, 29, "Text"], Cell[217536, 4695, 89, 3, 29, "Text"], Cell[CellGroupData[{ Cell[217650, 4702, 110, 2, 54, "Input"], Cell[217763, 4706, 35, 1, 49, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[217835, 4712, 40, 1, 34, "Input"], Cell[217878, 4715, 35, 1, 49, "Output"] }, Open ]], Cell[217928, 4719, 90, 1, 29, "Text"], Cell[218021, 4722, 31, 0, 29, "Text"], Cell[218055, 4724, 583, 11, 254, "Input"], Cell[218641, 4737, 176, 2, 29, "Text"], Cell[218820, 4741, 48, 0, 29, "Text"], Cell[218871, 4743, 72, 1, 34, "Input"], Cell[218946, 4746, 132, 1, 29, "Text"], Cell[219081, 4749, 43, 0, 29, "Text"], Cell[219127, 4751, 106, 2, 54, "Input"], Cell[219236, 4755, 54, 1, 34, "Input"], Cell[219293, 4758, 54, 1, 34, "Input"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[219396, 4765, 88, 3, 57, "Section"], Cell[CellGroupData[{ Cell[219509, 4772, 81, 3, 64, "Subsection"], Cell[219593, 4777, 127, 1, 29, "Text"], Cell[219723, 4780, 55, 0, 29, "Text"], Cell[CellGroupData[{ Cell[219803, 4784, 184, 3, 88, "Input"], Cell[219990, 4789, 46, 1, 49, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[220085, 4796, 113, 3, 48, "Subsection"], Cell[220201, 4801, 220, 4, 29, "Text"], Cell[220424, 4807, 99, 3, 29, "Text"], Cell[220526, 4812, 200, 2, 29, "Text"], Cell[220729, 4816, 94, 3, 29, "Text"], Cell[220826, 4821, 232, 4, 29, "Text"], Cell[221061, 4827, 119, 3, 29, "Text"], Cell[221183, 4832, 637, 12, 152, "Input"], Cell[CellGroupData[{ Cell[221845, 4848, 51, 1, 34, "Input"], Cell[221899, 4851, 78, 1, 49, "Output"] }, Open ]] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[222038, 4859, 102, 3, 57, "Section"], Cell[222143, 4864, 281, 5, 29, "Text"], Cell[222427, 4871, 274, 5, 29, "Text"], Cell[222704, 4878, 315, 6, 29, "Text"], Cell[223022, 4886, 279, 5, 29, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[223338, 4896, 63, 3, 57, "Section"], Cell[223404, 4901, 403, 8, 48, "Text"], Cell[223810, 4911, 205, 6, 48, "Text"], Cell[224018, 4919, 577, 11, 67, "Text"], Cell[224598, 4932, 257, 7, 48, "Text"] }, Closed]] } ] *) (******************************************************************* End of Mathematica Notebook file. *******************************************************************)