BLENDER_v223REND T1SRdI\SRscreen<ܩ̨, DATAJ\DATA\J DATA J\DATAJl DATAlJ̯DATA̯J|lDATA|J,̯DATA,Jܮ|DATAܮJ,DATAJܮDATA<K \DATAK<DATAKLlDATALK̯DATAKLl̯DATAK\\|DATA\K  ,DATA K\,|DATAKl lܮDATAlKܮ̯DATAK̪l|DATA̪K|,DATA|K,̪ܮDATA,Kܩ|,̯DATAܩK,l|DATĄL|l̯dp{D;BJDDDATABDdCIzաD@@J`CC(BDC?z?DATA@D/9DATA|Ll̨|\ ,d;BDDDATAlL,|l|ܮ| m=ˇ=o?dgD;BCgDgD<DATA><????????| m=ˇ=o?p=AMqA??p=A B? #<CWWDATA@<D/9DATA,Llܮ,̯??Pףdp{D;BpOI{D{D,DATA,AlzC̽̌?zC@ #< #<`jFzD OBzC̽̌?DATAl>,??? ???? A???PA A!O?j?}GCHB? A B? #<C@h@hDATA@Dl/9SRd\I,SRscreen.001 <L  DATA JDATAJl DATAlJDATAJ̹lDATA̹J|HDATA|J,̹HDATA,Jܸ|DATAܸJ,DATAJ<ܸHDATA<JDATALKlDATAKL̹ DATAK\|DATA\K |̹DATA K\ DATAKl ,̹DATAlK,DATAK̴lܸlDATA̴K|ܸ,DATA|K,̴̹DATA,Kܳ||DATAܳK,<,DATAK<ܳ<ܸDATA<K<DATAK<ܸ|DATAL ̹|L$L$L!L!?8@PףE1E0 1d;BPEFRF, hQDATAXG ,??? ???? A??8@PA Aj?! >}GCHB? A B? #<C DATA@,D,/9DATALL,lܸ==::W=uAo?d;BDD\\lLDATA\>l?!$uhɵu?x>׼N3??k?&=oɵ$<ԍ>u?e9=ux>?Q@L@?-=޻=SaUE;'@:ֺdAJGt_0з?wHXA%( ?οj:<=-0CL' ?R@L@?P}L?n(XA B?=CQL \ \MZ* DATA~\ zCCHBC?CFC= ADATAXG ; *N?.0zDATAAzC AzC A #< #<`jFzD OBDATAB\DdCDv@CC(BDC?z?DATA@\D SAVE FILERYEC:\Program Files\Blender\Scripts\Fiber 13\Bezier\.\\..\lend\Text\.\Fiber14.blendlendnd.blendwDATALL̹,<7744>v>o?KK_` VdgD;BCgDgDDATA>46?_c=<]x|n?ħK,>{n?Z#??46?]xħK_c=|n?,><|n?5CAC>LG>?s>ls<O8x2e>x;:l=V/AZ:?_[@Q}U/>'x@c?ZE43CO5CAC>CG>?y{?:54 =E \@ B?=C3CCKGf7 DATAXG, ; =DATA,~< zCCHBC?CFC= ADATA<Al,zC AzC A #< #<`jFzD OBDATAlB<DdCDv@CC(BDC?z?DATA@DlSAVE FILERYEC:\Program Files\Blender\Scripts\Fiber 13\Bezier\iber14Backup.blend\Text\Fiber14Bezier.blendlendnd.blendwCSDATALL<ܸ|11MMW= Y=o?KK_`  VId;BPEFRFsIDATAXsGf 1 =<>NDATAf>lasl?!$uhɵu?x>׼N3??k?&=oɵ$<ԍ>u?e9=ux>?Q@L@?-= :SaUE;qq<:ֺ\Q=JG0з?wHXA%( ?οXA>ɡ@+}A,0CL' ?S@M@?P}L?n(XA B?=CQLMZ* DATAla~Zf zCCHBC?CFC= ADATAZAelazC AzC A #< #<`jFzD OBDATAeBIZDdCDv@CC(BDC?z?DATA@IDeSAVE FILERYEC:\Program Files\Blender\Scripts\Fiber 13\Bezier\.\\..\lend\Text\.\Fiber14Bezier.blendd.blendwCSSRd,I\SRscreen.002<|, DATA<JLDATALJ<DATAJLLDATALJDATAJLDATAJ\DATA\J DATA J\DATAJl \DATAlJ\DATAJl\DATAJDATA|K,LDATA,K|<LDATAK,<DATAK<LDATA<KDATAK<L\DATAKL DATALK \DATAKLDATAK\\DATA\K l DATA K\lDATAKl lDATAlKDATAKllDATAK|\DATA|K, DATA,K|DATAL <LCdp{D;BJDDLDATALBDdCIzաD@@J`CC(BDC?z?DATA@DL/9DATA L\L d;BDDDATAL l8=i>o?YYR dp{D;B0CKpD< DATA<C|zCAzCARR A@FB= A DATA|> <????????8=i>o?fffAD&@??fffA B? #<CDATA@ D|AVE TARGA/t1.blend9DATAL l8=H>o?__stB dp{D;B0CKpD< DATA<C|zCAzCA1||1 A@FB= A DATA|> <????????8=H>o?fffA*@??fffA B? #<C>>DATA@ D|AVE TARGA/t1.blend9DATAL\8=>o?__stBdp{D;BpOI{D{D DATA ALB̽̌?B̽̌?BB #< #<`jFzD SQB̽̌?DATAL> ????????8=>o?fffA@??fffA B? #<CzzDATA@DLOAD FILE/9SC <SC1,e< dA{=dd??< 2dd??_@??////render/Wind//#DATA,e9  fDATA 9< ,e DATA< 9  <-DATA 9 <  \*DATA 9L   DATAL 9  |'DATA9L  <DATA9\ KDATA\9  )\DATA 9\ ,DATA9  K|OB6OBCamera.001 o\>??4o?>o<T">Gq?w>8ca>T@|v@??????FZ "3=@???OB6<OBGrassTexture< [j?e䣇A????????[j?e䣇A?????4o?킲>o<U">Gq?w>8cb>H @A ?Dd?? #=?>=@???DATAOB<6\OBHill,?|?????????????4o?>o<b">Dq? w>8cb>T@}w@?DOBd?? #=?>=@???DATA|OB\6|<OBLamp LIAž2QA???M?q> ???xš>?bo?Oy=>4=4?ս$?}ϯ /?Až2QA??????<ј> >0JH?fY>+w)-=@???OB|6\OBLamp.001 \H@kխ_rAT@|v@?????!?{c=}?T@|v@?Ĕq?,Թ>(>o>zX޴<c?>Yn>H?Ŕq?'>ߴ<,o>c?ѹ>wX>*u9T4?Dd?? #=?>=@???OB6f|OBMesh:A????????A?????DOBd?? #=?>=?@???OBf6OBMesh.001?????????????Dd?? #=?>=?@???OB6<-fOBPlane.001_Fiber.C|4?????????????Dd?? #=?>=?@???OB<-6\*OBPlanedA{=????????dA{=?????Dd?? #=?>=?@???OB\*6|'<-OBPlane_Fiber.C&?????????????Dd?? #=?>=?@???OB|'6\*OBWind0ڂ oB@@w`@awIA??@w`@awIA0ڂ oB@?????=<^=D:aue @=幙=.1= K<WX?A&`>?Dd?? #=?>=?@???ME2& fMEPlane.001-,1,1 4? ??DATA/ ???  ??.4?@4Z3R3DATA0*ME&2< MEPlane_Fiber.CL-::,!",!!P?}e?@@#@DATAp"/,P;\ߠ$?mf? v5{?Xy6@<[@< |->X@d?/q>@ ?#>+@y0@?|.?k>[?Z? ?II@LaѾc??%~&?pLd2@֜0 n@׿m%Rӭ>-?Qힵ2@0@$ho_ @.p?]@7d?@0@*:@wi@?0>ri@f?bڔ?]li@UC? @fi@h ?5I@B@m@ Q"@@$H>`+@?@r?p}4@@i@ec??#??Pٿ<>M9@2]a>Es@&Jg@ݲ?0+@{@A @fE@םݿ@s@}@Pxbg3<B*o@ͭi{?n`@"?eQ@;x:@DATA,!*!     #""!! '&&%%$+**))(ME< 2,?&MEPlane.002|<@4???DATA 1DATA</@4ME,?2:< MEPlane001/|C|C>;<Q@z@/%>~?<@ @K?DATA>NDATAT</Q2@@D=H.Jr2@\D=RZD=C~@ /? G9pƔ?T@# Թ@54? ?j|<@?l@Až`yȵ{>Jw?.| >je>|@ Tj>HU} F@b3>= 9?)F"bJ)[GL@=b|l2B@6@"ubE'y_?0`@2W|Ů@hr@6;?5$s[Vk#@o?Isj 8y>k? w52@?8=.i!&=Ri< !{_1?'{/I@ҧ?4]s;UC@ YP@+ =}sJ@f3+=2:~4:= {| D??nz&.Iޗ?OH?]wяBF@@Tp{r`?N?~wTrT??eJ̾Y@w~F0YB@zK?H>aoϲuԊ>!ީvbEW@Y#S'#gtb3'@H?@ku?Y@vS${˦@ @Jyi~@*? #X8sm @KV@X)2 }:@4@}w{̊?@J. #{ɻ? n>񎽽R@)?e>7y@B@w>dzW@!j@Lx=gzV@_>=pw~.@Ͽ@@6,uDq@@j?[$$rzW@ſ> @t=aGig~ @[5>0 }~> |V? H8{O@ }{T@A{[r ~NI?tW.;E@ǚL>p>W@.^ q>^4/,kG {F 󫾦F{D:6HIV'>By~,1A?e}b>1|W>{&f'|@[*C<k}dfr:?1z:)>A+yf_J\ B @~@(d7T|z+?q '}H@;;f>]/R~7@?3 >} ?(?l<K ~m? z@FǾO~1Hx@y>1Nrի?{a?4rc?E?=*x\9B@*9@|@L@h!R x@Y^=@]_#.K|DATA;*@?P@7O8-N.#M$LK J"_"I'(H*G,,F12E(4D6_6C;B2=A7>A=<A>A<<B9B< 2B9I 9C6*:C9;C:Y 5D43D5 6D3h 3E2"/E3 (E/ /F,*0F/ 1F09+G*)G+3 ,G) )H(2%H)H%I%I"J&I%3 'I&Y!J J!{"JK2KKLLLM#!M$M!q &N-+N&.N+ 0O75O0 8O5:P?>P:@P>DATA0 tmEl.E[SMpQF;Ia͈`[TZVb`[b li>uBK0uBK0YAKali}UbviWR#vbzvR#vzz}~zaj<~aj<~YAK0UYA~jKaYAU4aj *#  b   GUhGVTZWWuBVhG*#bVWuB*#WuBF;I>WovF;IWuBr{a͈F;Iovr{ovWqTovyECYqkqTroaamifror{roifr{iflTa͈m~lTif}lT~~m~rrdcmd4`dyECqTpQSMWhGpQqTGU]@# @h@,9@DATAp,7/,P;`ߠgژgi?LP#jq?lA"Uu.:@ִza2 =6@V`=>)@sl?e~|>@U?z$P>U@].@ru1x?,$܅B?=M$D?Bl'>&@|v@?1ɊsMwP9,?s+@A@=֭W@N@|@|Vu6ֿ;#NB\޿6>{Bc˲?lٳٴ@P/>(@ p >|j(@ ^B?pD7$@ @'\VN@ VIv@z"v@Hs?'T?wu!@`'E??bu.ގ@|>*?u 0C@m@ k0uQ"@@$H>1u9_+@?@r?11su4@5@n@0o(dO?E?[1U4ۿvo?"K@  lzP@?Ό@~o@>Ť@k6cCڂ@ ?i;$.G@@Yk},J)&@@x%l1.4nk@.@ҫlb2\F@޸KԘ'x@ϩ82{?Jʙ:j@r`ߠ?EF!V@p@a>Ҙ*DATAl5*!     #""!! '&&%%$+*)*)(ME|42:MEPlane.001_Fiber.Cl.L0<` eABߑ?(@lc??DATA@<`/#AAs&*t?#A@ ~A<۵?)A+)A?+A>Y? A.g̾h=C?/zA1>[.jA~K??A6k>Z*?K.A̓?M#ABU?AŲ? .?YA6Y?$@=\. #ABU?@@DATAL0*      ME2|4MEPlane.001_Fiber.0\LDxZAH]?@L;?]?DATAD/HA4AA1-Aս̛>MADqwN?A?AԽR ?3Ax]?A)ܾ?cA<&T=AGo=ZA=zl>A= X?qAH=n?0Ayԇ?K8Aj:#?ACƻ?AA@-An6gA~z>PAh]HM?A᯿ ? A ]?SAſ?FA~ۿj?A[$Af@Arξ5>MAپ5:N?#A?2Af>?.;AY?jAC?\?A }AȇiA 5W>$A!@N?F@A8yP?A5at?zAО?At˳47?A=azA命A (>AH'GN?Ac?SSAF;o?JAL?A.Jž+c@A꤁ݒA.&vA^zϕ>APM?]}Aa4?A'0&?ڣAOaN?AK/?AXAyCY[A\^>kAchM?\AmT?OAQ?+A$?MPAD?A;A=A-I Z>]AlN?A@Yܛ?Apw?K7A\J5?YA@ABA"Ai`>_A*N?Af&ֽ ??A?@gAj1?jA0S@AMX>A(0zA]Y Q>A YN?A{? A^M?*AuŖ?^AJ?MAg¿?APؿ3?A A(6A"">d#Ay&N?qA,9?mA-e*?AbG:?6IA}o?MA>GA UxAaMr>.ASؽM?A3\͕?cAn3p?fEAhOg?}Avh?A#A{lKAu=>A HM?AD,)?jkA A,?e(ANd?AVy?A|w8A&ܯA, ?>ADM?A~M?z)Am8?nA񌿞/?TAѩ?Ai?"A_AbA&>aAM?Ajm?,A?WT?Aq y?A&9T?ڛA=}A=rAS>AdټN?#AMcw?AA;p5?Q.A!?hAUè@jAOSA^t@AV>{A,1|M?8A瘿S? !Ar? A8?UAdƿ?VAW[iA8CmB.AaXP>fA?kggM?Aʒpϖ?_AҾ?A|?GSA?A *=A=A/<>wArّxN?,A2?_Afl0?A?Ai@A?ШΎAƱA/u>1AoM?oAq?ϱA~8?A`ɿ&?{A޿?Y5A`!uAsYA>BA2(N?A%m?Aľ|I?A-r?HA'%?yA0Ͼ&AWAaݾf>A[龕,N?A^V]?SAY ?~A % E?AL>s?sAaZNAy\A e>0A-PY?AcC)?rAě?{AI AfdN?CA꽺К?|A%M?NAw]I?mA㾾O?mA/YAIнJAjL{>xAc"N?A"?A !?* A%Ծ>U?FAg?gAyAިAZ>@A3aM?cAKj?]Aة?@ABIO?Aiο?AiAAۿ>~ AW*M?gAC)?AA'?AN?[AcOԿP?tA`DwA[ pIA2}x>ArM?A7?w.Au'0?WA)??XAg?&RAJAH&AwsP(>.dA%VM? An_? A,;q ?Apc?Q3A6{?A)AͯHA{O' >A2٣M?9A3?A0?cZA%OWX?zAɇJG?Az$A3cAF}w>A"M?ATެ?=A%\?*A{YĿl]?_Abڿ?5?KA׾v=AoA)>A5-N?Ae?|8A#j?=Ad(f?VAP?m5A?cA Ao>TEAdM?Apӳ?A`Ґ?Aÿy?..Aٿj_?A8SA$C At~>| AXlN?JAbCٙ?AF?ڝAܾU?urA.r?4AqAZ@]AI1>cA'M?LA˳?aA6k?AĿ^[?A`ڿ?VOAhOA T+AT>fA4ZM?7Aqd.]?6$A`A5OM?1AȘO/?A࠿?Ar?7\AÿL?A "AAYp>3AAi#Y?xADk?AؾD,?AY+#?. AQH ?|ASyABA X>AA2M?xzAꔿJ?bA≝W?A?)A¿?AF9<O>&ALRN?A떽V?A罛??Ah;Ā?tAӘC@AHxAZnAN>A2SM?|A]R[?A*pda?A)q?AZ+6?[A( 'A:QA-^>Az3oM?8A=?LA/oP?!#A ot?:AK1X?AU0=8A?>AOU =e6>Az2A<(O?A̷ApnN? A؊4AEM?xAyOc\?Aac?wAgU!?A;7=?XAӐSAx/AU%_>1A 0ϵN?A‰?HA*j?wAT=?AQh@HA%Aq Amw9>`AlSyM?hA :?Am ?AFAy[?~A>s\? -ADA2AJ>SAAOM?˪AYra?Alo?Afj?2A[?A,lD9A~/Az1s> ASxM?.AT6?pqApſ? fAڷE?TA(v? ALAAq>tAt.N?hAW?Ahb?TA{]W?0A̿?sA~ؽϡA-Az $@>Ae#_N?ZAB䇙?A.wB?A Q ?0sAxQ?PUAxUA?)f'Aʜ}>YiAծM?At?5A ם?Al &b?B A᣶?AASv]A[?>֔Aۻ$M?A-ޖ?k3A}j>S?j#AuZ!)?hAic?rAw'A:~2KAl0&>A`M?HA'?qALb9+?AESx?tA>Ŀ?AޚA#nA>L A N?]Aގž?^A͓?GAm .?')A4:?AgA7ɾAr#>LA.N?A Nb?ZAQ-?QA6C?yAlaC?kA|7=AJbDEA >yAYM?gA??Aܿ?Agɞߵ?xA?AeCA>dA{?>AN?GA@c?%A뻿h?#Aȿb?Arݿ?HA(Af A4r>XAM?cAs]?jAz"e?,A\h.?>AVtϿ?A,AA漜>AZhM?`AK:Y?A⬿b?Ad?uAѿ%:?%sAȾA8ξiQAb2׾~>Q}AS/N?ARm?Aj`k? AƇ!c?WAuI?ArL4A#:QnAA\XM?!A~aq?VJAȔr:?'6A%?!AȝՂ?6AƭAoaV=JA=&>_AK'= Z?OAk<α?0A6?q:A+?yAMA?*AJXvAڌ<kA뱽>A'jN?A %?Ak<!?(A퇾i?vA8˾U?IAj A1wAl> A== s?AThG?AW?=&A}O?=AzL.?A녿c9AyT5A ? >!gAd?\4AA@?poA#K?A[EA4w$?A&%CY?ɒA. x??AX (}?AXᨽFMq?AEAƽMAh9>Aj"Z?AI?Ai^Qm?Až?A?bAK AAZ>Aq?AӁ^C?7A@:Q??A3/E?mAZA/ ?vAm3lAw}UAn>smA$?[A,;F?65AM=ZV?A.>0M?A=E+?bA԰)AԾIA>A3@7?AShD=?x=A&=E?A=]4?n[ApO=b ?bA@'AA:>5Ai}?AbVE? AӔE%S?uA.A8&I?AA Q ?2ABXN?#AMqi,d?dAJdb?AvppG?DAlK_=p)A=QAE٩=9>Aj7>!?JA5e>W^Q?~+AE>#i?]_A>Yoj? Aԏ>OS?jxAAAӾAyо> OA&?NA7?A:?_As[ =#?4A>Af&AŖjAgӾ>(A9^?wTA,C?ADAK9x#?AԜU?WA|q?AP-v?/A b?WAnAy-A{ےI>AA,"?A nR?LaAR*j?aAmAQv=ُ ?A>>WM?A\>b?l0Ap>_?$Aҗ>D?AK(kAG`E7A>nLAz_?AžoG?2 A: ;W?=lAmaN?A拾.?~Ax; A'>A.$>`A`?iAԾ, 6?A+ 7?6A|r?0AG>\A$վ>AkþAD>)AQ?AlA޽`9?8AS\<=?^ A= (?4A;>;A6AHA,a >An}?A|U۾W3B?A쨟tM?=AɄw@?1Aꦡ&?rAA͊A٦߾>&AƳ@? A˖9Abf~?AMfPjA>=IY?Aݍ3>&J?E Az>}\?`A@>vV?JA,>(8?C@A9&[AMvnAsǡY6>A6 Y?{KAl?'AԂ?1Aܾ#?vAS&?AZ#&qA GAP'>-A2ʎY?KA^1?UAX?1AHپJ?Ad$?@AǾA@ϾA=w7>EA2sT%%?A)eFZ?$A炽 z?MA{q?^A l t?ƟAv@jA#.eA8>PAW?AAҕK?A$¾_?A/nZ?KLA¾&~=?dA_<=aA#\ A!=>VEA)=oZ?Ag^= Ö?ApF?& Au?=A60@?A{B {ArT/AP3%>;kAT0Y?X-A,ؽx? ASl?:A/-Ҿ?WAr"LF?@!A;AbtuA >A?QA15@?iAN=@K?CA>jdA1Q?^A54'>?A(7G?}(A<{o7?A[Los?_XAA޾A&PVAƾs>)Az ? %A\8?A:&J=jAKɪAVξA>>APe ?.AȡnN? AǷ@AW>@"?W A۩>8R?Av>Ek?A5>Ql?A>!,V?ѷAb-GAcoQA!Y>B0A_=y?AF?vAtzU?8dAAPK?iA#,)?A*]A>KRA'Q>—AxP4z?|A$I?%A6Ř5?Ayg6K?jAetp^? iA GgsbAA?A~?I?PAbZ?{fATS?#ACb*4?AcAx;u?Ag;>>8A=o ?Ai>M?wAq>mkc?EA>`?#gAo>9F?Ajw #rAݖ3Ab>6ARԾ?AK? A4z{_?0ACZ?A4:>?3AkVA#AR򘿸>wA֌"?SAzS?N+A;_l?WAfR.o?ѿAC^aY? AhfA?A >A!?A\dk 2A?&"A5L?QAv=?)A8?xA؝AgΦ]!A^Y>{A5w"?IoA1g}R?>HA2b]l?uAWUVrn?wAldadX?Ab A6miA<>)A۬N<ݽ?AT>1vH?Aۂ>fY?@AJ>pQ?}A8>E1?QA9xAzzAyM >sA\?A۟9^3@?AxDJ?+A :?A'?LAoZKbAB&g]Ar2>Ań?GAď=C?MvAŬ>>xO?EALt>|B?qAr;>?iQAW Aw%CAX"!V>\AZ?lAK½V?NAap?kXA5;e?ʖA,} ?%DAޤ,A;űA!|>RAŲ;?A5I¾3>? AaG?AT6?%A4A ?qAHAG[Ak=>|*A4j^?#A+dmLjAQLͽ?A^#@?AJ+PJ?lZA(0A9-?A:?HAibӾ??AW+?S{A׾d>A/Ae_Ayg >֋AZp] |? RA2:.B?IA9zM?)A&d{k@?A?AE/= PAi=dA:=T>0A=*>*"?ZA1>WQ?#8APZ>j?XiA>!l?A!>6HU?ǥǍA A3>AM?AJ?ݨAplD\?AF_NV?wAl7?A5+)dA?.AQv>sA[Xc? XA!QA𯗾?Ax* \I?A3_0 [?5TAMFT?A5Zcj75?A[AzDAOɁ >xAf?HACk@?hAe%ʫJ?Ap#;? A&B?A:ۋAДA`׆>,Aq?A O-%C?Ap1aO?A $C?AU2?AپA辵&A`.ʾr>AN㗾&!?טA9i0)O?ՅA@e?KA{UmUd?3A~J?}A+ A똿AĒ>շA?P!?94A`lO?A Qf?.ZADce?APRL?AiAWA{`>!AsEL?A7#8;G?%A1%W?'A4 bN?AD;L-?ABž7>Ax@wA3=b'>6,A$ע=.Z?pAkyAY2?ZALH?A qΑX?! ArcƉP?`A iqA10?A U8A)CIAKJ >QA- ?!A @?9^AaپA =+ ?pcAA>mL?m_A:]>F`?ĨAʄ>\?A?>@?Aw]AGW\~A}m >ʫA.2Qc?sA].A?*A{iM?2 Ab ??.A,?eAvRAԦ~AǓn>A腿7?ߥAi8D?AKQ?;A[>F? AL"?ApaMAqb3AU\>}A 8?aiAž^;?Ah龔jA?jVAvLξX-?A2 F-?ADBA38A >eAd;f?-A#BPA?bA $\wM?tA\??_eA&%O?pABA)<A{t >( A"E ?+AD;@?A="TK?A8F1>+:A#P?Y?AjB?[ϙ?AZ&?P?٬A>? AR>C$?ܳAq? A]9w?IA֌?T\>A=?X?kA4t?Y?.ARr?|?6AL?F?՝A0?2?|A> ?~AH?4Ar?=>A?1[?&A^: ?DP?;Af~>/'?AcI>?Au_?AM?$lA?bA4?>Ac?W?DAZ??A+R?T?*A]?l?T}Aل?.?=&Af?A{?A땣?>(0AN?IX?Aq?Z?fqA/?X?3xA~?b?AQ?z?Az?LAȏ?aAן?>A?Z@X?JdA?n?=AW??!Aw??Ac%K?T?A\]?Aj?;A]n?_>"AaDo?X?ZA*}a?"?ƃA+tF?޾?‹A?,?A>?A1>Ax>"A>>XA4>ZZ?&Ae">?A^M>ŵ?AUAG>5A>g>sAaP>+$Z?HA>d?7AF0>2?؝Ao=:?A R?˸A<>'HAD>ZA&>%>Ap+>͕Y?A쬼>攘?ʇA3>Vt?EA=G?AIg?AW?A\?**Azj?>Ak?rcY?tA4]??FA???OA-?j?A>?iA q?pA]{?xAO?>tAס?NX?A΃?_Q?ɶA:8?=?A[z?"3?n3AlM?1w?*WAf ?A}?AF?р>ƏAK ?*UY?;A]?? A|>?uA>?PjA=T?NA-?2Ap66?:A>?>Aq??X?McA1? ?(AĜ?ھ?0Art>%?Ay>q?lA}>AMo>A>>&A >{Z?9A@ï>߉?AU>? AlVAV?yX?ZA[֍??CA*?f4?sA;]?^X?ˎA\/?x?o8AT>A^׹>A/>t>DA.q>Z?Aɪ>yb?oA;~J>3?~{Auk;O?JAtk?5cA?1A"?A#*?p>kAK-?]Z?AB?e?CAkA>ɲ?XA>?A9UfA~?%Y?= ANp?H?AAT??AY+? ?;Ar>|?A6]?*Aڈ?m/Aj?>VAjŊ?X?;LAG?? Am?C?AQH?J?~A_v?Z?A/#>IA5.=A" x>=>cNA>Y?A@>@?RAU^=? A0!ؽ?3A:m?=iA;4>AAފ>*>nAɏ>$qZ?:AK[> ?PA,==?Aj޽h?A?)?A<>EA2q>AyU>>BAי>#?BAG@>kV?wAl?r?bA5}?ix?.A?e?A>QA>aAl?5>7A ?J[?$A>.?$A*>?1A=?#GA?7DAB?A 0?AmR?3>fA1S?X?,AB F?/?A+??Ae?n?3A>?SA?X?Ay?-Ú?A>?C?~Ak)b?_?AF 3?VK?7A¤>*A͹>A; ?4>KA[?,y[?DAj>?Ar>?IA=?~A7?A)?BAW5?_AӂA?>A\C?OZ?dA 3??\Aد? ?WA˲>7b? A?>'D?YA?SA?:MAs?>A?IW?:A ?&?Ai?A?A?p?qA??A?A7(?A%?>AVAj?X?SA \?ۙ?οAp@??A?$?'A8>m?bA~?kA:l?-AkH?6>RA'?şX?GAy?Ϣ?Ag?#M?2AB??zA?AX?QA%*?AaA $D?NZ?Ao3? ?vA?W?nA%s>r? Al>\?FkAֆ?A?AK?R>fA?6W?7Aw?A ?GAr?T?hA5ɚ??9An?)?A#>D,A2>sA/?~>EAZ?)[?.A3?6?*Aw>ް?w7A.>$?QA곽?ȋA|>AA?&A<?j>dAm?\'Y?bA ??.Ap>=?7Al>7?AFI=?Aي?A>>5A0?k>EQA{ ?Y?AD??aA>^?qAe> 8?/:A0=g?A>8A>;A>>A 9?4l[?A>`?S A<ԍ>F?A=J?o(AcOjk?zAM?'AwR?1UAj-a?h>}Ab?hY? AS?a?sA'E6??|Ai ?1?Ae>P?'A ?dAs?gA/?j>m&Aƺ?W X?Ak?]?YYA?R?_A? ? A=??>Aw?94A:?WA•?0#>*Al?W?A{ʙ?Ȝ?EA?i?jKA~?h?6AXV?-y?Ar >{?A<+>At>T3>NA$>wZ?R/Av8>l?%A=O?2A&?SAԾm?3As?A~?0A&?>p4Ag7?X?AY?͛?iAZS??pAbN?4?+A{? ?A ?{`AP?ebAR?Q>bA L?X?.A^??[WA>k?~_A^>^?)A=gb?Ap֣?(A9d?A]?C>heA`ߨ?uW?_AZf? ?zwA/?b?|Aۉ?^e?~ Al? ?A>y*A s>JA\>9H>WAu>"Z?A/>Ƥ?,Aޮy>ȷ?Aق=:??DA%s?]A?Az?}AV?WP>m"A?V?rxA?y?[ A*?8?AI?KA? Ak?@A&>.A>^AS4>>5A7.?Y?ZA[>?$A>?AhJ#>?AW+?ǍAj>fA`؞>R,Au> >EA>eY?qwAH>?IA>"?RAT=xR?ApV?dA>wAz>ڷAFj>>{A>Z?TAyڮ>7?EAv>Q>ι?QAA[-?=z>A%?+V?A(?6?Al?|?Ao??+A~=?M@ЧAyg?tAT o?R;ATzw?>A`*x?lX?VAj?ޘ?AP?0?A\8+?Z?A> ?QA?A?0Aܙ?>PApN?*V?A|?ρ?lA{?Q?VpA|?Km?AsqZ?B5@gA?AAԄ?A!?*>IAEk?eW?Al?;B?XA??]Av̚?8?A4? ?@Aå?A7[%?*A3?>uA5?&Z?AOd%?^?͉A?G?tA>? Av=R?$IA?AE?DA ?>mRAD5?FX?`AR?zb?ܒAd?n?A?*?rAW??c?Ab?9Al?EA?>GAJ?AX?WA_?xk?pA.?AAO>As>}l>JJA >Z?W&A>-?A>,?x%A=C?KA/?A_?AZ%M?=AQq?ne>(A|r?S!Y?|UA)d?ߍ?Z!A.G?8?)A,c?9?>Av>>8?A9>v AAL?m|Y?AZ@?$˘?A>>?2A8n>[?"AԺ<?ARzE?A6>?AbU??>AqV?мX?AO+I?d?szAϫ.?q?.AÍ? ?AS>?A>KtAq>1AOO>>>A[>%?+A ?O\?AK"? }?bAG/?^[?1A$?>{? AH8?WA:]&?KA"MN?`>AEP?9Y?oAuK@?Vϗ?Aw ?B?A >Y?"APf>?>|A䔣?wA!?CAf?>A#~?F!X?GAuW?6?WAn?N?ѽA7@??>9Aߏb?F?]Ax?:A}? >AW?k>A?X?UA ?ʷ?ArCn?و?4AwI?%?AM??fAb?-A?s?N#A!?%>TA?+pW?An?+?/Ap?5?;AR? ?,A"+?a?9A?2A}?K1A?^>lA|ݺ?O&V?Aʷ?? 4AB-?[?p6A??^Ad?@A?Ao?A4.??>A@x1?|Z?qaA! ?K?QA_6>J?F]AK>R?AŃK=N?}AjEQ? A0c?Aέd?>Af?kaY?%fABW??7A 9??AA?À?[Asy>3?xA>AB>.AN>F:>riA+5>O?UAJ*>n?zAC>R?AM>\4@c(A==@4AޙM>[Au>ADˉ> >\A΋>]X?Aˢ_>?AY7=:8?A 29?-At?9Ah?1ATE?rT?7AMd?Ú?Q,Av??,Al?C@=A]K?@AQ>@Aw>AA >H>A>O?˼A=ǚ?A=?YAQs=uy@4AOZ74@AW>1A%.>!A݅>r>NA`>U?Ae>?aA%1>cO?A[x=?EAn @A$n? Ac?akA(ڳ?">ԛAʲ?5U?vAI?ñ?NAB?S?yPAN?k?Ae?k @. AM?AQC?5UA}?>5BAx?#S?.A߿u?|?uAh%r?/?rAl?@Aa?k@AYG'?3A?p5A?1Z> A4? R?A?ݦ?A[?Q?SAqJ?z @c2AEb:?Y?GA8*?.?"A ?YQ?,A`>>?sA>?A`?A-N?>AER?>PAL?4R?<`A"oL?5?wA+FO??v~A>R?@AVR?$(@jA>@3>ARz>A\%S>7>y6AQ O>V?A'>;Q?(AX=`?,ANv?A~@Ac?\ AbQ?`AY?L>AT?R?R|AcR??AQ?o+?eAlO?| @AJ?!@DAgK>ôAuu>_BAw>> 4A>TO?q4A~=WV?^A=^?AAL=@A5Ѽd@yAx?!A:ut?4A l?Ƚ>Af?nR?|Ane?ާ?A>g?%?AF?oQ?qAAzRG? ?2VAM??NAT?s@AY?]-@_Ae{!?_Af3?1Af?>A ?ZP?AR ?:G?TAY ??ϟA@ ? @0A@f?(_@jA?IAB?A?>A ?~S?Au?~?tA@Ɯ?H?[A?A @jA?@6A(>UA[2,>AX>L{>\A>Z?~AAzR>}d?mA\=Y9?]yAˆ#?HAԻ*z?Au?Ac??Ai?><Ad?R?(Ac?jb? Ac??7A@c?U @ 9A`_?#@B(AY?A?fAAL?2>;Ai6 ?R?A ?="?[CA ??>Aj=?) @eAҀ?"@>dA>A&Lv>nA}> >IA"d>" P?,A[>h?COAjT>?AA>b4@$0A>*@73xA;?:S?hAܛ?4?AÙ?y`?dAS??@A?Y@^AϤ1?qATC? 2AX"?>A?~jP?GA??AA?Q?A@?@ @3YA/>:S?;A>A,?zA>"?IwAZ>D @Ar>@A?#Ay?,A?>ASz?%R?\Ay?q?AV-z?m?Auy? @ǴAv?#@CA(?Ae?AH?M>A]?K T?AX?j?~gAp?.$?eA޴?,@@cAح?f@ŔA_?iA? APޡ?J>A^П?S?fAC?s?Aț?AJ?\S?A?a? A?P?T A?Q @A;?@*Ah>A?>A9x>i+>?A>8X?A>a>К?}A >>?ЖAA>P?Ayf$1?JPAOE?VA_;W?bAv46?r>/A2/?\P?EA.?[R?A9/?K+?Av-?R @bAw'?@5A`>A{>A4>,>Al>W?jA^^>H?A9k >? Aϰf<[w?NAg4?AV?_4A|?$Ag?>RAY?8S?ӎAS?/? A~n?,?cAj?ƿ @=Al? @Aj?w^AtŬ?A?>A?VS?-AP?]?2#A?u?A?X @4A+?r@A4>ATA>#A>IU>d>wrAb<>O?dAz)0>?xA">? A>@IAd\=g@"Aɸ>A.U>'+A C> >AD>QZ?A]y>Q?A>c?A=K?Ac"?ɏA>A>A>>A>S?Aw>>?Aν>|?AH>!Y@ Aٙ>y@ۄAĐ?A?A?>OAg2?T?A2?v?AV?ZE?AԂ?]@Aw?@GA)?A;?A  ?k>hA;?S?iFA?s?AO??~Ad9?xk @A$ ? @A荱?A c?NA%?>A?[S?Ad?2+?$A C?[G?!A@Ƥ?G)@+A% ?8@AA?5A?*1AvF?$>A?S? A?Ws?SA??PA?@]A~j?G@ A\8>%A]=,A`>>AP>UY?sAO>?DAE=#?MA0?XAJ?UAW I?%AZ?AS?(>=ANS?W?gAmH??FTA=3??YA?8?A8>?0$A}?A}2?A9?> AG?`W?yAb??(&A>.?y+AQţ>7?A*@(>L?hA?Aѳ?-APv?è>wsAJ q?R?(@Ao?K?npA7p??ykAgp?'*@wA>m?2$@'ADC?9Al]8?UA[3?p>) A<-?Q?A-?"b?A"U2?#F?A܉7?.@A:?. +@A >YA>BAI>=+>RAZ>T?dA> ?bAG>~/?Ak>@?Ar\>.@AzX?a`A ?$A\G?(>'Ajy?FT?/,A8?z?Aaϴ??At?@ zA ?؏@QA!/? AA?GA\%?>qA> ? S?LA?U?A?B?A9?h @1A ?y @tA{=?rA/?qAa.?>SA(?W\P?9$A&?EO?AAa'?#?uA !&? @A?w@\AV>sA>xfAxi>h>^CA%WP>TO?(AF>(?KAs>> ?Ap)>@AET=L@DAN?Aj+?`A&?_Q>JUA ?R?%A?\E?YAs? C?gTAA?k @}A?#@Ah>6A]>dAFe>Mm>(A)ik>mY?˵A(/>˜?A}~^=_?ГAu}/?@A8֥A?yFAIZ?AD^H?A~N?ʾ>RA}@I?R?h ALH?z?BQAH??YLAMH?}@xAD?#@A?3CA?A{?m>U'AѲ?T?J5AOG?~Q?qA=?%?A?%t@bA,?"F@A.>1tAH>oKA> s>6AI>xS?AJ>Ƨ?dA_>?aAP>9f @rAJ> @;A;>Ad>+AK>>A>WS?A>?\A>?YA>@aA>@E A؉>A1>(A2]>Ѽ>AD>O?AI:>kݢ?Aݩ0>Z?A>@/Al=T@ADQ?A9?AA?>|/Au?BS?yA?q?cAE??aA?F@nAuw?B@#\A?AٚA)?ݽS?As??:A8?W?A?@AV?z@&Ar?)Am?oA_r?]>Aqm?R?UAl??Aim?qR?~A\m?u@Aٙj?$@Aֹ?5,A+?mA`?>0AF?'S?A?t8?1A?m?.A%?K@E9A?j@}A7?mHA,?LA\?^>>RA?x^T?YACA?I?XA ??0?A?K@AE?b@AN?MA^?iAe?{>A?fV?A"kAQ?S?kaA,?fؤ?Aᵬ?[?3Ap?V@A}w?@bA/:R>A>A$>f0>^Af>>W?A_V>A ݌?U?#AV?=?kYA'??ZAs?dV?4)Ad[?Ay @^Aɟ>[A %>AFl>\J>jA6>BV? @Ao>:>?pAm>B?A>B?7A#=@}|A?`A?A`?uٿ>A?|R?}eA??&?A??pAR? @sAvՃ?U"@ A?ZTA ?>dA?ս>qA%?T?aA0?1?Ak8?B?"A>#@A>@DATAML*x     "!#"$#%$&%'&*)+*,+-,.-/.213243546576:9;:<;=<>=?>BACBDCEDFEGFJIKJLKMLNMONRQSRTSUTVUWVZY[Z\[]\^]_^bacbdcedfegfjikjlkmlnmonrqsrtsutvuwvzy{z|{}|~}~         "!#"$#%$&%'&*)+*,+-,.-/.213243546576:9;:<;=<>=?>BACBDCEDFEGFJIKJLKMLNMONRQSRTSUTVUWVZY[Z\[]\^]_^bacbdcedfegfjikjlkmlnmonrqsrtsutvuwvzy{z|{}|~}~         "!#"$#%$&%'&*)+*,+-,.-/.213243546576:9;:<;=<>=?>BACBDCEDFEGFJIKJLKMLNMONRQSRTSUTVUWVZY[Z\[]\^]_^bacbdcedfegfjikjlkmlnmonrqsrtsutvuwvzy{z|{}|~}~         "!#"$#%$&%'&*)+*,+-,.-/.213243546576:9;:<;=<>=?>BACBDCEDFEGFJIKJLKMLNMONRQSRTSUTVUWVZY[Z\[]\^]_^bacbdcedfegfjikjlkmlnmonrqsrtsutvuwvzy{z|{}|~}~         "!#"$#%$&%'&*)+*,+-,.-/.213243546576:9;:<;=<>=?>BACBDCEDFEGFJIKJLKMLNMONRQSRTSUTVUWVZY[Z\[]\^]_^bacbdcedfegfjikjlkmlnmonrqsrtsutvuwvzy{z|{}|~}~         "!#"$#%$&%'&*)+*,+-,.-/.213243546576:9;:<;=<>=?>BACBDCEDFEGFJIKJLKMLNMONRQSRTSUTVUWVZY[Z\[]\^]_^bacbdcedfegfjikjlkmlnmonrqsrtsutvuwvzy{z|{}|~}~         "!#"$#%$&%'&*)+*,+-,.-/.213243546576:9;:<;=<>=?>BACBDCEDFEGFJIKJLKMLNMONRQSRTSUTVUWVZY[Z\[]\^]_^bacbdcedfegfjikjlkmlnmonrqsrtsutvuwvzy{z|{}|~}~         "!#"$#%$&%'&*)+*,+-,.-/.213243546576:9;:<;=<>=?>BACBDCEDFEGFJIKJLKMLNMONRQSRTSUTVUWVZY[Z\[]\^]_^bacbdcedfegfjikjlkmlnmonrqsrtsutvuwvzy{z|{}|~}~         "!#"$#%$&%'&*)+*,+-,.-/.213243546576:9;:<;=<>=?>BACBDCEDFEGFJIKJLKMLNMONRQSRTSUTVUWVZY[Z\[]\^]_^bacbdcedfegfjikjlkmlnmonrqsrtsutvuwvzy{z|{}|~}~MA 1!NMAGrass6>?????????:?'!>  ???0?DATAP0|M??????????MAN! 1MAVcolorDirt.001>o>????????L?Fΰ= ???\N?DATAP\NJ??????????TE|MJTEGrassTex4>@qx????????KDATAK?? A$TB4B@@@LA\HLILALamp.001I????GB4B>??? B4B?@@TXdGlZTXControlPointsLG<0\ALB\F DATA4LGc:\Documents and Settings\dennisa\Desktop\Bezier.pyDATA<0FADATAFF<0@|IDATAF\FF@,?DATA\F FF<@PDATA FE\F_+,0DATAElE F\_)rpolDATAlEEE^-o enDATAEDlE^/o enDATAD|DE<^+DATA|D,DD] DATA,DC|D]DATACC,Dl]DATACDATA<܉| DATA<{DATA<{ DATALL{p2):DATALz9@DATAL|z)DATA\z+DATA\ y9ADATA \,yH[3],DATAl xp2):DATAlxDATA̅l,x9____DATA̅|w9reenDATA|,̅\w/____DATA,܄|v9DATA܄,|v9DATA<܄v.DATA<u.DATA<,uVDATALtVDATAL tVz?>DATALsOn1?DATA\|sDATA\ s-FREEDATA \rDATAl r Q>DATAl\rDATÀl rDATÀ|q9____DATA|,̀DATA\ ,%hpDATA \̋%4DATAl l$DATAl,L!P>DATA̚l̊&h ?DATA̚|LFDATA|,̚DATA,ܙ|DATAܙ,lDATA<ܙ, reenDATA<DATA<2,p3DATAL<+def DATAL܇)EW %DATAL|- DATA\ 0DATA\ +DATA \l DATAl ,DATAl܅DATA̕lDATA̕|LDATA|,̕\DATA,ܔ||LDATAܔ,< eenDATA<ܔpy| DATA<reenDATA<<9____DATAL̂;____DATAL\= DATAL;DATA\ConsDATA\ L`DATA \ (leDATAl ,!DATAllDATA̐l,DATA̐|#DATA|,̐|reenDATA,̯|#reenDATA̯|,̞DATA|,̯ elDATA,ܮ|<DATAܮ,DATA<ܮum].DATA<lDATA<,t.NeDATALDATALreenDATALF(DATA\̛faceDATA\ FREEDATA \QreenDATAl DATAllcoorDATA̪l3276DATA̪|̙LDATA|,̪|DATA,ܩ|,DATAܩ,̘*DATA<ܩ|DATA<,DATA<ܗ] /=DATALreenDATALLDATAL  ,oDATA\li])[DATA\ DATA \ܕreenDATAl DATAl<reenDATḀlܔ"e(3)DATḀ||"DATA|,̥,DATA,ܤ|LkDATAܤ,|7(DATA<ܤ*DATA<̒3276DATA<py| DATALLpy| DATAL py| DATAL̑DATA\DATA\ Lpy| DATA \ DATAl ̐reenDATAlDATA̠lL`DATA̠|9____DATA|,̠<:__DATA,̿|̮2qDATA̿|,\;reenDATA|,̿.8DATA,ܾ| FREEDATAܾ,l1:nDATA<ܾ,DATA<ܬw>DATA< DATAL RDATAL̫DATALDATA\>____DATA\ 5 DATA \<>DATAl  priDATAl̃DATA̺l\et("DATA̺| DATA|,̺*#DATA,ܹ|l)#DATAܹ,L#DATA<̧ܹF#DATA<|9#DATA<,5enDATAL N DATALlFgineDATAL,DATA\DATA\ |>DATA \,DATAl >DATAl|DATA̵l,Y>DATA̵| DATA|,̵DATA,ܴ|\DATAܴ, ~>DATA<ܴDATA<lDATA<,reenDATALܡDATALDATAL<DATA\DATA\ DATA \LN DATAl GDATAl<&%j>DATA̰l=DATA̰|DATA|,̰LDATA,|DATA|,S4>DATA|,lDATA,|  6DATA,̼ DATA<jDATA<L teDATA< DATAL̻ DATAL\>b>DATAL*FREEDATA\>DATA\ ,"eg !DATA \1>DATAl | DATAl< )>DATAl |DATA|!reenDATA|,<(DATA,|DATA,,DATA<L4%?DATA<ܶ1reenDATA<inalDATAL<'7?DATALܵ'0DATALl>>DATA\,QDATA\  DATA \ reenDATAl <3276DATAlDATAl+23: DATA|LDATA|,ܲ0DATA,|>DATA,<'DATA<g >DATA<DATA<\DATAL4?DATALDATAL\DATA\reenDATA\ QDATA \,?____DATAl ____DATAll?m| DATAlDATA|ext.DATA|,|/DATA,|.C")DATA|,reenDATA|,\;ts[0DATA,|`iberDATA,lDATA<, ,DATA<reenDATA<DATAL,?DATAL-/?DATALl2DATA\DATA\ QDATA \ 6>DATAl \DATAl LDATAlADATA|<4>DATA|,BDATA,||DATA,RDATA<=DATA<<0DATA<DATALDATAL,3DATALADATA\lDATA\ DATA \DATAl |JԮ=DATAl,DATAlDATA||*=DATA|,,DATA,|DATA,=DATA<L 1: DATA<8DATA<L!DATAL?DATAL >DATAL\DATA\ ?DATA\ DATA \l/= lDATAl ,DATAl=reenDATAlL9calcDATA|9faceDATA|,l2DATA,|, DATA|,DATA|,DATA,|LDATA,BDATA<\>DATA<B<>DATA<DATALw->DATAL\_DATAL5DATA\ DATA\ L DATA \DATAl 4>DATAl\ FREEDATAl,?DATA|DATA|,lDATA,|Æ>DATA,DATA<\7aDATA< *=DATA<DATALDATAL<@ DATAL DATA\DATA\ <BDATA \BDATAl lDATAlF@ DATAl XDATA|ADATA|,=DATA,|ADATA,,>>DATA<DATA<FREEDATA<<DATALB>DATALDATATLADATATDATAlDATAl,DATA|DATA|, c>DATA,|%j>DATA|,`DATA|,<%?DATA,|DATA,<>DATA<pDATA<lEreenDATA<DATAL>DATAL\ADATAL DATA\A@DATA\ 9reenDATA \%DATAl \%t؈>DATAl%DATAl%DATA|<%FREEDATA|,%`DATA,|DATA,LDATA<V,>DATA<DATA<\2 DATAL DATAL6s ifDATALL&DATA\ 2enDATA\ -pDATA \L$of tDATAl 3ty =DATAl|* #DATAlTDATA||5DATA|,,DATA,|DATA, of tDATA<\reenDATA<A___DATA< DATALA DATAL DATAL DATA\DATA\ <0DATA \(@DATAl l9DATAlDATAlDATA||DATA|,< DATA,|DATA|,|9DATA|,,@DATA,|DATA,DATA<<DATA< DATA  < 0nDATA L  \DATAL    @DATA  L BDATA \  <DATA\   BY>DATA  \ LS4>DATA l  4DATAl   \ADATA  l  4e>DATA |  | ?~YoDATA| ,   AaDATA,  |  $DATA  , \ DATA <   ,DATA<   >DATA< L !DATAL DATAL FREEDATALl DATA\,  DATA\  DATA \ !B>DATAl < n=DATAlDATAlaDATA|,A4 =DATA|, DATA,|LAFREEDATA,%DATA<lMDATA<,DATA<ADATAL,DaDATAL4DATAL<AFREEDATA\DATA\  NEWDATA \LDATAl &DATAl.DATAl,%DATA| DATA|,DATA,|,44>DATA|,DATA|,LODATA,||>DATA,DATA<<DATA<BDATA<\/th gDATALBFREEDATALDATALLDATA\DATA\ (DATA \LreenDATAl  reenDATAl+= WDATAll,BDATA|,DATA|, DATA,|LP[z]DATA,P[z]DATA<<C,DATA<DATA<|C%DATAL-DATALDDATALxDATA\#On1?DATA\ <DATA \C DATAl <CreenDATAlC>DATAl<HDATA|>DATA|,DATA,|L#_>DATA,(DATA<Nn=DATA<LDATA<0DATALl0DATAL0DATAL DATA\lDATA\ /PDATA \DATA|,-'DATA,/||-'FREEDATA/|/,-'DATA|/,//,.DATA,/.|/\,.DATA..,/+.DATA.<..+ DATA<.-.l+8#?DATA--<.*BDATA-L--*On1?DATAL-,-*JDATA,,L-)DATA,\,,l)$aDATA\, ,,)DATA ,+\,(#DATA+l+ ,\(# DATAl+++'#i=DATA+|l+':>DATA|+ܸ `DATA\|B___DATA\*BȺDATA*\BDATA*< DATA<|Y,0,0DATA<ܐ,DATAܐ)<  DATA)(ܐFREEDATA(<)$4DATA<L((DATAL(<|DATA'L(DATA''B____DATA'\''\#A___DATA\' ''"BreenDATA '&\'"|0DATA&l& ',pco):DATAl&&&! LDATA&%l&\!DATA%|%& ! = cDATA|%,%%&,DATA,%$|%!DATA$$,% .verDATA$<$$O):nDATA<$#$>0] DATA##<$>DATA##|QZDATA #reenDATA \DATA\ BreenDATA\ cu@DATA cL\\LBQDATAL\ c|Qnge(DATAPL\Lp[DATAP > pDATA >l@P,ge(1DATAl@ >langeDATAl@\0#[z]DATA#[z]DATAL= [0,DATAL`DATA"LDATA"\"B___DATA\" ""R=DATA "!\"<B DATA!,c "<iDATA,cLA!phtnDATALA,cABDATACLA,7____DATAC CB__DATA CܠCtDATAܠ CrDATA| ܠ reenDATA| 4BatesDATA44| KDATA44BLeDATA|`4lDATA|`\p\ADATA\p@|`D'DATA@ 0:DATAU objects.append(item)DATALU else:DATA U break1DATAT)nDATA T f.close()DATA 2:DATAld aDATAd v1 = multmat(mat,f.v[0])DATAc v2 = multmat(mat,f.v[1])DATA|c v3 = multmat(mat,f.v[2])DATADATAX t z1 = (x * mMatrix[0][2]) + (y * mMatrix[1][2]) + (z * mMatrix[2][2]) + mMatrix[3][2] DATAsDATA |s newV = NMesh.Vert(x1,y1,z1)DATA0s #vert.co[0]=x1; vert.co[1]=y1; vert.co[2]=z1DATAr DATAr return newVDATA\rDATA rdef vecsub(a,b): enDATA<q #_______________________________________________________EEDATA$DATA܌ v1 = vecsub(p1.co, p2.co) DATA v2 = vecsub(p1.co, p3.co) DATA(, norm[0] = v1[1]*v2[2] - v1[2]*v2[1] DATA(̋ norm[1] = v1[2]*v2[0] - v1[0]*v2[2] C?DATA(l norm[2] = v1[0]*v2[1] - v1[1]*v2[0]4=DATA,5>DATA(̊ #keep normals at a distance of 1 unitDATAHL normaldist = 1/(pow(pow(norm[0],2)+pow(norm[1],2)+pow(norm[2],2),.5))DATA for z in range(3):DATA norm[z] *= normaldistDATAl DATA, return normDATADATA def Bezier4(p1,p2,p3,p4,mu):AniDATA,< #_________________________________________DATA,܇ #Four control point Bezier interpolationbeDATA0| #Parameters: p1 to p4- 3 point tuple [x,y,z]DATA4  #mu ranges from 0 to 1 (start to end of curve) eenDATA, #_________________________________________DATAl p = [0,0,0]DATA, mum1 = 1 - muDATA܅ mum13 = mum1 * mum1 * mum1DATA mu3 = mu * mu * muDATALDATA for z in range(3):DATAP| p[z] = mum13*p1[z] + 3*mu*mum1*mum1*p2[z] + 3*mu*mu*mum1*p3[z] + mu3*p4[z]DATA < return(p)EDATA DATAdef ControlPoints(ctrlnum):DATA<< #_______________________________________________________EEDATA<̂ #Creates 4 point bezier curves to act as guides for fibersDATA@\ #Parameters: ctrlnum- the number of control curves to createDATA< #_______________________________________________________ DATA  object = Object.GetSelected()DATA L for num in range(len(object)):DATA  i = 0DATA if BL_VERSION<=223:5DATA l original = object[num].dataDATA, else:DATA$ original = object[num].getData()DATA|DATA$ if ctrlnum > len(original.faces):DATA ̞ ctnm = len(original.faces)DATA else:DATA< ctnm = ctrlnumenDATA DATA mat = object[num].matrixEDATAleenDATA, eDATA enDATA me = NMesh.GetRaw()DATAH for fs in range(0, len(original.faces), len(original.faces) / ctnm):DATA̛ f = original.faces[fs]EDATA DATAT normal = renormal(multmat(mat,f.v[0]),multmat(mat,f.v[1]),multmat(mat,f.v[2]))DATA DATAl #centerpoint coordinatesDATA vertex = [0,0,0]DATA̙ for va in f.v:DATA| v = multmat(mat,va)DATA, for z in range(3):DATA,̘ #z is the coordinate plane (x,y,or z)DATA| vertex[z] += v.co[z]DATA, for z in range(3):ONDATAܗ vertex[z] /= len(f.v)DATA DATAL for z in range(4):5DATA  i += 1DATAll v = NMesh.Vert(vertex[0] + (z * normal[0]), vertex[1] + (z * normal[1]), vertex[2] + (z * normal[2]))DATA me.verts.append(v)DATAܕ DATA for z in range(3):5DATA< face=NMesh.Face()5DATA$ܔ face.v.append(me.verts[i-1-z])DATA$| face.v.append(me.verts[i-2-z])DATA, me.faces.append(face) EDATA enDATA8| GuideOBJ = NMesh.PutRaw(me,original.name+"_Fiber.C") DATA, GuideOBJ.name = original.name+"_Fiber.C"EDATA̒ Blender.Redraw()enDATAVDATALSDATA SDATȂRDATA#DATAL DATA  DATA̐ODATAODATALdef RunFiber():DATA< #_______________________________________________________EEDATA<< #The main routine that is called from outside this scriptDATA4̮ #Parameters: none- loads settings from .fib file.DATA<\ #_______________________________________________________ DATA0 global firstrun, mat, FpF, UseWind, UseGuidesDATA LoadPreset()DATAl if firstrun == 1:nDATA, SavePreset()DATAܬ InitNoise(seed)eenDATA  print "\n"DATAT  print "RipSting's Fiber Generator v1.4, running on", str(len(objects)), "objects"DATA̫O>DATA edDATA@ #____________________________________________________________DATA8 #Extract properties from the empty "Wind" if enabledDATA@< #____________________________________________________________DATA if UseWind == 1:DATA try:DATA \ Wind = Object.Get("Wind")DATA  Height = Wind.SizeZ / 50.0DATA SizeX = Wind.SizeX5DATAl SizeY = Wind.SizeY5DATA DirX = Wind.LocX / 100.0DATA̧ DirY = Wind.LocY / 100.0DATA | Falloff = Wind.LocZ /100.0DATA, Roughness = .5enDATA  except:DATAHl print "Cannot find an empty named \"wind\": Not using wind engine."DATA, UseWind = 0DATADATA@| #____________________________________________________________DATA , #Other variable declarationsDATA@ #____________________________________________________________DATA|REEDATA, vertexcount = 0DATA  objnum = 0DATADATA\ polycenter = [0,0,0]DATA  corner1 = [0,0,0]DATA corner2 = [0,0,0]DATAl normal = [0,0,0]>DATA, dir = [0,0,0]DATAܡ basevertex = [0,0,0]5DATA vertex = [0,0,0]EEDATA< vertexold = [0,0,0]~lDATA vertexno = [0,0,0]DATA randomdir = [0,0,0]Y>DATAL gravitydir = [0,0,0]5DATAH WindDir = [0,0,0,0] #First two are initial, second two are incrementalDATA(< vCorner = [0,0] #Vertex color cornersDATA vColor1 = [0,0,0]DATA vColor2 = [0,0,0]>DATAL aColor = [0,0,0]EEDATA vPercent = [0,0,0]DATA addVariables = [0,0,0]DATAlDATA$  frame = Blender.Get('curframe')DATA̼ redoFpF = 0W %DATA try:5DATAL test = FpF,DATA  except:REEDATA̻ redoFpF = 1DATA@\ #____________________________________________________________?DATA, #Setup Density if not already initializedDATA@ #____________________________________________________________DATA$, if firstrun == 1 or redoFpF == 1:nDATA4 print "Storing fiber information for animation"DATA | dens = dDATA < seg = sEEDATA  FpF = []DATA$ for num in range(len(objects)):DATA,< mat = Object.Get(objects[num]).matrix1EDATA if BL_VERSION<=223:DATA0 original = Object.Get(objects[num]).dataDATA L else:DATA4ܶ original = Object.Get(objects[num]).getData()enDATA for f in original.faces:DATA< if len(f.v) < 3: breakEDATA(ܵ FpF.append(int(fncArea(f,mat) * d))DATA@l #____________________________________________________________DATA, DATA  fnum = -1EDATA$ for num in range(len(objects)):eenDATA < i=0 #set vertex count to zeroDATA if BL_VERSION<=223:5DATA, original = Object.Get(objects[num]).dataDATAL else:DATA4ܲ original = Object.Get(objects[num]).getData()DATA DATA(< mat = Object.Get(objects[num]).matrixDATA DATA meshname = original.name>DATA\ if firstrun == 0:DATA8 me = NMesh.GetRaw(meshname+"_Fiber."+str(objnum))DATA else:DATA\ me = NMesh.GetRaw()DATA DATAeenDATA@, #____________________________________________________________DATA #Test for fiber guidesREEDATA@l #____________________________________________________________DATA if UseGuides == 1:15DATA try:DATA0| Guides = NMesh.GetRaw(meshname +"_Fiber.C")DATA0 GuideOBJ = Object.Get(meshname+"_Fiber.C")DATA GMat = GuideOBJ.matrixDATA<\ if (len(Guides.verts)/4.0) != int(len(Guides.verts)/4):DATAd print "Uneven number of control points non-divisible by 4.\nPlease re-create fiber guides."DATAl UseGuides = 0nDATA , except:DATA UseGuides = 0DATA DATA@, #____________________________________________________________DATA for f in original.faces:>DATA4l #Skip over faces with only 2 verts (Edges) v1.3=DATA if len(f.v) < 3: breakDATA DATA fnum += 1REEDATA\ p=0DATA  if UseGuides == 0:DATAD #____________________________________________________________DATA< #find normal directionDATAD #____________________________________________________________ DATA|DATAT normal = renormal(multmat(mat,f.v[0]),multmat(mat,f.v[1]),multmat(mat,f.v[2]))nDATADATA4< #follownormals- 1 = follow, 0 = don't followeenDATA normal[0] *= followDATA normal[1] *= followDATA4, normal[2] = (1 - follow) + (normal[2] * follow)DATAD #____________________________________________________________enDATAlDATA #centerpoint coordinatesDATA polycenter = [0,0,0]DATA| for va in f.v:DATA, v = multmat(mat,va)DATA for z in range(3):=DATA,| #z is the coordinate plane (x,y,or z)DATA , polycenter[z] += v.co[z]EEDATA for z in range(3):DATA  polycenter[z] /= len(f.v)>DATAL DATA< if UseVCol == 1 and original.hasVertexColours() == 1:REEDATA$L # colorvalues of centerpointenDATA  for z in range(len(f.v)):DATA  aColor[0] += f.col[z].rDATA \ aColor[1] += f.col[z].gDATA  aColor[2] += f.col[z].bDATA for z in range(3):DATAl aColor[z] /= len(f.v)DATA, DATA@ for x in range (FpF[fnum]): #loop for density in each polyDATA<L #no need to calculate things if density for face is 0EEDATA< if UseVCol == 1 and original.hasVertexColours() == 1:DATA4l if f.col[0].b + f.col[1].b + f.col[1].b == 0:nDATA , breakDATAeenDATA vertexcount += s*2 + 2=DATA L if vertexcount > 60000: DATAD #____________________________________________________________DATA@\ #create new mesh if vertex count is close to limit (v1.1)DATAD #____________________________________________________________DATA ) DATAx # reminder: for all versions, if it really is new, PutRaw returns the new linked object, otherwise it returns NoneDATA`\ # but lets not worry about that here, since GetSelected()[0] will always return the objectDATA8 NMesh.PutRaw(me, meshname+"_Fiber."+str(objnum))DATADATA$L tO=Object.Get(objects[num])DATA  tN=Object.GetSelected()[0]DATADATA$\ #tN=Object.GetSelected()[0]DATA0 #tN.loc = mat[3][0],mat[3][1],mat[3][2]DATA DATAl Blender.Redraw()DATA objnum += 1DATA if firstrun == 0:DATA8\ me = NMesh.GetRaw(meshname+"_Fiber."+str(objnum))DATA  else:DATA me = NMesh.GetRaw()DATA DATA< vertexcount = 0~lDATA  i = 0DATA DATAD< #_____________________________________________________________EDATAD #Find a point on the current face for the fiber to grow out ofDATAl #My logic behind this:DATAH #pick a random point between the center of the poly and any cornerDATA\  #pick a random point between the center and the next corner adjacent to the originalDATAD #pick a random distance between those other two random pointsDATA@ #This ensures that the blade will actually be on the faceDATAD #____________________________________________________________=DATA@, cornernum = int(random() * len(f.v)) #Pick a random cornerDATA vCorner[0] = cornernumDATA cornernum += 1DATA < if cornernum > len(f.v)-1:DATA cornernum = 0DATA vCorner[1] = cornernum>DATAD #____________________________________________________________EEDATA<DATA< vPercent[2] = percentDATA for z in range(3):DATAHl basevertex[z] = (corner2[z] - corner1[z]) * percent + corner1[z]DATA vertex = basevertexDATA DATAD\ #____________________________________________________________=DATA  #Vertex color Stuff (v1.2)>DATAD #____________________________________________________________>DATA< if UseVCol == 1 and original.hasVertexColours() == 1:DATA( vColor1[0] = f.col[vCorner[0]].rDATA(\ vColor1[1] = f.col[vCorner[0]].gDATA( vColor1[2] = f.col[vCorner[0]].b27DATA( vColor2[0] = f.col[vCorner[1]].rDATA(< vColor2[1] = f.col[vCorner[1]].gDATA( vColor2[2] = f.col[vCorner[1]].b5DATADATAL for z in range(2):DATAX addVariables[z] = ((aColor[z] * (1-vPercent[0])) + (vColor1[z] * vPercent[0]))/2DATA addVariables[z] = (addVariables[z] * (1-vPercent[2]) + (((aColor[z] * (1-vPercent[1])) + (vColor2[z] * vPercent[1]))/2) * vPercent[2])/2DATA4\ addVariables[2] = (vColor1[2] + vColor2[2])/2nDATA  else:DATA8 #Use these values if no vertex colors are presentDATA(L addVariables = [63.75,63.75,255] DATA  DATA0 #Green ties into the length of the fibersDATA(L l = l2 * ((addVariables[1]) / 2)kDATA4 #Red ties into the gravity effect on the fibersDATA,| grav = grav2 * ((addVariables[0]) / 5) DATAX #Blue ties into density... x is the faces generated so far for the face... v1.3DATA8| FaceDensity = int(FpF[fnum] * addVariables[2]) -1DATA, #print FaceDensity, xDATA if x >= FaceDensity:DATA  breakEDATA\ DATAD #______________________________________________________________DATA  #WindEEDATAD #____________________________________________________________DATA if UseWind == 1:15DATA WindStrength = ((HTerrain([vertex[0]/SizeX+(frame*DirX), vertex[1]/SizeY+(frame*DirY), frame*Falloff], 1, 1, Height, Roughness) -(Height/2)) * Height)*pow(l,1.5)DATA DATA4< #Find Y/X Slope that the wind is blowing ateenDATA, if abs(Wind.LocX) > abs(Wind.LocY):1DATA<l WindDir[0] = (Wind.LocY / Wind.LocX) * WindStrengthDATA  WindDir[1] = WindStrengthDATA if Wind.LocY < 0:DATA | WindDir[1] = -WindDir[1]DATA < else:DATA  WindDir[0] = WindStrengthDATA<| WindDir[1] = (Wind.LocX / Wind.LocY) * WindStrengthDATA, if Wind.LocX < 0:DATA  WindDir[0] = -WindDir[0]DATA if Wind.LocY < 0:DATA < WindDir[0] = -WindDir[0]DATA WindDir[2] = 0DATA WindDir[3] = 0DATA\DATA  if UseGuides == 0:DATAD #____________________________________________________________nDATA< #Normal stuffnDATAD #____________________________________________________________DATAL for z in range(3):DATA8 vertexno[z] = normal[z] + (r * (random()-.5)) 15DATAD\ #____________________________________________________________>DATA8  #Find random direction that the blade is rotated>DATA@|  #(So that it looks good from all angles, and isn't uniform)DATAD  #____________________________________________________________R>DATA(  rw= [random() -.5, random() -.5]DATA\ DATA0  #Find Y/X Slope that the blade is facing%>DATA  if abs(rw[0]) > abs(rw[1]):DATA$L  dir[0] = (rw[1] / rw[0]) * w$>DATA  dir[1] = wDATA  if rw[1] < 0:DATAl  dir[1] = - dir[1]DATA ,  else:DATA  dir[0] = wDATA$  dir[1] = (rw[0] / rw[1]) * wDATA<  if rw[0] < 0:DATA dir[0] = -dir[0]DATA DATAD, #____________________________________________________________DATA$ #Start the creation process!REEDATADL #____________________________________________________________DATA( i = i + 2 #increment vertex countDATAPl gravitydir = [0,0,n] #right now I only have gravity working on the Z axisDATA, >DATAD #____________________________________________________________>DATAH, #If the fiber mesh already exists, simply move the verts instead=DATA8 #of creating new ones. Preserves material data. DATAD< #____________________________________________________________DATA if firstrun == 0:DATA #Move base vertsDATAL for z in range(3):DATA( #vertex[z] = me.verts[i-2].co[z]DATA0 me.verts[i-1].co[z] = vertex[z] + dir[z]DATA(, me.verts[i-2].co[z] = vertex[z]DATA  else: DATA #Create base vertsDATA8, v = NMesh.Vert(vertex[0], vertex[1], vertex[2])5DATA me.verts.append(v)DATAPL v = NMesh.Vert(vertex[0] + dir[0], vertex[1] + dir[1], vertex[2] + dir[2])DATA me.verts.append(v)DATA DATA< if UseGuides == 0:DATAD #_____________________________________________________________DATA0\ #Normal creation routine with gravity etc.DATAD #_____________________________________________________________DATA for y in range (s):1DATAL DATA for z in range(3):1DATA, randomdir[z] = (random()-.5) * rlREEDATA L vertexold[z] = vertex[z]DATA  DATA  WindDir[2] += WindDir[0]EDATA l WindDir[3] += WindDir[1]DATA, DATA gravitydir[2] += gravDATATL vertex[0] += (vertexno[0]) * l - gravitydir[0] + WindDir[2] + randomdir[0]eenDATAT vertex[1] += (vertexno[1]) * l - gravitydir[1] + WindDir[3] + randomdir[1]eenDATAD< vertex[2] += (vertexno[2]) * l - gravitydir[2] + randomdir[2]DATA DATAD| #____________________________________________________________DATA0 #Fix segment length issues with gravityDATAH #____________________________________________________________ 32DATA| distance = pow(pow(vertexold[0] - vertex[0],2)+pow(vertexold[1] - vertex[1],2)+pow(vertexold[2] - vertex[2],2),.5)REEDATA$ divide = (distance/(l +.001))DATA< #for z in range(3):DATAD vertex[0] = (vertex[0]-vertexold[0]) / divide + vertexold[0]DATAD< vertex[1] = (vertex[1]-vertexold[1]) / divide + vertexold[1]DATAD vertex[2] = (vertex[2]-vertexold[2]) / divide + vertexold[2]DATAL< #____________________________________________________________ REEDATADATA face=NMesh.Face()DATA$L if pointed == 1 and y == s-1:DATA, i = i + 1 #increment vertex count1EDATA if firstrun == 0:1DATAL #Move base verts1DATA4 me.verts[i-1].co[0] = vertex[0]+dir[0]/2DATA4l me.verts[i-1].co[1] = vertex[1]+dir[1]/2DATA4 me.verts[i-1].co[2] = vertex[2]+dir[2]/2DATA else: DATAl #Create base vertsDATAT/ v = NMesh.Vert(vertex[0]+dir[0]/2,vertex[1]+dir[1]/2,vertex[2]+dir[2]/2)eenDATA c[1] = c[0] DATA> c[0] = yDATAT| elif fncdistance(v,vertex) < fncdistance(multmat(GMat,gv[c[1]]).co,vertex):DATA c[1] = yDATA\ DATAD #____________________________________________________________DATADu #Get the coordinates of the guides' control points (check)DATADL #____________________________________________________________DATA|Q for y in range(4):DATAtL Guide1[y] = [multmat(GMat,gv[c[0]+y]).co[0],multmat(GMat,gv[c[0]+y]).co[1],multmat(GMat,gv[c[0]+y]).co[2]]DATAt  Guide2[y] = [multmat(GMat,gv[c[1]+y]).co[0],multmat(GMat,gv[c[1]+y]).co[1],multmat(GMat,gv[c[1]+y]).co[2]]DATA, for y in range(1,4):DATAl for z in range(3):DATA$\0 Guide1[y][z] -= Guide1[0][z]DATA$ Guide2[y][z] -= Guide2[0][z]DATA= Guide1[0] = [0,0,0]DATA` Guide2[0] = [0,0,0]DATAeenDATAD #____________________________________________________________DATA@R #Determine weight of the two fiber guides () (check?) DATAD< #_____________________________________________________________DATAl< weight = fncdistance(multmat(GMat,gv[c[0]]).co,vertex)/fncdistance(multmat(GMat,gv[c[1]]).co,vertex)EEDATAp print weightenDATADA #_____________________________________________________________DATA8, #Find single, weighted, control fiber (check?)DATAD #____________________________________________________________DATA for y in range(4):DATAr #Guide[y]= [(Guide1[y][0] * (2-weight)) + (Guide2[y][0] * weight)+basevertex[0], (Guide1[y][1] * (1-weight)) + (Guide2[y][1] * weight)+basevertex[1],(Guide1[y][2] * (1-weight)) + (Guide2[y][2] * weight)+basevertex[2]]DATA  Guide[y] = [((Guide1[y][0] * (2-weight)) + (Guide2[y][0] * weight))/2 + basevertex[0],((Guide1[y][1] * (2-weight)) + (Guide2[y][1] * weight))/2 + basevertex[1],((Guide1[y][2] * (2-weight)) + (Guide2[y][2] * weight))/2 + basevertex[2]]DATAD #____________________________________________________________6DATAK #Create the Fiber DATAD #____________________________________________________________DATAl for y in range(1,s):NDATAD\ v = Bezier4(Guide[0],Guide[1],Guide[2],Guide[3],float(y)/s)DATA(D vert = NMesh.Vert(v[0],v[1],v[2])DATAC me.verts.append(vert)DATAL@ face=NMesh.Face()DATA0,K face.v.append(me.verts[len(me.verts)-1])DATA0L` face.v.append(me.verts[len(me.verts)-2])GDATA me.faces.append(face)DATA DATA܈ DATA<t #for y in range(len(me.verts) - 4, len(me.verts),2):EEDATA,P # DATA$  # face.v.append(me.verts[y])DATA$| # face.v.append(me.verts[y-1])DATA  # me.faces.append(face)DATA DATAIDATA4lI NMesh.PutRaw(me,meshname+"_Fiber."+str(objnum))DATAI vertexcount = 0 DATAH DATA@lH #print "Generation finished with " + str(faces) + " faces!"DATAH Blender.Redraw()enTXd|GDATA Ffrom Fiber14 import RunFiberDATA ERunFiber()ETXd Materials. BUT THIS CAN ALSODATA #CRASH BLENDER! SAVE FIRST!!!DATAܽDATADATA\DATA4#_________________________________________________DATA#Start of ScripteenDATA4,#__________________________________________________DATA DATAimport BlenderDATA$Lfrom Blender import NMesh, Objectt DATAfrom Blender.BGL import *DATAfrom Blender.Draw import *DATA\from string import strip17DATA0from Fiber14 import RunFiber, random, fncAreaDATADATA |seed = 1REEDATA,CurVersion = "1.4"nDATAeenDATAsldDensity = Create(5.0)EDATALsldGravity = Create(2.0)DATAsldSegments = Create(3)DATAsldLength = Create(5.0)7DATA\sldWidth = Create(70.0)DATA sldInit = Create(0.0)EDATAsldRand = Create(5.0)EDATAlsldRloc = Create(0.0)NDATAsldFollow = Create(1.0)DATAܵeenDATAtxtDensity = Create(50)1DATA<txtGravity = Create(20)1DATAtxtSegments = Create(20)1DATAtxtLength = Create(50)1EDATALtxtWidth = Create(200)NDATAtxtInit = Create(50)1DATAtxtRand = Create(50)1DATA\txtRloc = Create(50)1DATAeenDATA̲chkPointed = Create(0)DATA|chkVCol = Create(0)DATA,chkWind = Create(0)DATAܱchkGuides = Create(0)5DATAeenDATA\DATA$#Get the current path and filenamenDATAa = Blender.Get("filename")DATA\b = Blender.sys.dirname(a)DATA,a = a.split("\\")[len(a.split("\\")) -1].-DATA0\fname = b +"\\" + str(a.split(".")[0]) + ".fib"DATAeenDATAtxtFile = Create(fname)DATA0ltxtFaces = Create("Click 'Estimate Faces'")DATA,ed DATAeenDATADATAleenDATA# Get Blender versionBlDATA$BL_VERSION = Blender.Get('version')DATAlif BL_VERSION<=223:DATA< # <=2.23 need Blender210 module to get current camera etc.DATA0 # as well as the convenient GUI fileselectorDATAL import Blender210, GUIDATA FSEL = GUI.FileSelector()DATADATA |def draw():DATAL global sldDensity, sldGravity, sldSegments, sldLength, sldWidth, sldInitDATA$ global sldRand, sldRloc, sldFollowDATAL global txtDensity, txtGravity, txtSegments, txtLength, txtWidth, txtInitEEDATA global txtRand, txtRlocsDATA0l global chkPointed, chkVCol, chkWind, chkGuidesDATA global txtFile, txtFacesDATADATA  glClearColor(.7, .7, .7, 0.0)DATA < glClear(GL_COLOR_BUFFER_BIT)DATA glColor3f(0,0.528,0.990) DATA glRasterPos2i(30, 310)DATA<, Text("RipSting's Fiber Generator- Version " + CurVersion)DATA glColor3f(0,0,0)DATA glRasterPos2i(400, 310)1DATAL Text("Max") DATA DATA4 Button("Estimate Faces", 90, 30, 10, 100, 35)DATA4, Button("Create", 95, 350, 10, 75, 35)DATA4 Button("Select ", 96, 30, 330, 50, 18)eenDATA4L Button("Save Preset", 97, 30, 350, 100, 25)enDATA4 Button("Load Preset", 98, 150, 350, 100, 25)enDATA4l Button("Exit", 99, 355, 350, 75, 25)eenDATA, , DATAeenDATADl txtFile = String("", 80, 90, 330, 340, 18, txtFile.val, 512) DATAD txtFaces = String("", 81, 140, 20, 200, 18, txtFaces.val, 45) DATADATAD, chkPointed = Toggle("Pointed" ,70,30,50,75,25 ,chkPointed.val)eenDATA< chkVCol = Toggle("Use VCol",71,123,50,75,25,chkVCol.val)DATA<< chkWind = Toggle("Use Wind",72,215,50,75,25,chkWind.val)EDATA@ chkGuides = Toggle("Use Guides",72,306,50,75,25,chkGuides.val)DATAeenDATAH  txtDensity = Number("",50, 390, 280, 40, 19, txtDensity.val, 1,1000)ADATAL txtGravity = Number("",51, 390, 255, 40, 19, txtGravity.val, -999,1000)DATAH  txtSegments = Number("",52, 390, 230, 40, 19, txtSegments.val, 1,1000)DATAH txtLength = Number("",53, 390, 205, 40, 19, txtLength.val, 1,1000)DATAH  txtWidth = Number("",54, 390, 180, 40, 19, txtWidth.val, 1,1000)DATAD txtInit = Number("",55, 390, 155, 40, 19, txtInit.val, 1,1000)DATAD  txtRand = Number("",56, 390, 130, 40, 19, txtRand.val, 1,1000)DATAD txtRloc = Number("",57, 390, 105, 40, 19, txtRloc.val, 1,1000)DATAL DATAt sldDensity = Slider("Density ", 2, 30, 280, 351, 18, sldDensity.val, 0.0, txtDensity.val)DATAt sldGravity = Slider("Gravity ", 3, 30, 255, 351, 18, sldGravity.val, 0.0, txtGravity.val)xDATAx< sldSegments = Slider("Segments ", 4, 30, 230, 351, 18, sldSegments.val, 0.0, txtSegments.val)DATAt sldLength = Slider("Length of Segment ", 5, 30, 205, 351, 18, sldLength.val, 0.0, txtLength.val) %xDATAp sldWidth = Slider("Width ", 6, 30, 180, 351, 18, sldWidth.val, 0.0, txtWidth.val)DATApL sldInit = Slider("Initial Gravity ", 7, 30, 155, 351, 18, sldInit.val, 0.0, txtInit.val)DATAp sldRand = Slider("Randomize Direction ", 8, 30, 130, 351, 18, sldRand.val, 0.0, txtRand.val)DATAp  sldRloc = Slider("Frizziness ", 9, 30, 105, 351, 18, sldRloc.val, 0.0, txtRloc.val)DATAhl sldFollow = Slider("Follow Normals / Z-Axis ", 10, 30, 80, 351, 18, sldFollow.val, 0.0, 1.0)DATA, DATAdef event(evt, val): DATA(| if (evt== QKEY and not val): Exit()DATA<DATAdef bevent(evt):eenDATA if evt == 72: #Use WindDATAL if chkWind.val == 1:DATA  try:DATA  Wind = Object.Get("Wind")"DATAl test = Wind.LocY15DATA , except:DATA4 txtFaces.val = "Create an empty named \"Wind\""DATAl chkWind.val = 0DATA print "Wind not Found"DATA| if evt == 99: #ExitDATA , Exit()DATA , elif evt == 96: #File SelectorDATA try:DATA FSEL.activate(callback)DATA \ except:mDATA< txtFaces.val = "Selector not available in Blender 2.25+"DATA  elif evt == 97: #Save PresetDATAL SavePreset(txtFile.val)DATA  elif evt == 98: #Load PresetDATA LoadPreset(txtFile.val)DATA\ elif evt == 95: #Create!DATA  SavePreset(fname)DATA RunFiber()DATA$l elif evt == 90: #Estimate FacesenDATA , faces = 0DATA  object = Object.GetSelected()DATA mat = object[0].matrixt) DATA$, for num in range(len(object)):): DATA if BL_VERSION<=223:DATA  original = object[num].dataDATA L else: 0DATA( original = object[num].getData()=dDATA DATA \ for fa in original.faces:DATA8 faces += (int(fncArea(fa,mat) * sldDensity.val)) DATA4| txtFaces.val = str(faces *2) + " faces predicted"DATA, print str(faces *2) + " faces predicted"EDATA  Redraw()EEDATAeenDATA\def callback():DATA  txtFile.val = FSEL.filenameDATA  Register(draw, event, bevent) DATA|DATA,def writeln(f,x):f DATA f.write(str(x))FiDATA f.write("\n")DATA\eenDATAdef readint(f):DATA return int(f.readline())DATADATA<def readfloat(f):DATA  return float(f.readline())DATADATAldef readstr(f):DATA s = (f.readline())DATA return strip(s)reDATADATA<def SavePreset(FName):DATAL global sldDensity, sldGravity, sldSegments, sldLength, sldWidth, sldInitEEDATA$\ global sldRand, sldRloc, sldFollowDATAL global txtDensity, txtGravity, txtSegments, txtLength, txtWidth, txtInitEEDATAL global txtRand, txtRlocDATA0 global chkPointed, chkVcol, chkWind, chkGuidesDATAyDATAl try:5DATA f = open(FName,'w')5DATA  except:1DATA$| message = "unable to save file."nDATA < returnREEDATA 27DATA writeln(f,CurVersion)DATAl DATA writeln(f,sldDensity.val)EDATA writeln(f,sldGravity.val)EDATA| writeln(f,sldSegments.val)DATA, writeln(f,sldLength.val)EEDATA writeln(f,sldWidth.val)REEDATA writeln(f,sldInit.val)DATA< writeln(f,sldRand.val)DATA writeln(f,sldRloc.val)DATA writeln(f,sldFollow.val)EEDATAL writeln(f,txtDensity.val)EDATA writeln(f,txtGravity.val)EDATA writeln(f,txtSegments.val)DATA\ writeln(f,txtLength.val)EEDATA  writeln(f,txtWidth.val)REEDATA writeln(f,txtInit.val)DATAl writeln(f,txtRand.val)DATA writeln(f,txtRloc.val)DATA writeln(f,chkPointed.val)DATA| writeln(f,chkVCol.val)DATA, writeln(f,chkWind.val)DATA writeln(f,chkGuides.val)EDATA  writeln(f,int(random()*1000))DATA< writeln(f,1) #First Run1DATA  object = Object.GetSelected()%DATA  for z in range(len(object)): %DATAL writeln(f,object[z].name)DATA  f.close()EDATAODATA|def LoadPreset(FName):DATAL global sldDensity, sldGravity, sldSegments, sldLength, sldWidth, sldInitDATA$ global sldRand, sldRloc, sldFollowDATAL global txtDensity, txtGravity, txtSegments, txtLength, txtWidth, txtInitcaDATA global txtRand, txtRlocDATA0l global chkPointed, chkVcol, chkWind, chkGuidesDATA,xDATA try::FDATA f = open(FName,'r')DATA \ except:DATA( message = "unable to open preset."15DATA | returnDATA< DATA FVersion = readfloat(f)REEDATA enDATA$L sldDensity.val = readfloat(f) eenDATA  sldGravity.val = readfloat(f)DATA  sldSegments.val = readint(f)DATA \  sldLength.val = readfloat(f)DATA  sldWidth.val = readfloat(f)DATA  sldInit.val = readfloat(f)DATA l  sldRand.val = readfloat(f)DATA   sldRloc.val = readfloat(f)DATA  sldFollow.val = readfloat(f)DATA |  txtDensity.val = readint(f)DATA ,  txtGravity.val = readint(f)DATA  txtSegments.val = readint(f)DATA  txtLength.val = readint(f)EEDATA <  txtWidth.val = readint(f)DATA  txtInit.val = readint(f)EEDATA  txtRand.val = readint(f)DATA L  txtRloc.val = readint(f)DATA  chkPointed.val = readint(f)DATA  chkVCol.val = readint(f)DATA \ chkWind.val = readint(f)DATA  chkGuides.val = readint(f)DATA  f.close()DATA |Register(draw, event, bevent)DATA,LoadPreset (fname)nTXd00)DATAL1reenDATAL(verDATA\(verDATA\<txteDATAimport BlenderDATAfrom Blender import NMesh DATAeenDATA <def Bezier4(p1,p2,p3,p4,mu):DATA, #_________________________________________DATA,| #Four control point Bezier interpolationDATA0 #Parameters: p1 to p4- 3 point tuple [x,y,z]DATA4 #mu ranges from 0 to 1 (start to end of curve) mpDATA,L #_________________________________________DATA  p = [0,0,0]DATA mum1 = 1 - muDATA| mum13 = mum1 * mum1 * mum1DATA, mu3 = mu * mu * muDATADATA for z in range(3):DATAP p[z] = mum13*p1[z] + 3*mu*mum1*mum1*p2[z] + 3*mu*mu*mum1*p3[z] + mu3*p4[z]DATA  return(p)DATAeenDATALme = NMesh.GetRaw()DATAvertex1 = [26.3,-.5,0.01]DATAvertex2 = [27.4,.5,1.67]1DATA\vertex3 = [26.3,1.6,3.58]DATA vertex4 = [26,-.6,3]5DATAeenDATAs = 300DATALDATAfor y in range(s):nDATA@ vertex = Bezier4(vertex1,vertex2,vertex3,vertex4, float(y)/s)DATA4 vert = NMesh.Vert(vertex[0],vertex[1],vertex[2])DATA me.verts.append(vert)DATADATA<NMesh.PutRaw(me)eenTXdTXTextLLLL|q!DATAL  powDATA print float(1)TXdTXText.001`,t,t,t$02 "?@ABCDEFGH%I#$J%K%LMNOPQRSTUVW!X&YZ[\'](^_`abcdefghijklmn) opqrs tuvwx yz*ghi{+|*}, ']#~#ABMN(#/m%#~)+,-fghijAB&%I.%/:fghiYZ&%/I01!X222/34 %/ed5 6777 6 5 8&4  ' '%9/ de/4 0!:::6 5 "#$%&'(  )#;*+,-./<*+,-./= 01234>56?@>789A:;B{ghiC<D4 = %/ > ? @AA@BBCCDDEEF G&HedIJKLF MNOP6Q%GR'SHHHT 'NUVWXY'Z'[%94I\J]  = ^ _/K`abdcdefghijklmnopqrstuvwxyz{|}~I     GGG2 L+f%&IMNNN']O3w=PQ'LQ#~ NRS M GPOgIT #~(^=U*UU   E  c'TUV  !"#$%&'()WWWXXX*V+ , -%&./01239YYY45V+62/7 89:;<=>?@oZZZV+6[[[\ABCDEFGHI]JK|LM NO^ ^^V+ P/Q 8___V+#R/ST3```U VWX22YZ[\] ^ _ `aabcdefghijklm|b n o pQqrstuvwxyz{|cccc} ~dddcce&eeccccb#        f g%KgggMh hh/gi  opsz tvw x yj jjj /hg%Qq$Jijjj k   lllmmm/nnn'oppprtq 'UVWXr rr/sU %'ZVWXqQt tt uNuuC      !"#$%&'()*+v,v-./0123456789w:w;<=%> Nx xxT?@A B CyTDEz{T/F|GHIJK}TLM~TNOTPQRTSTQTUV'WXY?Z[\T ]'^_` Vab\?cT ]defgh' IiTjklm9no pqrst h'DuTvwQq'TL' xyadz{|} T~'RR T~RT'XY a?T 'S x' G   'DDdghiK- xghi /''& DDDG '!X %2 V+qp3TUVWX'Z'[%abdcdefghjklmvw' R  ????Z T6adcefg    degT9J % T9I  3V+I\/9  %?Th''9n'9'9'   ENDB